rpi4mame

System

Ce billet présente l'installation des logiciels MAME et Attract Mode sur une mini borde d'arcade Picade. La carte mère utilisée sur la borne est une Raspberry Pi 5 et le système installé sur la carte est le Raspberry Pi OS dans sa version Lite sans Bureau. LA dernière version de ce système est téléchargeable ici.

Installation du système.

La borne d'arcade doit être entièrement montée et toutes les connexions faites, Joystick, bouton, haut-parleur et écran.

Lors de l'installation du système, la Pi 5 doit être alimentée directement et non par le Picade X Hat.

L'installation du système Pi OS Lite passe par la procédure standard proposée par Raspberry en qui utilise le Pi Imager. Je recommande l'activation du Wi-Fi et de SSH avec le Pi Imager qui permettra ainsi de se connecter directement au système à distance avec SSH.

Une fois le système installé et mis à jour, il faut procéder à l'installation des utilitaires et librairies nécessaires à l'installation et au fonctionnement de tous les logiciels.

Installation des utilitaires.

La plupart des logiciels qu'il faudra compiler devront être téléchargés depuis leur dépôt GitHub ou GitLab. Il faut donc installer git.

sudo apt install git

Installation de la carte Picade X Hat.

Afin de fonctionner, la borne Picade utilise un joystick, des boutons, un haut parleur et un écran dédié qui doivent être connectés au Pi 5. Pimoroni a conçu pour cela le Picade X Hat qui se connecte aux ports GPIO du Pi 5. Le joystick, le boutons et le haut-parleur se connectent sur cette carte. L'écran se connecte directement sur le premier port HDMI situé à côté de la prise d'alimentation du Pi 5.

Pimoroni a développé une version spécifique du pilote de la Picade X Hat pour le Pi 5. Mais il faut le télécharger, le compiler, l'installer et l'activer.

Le téléchargement, la compilation et l'installation se font avec les commande suivantes.

git clone https://github.com/pimoroni/picade-hat -b feature/pi5
cd picade-hat
make
sudo make install

La commande make génère le fichier Device Tree Blob Overlay (DTBO) à partir du fichier Device Tree Source (DTS) en utilisation la commande Device Tree Compiler (DTC).

dtc -I dts -O dtb -o picade.dtbo picade.dts

La commande install copie le fichier dtbo dans le répertoire des configurations matériel.

cp picade.dtbo /boot/firmware/overlays/

Il faut ensuite indiquer au noyau Linux du Raspberry de charger cette configuration matérielle en éditant le fichier de configuration du système.

sudo nano /boot/firmware/config.txt

Il faut ajouter le chargement de l'overlay dans la section [ALL] du fichier.

...
[all]
dtoverlay=picade
...

Une fois le système redémarré, vous pouvez contrôler que l'utilsiation du joystick et des boutons sont bien pris en compte.

thd --dump /dev/input/event*

En appuyant sur le premier bouton vous obtiendrez

EV_KEY  KEY_LEFTCTRL    1       /dev/input/event0
# KEY_LEFTCTRL  1       command
EV_KEY  KEY_LEFTCTRL    0       /dev/input/event0
# KEY_LEFTCTRL  0       command

En mettant le joystick vers le haut puis en le relachant

EV_KEY  KEY_UP  1       /dev/input/event0
# KEY_UP        1       command
EV_KEY  KEY_UP  0       /dev/input/event0
# KEY_UP        0       command

Dans ce cas on peut voire que les évènements sont rattchés à input0.

En listant les matériels on peut connaitre quel est est l'input qui gère les GPIO.

ls -l /dev/input/by-path
lrwxrwxrwx 1 root root 9 Oct 12 20:43 platform-107c701400.hdmi-event -> ../event4
lrwxrwxrwx 1 root root 9 Oct 12 20:43 platform-107c706400.hdmi-event -> ../event6
lrwxrwxrwx 1 root root 9 Oct 12 20:43 platform-gpio_keys-event -> ../event0
lrwxrwxrwx 1 root root 9 Oct 12 20:43 platform-pwr_button-event -> ../event1
lrwxrwxrwx 1 root root 9 Oct 12 20:43 platform-xhci-hcd.1-usb-0:2.1:1.0-event-kbd -> ../event2
lrwxrwxrwx 1 root root 9 Oct 12 20:43 platform-xhci-hcd.1-usb-0:2.1:1.1-event -> ../event3

On peut voir dans ce cas que les gpio sont gérés par event0.

Par défaut, le fichier dts assigne les actions du joystick et des boutons au GPIO et évènements du clavier suivants:

Action Code Clavier GPIO Touche clavier
Up 103 12 Flèche haut
Down 108 6 Flèche bas
Left 105 20 Flèche gauche
Right 106 16 Flèche droite
Button 1 29 5 Contrôle gauche
Button 2 56 11 Alt
Button 3 57 8 Espace
Button 4 42 25 Majuscule
Button 5 44 9 Z
Button 6 45 10 X
Enter 28 27 Entrée
Escape 1 22 Éhappement
Start 23 23 5
Coin 24 24 1
Power 116 17 Power

La liste de brochage du GPIO pour le Picade X Hat est consultable ici.

La correspondance entre les touches du clavier et les codes envoyés est consultable ici

Si vous décidez d'alimenter le Pi 5 via le HAT, il ne pourra pas détecter l'alimentation officielle du Pi 5 et savoir qu'elle peut délivrer 5 ampères et l'indiquer au système. Il indiquera donc au système que vous avez une alimentation de 3A et le Pi 5 réagira en coséquence. L'écran du Picade scintillera mais n'afficera rien. Pour régler ce problème, il faut indiquer au système que vous avez une capacité de 5,0 ampères en éditant de le fichier de configuratin du système.

sudo nano /boot/firmware/config.txt

Il faut y ajouter l'option qui indique que l'on peut recevoir plus de 3A dans la section [ALL] du fichier.

...
usb_max_current_enable=1
...

Il faut ensuite indiquer que votre alimentation délivre bien 5 ampères en modifiant le fichier de configuration de l'eeprom.

sudo rpi-eeprom-config --edit

Il faut y ajouter le paramètre PSU_MAX_CURRENT (PSU=Powser Supply Unit) et indiquer que votre alimentation délivre 5000 milliampères soit 5 ampères.

...
PSU_MAX_CURRENT=5000
...

Gestion du son.

Par défaut avec le système Pi OS Lite installé sur un Raspberry Pi 5, la carte son fonctionne mais ne dispose d'aucun système de Contrôle. il est impossible, par exemple, de définir le niveau du contrôle sonor avec alsamixer.

Pour régler le problème il faut configurer Alsa (Advanced Linux Sound Architecture) en créant un fichier de configuration.

Le fichier de configuration asound.conf est livré dans le repo Git du Picade X Hat pour Raspberry Pi 5. Il faut juste le copier à partir du répertoire où il a été cloné.

sudo cp ~/picade-hat/etc/asound.conf /etc/

Il faut ensuite redémarrer la Picade et tester que le son fonctionne. Ce test est très important car il va initialiser le système Alsa.

speaker-test -c 1 -t wav

une fois que le test a été réalisé avec succès, alsamixer fonctionne bien et il est possible de contrôler le volume du son.

alsamixer

alsamixer

Contrôle du volume sonore de la Picade.

La Picade ne dispose de bouton dédié au contrôle du niveau sonore. il faut donc gérer ce contrôle à partir des autres boutons et en exécutant des lignes de commande.

L'utilitaire amixer permet de contrôller le niveau sonor par ligne de commande. l'application alsamixer indique que le qu'il n'y a qu'un seul controlleur de son et que son nom est PCM.

Pour augmenter le volume du son de 5% il faut alors exécuter la cammande.

amixer set PCM 5%+

Pour diminuer le volume du son de 5% il faut exécuter la cammande.

amixer set PCM 5%-

Afin d'exécuter ces commandes de contrôle du son à partir du joystick ou des boutons de la Picade, il faut déjà déterminer la combination que l'on souhaite utiliser pour augmenter ou diminuer le volume du son. J'ai choisi pour augmenter le niveau "Joystick haut + Bouton 6" et pour le baisser "Joystick bas + Bouton 6".

Avec la commande thd on identifie les codes clavier associés à ces actions.

Action Code claiver
Joystick haut KEY_UP
Joystick bas KEY_DOWN
Bouton 6 KEY_X

L'association de l'action à la commande se fait avec l'outil triggerhappy.

sudo apt install triggerhappy

On ajoute ensuite un fichier de configuration à triggerhappy.

sudo nano /etc/triggerhappy/triggers.d/audio.conf
KEY_UP+KEY_X     1      /usr/bin/amixer set PCM 5%+
KEY_DOWN+KEY_X   1      /usr/bin/amixer set PCM 5%-

On édite ensuite le service triggerhappy.

sudo systemctl edit triggerhappy.service --force --full

Et on modifie l'identifiant de l'utilisateur qui va exécuter la commande exécutée par le service par pi.

[Unit]
Description=triggerhappy global hotkey daemon
After=local-fs.target

[Service]
Type=notify
ExecStart=/usr/sbin/thd --triggers /etc/triggerhappy/triggers.d/ --socket /run/thd.socket --user pi --deviceglob /dev/input/event*

[Install]
WantedBy=multi-user.target

Il faut enfin redémarrer le service.

sudo systemctl restart triggerhappy.service

On peut alors vérifier que le contrôle du volume se fait bien en relançant alsamixer et en exécutant la combinaison Joystick plus boutton. Vous verrez alors le niveau sonore monter et descendre.

Démarrage silencieux

Lors du démarrage d'un Raspberry, de nombreux messages et informations s'affichent sur l'écran avant que le système n'affiche le prompt de la ligne de commande.

La suppression d'une grande partie de ces informations et de ces messages se fait en modifiant les paramètres de démarrage du noyau du fichier cmdline.txt.

sudo nano /boot/firmware/cmdline.txt

Rajouter à la fin de la ligne de commande les paramètres

... logo.nologo quiet vt.global_cursor_default=0
  • logo.nologo supprime l'affichage des "framboises" en haut de l'écran.
  • quiet supprime les messages liées au démarrages des services.
  • vt.global_cursor_default=0 Supprime le clignotement du curseur du prompt de la ligne de commande.

La suppression du message d'acceuil se fait en ajout le fichier en ajoutant le fichier 'hushlogin`à la racine du dossier utilisateur.

touch ~/.hushlogin

Login automatique

une fois la phase de démarrage d'un Raspberry terminé, le système vous demandera un compte d'authentification et son mot de passe. Pour que le système se connecte automatiquement au compte choisi il faut modifier le fichier de configuration du terminal.

sudo systemctl edit getty@.service

Cette commande crée automatiquement un fichier de remplacement de la configuration du service getty à l'emplacement:

/etc/systemd/system/getty@.service.d/override.conf

Ce fichier commence avec les lignes suivantes :

### Editing /etc/systemd/system/getty@.service.d/override.conf
### Anything between here and the comment below will become the new contents of the file

### Lines below this comment will be discarded
...

Il faut ajouter dans l'espace réservé les lignes suivantes.

[Service]
ExecStart=
    ExecStart=-/usr/sbin/agetty --skip-login --nonewline --noissue --autologin pi --noclear %I $TERM

Previous Post Next Post