Hallo zusammen,
ich arbeite immer noch an meinem PIC18F2455 und dem Microchip
HID-Mouse-Beispiel. Das Beispiel hab ich dahingehend erweitert, dass es
immer 5 Byte Packete per USB verschickt. Das funktioniert auch (Danke
Martin ^^).
Jetzt will ich aber auch, dass es 5 Byte Ströme annehmen kann. Dazu habe
ich folgendes gedacht:
Reportdefinition in usbdsc.c:
1 | rom struct{byte report[HID_RPT01_SIZE];}hid_rpt01={
|
2 | // ...
|
3 | // Da stehen die Daten, die auch schon im Beispiel standen
|
4 | // plus die zusätzlich zwei Bytes die ich verschicke
|
5 | // ...
|
6 |
|
7 | //Zur Beispieldatei hinzugefügt um fünf Bytes empfangen zu können
|
8 | 0x19, 0x00, /* Usage Minimum */
|
9 | 0x29, 0x08, /* Usage Maximum */
|
10 | 0x95, 0x05, /* Report Count */
|
11 | 0x75, 0x08, /* Report Size */
|
12 | 0x91, 0x02, /* Output */
|
13 |
|
14 | // ...
|
15 | // und hier noch ein bisschen aus der Beispieldatei
|
16 | // ...
|
17 | 0xC0, 0xC0};/* End Collection,End Collection */
|
Desweiteren habe ich in ein Endpoint im Descriptor hinzugefügt:
1 | /*OUT Interrupt Endpoint Descriptor */
|
2 | sizeof(USB_EP_DSC), // Size of this descriptor in bytes
|
3 | DSC_EP, // Endpoint descriptor type
|
4 | _EP01_OUT, // Endpoint number an direction (1 OUT)
|
5 | _INT, // Transfer type (interrupt)
|
6 | HID_INT_OUT_EP_SIZE, // Max packet size (5)
|
7 | 0x05 //Polling Interval (in milliseconds)
|
In usbdsc.h habe ich die CFG01-Struktur erweitert:
1 | #define CFG01 rom struct \
|
2 | { USB_CFG_DSC cd01; \
|
3 | USB_INTF_DSC i00a00; \
|
4 | USB_HID_DSC hid_i00a00; \
|
5 | USB_EP_DSC ep01i_i00a00; \
|
6 | USB_EP_DSC ep01o_i00a00; \
|
7 | } cfg01
|
Und im Interface Descriptor habe ich die Zahl der Endpoints auf zwei
gesetzt. In usbcfg.h habe ich HID_INT_OUT_EP_SIZE auf 5 gesetzt. Und ich
lese den Buffer mit dem Methodenaufruf "HIDRxReport(buffer, 5)" aus.
Jetzt funktioniert mein PIC ganz normal (ich kann am PC alles normal
empfangen), wenn ich aber 5 Bytes runtersende, kommt keine Reaktion (er
sollte einfach 5 Byte a 0xFF wieder hochschicken).
Was mache ich da falsch? Habe ich irgendwo etwas vergessen zu setzen?
Weiß jemand etwas?
Danke für eure Antworten!