libusb-1.0 Include for Linux

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8675
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Kontaktdaten:

libusb-1.0 Include for Linux

Beitrag von NicTheQuick »

Hi Leute,

ich muss mich gerade etwas knapp halten, aber ich will euch meinen bisherigen Fortschritt mit dem Übersetzen der originalen libusb.h in Version 1.0.11 nicht vorenthalten. Bisher geht noch nicht so viel, aber schon bald werde ich alle Funktionen der libusb integriert haben und danach kommen dann noch weitere Funktionen, die auf den üblichen PureBasic-Syntax zugeschnitten sind. Ein paar sind sogar schon drin plus einem Beispiel.

Das ganze besteht aus zwei Dateien, die man hier herunterladen kann: libusb.pbi und libusb_Wrapper.pbi

Aktuell ist das Beispiel noch in der 'libusb_Wrapper.pbi' enthalten. Das wird aber dann schon bald ausgelagert, damit die Übersicht bewahrt bleibt.

Die 'libusb.pbi' ist alleine mehrere PB-Versionen abwärtskompatibel, der Wrapper nutzt allerdings schon die Modul-Technologie von PB. Vielleicht werde ich das ganze sogar in Zukunft in vier Versionen anbieten: (1) als Modul, (2) als normale PB-Funktionen mit einem Präfix wie zum Beispiel 'LIBUSB_', (3) als Pseudo-Klasse mit der Hilfe von Interfaces und (4) als simplen Wrapper der orginalen Bibliotheksfunktionen der libusb.

Getestet habe ich das ganze mit Version 1.0.9 und 1.0.11 der libusb unter einem 64-Bit Linux (Debian). Version 1.0.16 der libusb steht ja schon in den Startlöchern, aber ist noch nicht Final. Dort hat sich aber nochmal ein bisschen was verändert. Das bringt mich zu folgendem Punkt: Ich habe vor das PB-Include nicht einfach nur an zukünftige neue libusb-Versionen anzupassen, sondern es gleichzeitig auch abwärtskompatibel zu älteren Versionen zu machen. Dazu muss man dann vor dem Kompilieren des Quellcodes drei Konstanten ändern, die die zu verwendende Version darstellen. Zur Laufzeit kann man zwar die aktuell installierte libusb-Version feststellen, das bringt einem dann aber nichts mehr, wenn der Code schon kompiliert ist.

Ich würde mich über Hilfe freuen um das ganze auch auf Windows lauffähig zu kriegen. Vermutlich muss man da nur beim Import im Wrapper irgendwas ändern.
Bild
Benutzeravatar
MVXA
Beiträge: 3823
Registriert: 11.09.2004 00:45
Wohnort: Bremen, Deutschland
Kontaktdaten:

Re: libusb-1.0 Include for Linux

Beitrag von MVXA »

Hi,

du hast dir da ja richtig Mühe gegeben :) und bitte daher um Entschuldigung, falls dieser Post so wirkt als würde er deine Arbeit runter machen, das ist nicht meine Absicht :(.

Hast du aber schon überlegt statt es händisch zu machen einfach GUsb zu verwenden und dann die mitgelieferte GIR Datei mit <http://www.forums.purebasic.com/english/viewtopic.php?f=14&t=43681> zu übersetzen?

Das Tool scheint jetzt auch schon etwas älter zu sein. Ich würde aber vorschlagen eher das Tool auf Vordermann zu bringen anstatt alle Header manuell zu übersetzen. Auf die Weise kannst du dann wesentlich schneller so ziemlich alle Bibliotheken in PureBasic verwenden, die auch GIR Bindings anbieten. Das sind nicht Wenige :).
Bild
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8675
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Kontaktdaten:

Re: libusb-1.0 Include for Linux

Beitrag von NicTheQuick »

Dieses GIR-Zeugs hab ich jetzt noch nie gehört, werde ich mir aber bei Gelegenheit sicherlich mal anschauen.

Aber da ich aktuell nur an libusb interessiert bin, weil ich das für ein Projekt brauche, ist es eigentlich unsinnig mich jetzt in was anderes einzuarbeiten. Und sonderlich schwer war das Übersetzen der Header-Datei ja nicht. Lediglich die Kommentare, die ich unbedingt auch im PB-Code behalten wollte, haben Formatierungszeit beansprucht. Der Rest ging ja recht fix, im Grunde unter zwei Stunden. Und da ich nicht am laufenden Band Header-Files konvertiere, finde ich den Arbeitsaufwand angemessen. :wink:

Anfangs dachte ich auch daran schnell einen kleinen Konverter zu coden, der den C-Header in PB-Code übersetzt, aber da hatte ich dann doch keine Lust drauf und hab lieber direkt losgelegt selbst zu übersetzen. :D
Bild
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8675
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Kontaktdaten:

Re: libusb-1.0 Include for Linux

Beitrag von NicTheQuick »

Hallo Leute,

ich wollte mich nur noch mal melden um euch zu sagen, dass ich alles etwas umkonzipiert habe. Und zwar baue ich jetzt einfach das pyUSB-Framework nach, da mir das gut durchdacht erscheint. Daraus mache ich jetzt sozusagen pbUSB, allerdings zunächst nur mit libusb1. libusb0 und openusb lasse ich mal außen vor. Die beiden scheinen eh seltener genutzt zu werden.

Bisher ist schon mal das backend fertig, und jetzt gerade bin ich am core dran. Das wird die kompliziertere Geschichte. Natürlich kann man den Python-Code nicht 1:1 übersetzen, weil es bei PureBasic keinen GarbageCollector gibt und man auch nicht so einfach neue Attribute an ein Objekt dran hängen kann, die vorher noch nicht da waren. Aber hauptsächlich macht der nicht vorhandene GarbageCollector einem das Leben schwer. Aber das krieg ich schon hin. Bisher ist alles auch noch recht übersichtlich mit gerade mal knapp über 1500 Zeilen Code.

Ich melde mich dann wieder, sobald das erste funktioniert.
Bild
Derren
Beiträge: 557
Registriert: 23.07.2011 02:08

Re: libusb-1.0 Include for Linux

Beitrag von Derren »

Blöde Frage, aber was kann man damit machen? Arduino und so ansteuern?
Signatur und so
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8675
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Kontaktdaten:

Re: libusb-1.0 Include for Linux

Beitrag von NicTheQuick »

Därrän hat geschrieben:Blöde Frage, aber was kann man damit machen? Arduino und so ansteuern?
Damit kann man alle möglichen USB-Geräte ansteuern, sofern man das Protokoll kennt, über das sie kommunizieren.

Da die direkte Verwendung von libusb recht unkomfortabel ist, schreibe ich deswegen noch einen Wrapper drum herum, der die Anbindung übersichtlicher gestaltet, und ähnlich wie pyUSB aufgebaut ist.

Ich nutze es aktuell für meinen Atmel ATXMega, aktuell aber noch über Python (Siehe neustes Video in meinem Youtube-Kanal).
Bild
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8675
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Kontaktdaten:

Re: libusb-1.0 Include for Linux

Beitrag von NicTheQuick »

Hier mal eine neue Version, die besser getestet und etwas umgebaut ist.
Folgende Dateien muss man sich dafür laden:
- header.pbi
- import.pbi
- time.pbi

Um die Funktionen nutzen zu können, muss man "import.pbi" inkludieren und kann dann auf die Funktionen zugreifen, wenn man entweder 'UseModule LIBUSB1' nutzt, oder sie direkt anspricht mit dem Modulnamen. Ein kleines Beispiel folgt noch.
Bild
Benutzeravatar
ProgOldie
Beiträge: 236
Registriert: 19.05.2012 17:09
Computerausstattung: Windows11, Arduinos, Pi3, PureBasic 6.02

Re: libusb-1.0 Include for Linux

Beitrag von ProgOldie »

@Nic

Hallo, deine Beiträge könnten mir vielleicht bei folgendem Problem helfen:
Ich habe das prima und preiswerte ADAFRUIT-FT232H-Board https://learn.adafruit.com/adafruit-ft2 ... t/overview, mit dem man zunächst USB-Serial UART in Nullkommanix erledigt hat.
Ich möchte es letztlich als Alternative zu Arduino benutzen, um ganz simpel GPIO-Ports anzusteuern. Adafruit bietet hierzu eine eigene Python-Lib an. Ich möchte mich aber nun nicht auch noch mit Python beschäftigen, sondern die Pins möglichst von PureBasic (Windows10, 64-bit) aus über USB und dann den FT232H-Chip ansteuern.

Grundsätzliche Frage: Würden mir deine Beiträge in der Richtung helfen?
Ein kleines Beispiel folgt noch.
Viuelleicht würde mir das helfen.
Windows10 / PB5.70 / Arduino (-Due) / Raspberry Pi3 /Linux Mint 18
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8675
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Kontaktdaten:

Re: libusb-1.0 Include for Linux

Beitrag von NicTheQuick »

Hm... Hab lang nicht mehr damit herum gebastelt. Schon gar nicht unter Windows. Ich muss mal schauen, ob das noch sauber läuft und ob es auch unter Windows will. Hab aber nur Windows 7 hier zum Testen.
Bild
Benutzeravatar
ProgOldie
Beiträge: 236
Registriert: 19.05.2012 17:09
Computerausstattung: Windows11, Arduinos, Pi3, PureBasic 6.02

Re: libusb-1.0 Include for Linux

Beitrag von ProgOldie »

@Nic
Könntest du 'mal das 'kleine Beispiel' posten. Das würde mir womöglich beim Einstieg helfen.

Danke!
Windows10 / PB5.70 / Arduino (-Due) / Raspberry Pi3 /Linux Mint 18
Antworten