L'outil serial-discovery
est un programme de ligne de commande qui interagit via STdio. Il accepte les commandes comme des chaînes ASCII simples terminées avec LF n
et envoie la réponse en tant que JSON.
Installez un environnement Golang récent et exécutez go build
. La serial-discovery
exécutable sera produite dans votre répertoire de travail.
Après le démarrage, l'outil attend les commandes. Les commandes disponibles sont: HELLO
, START
, STOP
, QUIT
, LIST
et START_SYNC
.
La commande HELLO
est utilisée pour établir le protocole de découverte enfichable entre le client et la découverte. Le format de la commande est:
HELLO <PROTOCOL_VERSION> "<USER_AGENT>"
Par exemple:
HELLO 1 "Arduino IDE"
ou:
HELLO 1 "arduino-cli"
Dans ce cas, la version protocole demandée par le client est 1
(au moment de la rédaction, il n'y a eu aucune autre révision du protocole). La réponse à la commande est:
{
"eventType" : " hello " ,
"protocolVersion" : 1 ,
"message" : " OK "
}
protocolVersion
est la version protocole que la découverte va utiliser dans le reste de la communication.
Le START
commence les sous-programmes internes de la découverte qui recherche les ports. Cette commande doit être appelée avant LIST
ou START_SYNC
. La réponse à la commande de démarrage est:
{
"eventType" : " start " ,
"message" : " OK "
}
La commande STOP
arrête les sous-programmes internes de découverte et libère certaines ressources. Cette commande doit être appelée si le client souhaite suspendre la découverte pendant un certain temps. La réponse à la commande stop est:
{
"eventType" : " stop " ,
"message" : " OK "
}
La commande QUIT
met fin à la découverte. La réponse à arrêter est:
{
"eventType" : " quit " ,
"message" : " OK "
}
Après cette sortie, l'outil quitte.
La commande LIST
renvoie une liste des ports série actuellement disponibles. Le format de la réponse est le suivant:
{
"eventType" : " list " ,
"ports" : [
{
"address" : " /dev/ttyACM0 " ,
"label" : " /dev/ttyACM0 " ,
"properties" : {
"pid" : " 0x804e " ,
"vid" : " 0x2341 " ,
"serialNumber" : " EBEABFD6514D32364E202020FF10181E "
},
"hardwareId" : " EBEABFD6514D32364E202020FF10181E " ,
"protocol" : " serial " ,
"protocolLabel" : " Serial Port (USB) "
}
]
}
Le champ ports
contient une liste des ports série disponibles. Si le port série provient d'un convertisseur de série USB, les propriétés USB VID / PID et Numéro de série USB sont également signalées à l'intérieur properties
.
La commande list est une commande à un coup, si vous avez besoin d'une surveillance continue des ports, vous devez utiliser la commande START_SYNC
.
La commande START_SYNC
met l'outil en mode "événements": la découverte enverra des événements add
et remove
chaque fois qu'un nouveau port est détecté ou supprimé respectivement. La réponse immédiate à la commande est:
{
"eventType" : " start_sync " ,
"message" : " OK "
}
Après cela, la découverte entre dans le mode "Événements".
Les événements add
ressemblent à ce qui suit:
{
"eventType" : " add " ,
"port" : {
"address" : " /dev/ttyACM0 " ,
"label" : " /dev/ttyACM0 " ,
"properties" : {
"pid" : " 0x804e " ,
"vid" : " 0x2341 " ,
"serialNumber" : " EBEABFD6514D32364E202020FF10181E "
},
"hardwareId" : " EBEABFD6514D32364E202020FF10181E " ,
"protocol" : " serial " ,
"protocolLabel" : " Serial Port (USB) "
}
}
Il rassemble essentiellement les mêmes informations que l'événement list
mais pour un seul port. Après avoir appelé START_SYNC
un tas d'événements add
peuvent être générés en séquence pour signaler tous les ports disponibles au moment du début.
L'événement remove
ressemble à ceci:
{
"eventType" : " remove " ,
"port" : {
"address" : " /dev/ttyACM0 " ,
"protocol" : " serial "
}
}
Dans ce cas, seuls les champs address
et protocol
sont signalés.
Une transcription possible de l'utilisation de la découverte:
$ ./serial-discovery
START
{
"eventType": "start",
"message": "OK"
}
LIST
{
"eventType": "list",
"ports": [
{
"address": "/dev/ttyACM0",
"label": "/dev/ttyACM0",
"protocol": "serial",
"protocolLabel": "Serial Port (USB)",
"properties": {
"pid": "0x004e",
"serialNumber": "EBEABFD6514D32364E202020FF10181E",
"vid": "0x2341"
},
"hardwareId": "EBEABFD6514D32364E202020FF10181E"
}
]
}
START_SYNC
{
"eventType": "start_sync",
"message": "OK"
}
{ <--- this event has been immediately sent
"eventType": "add",
"port": {
"address": "/dev/ttyACM0",
"label": "/dev/ttyACM0",
"protocol": "serial",
"protocolLabel": "Serial Port (USB)",
"properties": {
"pid": "0x004e",
"serialNumber": "EBEABFD6514D32364E202020FF10181E",
"vid": "0x2341"
},
"hardwareId": "EBEABFD6514D32364E202020FF10181E"
}
}
{ <--- the board has been disconnected here
"eventType": "remove",
"port": {
"address": "/dev/ttyACM0",
"protocol": "serial"
}
}
{ <--- the board has been connected again
"eventType": "add",
"port": {
"address": "/dev/ttyACM0",
"label": "/dev/ttyACM0",
"protocol": "serial",
"protocolLabel": "Serial Port (USB)",
"properties": {
"pid": "0x004e",
"serialNumber": "EBEABFD6514D32364E202020FF10181E",
"vid": "0x2341"
},
"hardwareId": "EBEABFD6514D32364E202020FF10181E"
}
}
QUIT
{
"eventType": "quit",
"message": "OK"
}
$
Si vous pensez avoir trouvé une vulnérabilité ou un autre bogue lié à la sécurité dans ce projet, veuillez lire notre politique de sécurité et signaler le bug à notre équipe de sécurité? ️ Merci!
E-mail Contact: [email protected]
Copyright (c) 2018 Arduino SA (www.arduino.cc)
Le logiciel est publié sous la licence GNU General Public, qui couvre le corps principal du code de découverte en série. Les termes de cette licence peuvent être trouvés sur: https://www.gnu.org/licenses/gpl-3.0.en.html
Voir Licence.txt pour plus de détails.