Forum: Mikrocontroller und Digitale Elektronik V-USB usbFunctionWrite wird nicht aufgerufen


von Coco J. (Firma: Student) (dathcoco)


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?

von Coco J. (Firma: Student) (dathcoco)


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

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.