Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > de.sci.electronics > #234736 > unrolled thread

USB HID OUT endpoint report descriptor

Started byJohannes Bauer <dfnsonfsduifb@gmx.de>
First post2017-10-30 10:02 +0100
Last post2017-10-30 12:48 +0100
Articles 3 — 2 participants

Back to article view | Back to de.sci.electronics


Contents

  USB HID OUT endpoint report descriptor Johannes Bauer <dfnsonfsduifb@gmx.de> - 2017-10-30 10:02 +0100
    Re: USB HID OUT endpoint report descriptor Stefan Wiest <swdig@gmx.de> - 2017-10-30 11:28 +0100
      Re: USB HID OUT endpoint report descriptor Johannes Bauer <dfnsonfsduifb@gmx.de> - 2017-10-30 12:48 +0100

#234736 — USB HID OUT endpoint report descriptor

FromJohannes Bauer <dfnsonfsduifb@gmx.de>
Date2017-10-30 10:02 +0100
SubjectUSB HID OUT endpoint report descriptor
Message-ID<ot6prp$3le$1@news.albasani.net>
Hallo Gruppe,

ich bin gerade an einem USB HID Gerät dran, das bidirektional mit dem
Host kommuniziert. Für den IN endpoint habe ich ganz normal meinen
Report Deskrtiptor geschrieben und der passt auch wunderbar (wird genau
so erkannt wie ich ihn deklariert habe).

Mit dem OUT endpoint habe ich allerdings unter Windows Probleme: Ich
habe mehrere OUT reports (die vom µC, wie vom Standard vorgesehen, am
ersten Byte differentiert werden können). Unter Linux funktioniert das
wunderbar, die libhib sendet einfach alles, was ich so raussenden will
direkt an OUT und alles passt wunderbar.

Unter Windows habe ich damit allerdings Probleme: Windows weigert sich
inständig, einen Report an das Device zu senden und sagt immer nur
"Invalid parameter".

Für OUT habe ich keine Report Deskriptoren und ich vermute jetzt, dass
Windows die sehen will, bevor es einfach irgendwas an das Gerät schickt.
Allerdings habe ich keine Ahnung, wie ich die deklarieren soll bzw wie
das geht. In allen beispielen sehe ich immer nur die IN reports
deklariert, aber die OUT reports nie. Beide Endpoints habe ich natürlich
deklariert (IN INTERRUPT und OUT INTERRUPT), aber eben die reports nicht.

Kann mir da jemand weiterhelfen, der sich mit dem Thema auskennt?

Vielen Dank & viele Grüße,
Johannes

-- 
>> Wo hattest Du das Beben nochmal GENAU vorhergesagt?
> Zumindest nicht öffentlich!
Ah, der neueste und bis heute genialste Streich unsere großen
Kosmologen: Die Geheim-Vorhersage.
 - Karl Kaos über Rüdiger Thomas in dsa <hidbv3$om2$1@speranza.aioe.org>

[toc] | [next] | [standalone]


#234742

FromStefan Wiest <swdig@gmx.de>
Date2017-10-30 11:28 +0100
Message-ID<f5od67F32inU1@mid.individual.net>
In reply to#234736
Am 30.10.2017 um 10:02 schrieb Johannes Bauer:

Hallo Johannes,

> Für OUT habe ich keine Report Deskriptoren und ich vermute jetzt, dass
> Windows die sehen will, bevor es einfach irgendwas an das Gerät schickt.
> Allerdings habe ich keine Ahnung, wie ich die deklarieren soll bzw wie
> das geht. In allen beispielen sehe ich immer nur die IN reports
> deklariert, aber die OUT reports nie. Beide Endpoints habe ich natürlich
> deklariert (IN INTERRUPT und OUT INTERRUPT), aber eben die reports nicht.
>
> Kann mir da jemand weiterhelfen, der sich mit dem Thema auskennt?

Für Windows ist die Definition des OUT reports notwendig und eigentlich 
auch ganz einfach. ein Beispiel für 3 LEDs und 5 Dummy-Bits damit das 
Byte voll wird:

0xa1, 0x02,        /*   Collection (Logical)  */
     0x85, 0x04,    /*     Report ID (LED Data Report) */
     0x05, 0x08,    /*   USAGE_PAGE (LED)              */
     0x19, 0x4b,    /*   USAGE_MINIMUM (Generic Indicator)     */
     0x29, 0x4d,    /*   USAGE_MAXIMUM (Generic Indicator)     */
     0x15, 0x00,    /*   LOGICAL_MINIMUM (0)           */
     0x25, 0x01,    /*   LOGICAL_MAXIMUM (1)           */
     0x95, 0x03,    /*   REPORT_COUNT (3)              */
     0x75, 0x01,    /*   REPORT_SIZE (1)               */
     0x91, 0x02,    /*   OUTPUT (Data,Var,Abs)         */
     0x95, 0x01,    /*   REPORT_COUNT (1)              */
     0x75, 0x05,    /*   REPORT_SIZE (5)               */
     0x91, 0x03,    /*   OUTPUT (Const)                */
   0xc0,            //   End Collection (Logical)


Grüße,
Stefan

[toc] | [prev] | [next] | [standalone]


#234743

FromJohannes Bauer <dfnsonfsduifb@gmx.de>
Date2017-10-30 12:48 +0100
Message-ID<ot73ic$cvg$1@news.albasani.net>
In reply to#234742
Hi Stefan,

On 30.10.2017 11:28, Stefan Wiest wrote:

> Für Windows ist die Definition des OUT reports notwendig und eigentlich
> auch ganz einfach. ein Beispiel für 3 LEDs und 5 Dummy-Bits damit das
> Byte voll wird:
> 
> 0xa1, 0x02,        /*   Collection (Logical)  */
>     0x85, 0x04,    /*     Report ID (LED Data Report) */
>     0x05, 0x08,    /*   USAGE_PAGE (LED)              */
>     0x19, 0x4b,    /*   USAGE_MINIMUM (Generic Indicator)     */
>     0x29, 0x4d,    /*   USAGE_MAXIMUM (Generic Indicator)     */
>     0x15, 0x00,    /*   LOGICAL_MINIMUM (0)           */
>     0x25, 0x01,    /*   LOGICAL_MAXIMUM (1)           */
>     0x95, 0x03,    /*   REPORT_COUNT (3)              */
>     0x75, 0x01,    /*   REPORT_SIZE (1)               */
>     0x91, 0x02,    /*   OUTPUT (Data,Var,Abs)         */
>     0x95, 0x01,    /*   REPORT_COUNT (1)              */
>     0x75, 0x05,    /*   REPORT_SIZE (5)               */
>     0x91, 0x03,    /*   OUTPUT (Const)                */
>   0xc0,            //   End Collection (Logical)

Perfekt! Vielen lieben Dank, jetzt hab ich's kapiert.

Dann man ans Implementieren, yippey! :-)

Viele Grüße,
Johannes

-- 
>> Wo hattest Du das Beben nochmal GENAU vorhergesagt?
> Zumindest nicht öffentlich!
Ah, der neueste und bis heute genialste Streich unsere großen
Kosmologen: Die Geheim-Vorhersage.
 - Karl Kaos über Rüdiger Thomas in dsa <hidbv3$om2$1@speranza.aioe.org>

[toc] | [prev] | [standalone]


Back to top | Article view | de.sci.electronics


csiph-web