[Gelöst] Usb mit libusb

aro
Beiträge: 68
Registriert: Di 26. Jul 2011, 19:58
OS, Lazarus, FPC: Deepin 15.11 + Lazarus 1.6.2
CPU-Target: 64Bit

[Gelöst] Usb mit libusb

Beitrag von aro »

Ich verwende Linux 64 Bit.

Ich habe die Datei V8_Test_USB_FPC_D7.zip entpackt und das Programm TestUSB installiert, kompilierte und gestartet.

Beim Start wurden im Schrittbetrieb die Ergebnisse der Funktionen Überprüft.

procedure TfMain.Enumerate;

Die Funktionen:

i1 := usb_find_busses(); // = 2 busses
i2 := usb_find_devices(); // = 7 devices

brachten richtige Ergebnisse.

die Function usb_bus := usb_get_busses();

gibt zwar die Adresse für den nächsten Bus {next : PUSBBus; } richtig an

und über die Adresse komme ich dann an den zweiten Bus.

Aber bei: devices : PUSBDevice; und
location : Longword; und
root_dev : PUSBDevice;

bekomme ich im Record 0 angezeigt, was irgend wie nicht richtig sein kann.

Da andere Quellen in der Definition des Records als Längenangabe 4096 statt 512 verwenden habe ich experimentiert.

Und mit folgender Änderung hatte ich endlich vernünftigere Werte:

LIBUSB_PATH_MAX = 4096;
TUSBBus = Packed Record
next : PUSBBus;
prev : PUSBBus;
dirname : Array[0..(LIBUSB_PATH_MAX)-1] Of Char;
xx, yy : Integer;
devices : PUSBDevice;
location : Longword;
root_dev : PUSBDevice;
End;

Ich bekam jetzt bei devices einen Pointer auf ein TUSBDevice;

Mit TUSBDevice.next konte ich das nächste device finden und auch
TUSBDevice.prev und
TUSBDevice.filename ergaben reale und nachvollziehbare Werte.

Alle anderen Variablen von TUSBDevice erscheinen mir aber irgend wie Falsch.

Ich gehe davon aus, das die Deklaration vieler Records einfach nicht mit der aktuellen "libusb.so" nicht übereinstimmen
und die Unit libusb.pas damit nicht verwendbar ist.

Ich habe den C - Quelltext für die libusb - Bibliothek runtergeladen, aber dort leider keine Deklaration der Records gefunden.

Wer kann helfen ?
Zuletzt geändert von aro am Sa 31. Okt 2020, 21:35, insgesamt 1-mal geändert.

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 4314
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Niederösterreich
Kontaktdaten:

Re: Usb mit libusb

Beitrag von af0815 »

Hast du die LibUsb.h ? Wenn ja, würde die Quellenangabe auch sinnvoll sein.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

aro
Beiträge: 68
Registriert: Di 26. Jul 2011, 19:58
OS, Lazarus, FPC: Deepin 15.11 + Lazarus 1.6.2
CPU-Target: 64Bit

Re: Usb mit libusb

Beitrag von aro »

Lt Internet soll https://libusb.info/ angeblich die neuesten Quellen haben.
Die habe ich runtergeladen.

Dort habe ich auch die Datei LibUsb.h gefunden.

Aber irgendwie nicht das gefunden, was mir weiterhilft.

aro
Beiträge: 68
Registriert: Di 26. Jul 2011, 19:58
OS, Lazarus, FPC: Deepin 15.11 + Lazarus 1.6.2
CPU-Target: 64Bit

Re: Usb mit libusb

Beitrag von aro »

inzwischen habe ich weiter Erfolge.

Dazu musste ich folgende Änderungen vornehmen:

TUSBDevice = Record // umstellung von "Packed Record" auf "Record" !!!!
next : PUSBDevice;
prev : PUSBDevice;
filename : Array[0..(LIBUSB_PATH_MAX)-1] Of Char; //LIBUSB_PATH_MAX = 4096;
xx, yy :Integer; // ??? =0 keine Ahnung warum aber damit klappt es
bus : PUSBBus;
descriptor : TUSBDeviceDescriptor;
config : PUSBConfigDescriptor;
dev : Pointer; // ? = 0
devnum : Byte; // ? = 0
num_children : Byte; // ? = 0
children : ^PUSBDevice; // ? = 0
End;

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 4314
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Niederösterreich
Kontaktdaten:

Re: Usb mit libusb

Beitrag von af0815 »

Grundlegend, binde mal die Unit 'unixtype' im Interface ein. Damit hast du Definitionen wie cuint8, cint16, cuint32,... zur Verfügung. Damit kann man besser die Definitionen in der libusb.h übertragen.

Dann {$PACKRECORDS C} auch im Interface hinzufügen.

Generell gibt es das Tool h2pas, mithilfe man versuchen kann, zumindest Teile einer Headerdatei so 'halbautomatisch', von C nach Pascal zu übersetzen. Wenn man es öfters macht, kann es das Leben erschweren oder erleichtern, je nach Headerdatei.

Wo ist die V8_Test_USB_FPC_D7 her, du hast da keine Quelle genannt.

Hier ist eine Quelle https://github.com/hansiglaser/pas-libusb und der macht auch extra darauf aufmerksam, das man den Master nicht nehmen soll, da der für die ältere libusb ist und es einen eigenen Branch für die neue Version gibt. Vielleicht kürzt das einiges ab.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

aro
Beiträge: 68
Registriert: Di 26. Jul 2011, 19:58
OS, Lazarus, FPC: Deepin 15.11 + Lazarus 1.6.2
CPU-Target: 64Bit

Re: Usb mit libusb

Beitrag von aro »

Lt Internet soll https://libusb.info/ angeblich die neuesten Quellen haben.
Die habe ich runtergeladen.

Weder die Unit 'unixtype' im Interface noch {$PACKRECORDS C} hat am Verhalten des Programms irgend etwas verändert.
Es geht doch nur darum, das die Records in libusb.so und libusb.pas anders belegt sind.
Letztlich bekommt man doch nur einen Pointer auf einen Speicherbereich, in dem die Daten in einer bestimmten Reihenfolge abgelegt sind.
Und wenn man vorhandene Lücken nicht ausgleicht, liest man die Information an einer falschen Stelle und bekommt damit nur Datenmüll.

Da ich in LibUsb.h keine Angaben zum Aufbau der Records gefunden habe, könnte es sein, das die Strukturen direkt in Linux deklariert wurden. Das ist mein nächster Ansatz.

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 4314
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Niederösterreich
Kontaktdaten:

Re: Usb mit libusb

Beitrag von af0815 »

Es gibt Weiterentwicklungen bei der Libusb. Wenn die Headerdateien nicht mit der Lib zusammenstimmen kommt das heraus was du siehst.

libusb.info kann die neuesten Header haben, nur hast du die passende lib dazu ?

Es muss alles zusammenpassen.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

aro
Beiträge: 68
Registriert: Di 26. Jul 2011, 19:58
OS, Lazarus, FPC: Deepin 15.11 + Lazarus 1.6.2
CPU-Target: 64Bit

Re: Usb mit libusb

Beitrag von aro »

Mein Problem ist, das ich zwar Grundkenntnisse in C habe, aber wenn es ans Eingemachte geht, da tue ich mich etwas schwer.
Im Moment versuche ich die aktuellen Dateien neu zu kompilieren, um eine Bibliothek und eine libusb.h vom gleichen Stand zu bekommen. Aber irgend wie komme ich mit den Parametern noch nicht klar. Es gibt ja 2 Makefiles und nirgends ein Beispiel für diese Variante. Da muss ich wahrscheinlich noch viel Zeit investieren.

Hat schon einmal libusb selber kompiliert und weis, wie Make aussehen muss ?

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 4314
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Niederösterreich
Kontaktdaten:

Re: Usb mit libusb

Beitrag von af0815 »

Grundlegende Fragen:
A ) welche Linux Variante verwendest du (&4Bit habe ich schon gelsen)
B ) Frage einmal ab, welche version der libusb auf deinem System ist

man muss die libusb nicht selbst kompilieren, mit den obigen Infos kann man aber einen Abgleich zwischen der Pascal Unit und der vorhandenen libusb machen.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

aro
Beiträge: 68
Registriert: Di 26. Jul 2011, 19:58
OS, Lazarus, FPC: Deepin 15.11 + Lazarus 1.6.2
CPU-Target: 64Bit

Re: Usb mit libusb

Beitrag von aro »

Hallo ich verwende deepin Edition 15.11 Desktop auf Debian basierend

Nach dem WINDOWS10 bei dem letzten Update aus lauter Übermut mal ganz einfach mein komplettes Nutzerverzeichnis gekillt hat, verbundenen mit dem Datenverlust, habe ich verschiedene Varianten getestet und bin damit jetzt absolut zufrieden.
So zufrieden, das ich nie wieder etwas mit WINDOWS zu tun haben möchte.

Ich habe :

libusb-1.0.so.1.0.1.0 99kB vom 12.09.2020
libusb-1.0.so als Verknüpfung auf obige Datei

und

libusb.so 30,4 KB vom 06.05.2016

in meinem lib-Verzeichnis

Ich habe auch schon versucht alle Dateien ins Project-Verzeichnis zu kopieren, und jede Dateien mal zu verlinken, aber offensichtlich passt keine der Dateien mit der pas-Datei wirklich zusammen.

sstvmaster
Beiträge: 368
Registriert: Sa 22. Okt 2016, 23:12
OS, Lazarus, FPC: Windows 10 | Lazarus: 2.0.10 und Trunk 32bit
CPU-Target: 32Bit
Wohnort: Dresden

Re: Usb mit libusb

Beitrag von sstvmaster »

Ich würde sagen da fehlen die Dev Pakete. Und bei Linux brauchst man die ".so" nicht ins Projekt Verzeichnis kopieren, die bleiben eigentlich im lib Verzeichnis. Maximal einen Link zur richtigen Version im lib Verzeichnis.
LG Maik

aro
Beiträge: 68
Registriert: Di 26. Jul 2011, 19:58
OS, Lazarus, FPC: Deepin 15.11 + Lazarus 1.6.2
CPU-Target: 64Bit

Re: Usb mit libusb

Beitrag von aro »

Hallo,
ich glaube das Drama geht zu Ende. Mir ist es endlich gelungen eine libusb.so und eine libusb.pas vom gleichen Stand zu finden.
Damit kann ich auf meinen USBAsp - Adapter zugreifen.
Ich hoffe, das keine größeren Überraschungen mehr kommen. Damit dürfte der Rest nur noch eine Fleißaufgabe werden.

sstvmaster
Beiträge: 368
Registriert: Sa 22. Okt 2016, 23:12
OS, Lazarus, FPC: Windows 10 | Lazarus: 2.0.10 und Trunk 32bit
CPU-Target: 32Bit
Wohnort: Dresden

Re: Usb mit libusb

Beitrag von sstvmaster »

Dann sag uns bitte noch welche Dateien und woher du die hast, damit andere auch gleich die Lösung haben und nicht erst rätseln müssen.
LG Maik

aro
Beiträge: 68
Registriert: Di 26. Jul 2011, 19:58
OS, Lazarus, FPC: Deepin 15.11 + Lazarus 1.6.2
CPU-Target: 64Bit

Re: Usb mit libusb

Beitrag von aro »

Hallo,
das tue ich gerne. Ich verwende:

libusb-1.0 - 99 KB von 12.09.2020

und

die libusb habe ich aus der pas-libusb-libusb-1.0.zip 51,6 KB vom 29.10.2020

Ich habe bisher nur die Funktionen getestet, die ich in meinem Programm anwende!

Ich habe aber folgende Änderungen vorgenommen:

{$LINKLIB usb-1.0} auf :{$LINKLIB libusb-1.0}

data:pcuchar auf: data:PAnsiChar weil das Probleme beim Aufruf der Funktion brachte.

Zukünftig werde ich wohl noch mehr c-spezifisches ändern, wenn ich eine Funktion zum ersten mal benötige und es Probleme gibt.

Damit betrachte ich das Problem als gelöst.

Ich hoffe das es den einem oder anderen weiter hilft.

reiter
Beiträge: 214
Registriert: Sa 18. Nov 2017, 16:58

Re: [Gelöst] Usb mit libusb

Beitrag von reiter »

Vielleicht kannst die Dateien hier anhängen?

Antworten