Hallo
Nach Rat eines Formum-Users hier, diese Problemstellung nochmals in
einem neuen Thread:
Ich verwende libusb mit Delphi und habe ein Problem mit usb_bulk_write.
Es werden einfach keine Bulkdaten verschickt. Ich habe auch schon
ausgiebig recherchiert, fand allerdings keinen hilfreichen Thread..
Mein Code (Delphi) sieht folgendermassen aus...:
bus := usb_get_busses; // Return the list of USB busses found
Writeln('bus/device idVendor/idProduct');
while Assigned(bus) do
begin
dev := bus^.devices;
while Assigned(dev) do
begin
writeln(bus^.dirname, '/', dev^.filename,
' ',
'0x' + IntToHex(dev^.descriptor.idVendor, 4),
'/',
'0x' + IntToHex(dev^.descriptor.idProduct, 4));
udev := usb_open(dev);
if Assigned(udev) then
begin
if dev^.descriptor.iManufacturer > 0 then
begin
ret := usb_get_string_simple(udev,
dev^.descriptor.iManufacturer, S, sizeof(S));
if (ret > 0) then
begin
writeln('- Manufacturer : ', S);
if (S[0] = 'W') and (s[1] = 'e') then
Begin
len:=4;
TransResult:=usb_bulk_write(udev,myEndPoint,cmdBuf,len,0);
...snipp
...
...
Transresult liefert mir den Wert -22. Wenn ich in einem USB-Monitor den
Datentransfer beobachte, dann sehe ich auch, dass keine Bulk-Daten
geschickt werden. Habt ihr vielleicht eine Idee?
Der Manufacturer-String wird allerdings richtig ausgegeben.
Wenn ich debugging einschalte, dann erhalte ich nach dem Aufruf von
usb_bulk_write die Meldung:
LIBUSB_DLL: error: usb_submit_async: invalid configuration 0
Habt ihr vielleicht eine Idee?
Vielen Dank für eure Tipps
Geri
Hi, kann zwar kein Delphi, habe aber glaube ich Deinen Fehler gefunden. Du musst vor dem bulk write die Funktion usb_claim_interface rufen. Viele Grüße
Hallo Ampfing Hattest recht, nach einem genauen Vergleich eines C-Beispiels mit meinem Beispiel habe ich es auch bemerkt. Jedenfalls vielen Dank für Deinen wichtigen Hinweis und freundliche Grüsse! Geri
Hallo, wie bindest du denn die libusb in Delphi ein? mfg DerDan
Ich habe auch ein Problem mit usb_bulk_write. Ich bekomme von
usb_strerror immer die Meldung: "usb_submit_async: submitting request
failed, win error
: Falscher Parameter.". Das passiert sowohl bei bulk_write als auch bei
bulk_read. An der Geräte-Software kann es auch kaum liegen (habe zum
Test auch mal mal die Firmware von usbasp darauf geflasht, selbes
Ergebnis). Control-Transfers funktionieren aber einwandfrei. So langsam
weiß ich nicht mehr woran es noch liegen könnte.
Hier mein Code (die Funktion open_dev() ist hier nicht dabei, die
funktioniert aber ohne Probleme). Bis einschließlich usb_claim_interface
geht es einwandfrei, nur die Bulk-Transfers machen den Ärger:
#define BUF_SIZE 64
usb_dev_handle *dev = NULL; /* the device handle */
char tmp[BUF_SIZE];
if(!(dev = open_dev()))
{
printf("error: device not found!\n");
return 0;
}
if(usb_set_configuration(dev, 1) < 0)
{
printf("error: setting config 1 failed\n");
usb_close(dev);
return 0;
}
if(usb_claim_interface(dev, 0) < 0)
{
printf("error: claiming interface 0 failed\n");
usb_close(dev);
return 0;
}
if(usb_bulk_write(dev, EP_OUT, tmp, sizeof(tmp), 5000) != sizeof(tmp))
{
printf("error: bulk write failed: %s\n", usb_strerror());
}
if(usb_bulk_read(dev, EP_IN, tmp, sizeof(tmp), 5000)
!= sizeof(tmp))
{
printf("error: bulk read failed: %s\n", usb_strerror());
}
Ist denn auch sichergestellt, dass der USB Chip Daten hat, wenn du die lesen willst bzw. genügend freien Puffer, wenn du welche schreiben willst? Oder versuchst du mit einer nicht von dir entwickelten USB Hardware zu kommunizieren?
Wenn der Chip keine Daten oder keinen freien Puffer hätte, würde doch eher nicht die Meldung "Falscher Parameter" kommen, oder? Die USB-Hardware ist selbst entwickelt, mit dem AVR-USB-Treiber von obdev.at.
Hallo, ich wärme ja ungern alte Threads auf, aber die Frage, wie man libusb in Delphi einbindet, ist leider immer noch offen. :-( Gruß, Carsten
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.