Schönen guten Abend,
nachdem ich das Tutorial zu V-USB größtenteils verstanden habe, haperts
es bei mir noch an einer Stelle. Ich möchte ein char[16] an meinen AVR
übertragen. Dafür habe ich auf der sendenden Seite folgendes
geschrieben:
1 | char inputbuffer[16];
|
2 |
|
3 | //....
|
4 |
|
5 | case USB_DATA_WRITE : cin >> inputbuffer;
|
6 | cout << endl << "Ihre Eingabe: " << inputbuffer << endl;
|
7 | nBytes = usb_control_msg(handle, USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_ENDPOINT_IN, USB_DATA_WRITE, 0, 0, inputbuffer, strlen(inputbuffer)+1, 5000); continue;
|
Auf der Empfängerseite folgendes:
#define USB_CFG_IMPLEMENT_FN_WRITE 1 // in der usbconfig.h
1 | static uchar replyBuf[16] = "Hello, USB!";
|
2 | static uchar reciveBuf[16] = {""};
|
3 |
|
4 | //.....
|
5 |
|
6 |
|
7 | case USB_DATA_WRITE:
|
8 | dataLength = (uchar)rq->wLength.word;
|
9 | dataReceived = 0;
|
10 |
|
11 | if(dataLength > sizeof(reciveBuf))
|
12 | {dataLength = sizeof(reciveBuf);} //setzte wieviele Bytes empfangen werden können
|
13 |
|
14 | return USB_NO_MSG; // ruft usbFunctionWrite auf
|
15 | // irgendwie ja nicht :(
|
16 |
|
17 | case USB_DATA_ACT:
|
18 | for(uint8_t i = 0; i<16; i++)
|
19 | {replyBuf[i]=reciveBuf[i];}
|
20 | break;
|
21 |
|
22 |
|
23 |
|
24 | //....
|
25 |
|
26 | USB_PUBLIC uchar usbFunctionWrite(uchar *data, uchar len)
|
27 | {
|
28 | PORTB ^= (1<<PB1);
|
29 | uchar i;
|
30 | for(i = 0; dataReceived < dataLength && i < len; i++, dataReceived++)
|
31 | {reciveBuf[dataReceived] = data[i];}
|
32 | return (dataReceived == dataLength); // 1 if we received it all, 0 if not
|
33 | }
|
Das Problem ist jetzt, dass usbFunctionWrite nicht aufgerufen wird.
Erkennbar daran, dass die LED nicht an geht.
Jedoch wird
case USB_DATA_WRITE
und
case USB_DATA_ACT
laut meiner LED aufgerufen.
Kann man an dem was ich geschrieben habe erkennen was ich falsch gemacht
habe?