V-USB usbFunctionWrite wird nicht aufgerufen

Gast #2962842
Lesenswert?

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

wie es scheint bin ich drauf gekommen wie man diesen Fehler Behebt, 
jedoch verstehe ich nicht ganz wie dies funktioniert. Aber egal, das 
werde ich im PC-Coding nachfragen.

Der Fehler war folgender
1
strlen(inputbuffer)+1
 ist falsch
1
sizeof(inputbuffer)+1
 ist richtig

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