Linux USB HID Device?

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
MmVisual
Beiträge: 1445
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 3.0 FPC 3.2)
CPU-Target: 32/64Bit

Re: Linux USB HID Device?

Beitrag von MmVisual »

@Christian: Irgend welche Ergebnisse?
EleLa - Elektronik Lagerverwaltung - www.elela.de

MmVisual
Beiträge: 1445
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 3.0 FPC 3.2)
CPU-Target: 32/64Bit

Re: Linux USB HID Device?

Beitrag von MmVisual »

Ich bin nun dem Problem ein Stückchen weiter gekommen. Es liegt daran wie der FPC (und auch Delphi) die Pointer in der Datenstruktur behandelt. Hier die Datenstruktur:

Code: Alles auswählen

TUSBDevice = record
        next         : PUSBDevice;
        prev         : PUSBDevice;
        filename     : array[0..(LIBUSB_PATH_MAX)-1] of char;
        bus          : PUSBBus;
        descriptor   : TUSBDeviceDescriptor;
        config       : PUSBConfigDescriptor;
        dev          : pointer;
        devnum       : byte;
        num_children : byte;
        children     : ^PUSBDevice;
     end;


Und so kommt man zum Array mit den Konfigurationen:

Code: Alles auswählen

config := @Device^.config;
   config := PUSBConfigDescriptor((@config[0])^);

- Holen der Adresse in der das Array der Konfiguration steht: @Device^.config
- Zuweisen in eine PUSBConfigDescriptor Variable, damit kann dann mit config[n] zugegriffen werden.

Geht das nicht einfacher?
EleLa - Elektronik Lagerverwaltung - www.elela.de

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:

Re: Linux USB HID Device?

Beitrag von Christian »

Das ist dann ein Fehler in den Headern, den ich da eh schon vermutete aber noch nicht nachstellen konnte.
Bin leider noch nicht dazu gekommen mich damit zu beschäftigen.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

MmVisual
Beiträge: 1445
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 3.0 FPC 3.2)
CPU-Target: 32/64Bit

Re: Linux USB HID Device?

Beitrag von MmVisual »

Wie kann ich LibUSB unter Linux (Sidux) nutzen? Was muss ich installieren, ausführen usw. ? (bin Linux-Anfänger)
Danke für eure Hilfe im Voraus.
EleLa - Elektronik Lagerverwaltung - www.elela.de

Benutzeravatar
theo
Beiträge: 10468
Registriert: Mo 11. Sep 2006, 19:01

Re: Linux USB HID Device?

Beitrag von theo »

MmVisual hat geschrieben:Wie kann ich LibUSB unter Linux (Sidux) nutzen? Was muss ich installieren, ausführen usw. ? (bin Linux-Anfänger)
Danke für eure Hilfe im Voraus.

Müsste eig. schon da sein.
Schau mal ob diese Lib gibt: /usr/lib/libusb.so

Für Linux müsste die Version von Uwe Zimmermann laufen:
http://wiki.freepascal.org/Hardware_Access/de#libusb

MmVisual
Beiträge: 1445
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 3.0 FPC 3.2)
CPU-Target: 32/64Bit

Re: Linux USB HID Device?

Beitrag von MmVisual »

Jetzt tappe ich ja mal wieder in alle Linux-Fettnäpfchen....

- /usr/lib/libusb.so gibt es nicht
- Unter /usr/lib gibt es eine Verknüpfung "libusb-0.1.so.4" auf die Date /lib/libusb-0.1.so.4.4.4
- Ich habe dann die Dateien aus dem SF.net und die 3 Befehle anhand der INSTALL Anleitung eingetippt.
- Jetzt habe ich unter /user/local/lib die Datei libusb-1.0.so.0.0.0
- Die Dateien von Hr. Zimmermann lassen sich nicht kompillieren, denn "/usr/bin/ld: cannot find -lusb" + "testlibusb.pas(199,1) Error: Error while linking"

Ich habe mir eine Test-Applikation mit völlig überarbeiteter "libusb.pas" erstellt, die wollte ich nun unter Linux mal testen. Unter Windows mit Lazarus und Delphi geht die Unit bereits.

Im Anhang sende ich das Projekt. Kann das bitte jemand unter Lazarus/Linux öffnen und schauen ob im Baum die USB-Geräte gezeigt werden?
Unter Linux/Lazarus lässt es sich fehlerfrei kompillieren.

Das Problem mit meiner LibUSB unter Lazarus hätte ich gerne behoben. Kann mir bitte jemand das Test-Programm und die so Datei fertig kompilliert für Linux hochladen?
Dateianhänge
V8_Test_USB_FPC_D7.zip
(15.86 KiB) 78-mal heruntergeladen
EleLa - Elektronik Lagerverwaltung - www.elela.de

Benutzeravatar
theo
Beiträge: 10468
Registriert: Mo 11. Sep 2006, 19:01

Re: Linux USB HID Device?

Beitrag von theo »

Mach nen Symlink namens libusb.so in /usr/lib (oder wo immer dein System das Ding sucht) erstmal auf
/lib/libusb-0.1.so.4.4.4

http://www.linuxwiki.de/SymLink

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:

Re: Linux USB HID Device?

Beitrag von Christian »

- Die Dateien von Hr. Zimmermann lassen sich nicht kompillieren, denn "/usr/bin/ld: cannot find -lusb" + "testlibusb.pas(199,1) Error: Error while linking"


Du musst die libusb-devel pakete installieren sonst wird das mit deiner unit auch nicht gehen.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

MmVisual
Beiträge: 1445
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 3.0 FPC 3.2)
CPU-Target: 32/64Bit

Re: Linux USB HID Device?

Beitrag von MmVisual »

Ich habe nun unter sidux in der Kommandozeile "apt-get install libusb-dev" eingegeben.
Nun findet meine Applikation auch die so Datei. Zumindest sag die EXE dass die Lib geladen wurde.

Ich habe das Sidux in der VirtualBox laufen. nachdem ich es endlich geschafft habe dass der USB Treiber von der VirtualBox funktionierte, bleibt jetzt die ganze VirtualBox hängen.
Es kommt noch viel schlimmer, selbst das Hauptprogramm, in dem ich die einzelnen Virtuellen PCs auswählen kann startet zwar, häng dann aber sofort. :(
Im Taskmanager häng noch die Datei VBoxSVC.exe, killen hilft...

Irgendwie kommt die Virtual-Box mit meinem USB Gerät nicht klar. Es meldet "Das USB Gerät xxxx konnte nicht an die virtuelle Maschine Linux gebunden werden."
EleLa - Elektronik Lagerverwaltung - www.elela.de

Bernd
Beiträge: 27
Registriert: Mo 11. Jun 2007, 10:12
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: Linux USB HID Device?

Beitrag von Bernd »

Hallo
ich habe einmal die Erfahrungen und Beispiele aus diesem Thread genommen und mein Eigenbaumessgerät via USB eingebunden. Unter Windows XP funktioniert nun auch alles, aber nun bin ich an der Umsetzung der Linux Version gescheitert.

Das Einbinden der libusb-0.1.so.4.4.4 funktioniert.

Code: Alles auswählen

usb_init();
   usb_find_busses()
   usb_find_devices();

Es werden ein Bus und 2 Devices gefunden, so wie es auch das Kommando lsusb anzeigt.

Code: Alles auswählen

usb_bus := usb_get_busses();


die Funktion liefert ^TUsbBus($084F9308) und ich denke dies ist ein Zeiger auf den Speicher in dem die Infos stehen.
Bis hierher scheint alles zu gehen.

Die Funktion

Code: Alles auswählen

dev := usb_bus^.devices;

liefert aber ein nil und hier komme ich nicht weiter.
Wo kann ich da mit dem Suchen und Experimentieren weitermachen, oder gibt es schon eine verbesserte Version?
Bin im Netz nicht fündig geworden.

(openSuse 11.3 und Lazarus 0.9.29)

Gruß Bernd
Zuletzt geändert von Lori am Fr 29. Apr 2011, 20:50, insgesamt 1-mal geändert.
Grund: Highlighter

Scotty
Beiträge: 768
Registriert: Mo 4. Mai 2009, 13:24
OS, Lazarus, FPC: Arch Linux, Lazarus 1.3 r44426M FPC 2.6.4
CPU-Target: x86_64-linux-qt/gtk2
Kontaktdaten:

Re: Linux USB HID Device?

Beitrag von Scotty »

Wieso nicht ein "cat /proc/..." oder "lspci -v |grep USB"?

Bernd
Beiträge: 27
Registriert: Mo 11. Jun 2007, 10:12
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: Linux USB HID Device?

Beitrag von Bernd »

Hallo

Weil lsusb alles liefert was ich wissen muss:

Bus 001 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 003: ID 04d8:000e Microchip Technology, Inc.
Bus 001 Device 006: ID 0781:5151 SanDisk Corp. Cruzer Micro Flash Drive

Ein USB-Bus mit den 3 Geräten und Ihren IDs.

Ich glaube die Variable usb_bus ist nicht richtig gesetzt, eventuell geht die Funktion usb_get busses() nicht so unter Linux.

Bernd

Antworten