středa 2. května 2018

Wii Motion ovladač jako joystick v Linuxu


Dnes jsem zkoušel použít Wii Motion ovladač od zaprášeného Nintendo Wii jako joystick v Linuxu. Postup není triviální a zatím ani nevede k úplnému úspěchu, takže následující řádky jsou jen mým povzdechnutím dokumentujícím, kudy jsem šel a kam jsem se to (zatím) dostal:

1) Wii Motion ovladač komunikuje s Wii přes bluetooth, takže jde spárovat i s PC (pokud má BT, což třeba většina notebooků má). Chvilku mi trvalo to naklikat, ale nakonec se to povedlo. Od té chvíle začne zlobit kurzor myši, protože Xorg použije nově vytvořené HID zařízení a tak Wii Motion začne nějak divně ovládat i myš (stejně jako tlačítka na ovladači fungují jako klávesy či tlačítka myši).

2) po instalaci debian balíčku xwiimote a následném odhlášení a přihlášení zpět se uklidní pracovní prostředí, protože do /usr/share/X11/xorg.conf.d/ přibyde 50-xorg-fix-xwiimote.conf, který říká, aby byl Nintendo ovladač jako vstupní zařízení ignorován. V tu chvíli už také existuje /dev/input/js0 - tedy zařízení reprezentující v systému joystick, ale má pouze 7 tlačítek, žádné páky. Ani nefungují tlačítka na směrovém kříži, takže je toto joystickové zařízení k ničemu.

3) pak si z githubu může člověk stáhnout projekt wiimote-pad, který po kompilaci a spuštění pod rootem vytvoří nové joystickové zařízení /dev/input/js1, které už má 11 tlačítek a dva analogové směry. Jako směry se používá akcelerometr (takže nakláněním ovladače), a 4 nová tlačítka už zahrnují směrový kříž. Stačí si nainstalovat aplikaci jstest (jstest-gtk) a vyzkoušet si to.

V tuto chvíli už se dá Wii Motion ovladač použít jako analogový joystick se spoustou tlačítek. To mi ale nestačilo, chyběly mi hned tři věci:

1) chtěl bych směrový kříž mít jako pákový ovladač, abych mohl hrát hry, které čekají pákový ovladač, normálně těmi tlačítky, bez přemapovávání na klávesy.

2) chtěl bych mít podporovaný i nunchuck - ten tam teď vůbec není vidět, ačkoliv je připojen.

3) toto nové zařízení není rozpoznáno SDL knihovnou. Prostě ten joystick nevidí, takže je všechno stejně v háji. Netuším, čím je to virtuální zařízení js1 divné, že ho SDL nevidí.

Když se člověk pořádně rozhlédne po Githubu, zjistí, že wiimote-pad má hned tři forky, z nichž jeden implementuje směrový kříž jako ovladač, a druhý fork pak podporuje Wii nunchuck. Takže první dva body z mého seznamu by se daly vyřešit!

To by bylo super, kdyby to ovšem šlo zkompilovat. Chybí ale deklarace některých konstant. Při bližším zkoumání člověk zjistí, že Debianní /usr/include/xwiimote.h není úplně aktuální, přestože se projekt nevyvíjí už od roku 2013. Do Debianu se dostala verze 2.3 (z léta 2013), ovšem těsně poté (v srpnu) původní autor ještě komitnul na Githubu pár drobných, ale klíčových změn.

Takže by to chtělo nejdřív aktualizovat knihovnu/balíček libxwiimote-dev. Ovšem odkud? Projekt xwiimote má na Githubu 22 forků, z nichž některé obsahují mnoho užitečných změn přidávaných po další 4 roky. Nikdo z těchto autorů se už ale nesnažil to nějak spojit s ostatními...

Tudíž by to chtělo zjistit, kdo co přidal do xwiimote ve svých forcích, poslepovat z toho nějakou nejlepší verzi, tu dostat do Debianu nebo nějak polo-oficiálně vydat, na základě toho pak nějak dát dohromady wiimote-pad slepením vylepšení z těch tří forků, to ještě nejspíš upravit tak, aby mi to vyhovovalo, a pak i toto slepeniště nějak vydat pro další lidi, kterým by se to mohlo hodit.

Jo a samozřejmě je nutné nějak opravit to virtuální zařízení js1, aby fungovalo v SDL. A pak nějak vymyslet, jak zamaskovat zařízení js0, které v tu chvíli už není potřeba a jen tam zavazí (bude se vnucovat do všech programů jako první joystick ze dvou).

Docela dost práce, na kterou teď nemám čas, tak jsem si aspoň zapsal postup cesty sem a třeba se někdy vydám dál tím správným směrem...

P.S. teď mě napadá, že správně by se měl opravit ovladač přímo v Xorg, aby už to prvotní zařízení js0 fungovalo rovnou správně a nemuselo se nic dalšími programy napravovat. Hmmm, no to je ještě větší oříšek - to než bych zvládl, tak by Xorg zmizel v propadlišti dějin (kam má už teď díky Waylandu slušně nakročeno - ve Fedoře už ani není, a v novém Ubuntu 18.04 měl štěstí jen o vlásek).

Žádné komentáře:

Okomentovat