Emulator konsoli NES w systemie Linux na komputerze SoMLabs VisonSOM
Konfiguracja kontrolera Sony DualShock 3/4 w jądrze Linux
Czytelnicy którzy dobrze pamiętają czasy świetności konsoli NES, dość szybko zauważą, że wykorzystanie standardowej klawiatury komputerowej nie pozwala na pełne oddanie „magii” i grywalności tego systemu. Pośrednim rozwiązaniem problemu (w stosunku do zakupu i przystosowania oryginalnego kontrolera Famicon/NES) może być wykorzystanie kontrolera od innych, współczesnych konsol, np. Sony Playstation lub Xbox. Jądro systemu Linux zapewnia pełne wsparcie dla urządzeń Sony DualShock 3 (od jądra w wersji 3.15) oraz DualShock 4 (od jądra w wersji 3.15 dla pierwszej generacji kontrolera oraz od wersji 4.10 dla drugiej generacji). Wsparcie po stronie jądra systemu wyklucza zatem konieczność samodzielnej programowej implementacji obsługi kontrolera, a całość konfiguracji ogranicza się do włączenia odpowiednich opcji jądra z wykorzystaniem polecenia: make arch=ARM menuconfig:
Device Drivers ---> Input device support ---> <*> Joystick interface <*> Event interface HID support ---> [*] Battery level reporting for HID devices [*] /dev/hidraw raw HID device support <*> Generic HID driver Special HID drivers ---> <*> Sony PS2/3/4 accessories [*] Sony PS2/3/4 accessories force feedback support USB HID support ---> <*> USB HID transport layer [*] LED Support ---> <*> LED Class Support
W stosunku do domyślnej konfiguracji jądra systemu dostarczanej przez producenta płytki, warto również wyłączyć opcję debugowania interfejsu zdarzeń (Event debugging) – w przeciwnym razie wszystkie zdarzenia z podsystemu wejścia będą rejestrowane, co niepotrzebnie obciąży urządzenie, jak i również zmniejszy bezpieczeństwo całego systemu (hasła wpisywane przez użytkownika również będą rejestrowane):
Device Drivers ---> Input device support ---> <*> Event debugging
Po ponownej kompilacji jądra systemu poleceniem make zImage, aktualizacji plików na karcie SD (obrazu jądra w katalogu /boot) i podłączeniu kontrolera DualShock do portu USB, w buforze komunikatów jądra zostaną wyświetlone informacje o poprawnym wykryciu urządzenia:
root@somlabs:~# dmesg <...> usb 1-1: new full-speed USB device number 2 using ci_hdrc input: Sony PLAYSTATION(R)3 Controller as /devices/platform/soc/2100000.aips-bus/2184000.usb/ci_hdrc.0/usb1/1-1/1-1:1.0/0003:054C:0268.0004/input/input5 sony 0003:054C:0268.0004: input,hidraw3: USB HID v1.11 Joystick [Sony PLAYSTATION(R)3 Controller] on usb-ci_hdrc.0-1/input0
W lokalizacji /dev/input zostanie również utworzony wpis jsX, reprezentujący podłączony do systemu kontroler:
root@somlabs:~# ls -l /dev/input/ total 0 drwxr-xr-x 2 root root 160 Feb 23 10:24 by-id drwxr-xr-x 2 root root 200 Feb 23 10:24 by-path crw-rw---- 1 root input 13, 64 Feb 23 10:24 event0 crw-rw---- 1 root input 13, 65 Feb 23 10:24 event1 crw-rw-r-- 1 root input 13, 0 Feb 23 10:24 js0 crw-rw---- 1 root input 13, 63 Feb 23 10:24 mice crw-rw---- 1 root input 13, 32 Feb 23 10:24 mouse0
W przypadku połączenia USB należy upewnić się, że układ zasilania komputera jednopłytkowego jest w stanie dostarczyć do podłączonego urządzenia odpowiedni zapas mocy (w przypadku modułów VisionSOM podłączonych do płyty bazowej VisionCB-STD, zaleca się wykorzystanie dedykowanego zasilacza – wykorzystanie wyłącznie złącza z oznaczeniem „Linux Console + PWR-C” może okazać się niewystarczające). Alternatywną możliwością zestawienia połączenia pomiędzy kontrolerem a komputerem jednopłytkowym jest wykorzystanie łączności Bluetooth oraz stosu BlueZ.
Po poprawnym wykryciu podłączonego kontrolera DualShock, można przystąpić do konfiguracji klawiszy w sposób analogiczny jak miało to miejsce w przypadku standardowej klawiatury: Fceux→Options→Gamepad Config. Warto również wspomnieć, że sterownik kontrolera udostępnia również w przestrzeni użytkownika dodatkowe informacje o stanie naładowania baterii. Prostszą z opcji sprawdzenia stanu naładowanie kontrolera jest wykorzystanie interfejsu sysfs:
root@somlabs:~# cd /sys/class/power_supply/ root@somlabs:/sys/class/power_supply# ls -l total 0 lrwxrwxrwx 1 root root 0 Feb 23 12:04 sony_controller_battery_04:98:f3:95:a9:5a root@somlabs:/sys/class/power_supply# cat sony_controller_battery_04\:98\:f3\:95\:a9\:5a/capacity 100
Dla kontrolera DualShock 3 poziom naładowania jest raportowany w kroku 25% (100%, 75%, 50%, 25% → co odpowiada czterem poziomom naładowania wyświetlanym w interfejsie konsoli Playstation3), natomiast dla DualShock 4 wartość kroku pomiaru wynosi 10%. Alternatywną formą sprawdzenia stanu baterii jest wykorzystanie narzędzia upower, wówczas w pierwszej kolejności należy wyświetlić listę urządzeń udostępniających statystki:
root@somlabs:~# upower -e /org/freedesktop/UPower/devices/keyboard_sony_controller_battery_04o98of3o95oa9o5a /org/freedesktop/UPower/devices/DisplayDevice
A następnie, określając ścieżkę urządzenia, wyświetlić jego aktualne statystyki:
root@somlabs:~# upower -i /org/freedesktop/UPower/devices/keyboard_sony_controller_battery_04o98of3o95oa9o5a native-path: sony_controller_battery_04:98:f3:95:a9:5a power supply: no updated: Fri Feb 23 10:41:24 2018 (29 seconds ago) has history: yes has statistics: yes keyboard present: yes rechargeable: yes state: fully-charged warning-level: none percentage: 100% icon-name: 'battery-full-charged-symbolic'