HID deskriptor - jak precist?

Pavel Kankovsky peak na argo.troja.mff.cuni.cz
Sobota Leden 11 21:19:15 CET 2020


On Sat, 6 May 2017, Jan Kasprzak wrote:

> 	Jednalo se o sestikanalovy joystick, ktery mel kanaly oznacene X, 
> Y, Z, Rx, Ry, Rz, minimalni hodnota 0, maximalni hodnota 255. Pak jsem 
> to chtel vylepsit o to, ze ja mam zdroj dat s vetsim rozlisenim nez 8 
> bitu (radove 10-11 bitu). Tak jsem zkusil nechat minimalni hodnotu 0 a 
> maximum jsem dal na 2048. Musel jsem zvetsit maximalni velikost packetu, 
> aby to nehlasilo tuto chybu:
>
> [951127.597263] usb 3-11: input irq status -75 received

Náhodou jsem zkoumal problém s jedním starým konvertorem gameportu na USB, 
který fungoval jen napůl a někdy produkoval tyto chyby, a našel jsem tuto 
zprávu... i když hodně starou a možná je už zbytečné odpovídat, ale 
stejně to zkusím.

> Mam snahu posilat na kazdy ze sesti kanalu dva bajty, nicmene mi to
> nefunguje. Linuxova aplikace vidi na joysticku pohyb pouze prvnich ctyr
> kanalu. Kdyz to vratim zpet do 8-bitovych dat, funguje vsech sest.
>
> 	Tusite nekdo kam se jeste podivat, pripadne co dalsiho
> v HID deskriptoru nebo nekde upravit? Pripadne - nemate nekdo joystick
> s vetsim rozlisenim nez 256 hodnot na kanal, ze byste mi poslali
> jeho HID deskriptor?

*Možná* je problém v tom, že joystick je typicky low speed zařízení a to 
nesmí posílat větší než osmibajtové pakety. (A to je asi právě problém 
s tím mým konvertorem: nějaká trubka to naprogramovala tak, že posílá pakety 
devítibajtové a na nějakých kombinacích hardwaru a OS to funguje, na 
jiných už nikoli.)

Pokud mám šest os a každá bude mít 2 bajty, tak mám dohromady 12 bajtů. 
Možná se ty 4 bajty odpovídající 5. a 6. ose, které jsou nad 8 bajtů, 
někde ztrácejí.

Nemám přímo příklad z vlastní zkušenosti, ale "report size" je v bitech a 
asi to nemusí být nějak přímo zarovnané na bajty. Možná by prostě stačilo 
místo 16 bitů na osu dát jen 10 bitů, jako je to např. u myši (Logitech 
MX510) na konci této stránky, která má 12-bitové X a Y:

<https://github.com/tmk/tmk_keyboard/wiki/USB:-HID-Report-Descriptor>

Takže by to bylo 6 krát 10 bitů = 60 bitů, plus 4 bity vycpávka a bylo by 
to rovných osm bajtů.

-- 
Pavel Kankovsky aka Peak                      "Que sçay-je?"


Další informace o konferenci Linux