Forum: PC-Programmierung libusb Bulk Transfer - Linux


von Andy (Gast)


Lesenswert?

Hallo zusammen,
da ein Kumpel von mir meinte, das es möglich wäre über ein USB Kabel 
zwischen 2 PCS eine Datenverbindung herzustellen, wollte ich mich erst 
einmal bei Euch erkundigen.

Ich hab mir auch schon mal den Bulk Transfer angeguckt, jedoch muß man 
erst einmal ein USB Device bei einem Bus aussuchen und diesen 
entsprechend konfigurieren "Die Endpunkte":

 /* the device's vendor and product id */
 #define MY_VID 0x04d8
 #define MY_PID 0x0011
 /* the device's endpoints */
 #define EP_IN 0x81
 #define EP_OUT 0x01
 #define BUF_SIZE 2

BUF_SIZE gibt in Bytes an, wie groß der Sende u. Empfangspuffer ist.

Meine Frage:
Wie groß kann dieser eigendlich sein?

Ok, also hätte ich demzufolge bei einem Device ein Endpunkt für 
eingehenden und einen Endpunkt für den ausgehenden Datentransfer.

Dann habe ich mir mal den Bulk-Transfer angeguckt:

Zum Schreiben:

     if (usb_bulk_write(dev, EP_OUT, tmp, sizeof(tmp), 5000)
             != sizeof(tmp))
     {
         printf("error: bulk write failed\n");
     }

dev = ist das USB Gerät
EP_Out = ist der ausgehende Endpunkt
tmp = sind die Daten die transferiert werden sollen
siezof(tmp) = ist die Länge der Daten die transferiert werden sollen
5000 = ist die Zeit in Millesekunden, die maximal benötigt werden dürfen
um die Daten zu transferieren.

tmp kann ja jetzt nur 2 Byte lang sein
Wurden die 2 Byte übertragen, dann ist diese Funktion erledigt.

     if (usb_bulk_read(dev, EP_IN, tmp1, sizeof(tmp), 5000)
             != sizeof(tmp))
     {
         printf("error: bulk read failed\n");
     }

dev = ist das USB Gerät
EP_IN = ist der eingehende Endpunkt
tmp1 = ist der Puffer für eingehende Daten
siezof(tmp) = ist die Länge vom Puffer der schon gefüllt ist
5000 = ist die Zeit in Millesekunden, die maximal benötigt werden dürfen
um die Daten zu transferieren.

sind die 2 Byte des Device Puffers gefüllt, ist diese Funktion erledigt.

Ok...das würde doch bedeuten, das ich echt 2 USB Geräte mit einem USB 
Kabel verbinden u. Daten hin u. her schicken könnte.

Natürlich müsste ich dafür noch ein Protokoll zur Flußkontrolle 
schreiben, aber das ist ja nicht das Problem.

Cu Andy

von Andy (Gast)


Lesenswert?

Wäre nett wenn jemand Antworten würde.

Cu Andy

von Jim M. (turboj)


Lesenswert?

> möglich wäre über ein USB Kabel zwischen 2 PCS eine Datenverbindung herzustellen 
[...]

NACK. Bei USB redet immer ein einziger Host mit einem "Device" - und ein 
PC ist immer Host. Bei den USB2USB Datenkabeln gibts etwas in der Mitte 
das nach beiden Seiten ein "Device" ist. Den passenden Treiber findet 
man auf der beiliegenden CD.

von Andy (Gast)


Lesenswert?

Und wenn PC1...ein USB Gerät nur zum schreiben und ein USB nur zum lesen 
hat?
Das gleiche auch bei PC2, dann dürfte es doch funktionieren oder 
natürlich mit 2 USB Kabeln

von Andy (Gast)


Lesenswert?

PC1 lesen verbunden mit PC2 schreiben.
PC1 schreiben verbunden mit PC2 lesen.

von Peter II (Gast)


Lesenswert?

Andy schrieb:
> Das gleiche auch bei PC2, dann dürfte es doch funktionieren oder
> natürlich mit 2 USB Kabeln

NEIN, lies dir erstmal die Grundlagenvon USB durch, kann kanst du dich 
mit der LIB beschäftigen.

von Tobi (Gast)


Lesenswert?

Moin,

geht bei Geräten mit USB OTG Ports und entsprechenden Treibern. Mit 
normalen USB Ports geht es nicht.

Gruss,
Tobi

von Rolf M. (rmagnus)


Lesenswert?

Andy schrieb:
> Und wenn PC1...ein USB Gerät nur zum schreiben und ein USB nur zum lesen
> hat?

Mit lesen und schreiben hat das nichts zu tun. Der PC ist kein 
USB-Gerät, sondern ein USB-Host, und da kann es wie bei den Highlandern 
immer nur einen geben.

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
Noch kein Account? Hier anmelden.