(A l'heure actuelle, aucune implémentation n'est terminée, et la V1 du protcole ne l'est probablement pas non plus)
Ce dépôt contient aussi les implémentations pour l'hôte, en Python et en JavaScript (passe par la technologie WebSerial).
Pour une simplicité utilisateur, le modèle UART se fera autour d'un invité de commande alimenté par l'appareil. Les commandes seront dans intuitives, et une commande help
sera fournie. Toute commande commancant par un symbole ~
indique une commande qui se fera programmatiquement. Certaines commandes ne sont pas disponibles en mode programme, et d'autres ne sont pas disponibles en mode utilisateur.
Du côté appareil en C++, une API ouverte est disponible pour implémenter l'invité à travers d'autres protocoles
- Fréquence: 115200 Hz
- Pas de parité
- Données de 8 bits
- Stop de 1 bit
- Flow control: CTS/RTS
-
info
: Indique la plupart des métadonnées de l'appareilhostname
: Donne le nom de l'appareilmac
: Donne les adresses MACble
: Donne l'adresse MAC pour module Bluetoothwifi
: Donne l'adresse MAC pour module WiFi
version
: Donne la version de l'appareilhardware
: Indique les révisions du matériel physique utilisé
-
echo
: Active ou désactive le renvoi des caractères écrits. -
apps
: Liste les applications installéesinstall
: Installe une application (seulement en mode programme)remove <appid>
: Désinstalle l'application spécifiéelaunch <appid>
: Démarre l'application spécifiée. (Peut échouer)show <appid>
: Donne les details d'une applicationpath
: Donne le chemin d'accès de l'application spécifiée.
-
files
: Ouvre un gestionnaire de fichiers sh-like. -
files <cmd...>
: Execute une action dans le gestionnaire de fichiers, puis quitte. -
elevate <permission>
: Demande une ou plusieurs permissions d'accès pour l'invité. Cette commande engendrera un message de confiramtion sur l'écran de l'appareil.cellular
: Demande les permissions pour les informations du module réseau*
: Demande l'accès à toutes les permissions
-
lte
: Groupe de commandes (Nécéssite la permissioncellular
) (seulement en mode programme)sendraw <cmd>
: Envoie une commande directe au module cellulaire de l'appareil, la réponse est renvoyée.imei
: Donne l'IMEI du module réseauimsi
: Donne l'IMSI de la carte SIM
-
ls [path]
: Liste le contenu du dossier spécifié, ou du dossier courant. (Alias:dir
) -
cd <path>
: Change le répertoire courant pour le dossier spécifié (seulement en mode utilisateur) -
pwd
: Affiche le répertoire courant (seulement en mode utilisateur) -
touch <path>
: Crée un fichier -
mkdir <path>
: Crée un dossier -
rm <path>
: Supprime un dossier ou fichier -
cp <src> <dst>
: Copie un fichier -
mv <src> <dst>
: Deplace un fichier -
upload <path>
: Télécharge un fichier sur l'appareil (seulement en mode programme) -
download <path>
: Télécharge un fichier depuis l'appareil
L'appareil est prêt à recevoir des instructions dès que les caractères >>>
sont affichés (Si l'echo est désactivé, l'invité affichera >!>
). Après ca, toutes les entrées suivantes seront considérées comme des entrées de commande.
L'hôte ne doit pas oublier de prefixer la commande avec ~
. Pour terminer la commande, un retour à la ligne (0x0C) ou le caractère nul (0x00) peuvent être utilisés. Si le retour à la ligne est utilisé, il sera répété, mais pas le caractère nul.
Dès que l'appareilest près à commencer l'échange, il écrira OK
(0x4F4B), ou KO
(0x4B4F) si la commande a échoué à l'initialisation. Si elle échoue, l'échange sera aussitôt annulé et l'invité réapparaitra.
Pour chaque commande compatible programme, le descriptif suivant indiquera un échange type.
Minimum 23 octets |
---|
L'appareil envoie:
- Version du firmware (2 octets)
- Indicateur du hardware utilisé (8 octets, réservé)
- Nom d'hôte (taille variable, chaîne de caractères terminée par 0x00)
- Adresse MAC Bluetooth (6 octets)
- Adresse MAC WiFi (6 octets)
Minimum 1 octet |
---|
L'appareil envoie:
- Nom d'hôte (taille variable, chaîne de caractères terminée par 0x00)
12 octets |
---|
L'appareil envoie:
- Adresse MAC Bluetooth (6 octets)
- Adresse MAC WiFi (6 octets)
6 octets |
---|
L'appareil envoie:
- Adresse MAC du composant demandé (6 octets)
2 octets |
---|
L'appareil envoie:
- Version du firmware (2 octets)
8 octets |
---|
L'appareil envoie:
- Indicateur du hardware utilisé (8 octets, réservé)
Minimum 2 octets |
---|
L'appareil envoie:
- Nombre d'application installées (2 octets)
- Pour chaque application:
- AppID (taille variable, chaîne de caractères terminée par 0x00)
Bidirectionnel |
---|
L'hôte envoie:
- Chemin d'accès du fichier/dossier (taille variable, chaîne de caractères terminée par 0x00)
- Flags d'installation (1 octet)
- Format du packet (2 bits)
0b00
: Dossier0b01
: Archive tar0b10
: Archive tar.gz
- Format du packet (2 bits)
L'appareil répond:
- Statut (1 octet)
0x00
: Succès de l'installation0x01
: Erreur dans la décompression0x02
: Erreur dans l'extraction de l'archive0x10
: Manifest invalide
Minimum 2 octets |
---|
L'appareil envoie:
- Taille du manifest (2 octets)
- Manifest (X octets)
1 octet |
---|
L'appareil envoie:
- Statut (1 octet)
0x00
: Succès du démarrage de l'application0x01
: Application introuvable0x02
: Appareil occupé
1 octet |
---|
L'appareil envoie:
- Statut (1 octet)
0x00
: Succès de la désinstallation0x01
: Application introuvable
Minimum 3 octets |
---|
Même le statut est égal à autre chose que
0x00
, le nombre de fichiers doit être écrit et égal à 0.
L'appareil envoie:
- Statut (1 octet)
0x00
: Succès0x01
: Dossier introuvable0x02
: Accès restreint
- Nombre d'entrées (2 octets)
- Pour chaque fichier:
- Flags (1 octet)
- Est un dossier (1 bit)
- Est corrompu (1 bit)
- Taille du fichier (4 octets)
- Nom (taille variable, chaîne de caractères terminée par 0x00)
- Flags (1 octet)
1 octet |
---|
L'appareil envoie:
- Statut (1 octet)
0x00
: Succès0x01
: Dossier introuvable0x02
: Accès restreint
1 octet |
---|
L'appareil envoie:
- Statut (1 octet)
0x00
: Succès0x01
: Dossier introuvable0x02
: Accès restreint
1 octet |
---|
L'appareil envoie:
- Statut (1 octet)
0x00
: Succès0x01
: Fichier introuvable0x02
: Accès restreint
1 octet |
---|
L'appareil envoie:
- Statut (1 octet)
0x00
: Succès0x01
: Fichier/dossier source introuvable0x02
: Accès restreint au fichier source0x03
: Fichier/dossier cible existe déjà0x04
: Accès restreint au fichier cible
1 octet |
---|
L'appareil envoie:
- Statut (1 octet)
0x00
: Succès0x01
: Fichier/dossier source introuvable0x02
: Accès restreint au fichier source0x03
: Fichier/dossier cible existe déjà0x04
: Accès restreint au fichier cible
Bidirectionnel |
---|
L'hôte envoie:
- Taille totale du fichier (4 octets)
- Nombre de blocs (4 octets)
L'appareil répond:
- Statut (1 octet)
0x00
: Prêt0x01
: Le fichier existe déjà0x02
: Accès restreint au dossier
Si un autre statut que
0x00
est envoyé ici, l'échange doît s'arrêter.
Pour chaque bloc, l'hôte envoie:
- Taille du bloc (2 octets)
- Contenu du bloc (X octets)
- CRC32 du contenu du bloc (4 octets)
Pour chaque bloc, l'appareil envoie:
- Statut (1 octet)
0x00
: Succès de la réception0x01
: Erreur. Le bloc doit être réenvoyé.0x02
: Erreur. L'échange doît être interrompu.
Bidirectionnel |
---|
L'appareil envoie:
- Taille totale du fichier (4 octets)
- Nombre de blocs (4 octets)
L'hôte répond:
- Statut (1 octet)
0x00
: Prêt0x01
: Annuler l'échange
Pour chaque bloc, l'appareil envoie:
- Taille du bloc (2 octets)
- Contenu du bloc (X octets)
- CRC32 du contenu du bloc (4 octets)
Pour chaque bloc, l'hôte envoie:
- Statut (1 octet)
0x00
: Succès de la réception0x01
: Erreur. Le bloc doit être réenvoyé.0x02
: Erreur. L'échange doît être interrompu.