Problem mit usb_bulk_write bei libusb

#873690
Lesenswert?

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
Gast #962205
Lesenswert?

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());
    }

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren