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


von Coco J. (Gast)


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. (Gast)


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.