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:

Re: libusb-1.0 Include for Linux

Beitrag von NicTheQuick »

Sieht so aus als hätte ich mal wieder Tomaten auf den Augen gehabt.
Natürlich muss man PeekS(buffer, -1, #PB_Ascii) schreiben. Diese verfluchte -1 treibt mich noch in den Wahnsinn. :lol:

Also ihr müsste einfach an allen Stellen im Code, wo PeekS() vorkommt, noch den zweiten Parameter einfügen. Dann klappt's auch mit den Strings. Das ganze müsst ihr nur in der wrapper.pbi ändern.
Bild
Benutzeravatar
pcfreak1201
Beiträge: 38
Registriert: 17.12.2011 13:01
Computerausstattung: Linux Mint 17.3 (Rosa) x64 | PB 5.42LTS x64 (Linux+Win)
Wohnort: Arnsberg

Re: libusb-1.0 Include for Linux

Beitrag von pcfreak1201 »

Moin und Frohes Neues!

Im Codearchiv Rebirth finde ich nur noch eine Version für Mac,
ich suche aber etwas für Linux - jemand eine Idee?

Gruß,
Stefan
Benutzeravatar
Sicro
Beiträge: 955
Registriert: 11.08.2005 19:08
Kontaktdaten:

Re: libusb-1.0 Include for Linux

Beitrag von Sicro »

@pcfreak1201:

Ebenfalls frohes neues Jahr :)

Ich weiß nicht mehr was der Grund war, dass ich den Include-Code nach dem kompletten Neubau des Archivs nicht mehr integriert habe. Vermutlich funktionierte er nicht mehr mit der aktuellen PB-Version und die Anpassung war mir zu aufwendig.

Es gibt aber noch ein Fork vom Archiv, der zeitlich ziemlich zurückliegt und noch den Zustand des alten Archivs hat. Dort findest du noch die Codes zu libusb:
https://github.com/pointofpresence/Pure ... ware/pbusb
Bild
Warum OpenSource eine Lizenz haben sollte :: PB-CodeArchiv-Rebirth :: Pleasant-Dark (Syntax-Farbschema) :: RegEx-Engine (kompiliert RegExes zu NFA/DFA)
Manjaro Xfce x64 (Hauptsystem) :: Windows 10 Home (VirtualBox) :: Neueste PureBasic-Version
Benutzeravatar
pcfreak1201
Beiträge: 38
Registriert: 17.12.2011 13:01
Computerausstattung: Linux Mint 17.3 (Rosa) x64 | PB 5.42LTS x64 (Linux+Win)
Wohnort: Arnsberg

Re: libusb-1.0 Include for Linux

Beitrag von pcfreak1201 »

Mahlzeit!

Ähm, also "laufen" tut es ohne Fehlermeldung, aber die Ausgabe kommt mir spanisch äh chinesisch vor 8)

Code: Alles auswählen

Version: 1.0.22.11312琀潯洠湡⁹ (瑨灴⼺氯扩獵)
䥌啂䉓卟䍕䕃卓⼠䰠䉉单彂剔乁䙓剅䍟䵏䱐呅䑅
*context = 17408608
[ERR] LIBUSB::openDevice: 䥌啂䉓䕟剒剏䅟䍃卅S䥌啂䉓䕟剒剏也彏䕄䥖䕃䰀䉉单彂
Bus 004 Device 001: ID 1D6B:0003 
[ERR] LIBUSB::openDevice: 䥌啂䉓䕟剒剏䅟䍃卅S䥌啂䉓䕟剒剏也彏䕄䥖䕃䰀䉉单彂
Bus 003 Device 001: ID 1D6B:0002 
[ERR] LIBUSB::openDevice: 䥌啂䉓䕟剒剏䅟䍃卅S䥌啂䉓䕟剒剏也彏䕄䥖䕃䰀䉉单彂
Bus 002 Device 004: ID 05E3:0617 
[ERR] LIBUSB::openDevice: 䥌啂䉓䕟剒剏䅟䍃卅S䥌啂䉓䕟剒剏也彏䕄䥖䕃䰀䉉单彂
Bus 002 Device 002: ID 2109:0811 
[ERR] LIBUSB::openDevice: 䥌啂䉓䕟剒剏䅟䍃卅S䥌啂䉓䕟剒剏也彏䕄䥖䕃䰀䉉单彂
Bus 002 Device 003: ID 05E3:0612 
[ERR] LIBUSB::openDevice: 䥌啂䉓䕟剒剏䅟䍃卅S䥌啂䉓䕟剒剏也彏䕄䥖䕃䰀䉉单彂
Bus 002 Device 001: ID 1D6B:0003 
[ERR] LIBUSB::openDevice: 䥌啂䉓䕟剒剏䅟䍃卅S䥌啂䉓䕟剒剏也彏䕄䥖䕃䰀䉉单彂
Bus 001 Device 008: ID 046D:C52B 
Bus 001 Device 007: ID 0BDA:2838 敒污整k 呒㉌㌸唸䥈䥄R
[...]
... dabei stören mich als ersten Schritt die Fehler nicht, sondern daß die Zeichenausgabe nicht funzt.
Das hier ist die Ausgabe der 1. Zeile:

Code: Alles auswählen

Procedure.s getVersionString()
		Protected *version.libusb_version
		Protected result.s
		
		*version = getVersion()
		With *version
			result = Str(\major) + "." + Str(\minor) + "." + Str(\micro) + "." + Str(\nano)
			If (\rc)
				result + PeekS(\rc, #PB_Ascii)
			EndIf
			If (\describe)
				result + " (" + PeekS(\describe, #PB_Ascii) + ")"
			EndIf
		EndWith
		
		ProcedureReturn result
	EndProcedure
Wobei ich davon ausgehe, daß Ascii die Entsprechung zu
http://libusb.sourceforge.net/api-1.0/s ... rsion.html:

Code: Alles auswählen

struct libusb_version {
     const uint16_t major;
     const uint16_t minor;
     const uint16_t micro;
     const uint16_t nano;
     const char *rc;
     const char* describe;
 };
const char ist ?!

Dann habe ich mich gefragt: ist ein String unter Linux x64 evtl. #PB_UTF8, oder gar #PB_Unicode ???
Aber nichts hat funktioniert. Nun bin ich doch von C nach Basic gewechset, damit es einfacher wird! :oops:
(Nicht wirklich, aber passt in diesem Kontext :mrgreen:)

Kann mir jemand, mit deutlich mehr Ahnung als ich, da evtl. weiter helfen?

Gruß,
Stefan
DePe
Beiträge: 153
Registriert: 26.11.2017 16:17
Wohnort: Wien
Kontaktdaten:

Re: libusb-1.0 Include for Linux

Beitrag von DePe »

Ich habe die wesentlichen Teile aus meinem Code kopiert, vielleicht hilft es. Ich verwende Windows, es sollte aber keinen Unterschied zu Linux geben.

Peter

Code: Alles auswählen

	;- -- Strukturen LibUsb.
	#iLibUsbStructureAlignment = #PB_Structure_AlignC

	;- libusb_version.
	Structure uVersion Align #iLibUsbStructureAlignment
		iMajor.u
		iMinor.u
		iMicro.u
		iNano.u
		*aReleaseCandidate.Ascii
		*aDescribe.Ascii
	EndStructure

	Procedure.i GetVersion(*sVersion.String, *sDescription.String, *sError.String)
		; Ermittelt die Versionsnummer und Beschreibung der LibUsb.
		; <- sVersion:			Versionsnummer als Zeichenfolge, z.B.: "1.0.15.10646-rc4".
		; <- sDescription:	Beschreibung, z.B.: "http://libusb.info".
		; <- sError:			Fehlerbeschreibung.
		; Rückgabe:				True wenn die Versionsnummer ermittelt wurde, ansonst False.
		; const struct libusb_version * libusb_get_version(void)
		Protected *uVersion.uVersion
		Protected fReturn.i, iChars.i

		If (Not *sVersion)
			*sError\s = CurrentProcedureName + "Der Zeiger für die Version ist Null. *sVersion = 0"

		ElseIf (Not *sDescription)
			*sError\s = CurrentProcedureName + "Der Zeiger für die Beschreibung ist Null. *sDescription = 0"

		Else
			*uVersion = libusb_get_version()
			fReturn = Bool(*uVersion)

			If (Not fReturn)
				*sVersion\s = #Null$
				*sDescription\s = #Null$
				*sError\s = CurrentProcedureName + "Es wurde ein Null-Zeiger zurückgegeben."
			EndIf

			If fReturn
				With *uVersion
					*sVersion\s = StrU(\iMajor, #PB_Word) +
									  "." + StrU(\iMinor, #PB_Word) +
									  "." + StrU(\iMicro, #PB_Word) +
									  "." + StrU(\iNano, #PB_Word)
					If \aReleaseCandidate
						iChars = MemoryStringLength(\aReleaseCandidate, #PB_Ascii)
						If iChars
							If (iChars > 32)
								iChars = 32
							EndIf
							*sVersion\s + PeekS(\aReleaseCandidate, iChars, #PB_Ascii)
						EndIf
					EndIf
					If \aDescribe
						iChars = MemoryStringLength(\aDescribe, #PB_Ascii)
						If iChars
							If (iChars > 64)
								iChars = 64
							EndIf
							*sDescription\s = PeekS(\aDescribe, iChars, #PB_Ascii)
						EndIf
					EndIf
				EndWith
			EndIf
		EndIf

		ProcedureReturn fReturn
	EndProcedure
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 »

Alle PeekS im Code müssen korrigiert werden von PeekS(\describe, #PB_Ascii) zu PeekS(\describe, -1, #PB_Ascii).
Bild
Benutzeravatar
pcfreak1201
Beiträge: 38
Registriert: 17.12.2011 13:01
Computerausstattung: Linux Mint 17.3 (Rosa) x64 | PB 5.42LTS x64 (Linux+Win)
Wohnort: Arnsberg

Re: libusb-1.0 Include for Linux

Beitrag von pcfreak1201 »

Danke Peter!

Habe mal quick und dirty die Struktur getauscht, und zumindest etwas mehr "lesbaren Output":

Code: Alles auswählen

Version: 1.0.22.11312 (http://libusb.info)
䥌啂䉓卟䍕䕃卓⼠䰠䉉单彂剔乁䙓剅䍟䵏䱐呅䑅
*context = 24879856
Es scheint also an der Struktur bzw. Alignment zu liegen.
Mal sehen, ob ich am WE etwas Zeit dafür finden kann...
Benutzeravatar
pcfreak1201
Beiträge: 38
Registriert: 17.12.2011 13:01
Computerausstattung: Linux Mint 17.3 (Rosa) x64 | PB 5.42LTS x64 (Linux+Win)
Wohnort: Arnsberg

Re: libusb-1.0 Include for Linux

Beitrag von pcfreak1201 »

Japp, das war es: :bounce:

Code: Alles auswählen

Version: 1.0.22.11312 (http://libusb.info)
LIBUSB_SUCCESS / LIBUSB_TRANSFER_COMPLETED
*context = 13488848
[ERR] LIBUSB::openDevice: LIBUSB_ERROR_ACCESS
Bus 004 Device 001: ID 1D6B:0003 
[ERR] LIBUSB::openDevice: LIBUSB_ERROR_ACCESS
Bus 003 Device 001: ID 1D6B:0002 
[ERR] LIBUSB::openDevice: LIBUSB_ERROR_ACCESS
Bus 002 Device 004: ID 05E3:0617 
[ERR] LIBUSB::openDevice: LIBUSB_ERROR_ACCESS
Bus 002 Device 002: ID 2109:0811 
[ERR] LIBUSB::openDevice: LIBUSB_ERROR_ACCESS
Bus 002 Device 003: ID 05E3:0612 
[ERR] LIBUSB::openDevice: LIBUSB_ERROR_ACCESS
Bus 002 Device 001: ID 1D6B:0003 
[ERR] LIBUSB::openDevice: LIBUSB_ERROR_ACCESS
Bus 001 Device 008: ID 046D:C52B 
Bus 001 Device 007: ID 0BDA:2838 Realtek RTL2838UHIDIR
Antworten