Das Tool serial-discovery
ist ein Befehlszeilenprogramm, das über STDIO interagiert. Es akzeptiert Befehle als einfache ASCII -Zeichenfolgen, die mit LF n
beendet sind, und sendet die Antwort als JSON.
Installieren Sie eine aktuelle Golang -Umgebung und führen Sie go build
. Die ausführbare serial-discovery
wird in Ihrem Arbeitsverzeichnis produziert.
Nach dem Start wartet das Tool auf Befehle. Die verfügbaren Befehle sind: HELLO
, START
, STOP
, QUIT
, LIST
und START_SYNC
.
Der HELLO
-Befehl wird verwendet, um das steckbare Discovery -Protokoll zwischen Client und Entdeckung festzulegen. Das Format des Befehls lautet:
HELLO <PROTOCOL_VERSION> "<USER_AGENT>"
Zum Beispiel:
HELLO 1 "Arduino IDE"
oder:
HELLO 1 "arduino-cli"
In diesem Fall beträgt die vom Client angeforderte Protokollversion 1
(zum Zeitpunkt des Schreibens gab es keine weiteren Überarbeitungen des Protokolls). Die Antwort auf den Befehl lautet:
{
"eventType" : " hello " ,
"protocolVersion" : 1 ,
"message" : " OK "
}
protocolVersion
ist die Protokollversion, die die Entdeckung im Rest der Kommunikation verwenden wird.
Der START
startet die internen Unterprogramme der Entdeckung, die nach Ports sucht. Dieser Befehl muss vor LIST
oder START_SYNC
aufgerufen werden. Die Antwort auf den Startbefehl lautet:
{
"eventType" : " start " ,
"message" : " OK "
}
Der STOP
-Befehl stoppt die internen Unterroutinen für Erkennung und freie Ressourcen. Dieser Befehl sollte aufgerufen werden, wenn der Kunde die Entdeckung für eine Weile innehalten möchte. Die Antwort auf den Stop -Befehl lautet:
{
"eventType" : " stop " ,
"message" : " OK "
}
Der Befehl QUIT
beendet die Entdeckung. Die Antwort auf die Beendigung ist:
{
"eventType" : " quit " ,
"message" : " OK "
}
Nach dieser Ausgabe beendet das Tool.
Der Befehl LIST
gibt eine Liste der derzeit verfügbaren seriellen Ports zurück. Das Format der Antwort ist das folgende:
{
"eventType" : " list " ,
"ports" : [
{
"address" : " /dev/ttyACM0 " ,
"label" : " /dev/ttyACM0 " ,
"properties" : {
"pid" : " 0x804e " ,
"vid" : " 0x2341 " ,
"serialNumber" : " EBEABFD6514D32364E202020FF10181E "
},
"hardwareId" : " EBEABFD6514D32364E202020FF10181E " ,
"protocol" : " serial " ,
"protocolLabel" : " Serial Port (USB) "
}
]
}
Das Feld ports
enthält eine Liste der verfügbaren seriellen Anschlüsse. Wenn der serielle Port von einem USB -Seriennandum stammt, werden die Eigenschaften von USB VID/PID und USB -Seriennummer auch in properties
angegeben.
Der Befehl List ist ein One-Shot-Befehl. Wenn Sie eine kontinuierliche Überwachung von Ports benötigen, sollten Sie den Befehl START_SYNC
verwenden.
Der Befehl START_SYNC
bringt das Tool in den "Ereignis" -Modus: Die Erkennung sendet bei der Erkennung eines neuen Ports add
und remove
Ereignisse. Die sofortige Antwort auf den Befehl lautet:
{
"eventType" : " start_sync " ,
"message" : " OK "
}
Danach tritt die Entdeckung in den "Ereignis" -Modus ein.
Die add
-Ereignisse sehen nach Folgendes aus:
{
"eventType" : " add " ,
"port" : {
"address" : " /dev/ttyACM0 " ,
"label" : " /dev/ttyACM0 " ,
"properties" : {
"pid" : " 0x804e " ,
"vid" : " 0x2341 " ,
"serialNumber" : " EBEABFD6514D32364E202020FF10181E "
},
"hardwareId" : " EBEABFD6514D32364E202020FF10181E " ,
"protocol" : " serial " ,
"protocolLabel" : " Serial Port (USB) "
}
}
Grundsätzlich sammelt es die gleichen Informationen wie das list
, jedoch für einen einzelnen Port. Nach dem Aufrufen von START_SYNC
können eine Reihe von add
-Ereignissen nacheinander generiert werden, um alle im Moment des Starts verfügbaren Ports zu melden.
Das remove
sieht so aus:
{
"eventType" : " remove " ,
"port" : {
"address" : " /dev/ttyACM0 " ,
"protocol" : " serial "
}
}
In diesem Fall werden nur die address
und protocol
gemeldet.
Ein mögliches Transkript der Entdeckungsnutzung:
$ ./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"
}
$
Wenn Sie der Meinung sind, dass Sie in diesem Projekt eine Sicherheitsanfälligkeit oder einen anderen Sicherheitsfehler gefunden haben, lesen Sie bitte unsere Sicherheitsrichtlinie und melden Sie den Fehler unserem Sicherheitsteam? ️ Vielen Dank!
E-Mail-Kontakt: [email protected]
Copyright (C) 2018 Arduino SA (www.arduino.cc)
Die Software wird unter der GNU General Public Lizenz veröffentlicht, die den Hauptteil des seriellen Discovery-Code abdeckt. Die Bedingungen dieser Lizenz finden Sie unter: https://www.gnu.org/licenses/gpl-3.0.en.html
Weitere Informationen finden Sie unter Lizenz.txt.