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