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.