3615 MESHCORERéférence

Référence

  1. Plan du Sommaire
  2. Les touches
  3. Disposition de l'écran
  4. La ligne de commande USB
  5. Format des relevés d'écran
  6. Les outils
  7. 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
1Conversationsnuméro : ouvrir ; L : tout marquer lu. Dans une conversation, Envoi sur une ligne vide ouvre la page Actions
2Dernières nouvellesnuméro : ouvrir la conversation
3Contacts et stations entenduesE entendues, C contacts, P proches, N ajouter par clé, S ajouter un salon, A annonce ; numéro : fiche
4Réglages et identitévoir ci-dessous
5Envoyer une annonce1 locale (zéro saut), 2 tout le réseau (confirmée)
6Date et heure1 régler l'heure locale, 2 envoyer sans heure, 3 fuseau horaire
7Page d'accueil 3615 MESHCOREn'importe quelle touche en sort
8Graphiques1 à 9, voir Graphiques

Fiche contact

N°ActionN°Action
1écrire, ou ouvrir le salon7administration (relais, salon, capteur)
2ajouter une station entendue8partager le contact
3se connecter à un salon9supprimer le contact
4oublier le mot de passe du salon10favori oui / non
5oublier le chemin11permissions de télémesure (B, P, C)
6tracer le chemin

Réglages (Sommaire 4)

N°RéglageN°Réglage
1Nom du nœud9Sonnerie à l'arrivée des messages
2Position (48.8566 2.3522, 0 0 pour aucune)1040 / 80 colonnes
3Date et heure11État et statistiques
4Canaux : H canal hashtag, P canal privé ; numéro : fiche du canal12Réponses rapides
5Région par défaut13Mon identité
6Régions automatiques (D département, T tout appliquer)14Accents composés : *, # ou rien
7Ajout automatique des contacts, et permissions de télémesure (entrées 8 à 10)15Bluetooth et alimentation
8Répétition par le client, oui / non

Les touches

ToucheEffet
SommaireLe menu principal, de partout (ferme toute question)
EnvoiValider : un numéro de menu, un message, une réponse. Sur une ligne vide dans une conversation : la page Actions
RetourPage précédente ; dans un historique, les messages plus anciens ; quitter une fiche
SuitePage suivante ; dans un historique, les plus récents ; depuis le Sommaire, la prochaine conversation non lue
CorrectionEffacer le dernier caractère
AnnulationVider la ligne de saisie
GuideUne 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étitionPasser 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/FinRevenir en arrière : conversation → liste → Sommaire
↑ ↓Dans une conversation, choisir un message

Disposition de l'écran

RangéeContenu
1Ligne 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–3Titre de la page : gras souligné en 80 colonnes, double hauteur avec un filet en mosaïque en 40 colonnes
4–21Contenu de la page
22Messages, ou la ligne d'aide de GUIDE
23Les touches de la page, noms de touche en inverse
24Ligne 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

CommandeRéponse ou effet
get prv.keyLa 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)
stackOctets jamais utilisés de la pile de 4 Ko de la tâche principale, et tas libre
bootLa 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 clearOublier 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

CommandeRéponse ou effet
hist listUne 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
CommandeRé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|clearGarder les 2048 derniers octets envoyés au terminal ; dump les affiche en hexadécimal avec une colonne ASCII
ui cursor none|csi|cof|decEn 80 colonnes : comment cacher le curseur pendant le dessin (enregistré) ; le 40 colonnes utilise toujours COF/CON
redrawEffacer le terminal et renvoyer toute la page

Ecran et pilotage

CommandeRéponse ou effet
screenRelevé 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 stateUI 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 resetRetour 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
BitSensBitSens
0inverse6mosaïque G1
1clignotant7masqué
2souligné (sur une mosaïque : disjointe)8–10couleur du caractère, 0 à 7
3gras11–13couleur du fond, 0 à 7
4double hauteur14continuation (case couverte par un voisin en double taille)
5double 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

FichierContenu
/minitel.cfg (flash interne)40/80 colonnes, envoi sans heure, sonnerie, préfixe des accents
/mt/indexTable 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/roomsMots de passe des salons (en clair, comme ceux de l'appli)
/mt/chscope, /mt/muteRégion et visibilité dans les nouvelles de chaque canal ; conversations en silence
/minitel.crashLe 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.