LinkedIn YouTube Facebook
Szukaj

Wstecz
SoM / SBC

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'

Łukasz Skalski - absolwent Politechniki Gdańskiej, miłośnik FLOSS, autor książki "Linux. Podstawy i aplikacje dla systemów embedded" oraz szeregu artykułów dotyczących programowania systemów wbudowanych. Zawodowo związany z firmą Samsung. Wszystkie wolne chwile poświęca projektowaniu i programowaniu urządzeń wyposażonych w mikroprocesory 8-/16- i 32-bitowe. Szczególnym zainteresowaniem obejmuje tematykę systemu Linux w aplikacjach na urządzenia embedded.
Tagi: projekt, SOM