USB ansprechen unter Ubuntu per lazarus ?

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Christian
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:

Beitrag von Christian »

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 ....
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

pluto
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)

Beitrag von pluto »

ch schreib extra hin wo du deinen code hinzuschreiben hast
ich weiß ich dachte so hätte ich den neusten Eintrag, aber ist es egal. Es geht so oder so nicht.
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 !
komisch normalerweise nimmt man dazu die vendor und product id u
ich weiß, leider kenne ich die vendor und product id nicht.
darum mache ich das.....
wo nimmst du die Parameter für bulk_read denn her wenn du sie nicht kennst ?
die stehen im Quellcode leider ohne nährer Beschreibung.
und bist du sicher das das gerät überhaupt bulk transfers macht ? können ja auch interrupt transfers oder isocrounious sein
nein bin ich mir nicht. Wenn ich erhlich sein soll weiß ich auch nicht was ein bulk tranfers überhaupt ist :( .
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

Christian
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:

Beitrag von Christian »

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.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

pluto
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)

Beitrag von pluto »

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.
MFG
Michael Springwald

creed steiger
Beiträge: 958
Registriert: Mo 11. Sep 2006, 22:56

Beitrag von creed steiger »

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;

pluto
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)

Beitrag von pluto »

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:
Bus 004 Device 004: ID 147a:e019 Formosa Industrial Computing, Inc.
ich vermute 147a ist die Vendor Id und e019 ist die Product ID.
kann das sein ? und wenn, im beispiel steht das so drin:

Code: Alles auswählen

const
  vid = $E6A;
  pid = $6002;
jetzt ist die Frage kann ich einfach
vid = $147 machen ?
vpid = $e019
MFG
Michael Springwald

creed steiger
Beiträge: 958
Registriert: Mo 11. Sep 2006, 22:56

Beitrag von creed steiger »

pluto hat geschrieben: Jetzt müsste ich nur noch die idVendor und die idProduct haben.
http://wiki.ubuntuusers.de/udev" onclick="window.open(this.href);return false;

Irgendwo ab der Mitte des Artikels.

schnullerbacke
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

Beitrag von schnullerbacke »

@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.
Humor ist der Knopf, der verhindert, daß uns der Kragen platzt.

(Ringelnatz)

pluto
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)

Beitrag von pluto »

@creed steiger
Danke für dein Link.

@schnullerbacke
ich muss ja erstmal prüfen ob das gerät überhaupt angeschlossen ist.
Erst dann kann ich ein Treahd starten und mich mit dem Gerät verbinden. oder nicht ?
MFG
Michael Springwald

schnullerbacke
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

Beitrag von schnullerbacke »

Nö, LINUX erkennt ja auch obs neu eingesteckt wird. Den Thread zum abhorchen kann man natürlich gesondert starten wenn das richtige Teil da ist.
Humor ist der Knopf, der verhindert, daß uns der Kragen platzt.

(Ringelnatz)

pluto
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)

Beitrag von pluto »

ich kann dir nicht ganz folgen. wobei ich schon vermutet habe das ein Ereignis ausgelöst wird, wenn ich auf eine Taste drücke... aber leider nur einmal...
MFG
Michael Springwald

pluto
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)

Beitrag von pluto »

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)
so sieht meine Ausgabe von lsusb -v aus.

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;
leider bekomme ich als wert auch nur ein -1 zurück.
MFG
Michael Springwald

Christian
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:

Beitrag von Christian »

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.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

schnullerbacke
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

Beitrag von schnullerbacke »

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.
Humor ist der Knopf, der verhindert, daß uns der Kragen platzt.

(Ringelnatz)

Christian
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:

Beitrag von Christian »

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".
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Antworten