Référence
- Plan du Sommaire
- Les touches
- Disposition de l'écran
- La ligne de commande USB
- Format des relevés d'écran
- Les outils
- Les fichiers de l'appareil
Plan du Sommaire
Tapez le numéro, puis Envoi. Sommaire y ramène de partout.
| N° | Page | À l'intérieur |
|---|---|---|
| 1 | Conversations | numéro : ouvrir ; L : tout marquer lu. Dans une conversation, Envoi sur une ligne vide ouvre la page Actions |
| 2 | Dernières nouvelles | numéro : ouvrir la conversation |
| 3 | Contacts et stations entendues | E entendues, C contacts, P proches, N ajouter par clé, S ajouter un salon, A annonce ; numéro : fiche |
| 4 | Réglages et identité | voir ci-dessous |
| 5 | Envoyer une annonce | 1 locale (zéro saut), 2 tout le réseau (confirmée) |
| 6 | Date et heure | 1 régler l'heure locale, 2 envoyer sans heure, 3 fuseau horaire |
| 7 | Page d'accueil 3615 MESHCORE | n'importe quelle touche en sort |
| 8 | Graphiques | 1 à 9, voir Graphiques |
Fiche contact
| N° | Action | N° | Action |
|---|---|---|---|
| 1 | écrire, ou ouvrir le salon | 7 | administration (relais, salon, capteur) |
| 2 | ajouter une station entendue | 8 | partager le contact |
| 3 | se connecter à un salon | 9 | supprimer le contact |
| 4 | oublier le mot de passe du salon | 10 | favori oui / non |
| 5 | oublier le chemin | 11 | permissions de télémesure (B, P, C) |
| 6 | tracer le chemin |
Réglages (Sommaire 4)
| N° | Réglage | N° | Réglage |
|---|---|---|---|
| 1 | Nom du nœud | 9 | Sonnerie à l'arrivée des messages |
| 2 | Position (48.8566 2.3522, 0 0 pour aucune) | 10 | 40 / 80 colonnes |
| 3 | Date et heure | 11 | État et statistiques |
| 4 | Canaux : H canal hashtag, P canal privé ; numéro : fiche du canal | 12 | Réponses rapides |
| 5 | Région par défaut | 13 | Mon identité |
| 6 | Régions automatiques (D département, T tout appliquer) | 14 | Accents composés : *, # ou rien |
| 7 | Ajout automatique des contacts, et permissions de télémesure (entrées 8 à 10) | 15 | Bluetooth et alimentation |
| 8 | Répétition par le client, oui / non |
Les touches
| Touche | Effet |
|---|---|
| Sommaire | Le menu principal, de partout (ferme toute question) |
| Envoi | Valider : un numéro de menu, un message, une réponse. Sur une ligne vide dans une conversation : la page Actions |
| Retour | Page précédente ; dans un historique, les messages plus anciens ; quitter une fiche |
| Suite | Page suivante ; dans un historique, les plus récents ; depuis le Sommaire, la prochaine conversation non lue |
| Correction | Effacer le dernier caractère |
| Annulation | Vider la ligne de saisie |
| Guide | Une fois : la ligne d'aide de la page. Deux fois : l'écran Guide (la page, ses touches, la saisie des accents dans ce mode) |
| Répétition | Passer de 40 à 80 colonnes et inversement, sur toutes les pages ; le choix est enregistré, comme Réglages 10 (dans la console à distance : rappeler une commande) |
| Connexion/Fin | Revenir en arrière : conversation → liste → Sommaire |
| ↑ ↓ | Dans une conversation, choisir un message |
Disposition de l'écran
| Rangée | Contenu |
|---|---|
| 1 | Ligne de service en vidéo inverse : 3615 MESHCORE, titre de la page (80 colonnes), nombre de non-lus (clignotant), état du Bluetooth, batterie, heure locale |
| 2–3 | Titre de la page : gras souligné en 80 colonnes, double hauteur avec un filet en mosaïque en 40 colonnes |
| 4–21 | Contenu de la page |
| 22 | Messages, ou la ligne d'aide de GUIDE |
| 23 | Les touches de la page, noms de touche en inverse |
| 24 | Ligne de saisie : choix de menu, message ou réponse à une question |
En 40 colonnes, ce sont les codes Vidéotex (positionnement US, attributs inverse et clignotant, double hauteur et double taille, mosaïques G1, accents G2 par SS2). En 80 colonnes, ce sont les codes ISO 6429 du mode Mixte (CUP, ED, EL, un SGR par séquence) et le jeu français par SO/SI. La dernière case de la rangée 24 n'est jamais écrite, pour que l'écran ne défile jamais.
La ligne de commande USB
Port série USB, 115200 bauds. Terminez chaque ligne par CR ; les caractères sont renvoyés en écho ; les réponses sont décalées de deux espaces et finissent par OK (ou ERR …). Les commandes locales habituelles du compagnon MeshCore (get/set des préférences, etc.) fonctionnent comme d'habitude ; voici celles qu'ajoute ou qu'utilise la version Minitel.
Le nœud
| Commande | Réponse ou effet |
|---|---|
get prv.key | La clé privée du nœud, 128 chiffres hexadécimaux. Voir l'avertissement ci-dessous. |
set prv.key <128 hex> | Restaurer une identité ; prise en compte au redémarrage |
get tz.offset / set tz.offset <h> | Fuseau horaire de l'affichage et de la page Date et heure, de −12 à +14 |
clock | <unix> AAAA-MM-JJ HH:MM:SS UTC set|unset |
clock sync <unix_ts> | Régler l'horloge en secondes UTC, y compris en arrière (une action volontaire de l'ordinateur) |
stack | Octets jamais utilisés de la pile de 4 Ko de la tâche principale, et tas libre |
boot | La raison du dernier redémarrage du XIAO (mise sous tension, bouton reset, chien de garde, blocage, redémarrage logiciel, plantages compris), la durée de fonctionnement et le dernier plantage : pc=… lr=… cfsr=… hfsr=… mmfar=… bfar=… task=… t=… |
boot clear | Oublier l'enregistrement du plantage |
Clé privée. get prv.key affiche le secret qui est le nœud. Qui la détient peut se faire passer pour lui et lire ses messages privés. Gardez-la hors ligne ; jamais dans un journal, une discussion, un ticket ou une capture d'écran.
L'historique
| Commande | Réponse ou effet |
|---|---|
hist list | Une ligne par conversation : <id> <channel|dm|room> <nombre> <non-lus> <nom> |
hist add <conv> <unix_ts> <in|out> <auteur_hex|-> <texte_hex> | OK, DUP (même sens, auteur et texte à ±10 min), OLD (déjà 40 messages plus récents) ou ERR. <conv> vaut ch:<index>, ch:<nom>, dm:<début de clé> ou room:<début de clé> ; auteur et texte en UTF-8 hexadécimal (texte de 1 à 160 octets, auteur jusqu'à 31). Lignes de 511 caractères au plus. |
hist clear <conv> | Vider l'historique d'une conversation |
La liaison Minitel
| Commande | Réponse ou effet |
|---|---|
link log | État, vitesse, réinitialisations, erreurs de parité, puis les 16 derniers événements de la liaison (vitesse trouvée, tour sans réponse, état perdu, réinitialisation envoyée ou acquittée, configuré, Téléinformatique…) |
link try <octets hex> | Envoyer jusqu'à 32 octets bruts à la vitesse en cours et afficher ce qui revient en 600 ms (! marque une erreur de parité). Les commandes de modem, de numérotation, de prise de ligne, de transparence et de téléchargement sont refusées. |
link txlog on|off|dump|clear | Garder les 2048 derniers octets envoyés au terminal ; dump les affiche en hexadécimal avec une colonne ASCII |
ui cursor none|csi|cof|dec | En 80 colonnes : comment cacher le curseur pendant le dessin (enregistré) ; le 40 colonnes utilise toujours COF/CON |
redraw | Effacer le terminal et renvoyer toute la page |
Ecran et pilotage
| Commande | Réponse ou effet |
|---|---|
screen | Relevé du modèle d'écran (format ci-dessous) |
screen watch <images> <ms> | Un relevé toutes les ms (50 à 60000), images fois (1 à 2000) ; chaque en-tête porte t=, seul le dernier finit par OK. screen watch stop arrête. |
key <nom> […] | Touches de fonction : envoi retour repetition guide annulation sommaire correction suite connexion (fin), esc, flèches haut bas gauche droite (up down left right) |
type <texte> | La suite de la ligne, tapée au clavier (espaces compris) |
typehex <utf8 hex> | N'importe quel UTF-8, envoyé comme le ferait le clavier (accents en séquences SS2, même composition) ; les émojis deviennent leurs codes ASCII |
wait idle [ms] | OK quand toutes les touches en attente sont traitées et la page construite et envoyée ; ERR timeout au bout de ms (5000 par défaut) |
ui state | UI page=… mode=… link=… prompt=… input=<hex> pending=<hex> guide=… help=… notice=… … idle=… : page, 40/80, question ouverte et sa saisie (mot de passe et code d'appairage masqués), positions dans les listes, scène et image de l'accueil |
ui reset | Retour au Sommaire, question fermée |
splash scene <0-3|off> | Figer une scène complète de la page d'accueil (pour les relevés) ; off relance l'animation |
splash speed [<ms par image> [<s par scène>]] | Le rythme de la page d'accueil, 130 ms et 18 s par défaut (enregistré) |
Les touches injectées sont traitées exactement comme les vraies et peuvent tout faire, y compris envoyer des messages ; les confirmations sont toujours demandées. 63 touches au plus attendent dans la file : envoyez les longs textes en plusieurs fois, avec wait idle entre deux. Noms de page : splash home convlist conv actions msginfo contacts contact advert settings clock status channels channel news regionpick autoreg autoadd trace admin console graphs graph quick nearby mykey device.
ui reset
type 4
key envoi
wait idle
type 11
key envoi
wait idle
ui state
UI page=status mode=80 link=ok prompt=none input=- ... idle=1
screen
Format des relevés d'écran (v1)
SCREEN v1 cols=<40|80> rows=25 mode=<mixte|videotex> page=<id> cellw=<8|6> cellh=10 [t=<ms>]
ROW <r> <texte_hex> <attr_hex> r = 0..24 (la rangée 0, rangée de service, est vide)
CURSOR <r> <c> <0|1>
OK
texte_hex: la rangée en UTF-8, exactementcolscaractères, un par case, avec le vrai glyphe (é). Une case en mosaïque G1 porte son code sous forme d'un caractère ASCII de 0x20 à 0x7F.attr_hex: 4 chiffres hexadécimaux par case.- Double hauteur : le caractère est sur la rangée où il est écrit ; la case de la rangée du dessus est vide, avec le bit de continuation.
- En 80 colonnes, une mosaïque devient un blanc inverse ou
-/_et la double hauteur du gras, comme le terminal les montre ; en 40 colonnes, le gras et le souligné n'existent pas. - Le relevé est le modèle que le micrologiciel dessine : les rangées pas encore envoyées au terminal y ont déjà leur nouveau contenu.
| Bit | Sens | Bit | Sens |
|---|---|---|---|
| 0 | inverse | 6 | mosaïque G1 |
| 1 | clignotant | 7 | masqué |
| 2 | souligné (sur une mosaïque : disjointe) | 8–10 | couleur du caractère, 0 à 7 |
| 3 | gras | 11–13 | couleur du fond, 0 à 7 |
| 4 | double hauteur | 14 | continuation (case couverte par un voisin en double taille) |
| 5 | double largeur |
Mosaïque G1 : les bits 0 à 4 et 6 du code sont les pavés 2 × 3, dans l'ordre haut gauche, haut droite, milieu gauche, milieu droite, bas gauche, bas droite.
Les outils
Python 3, lancé en mode isolé (python3 -I). Le moteur de rendu photographique demande numpy et Pillow ; le reste n'utilise que la bibliothèque standard. Chaque outil trouve le XIAO sous /dev/serial/by-id/*<numéro de série>* et refuse les périphériques /dev/ttyUSB* (sur un bureau où un relais est branché par un adaptateur USB-série, ouvrir son tty le redémarre). Changez le numéro de série dans les scripts pour votre XIAO.
tools/screenshot/minitel_dump.py
python3 -I minitel_dump.py -o page.dump # relever l'écran du XIAO
python3 -I minitel_dump.py --from-file log.txt # extraire un relevé d'un journal de terminal
tools/screenshot/minitel_render.py
Une image photographique d'un Minitel 2 affichant le relevé, calculée avec numpy : un terminal en lancer de rayons sur un bureau, une dalle bombée qui réfracte, la tache du faisceau et la bande passante de la vidéo, le halo, les reflets, la profondeur de champ et le grain. Aussi la face du tube seule (--screen-only) et des GIF animés à partir de plusieurs relevés. C'est l'outil qui a produit l'image d'accueil de ce site.
python3 -I minitel_render.py page.dump # photo 1920x1440
python3 -I minitel_render.py page.dump --angle --style night
python3 -I minitel_render.py f*.dump --frame-ms 130 -o anim.gif
tools/tour/tour.py
Parcourt toutes les pages en 40 et en 80 colonnes par USB, range chaque relevé dans gallery/dumps/ avec gallery/manifest.json (page, mode, titre, description), enregistre l'animation de la page d'accueil avec screen watch et reconstruit ce site. Il se contente de visiter : chaque Envoi est d'abord vérifié avec ui state et une liste de choix de navigation autorisés, les conversations de salon (qui se connectent) sont évitées, la page Actions n'est ouverte que sur une ligne vide et seules « Détails » et « Rechercher » y sont choisies.
python3 -I tools/tour/tour.py run # les deux modes, puis le site
python3 -I tools/tour/tour.py simulate # essai hors ligne contre un faux appareil
python3 -I tools/tour/tour.py list # les pages visitées
site/build.py
Construit ce site dans site/dist/ : de simples fichiers pour n'importe quel serveur web. Les écrans y sont redessinés en texte à partir des relevés, dans les polices Minitel que site/tools/make_webfont.py tire de la police CC0.
Les fichiers de l'appareil
| Fichier | Contenu |
|---|---|
/minitel.cfg (flash interne) | 40/80 colonnes, envoi sans heure, sonnerie, préfixe des accents |
/mt/index | Table des conversations : noms, non-lus, dernière activité |
/mt/c…, /mt/d…, /mt/r… | Un anneau de 40 messages par canal, conversation privée ou salon (environ 7,4 Ko chacun) |
/mt/rooms | Mots de passe des salons (en clair, comme ceux de l'appli) |
/mt/chscope, /mt/mute | Région et visibilité dans les nouvelles de chaque canal ; conversations en silence |
/minitel.crash | Le dernier plantage, jusqu'à boot clear |
Les fichiers /mt/ sont sur la flash QSPI de 2 Mo du XIAO. Rien ici ne formate ni n'efface de système de fichiers ; les préférences, contacts et canaux de MeshCore gardent leur format habituel.