PIC18 - Microchip HID-Mouse-Beispiel - Output-Endpoint hinzufügen

Gast #1403706
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!

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.