USB ansprechen unter Ubuntu per lazarus ?
-
- Beiträge: 6079
- Registriert: Do 21. Sep 2006, 07:51
- OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
- CPU-Target: AVR,ARM,x86(-64)
- Wohnort: Dessau
- Kontaktdaten:
pluto, was soll das
while Assigned(dev) do begin
//hier musst du prüfen ob das das richtige gerät ist ...
dev := dev^.next;
if Assigned(dev) then begin
ich schreib extra hin wo du deinen code hinzuschreiben hast und was machst du packst es unter die anweisung die das nächste gerät zuweist. damit überspringst du natürlich immer das erste gerät und verarbeitetst beim letzten einen nil aufruf weshalb du diese if Assigned mit einbauen musstest. villeicht solltest du dich nochmal mit pascal grundlagen beschäftigen damit du überhaupt verstehst was da passiert.
deine prüfung auf das richtige gerät ist auch mächtig komisch normalerweise nimmt man dazu die vendor und product id und nicht den filename in filename steht sicher unter linux und windows was unterschiedliches drin
wo nimmst du die parameter für bulk_read denn her wenn du sie nicht kennst ?
und bist du sicher das das gerät überhaupt bulk transfers macht ? können ja auch interrupt transfers oder isocrounious sein ....
while Assigned(dev) do begin
//hier musst du prüfen ob das das richtige gerät ist ...
dev := dev^.next;
if Assigned(dev) then begin
ich schreib extra hin wo du deinen code hinzuschreiben hast und was machst du packst es unter die anweisung die das nächste gerät zuweist. damit überspringst du natürlich immer das erste gerät und verarbeitetst beim letzten einen nil aufruf weshalb du diese if Assigned mit einbauen musstest. villeicht solltest du dich nochmal mit pascal grundlagen beschäftigen damit du überhaupt verstehst was da passiert.
deine prüfung auf das richtige gerät ist auch mächtig komisch normalerweise nimmt man dazu die vendor und product id und nicht den filename in filename steht sicher unter linux und windows was unterschiedliches drin
wo nimmst du die parameter für bulk_read denn her wenn du sie nicht kennst ?
und bist du sicher das das gerät überhaupt bulk transfers macht ? können ja auch interrupt transfers oder isocrounious sein ....
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/
-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
ich weiß ich dachte so hätte ich den neusten Eintrag, aber ist es egal. Es geht so oder so nicht.ch schreib extra hin wo du deinen code hinzuschreiben hast
wobei bei meinen ersten versuchen hatte ich nur ein -25 jetzt ein -1. leider weiß ich nicht genau was das bedeutet. ich weiß nur das da noch ein Fehler drin ist.
wobei ich bin mir auch sicher ich muss eine schleife haben, oder ein Ereignis zu weisen können. Weil das Signal kann ja kommen wenn es möchte. bzw. wenn ich drauf drücke !
ich weiß, leider kenne ich die vendor und product id nicht.komisch normalerweise nimmt man dazu die vendor und product id u
darum mache ich das.....
die stehen im Quellcode leider ohne nährer Beschreibung.wo nimmst du die Parameter für bulk_read denn her wenn du sie nicht kennst ?
nein bin ich mir nicht. Wenn ich erhlich sein soll weiß ich auch nicht was ein bulk tranfers überhaupt istund bist du sicher das das gerät überhaupt bulk transfers macht ? können ja auch interrupt transfers oder isocrounious sein

ich habe die Funktion genommen, weil sie mit Read endet. Und was anders habe ich da nicht gesehen.... im C++ H
eader stand noch mehr drin wie z.b. irgendwie String_read oder so aber das habe ich leider nicht.
MFG
Michael Springwald
Michael Springwald
-
- Beiträge: 6079
- Registriert: Do 21. Sep 2006, 07:51
- OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
- CPU-Target: AVR,ARM,x86(-64)
- Wohnort: Dessau
- Kontaktdaten:
Gut nun sind wir also soweit das du überhaupt nix darüber weisst aber was dafür programmieren möchtest. Mhm vielleicht solltest erstmal was raus bekommen bevor du das willst was ?!
Das verstehe ich bei deinen Projekten immer nicht du hast keine Ahnung was du da machst willst aber immer alles machen vielleicht solltest deine Ziele etwas kleiner stecken. Du merkst doch das du nicht weit kommst. Es gibt viele arten was zu lernen man kann auch drauf los programmieren und schauen wie sich etwas verhält. Aber man darf dann nicht erwarten das man immer auf Anhieb eine Lösung findet.
Also bevor du weiter versuchst ein USB Gerät abzufragen mach dir die Mühe und versuche zu verstehen wie USB funktioniert. Davor brauchst wirklich nicht anfangen wenn du nicht weißt wie das Gerät intern funktioniert kann man das vielleicht noch hinbekommen aber wenn du nicht mal weisst wie die Technik dahinter funktioniert hast du keine Chance.
Das verstehe ich bei deinen Projekten immer nicht du hast keine Ahnung was du da machst willst aber immer alles machen vielleicht solltest deine Ziele etwas kleiner stecken. Du merkst doch das du nicht weit kommst. Es gibt viele arten was zu lernen man kann auch drauf los programmieren und schauen wie sich etwas verhält. Aber man darf dann nicht erwarten das man immer auf Anhieb eine Lösung findet.
Also bevor du weiter versuchst ein USB Gerät abzufragen mach dir die Mühe und versuche zu verstehen wie USB funktioniert. Davor brauchst wirklich nicht anfangen wenn du nicht weißt wie das Gerät intern funktioniert kann man das vielleicht noch hinbekommen aber wenn du nicht mal weisst wie die Technik dahinter funktioniert hast du keine Chance.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/
-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
in den meisten fällen habe ich eine klare Vorstellung, darüber wie das gehen könnte. Nur halt bei USB leider noch nicht.
wobei ich habe gesehen das unter /dev/input/event5, wenn ich auf ein Taster der Fernbediegung drücke einmal ein Eintrag gemacht wird. Beim zweiten mal geht es leider nicht mehr. Dann muss ich den Empfänger neu anschließend.
wobei ich habe gesehen das unter /dev/input/event5, wenn ich auf ein Taster der Fernbediegung drücke einmal ein Eintrag gemacht wird. Beim zweiten mal geht es leider nicht mehr. Dann muss ich den Empfänger neu anschließend.
MFG
Michael Springwald
Michael Springwald
-
- Beiträge: 958
- Registriert: Mo 11. Sep 2006, 22:56
http://ventoso.org/luca/topcombutler4012/" onclick="window.open(this.href);return false;
Hier spricht jemand ein Telephon mit der libusb an.
Vielleicht hilft dir das weiter.
Quellcode
http://ventoso.org/luca/topcombutler401 ... one.tar.gz" onclick="window.open(this.href);return false;
Hier spricht jemand ein Telephon mit der libusb an.
Vielleicht hilft dir das weiter.
Quellcode
http://ventoso.org/luca/topcombutler401 ... one.tar.gz" onclick="window.open(this.href);return false;
-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
sieht nicht schlecht aus. Vielen Dank !
Jetzt müsste ich nur noch die idVendor und die idProduct haben.
Ich glaube dann hätte ich es geschafft.
Wenn ich lsusb eingeben bekomme ich folgedene werte:
kann das sein ? und wenn, im beispiel steht das so drin:
jetzt ist die Frage kann ich einfach
vid = $147 machen ?
vpid = $e019
Jetzt müsste ich nur noch die idVendor und die idProduct haben.
Ich glaube dann hätte ich es geschafft.
Wenn ich lsusb eingeben bekomme ich folgedene werte:
ich vermute 147a ist die Vendor Id und e019 ist die Product ID.Bus 004 Device 004: ID 147a:e019 Formosa Industrial Computing, Inc.
kann das sein ? und wenn, im beispiel steht das so drin:
Code: Alles auswählen
const
vid = $E6A;
pid = $6002;
vid = $147 machen ?
vpid = $e019
MFG
Michael Springwald
Michael Springwald
-
- Beiträge: 958
- Registriert: Mo 11. Sep 2006, 22:56
http://wiki.ubuntuusers.de/udev" onclick="window.open(this.href);return false;pluto hat geschrieben: Jetzt müsste ich nur noch die idVendor und die idProduct haben.
Irgendwo ab der Mitte des Artikels.
-
- Beiträge: 1187
- Registriert: Mi 13. Dez 2006, 10:58
- OS, Lazarus, FPC: Winux (L 1.2.xy FPC 2.6.z)
- CPU-Target: AMD A4-6400 APU
- Wohnort: Hamburg
@pluto
Die kannst du abfragen, USB-Geräte lassen sich ja nicht umsonst zur Laufzeit einbinden. Das geht dann aber per Thread und du mußt dir noch die Informationen besorgen, wie man die Gerätetypen erkennt. Den Thread wirst du eh brauche, weil deine IR-Fernbedienung ja zu jedem beliebigen Zeitpunkt eine Aktion auslösen kann.
Die kannst du abfragen, USB-Geräte lassen sich ja nicht umsonst zur Laufzeit einbinden. Das geht dann aber per Thread und du mußt dir noch die Informationen besorgen, wie man die Gerätetypen erkennt. Den Thread wirst du eh brauche, weil deine IR-Fernbedienung ja zu jedem beliebigen Zeitpunkt eine Aktion auslösen kann.
Humor ist der Knopf, der verhindert, daß uns der Kragen platzt.
(Ringelnatz)
(Ringelnatz)
-
- Beiträge: 1187
- Registriert: Mi 13. Dez 2006, 10:58
- OS, Lazarus, FPC: Winux (L 1.2.xy FPC 2.6.z)
- CPU-Target: AMD A4-6400 APU
- Wohnort: Hamburg
-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
so sieht meine Ausgabe von lsusb -v aus.Bus 001 Device 005: ID 147a:e019 Formosa Industrial Computing, Inc.
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0 (Defined at Interface level)
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x147a Formosa Industrial Computing, Inc.
idProduct 0xe019
bcdDevice 1.05
iManufacturer 2 Formosa21
iProduct 1
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 34
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 3 Human Interface Devices
bInterfaceSubClass 1 Boot Interface Subclass
bInterfaceProtocol 2 Mouse
iInterface 0
HID Device Descriptor:
bLength 9
bDescriptorType 33
bcdHID 1.10
bCountryCode 0 Not supported
bNumDescriptors 1
bDescriptorType 34 Report
wDescriptorLength 20
Report Descriptors:
** UNAVAILABLE **
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0004 1x 4 bytes
bInterval 10
Device Status: 0x0000
(Bus Powered)
da rauß habe ich folgende code erstellt in Lazarus:
Code: Alles auswählen
procedure TForm1.BitBtn1Click(Sender: TObject);
const
t = $081;
var
dev : pusbdevice;
l:Integer;
begin
dev:=FindDevice;
if dev <> NIL then begin
FusbDevHandle:=usb_open(dev);
if FUsbDevHandle<>nil then begin
l:=usb_interrupt_read(FUsbDevHandle,t,'1x4',$0004,10);
caption:=IntTostr(l);
end;
end
else
ShowMessage('nicht gefunden')
end;
// so sieht die Defniernation von usb_interrupt_read
function usb_interrupt_read(dev:Pusb_dev_handle; ep:longint; bytes:Pchar; size:longint; timeout:longint):longint;cdecl;external;
MFG
Michael Springwald
Michael Springwald
-
- Beiträge: 6079
- Registriert: Do 21. Sep 2006, 07:51
- OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
- CPU-Target: AVR,ARM,x86(-64)
- Wohnort: Dessau
- Kontaktdaten:
das bringt dir alles nix die vendor und produkt id hast ja jetzt schon gratulation
aber einmal versuchst nen interrupt read einmal n bulk read solang du net weisst was das gerät wann über welche übertragungsart sendet nützt die das alles nichts. und geschafft hast dus noch lange nicht du hast im höchstfall das gerät erstmal gefunden.
aber einmal versuchst nen interrupt read einmal n bulk read solang du net weisst was das gerät wann über welche übertragungsart sendet nützt die das alles nichts. und geschafft hast dus noch lange nicht du hast im höchstfall das gerät erstmal gefunden.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/
-
- Beiträge: 1187
- Registriert: Mi 13. Dez 2006, 10:58
- OS, Lazarus, FPC: Winux (L 1.2.xy FPC 2.6.z)
- CPU-Target: AMD A4-6400 APU
- Wohnort: Hamburg
Um das da mußt du dich mal kümmern:
HID Device Descriptor:
Dort wird das "human interface device" näher beschrieben. Allerdings weiß ich jetzt nicht, ob du dazu nicht die technische Spezifikation für dein Gerät zusätzlich zu Rate ziehen mußt. Auf jeden Fall hat das Dings ein Protokoll und möglicherweise auch normalerweise einen Treiber(dll, so). Wenn für Linux keine so-Datei da ist, dann mußt du das wohl oder übel selbst basteln.
HID Device Descriptor:
Dort wird das "human interface device" näher beschrieben. Allerdings weiß ich jetzt nicht, ob du dazu nicht die technische Spezifikation für dein Gerät zusätzlich zu Rate ziehen mußt. Auf jeden Fall hat das Dings ein Protokoll und möglicherweise auch normalerweise einen Treiber(dll, so). Wenn für Linux keine so-Datei da ist, dann mußt du das wohl oder übel selbst basteln.
Humor ist der Knopf, der verhindert, daß uns der Kragen platzt.
(Ringelnatz)
(Ringelnatz)
-
- Beiträge: 6079
- Registriert: Do 21. Sep 2006, 07:51
- OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
- CPU-Target: AVR,ARM,x86(-64)
- Wohnort: Dessau
- Kontaktdaten:
Siehe mein motto.
HID Devices enötigen keinen Trieber bzw liefern alle moderenen betriebsysteme Treiber mit. Und der Device Descriptor nützt ihm gar nichts ausser das da die ProductID und die VendorID drin stehn. Er braucht das Protokoll mit dem das Gerät arbeitet. Oder zumindest mal die richtige Übertragungsart und mit ein wenig mühe findet man die Informationen durchaus im netz. Also bitte keine Halbweissheiten und Pluto LERNEN und nicht "hier ich hab hier nen Schnipsel code macht mal".
HID Devices enötigen keinen Trieber bzw liefern alle moderenen betriebsysteme Treiber mit. Und der Device Descriptor nützt ihm gar nichts ausser das da die ProductID und die VendorID drin stehn. Er braucht das Protokoll mit dem das Gerät arbeitet. Oder zumindest mal die richtige Übertragungsart und mit ein wenig mühe findet man die Informationen durchaus im netz. Also bitte keine Halbweissheiten und Pluto LERNEN und nicht "hier ich hab hier nen Schnipsel code macht mal".
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/