Forum: Mikrocontroller und Digitale Elektronik PIC18 - Microchip HID-Mouse-Beispiel - Output-Endpoint hinzufügen


von ChornHulio (Gast)


Lesenswert?

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!

von ChornHulio (Gast)


Angehängte Dateien:

Lesenswert?

Weiß niemand eine Antwort?
Ich schicke mal mein Projekt (ein bisschen abgespeckt) mit.

von ChornHulio (Gast)


Lesenswert?

Hat noch nie jemand ein HID-Device entwickelt, das in beide Richtungen 
kommunizieren kann?

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.