Aller au contenu

Ta console

Romule parle à une console portable Android par adb. Il a été construit face à une AYN Thor sous l'émulateur Eden, mais l'appareil et l'émulateur sont des profils, pas des chemins écrits en dur.

Appairage en Wi-Fi

L'assistant de premier démarrage demande d'abord comment la console est reliée — avec ou sans câble — et ne montre que le chemin correspondant. Les réglages contiennent le même assistant pas à pas. En résumé :

  1. Sur la console — Paramètres → Système → Options pour les développeurs → Débogage sans fil, à activer. Pas d'options développeur ? Paramètres → À propos du téléphone, touche Numéro de build sept fois.
  2. Sur la console — dans l'écran de débogage sans fil, touche Associer l'appareil à l'aide d'un code. Laisse la fenêtre ouverte : le code expire quand elle se ferme. Elle affiche un code à six chiffres et une adresse du type 192.168.1.42:37105.
  3. Dans Romule — saisis cette adresse et ce code, puis valide l'appairage. Romule se connecte ensuite tout seul, en commençant par cette adresse-là : sur beaucoup d'appareils, le port d'appairage et le port de connexion sont le même. Si ce n'est pas le cas, il essaie un lien laissé par une session précédente, ce que les consoles annoncent en mDNS, puis le port 5555.
  4. Sur la console (seulement si aucune piste n'a abouti) — ferme la fenêtre du code. L'écran de débogage sans fil affiche derrière elle sa propre ligne « Adresse IP et port », et ce n'est pas la même : le port d'appairage ne sert qu'une fois. Recopie celle-là dans Romule, puis Connecter la console.

Une fois connectée, la console est reconnue toute seule ensuite.

Une fois la connexion faite, le panneau ne demande plus rien : il montre ce que la console a répondu — son nom, son adresse, sa version d'Android, son niveau de batterie, depuis combien de temps le lien tient. Ces informations ne peuvent pas s'afficher si la console n'a pas répondu, ce qui les rend plus utiles qu'un simple « connectée ».

Sous Docker, l'étape 4 est la règle

La console annonce son port de connexion en mDNS, et le multicast ne traverse pas le pont Docker. Depuis un conteneur, Romule ne peut donc pas le deviner : il faut le lire sur l'écran de la console. Sur une installation directe, la découverte marche et l'étape 4 ne s'affiche presque jamais.

Pourquoi deux ports ?

Le débogage sans fil d'Android expose deux services, chacun sur son propre port tiré au hasard :

  • _adb-tls-pairing n'existe que pendant que la fenêtre du code est affichée. Il sert à échanger un certificat TLS, vérifié par le code à six chiffres, puis il se ferme ;
  • _adb-tls-connect est le démon adb lui-même. Il reste ouvert tant que le débogage sans fil l'est, et n'accepte que les certificats obtenus à l'appairage.

Les deux ports viennent de la même réserve éphémère et sont attribués à quelques instants d'intervalle : ils sont donc souvent voisins, ce dont Romule se sert pour retrouver le second sans le demander.

Deux adresses, deux ports

C'est le point où l'on se trompe. La fenêtre du code donne un port d'appairage, jetable ; l'écran de débogage sans fil en donne un autre, celui de la connexion. Saisir le premier à l'étape 4 échoue sans rien expliquer.

Le Wi-Fi est plus lent

Deux à cinq fois plus lent que l'USB sur les gros transferts. Sans importance pour quelques jeux, très sensible pour une ludothèque entière.

Quand les noms de dossiers ne disent rien

Reconnaître gba ou PS1 marche sur une console qui les nomme ainsi, et ne trouve rien du tout sur une console qui range sous Nintendo - Game Boy Advance ou psx-eur. Romule regarde donc aussi le contenu : un dossier qui contient des fichiers de jeu EST un dossier de plateforme, quel que soit son nom.

Trouver la racine ne demande pas de savoir laquelle — ce qui tombe bien, puisque .cue et .iso sont revendiqués par toutes les consoles à disque à la fois.

Et si rien de tout cela n'aboutit, l'assistant comme les réglages laissent naviguer sur la console pour désigner le dossier à la main.

USB

Branche la console, débogage activé, et appuie sur Détecter. Sous Docker, l'USB demande devices: - /dev/bus/usb:/dev/bus/usb et Linux — voir Installation.

Le dossier des jeux

Romule le détecte, et l'affiche une fois connecté :

/storage/emulated/0/Switch

Change-le dans Réglages → Ta console si ton émulateur range les jeux ailleurs.

Le Dossier des ROMs — le parent de toutes les autres plateformes, chacune dans son sous-dossier — est cherché de la même façon, en reconnaissant les noms de dossiers : gba, snes, mais aussi PS1 pour la PlayStation ou Sega pour la Mega Drive. Le dossier retenu est celui qui en contient le plus, et il en faut au moins deux : un dossier Wii isolé ne prouve rien.

C'est ce qui évite d'avoir à taper le chemin. Le déduire du dossier Switch — son parent — n'était juste que sur les consoles rangeant tout côte à côte ; ailleurs, toutes les plateformes comptaient zéro et le sélecteur de la bibliothèque n'affichait plus leurs nombres.

Une plateforme que Romule ne connaît pas

Vingt-trois plateformes sont reconnues d'origine, et la liste n'est pas une limite. Réglages → Ta console → Ajouter une plateforme… demande trois choses :

Champ Exemple À quoi il sert
Nom affiché Neo Geo Ce que tu verras dans le sélecteur de plateformes
Dossier sur la console NeoGeo Un sous-dossier du dossier des ROMs ci-dessus
Extensions zip, neo Ce qui compte comme un jeu pour cette plateforme

Cela suffit pour que la plateforme soit analysée, filtrée, comptée et envoyée comme les autres. C'est aussi la réponse quand une console est connue mais que tu la ranges dans un dossier que Romule ne devinerait pas : déclare-la sous le nom que tu emploies réellement.

Les plateformes ajoutées sont rangées sous systemes_perso dans le fichier de réglages, et suivent tes sauvegardes.

Ce que cela ne fait pas

Déclarer une plateforme n'apprend pas à Romule à lire l'intérieur de ses fichiers. La Switch est la seule qu'il ouvre : les title ID, les liens base/mise à jour/DLC et les mises à jour manquantes viennent de l'analyse du conteneur. Toute autre plateforme — livrée ou ajoutée — est identifiée par son dossier et son extension.

Rangement sur la console

Les fichiers Switch sont triés en GAMES, UPDATE et DLC. Le type vient du contenu du fichier quand Romule sait le lire, pas de son nom — un nom ment assez souvent : un title ID tronqué, absent, ou un fichier qui annonce un jeu de base alors qu'il s'agit d'une mise à jour.

Ce qui s'y trouve déjà

Lister les jeux de la console rapporte ce qu'elle contient et combien manquent à ta ludothèque, pour ne pas réimporter ce qui est déjà là.

Adb n'est pas installé

Romule le dit et donne la commande pour ta plateforme. Rien d'autre ne cesse de fonctionner : la bibliothèque, les jaquettes et l'inventaire n'ont pas besoin d'une console.