Forum: Mikrocontroller und Digitale Elektronik V-USB und libusbdotnet


von Harry (Gast)


Lesenswert?

Hallo ,

baue gerade eine USB IO Karte, und möchte gerne Daten von der USB Device 
zum PC übertragen.

Ich verwende V-USB und LibUSBDotNet.
Hab als Basis das tutorial von 
http://codeandlife.com/2012/02/04/avr-attiny-usb-tutorial-part-4/ 
vorwendet, was bestens funktioniert!
Jedoch schaffe ich es nicht mittels LibUSBDotNet das "Hello, USB!" zu 
bekommen. Der V-USB Part arbeitet anstandslos.

Aufruf in C funktioniert!
1
usb_control_msg(handle, USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_ENDPOINT_IN, USB_DATA_OUT, 0, 0, (char *)buffer, sizeof(buffer), 5000);

Aufruf in C# nicht wie gewünscht
1
ControlTransfer(ref UsbSetupPacket setupPacket, IntPtr buffer, int bufferLength, out int lengthTransferred)

Verwende ich die falsche Funktion?

Lg Harry

von libdotnet (Gast)


Lesenswert?

Zeig doch mal wie dein requestType aussieht, bzW. den ganzen Code.
Arbeite zufällig gerade an der selben Geschichte, wenn ich fertig bin 
werde ich die Klasse mal hochladen.

von Harry (Gast)


Lesenswert?

Aufruf:
SendTest(2, 0);
1
public bool SendTest(byte command, byte value)
2
{
3
  if (IsConnected == false)
4
    return false;
5
  
6
  int bytesRead;
7
8
  UsbSetupPacket packet = new UsbSetupPacket(
9
    (byte)UsbRequestType.TypeVendor, 
10
    (byte)command, 
11
    (short)value, 0, 0);
12
13
  int temp1;
14
  object temp2 = null;
15
  //IntPtr incom = new IntPtr();
16
            
17
  return MyUsbDevice.ControlTransfer(ref packet, temp2, 14, out temp1);
18
}

(Mod.: code-Formatanweisung korrigiert)

: Bearbeitet durch Moderator
von Marco W. (watz)


Lesenswert?

Weiß nicht obs Dir hilft, aber ich hab vor ein paar Jahren den HID code 
aus einem der V-USB Demoprojekte geklaut und mir eine 8 Port TRIAC 
Steuerung gebaut (für Scheinwerfer auf Hochzeitsfeier).

Mit HID brauchst Du kein libusb mehr, sondern kannst Treiber und HID 
Schnittstelle vom OS nutzen. Irgendwo hab ich auch noch den Code für AVR 
und Windows App. Auf Windows war die Kommunikation wirklich trivial.

Gruß,
Watz

von libdotnet (Gast)


Lesenswert?

So sollte es eigentlich laufen :
1
UsbSetupPacket setupPacket = new UsbSetupPacket((byte)(UsbCtrlFlags.RequestType_Vendor | UsbCtrlFlags.Recipient_Device | UsbCtrlFlags.Direction_In), request, 0x0000, 0x0000, 0x0000);
2
ControlTransfer(ref setupPacket, IntPtr buffer, int bufferLength, out int lengthTransferred)

von Harald M. (_harry_)


Lesenswert?

HID Projekte gibt's wie Sand am Meer, LibUsbDotNet noch nicht!
Möchte ja auch was daraus lernen ;-)

trotzdem danke!

von libdotnet (Gast)


Lesenswert?

Na funktioniert es denn oder nicht ?

von Harald M. (_harry_)


Lesenswert?

Danke, das der RequestType den falschen Wert hat, habe ich auch gerade 
festgestellt, hab aber noch keine "Hello, USB!" empfangen...

von libdotnet (Gast)


Lesenswert?

Also bei mir ist object buffer aus der ControlTransfer ein einfaches 
byte Array.
Den Wert für request aus setupPacket mußt du natürlich noch richtig 
einstellen, der steht in der usbFunctionSetup() vom µC Code.

von Harald M. (_harry_)


Lesenswert?

Die Lösung war: Richtigen RequestType und Byte Array verwenden!

: Bearbeitet durch User
von libdotnet (Gast)


Lesenswert?

Super, freut mich.

Hast du denn bereits eine spezielle Anwendung im Auge, oder möchtest du 
nur ein wenig über Usb lernen ?

von Harald M. (_harry_)


Lesenswert?

Erstmals nur eine 32Port IO Karte. ;-)
Danke für den beistand!!

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.