serial-discovery
도구는 STDIO를 통해 상호 작용하는 명령 줄 프로그램입니다. lf n
으로 종료 된 일반 ASCII 문자열로 명령을 받아들이고 JSON으로 응답을 보냅니다.
최근 Golang 환경을 설치하고 go build
실행하십시오. 실행 가능한 serial-discovery
작업 디렉토리에서 생성됩니다.
시작 후 도구는 명령을 기다립니다. 사용 가능한 명령은 다음과 같습니다. HELLO
, START
, STOP
, QUIT
, LIST
및 START_SYNC
입니다.
HELLO
명령은 클라이언트와 발견 사이의 플러그 디스커버리 프로토콜을 설정하는 데 사용됩니다. 명령의 형식은 다음과 같습니다.
HELLO <PROTOCOL_VERSION> "<USER_AGENT>"
예를 들어:
HELLO 1 "Arduino IDE"
또는:
HELLO 1 "arduino-cli"
이 경우 클라이언트가 요청한 프로토콜 버전은 1
입니다 (작성되는 순간에는 프로토콜의 다른 개정이 없었습니다). 명령에 대한 응답은 다음과 같습니다.
{
"eventType" : " hello " ,
"protocolVersion" : 1 ,
"message" : " OK "
}
protocolVersion
은 발견이 커뮤니케이션의 나머지 부분에서 사용할 프로토콜 버전입니다.
START
항구를 찾는 발견의 내부 서브 루틴을 시작합니다. 이 명령은 LIST
또는 START_SYNC
전에 호출되어야합니다. 시작 명령에 대한 응답은 다음과 같습니다.
{
"eventType" : " start " ,
"message" : " OK "
}
STOP
명령은 발견 내부 서브 루틴을 중지하고 일부 리소스를 자유롭게합니다. 클라이언트가 한동안 발견을 일시 중지하려면이 명령을 호출해야합니다. 정지 명령에 대한 응답은 다음과 같습니다.
{
"eventType" : " stop " ,
"message" : " OK "
}
QUIT
명령은 발견을 종료합니다. 종료에 대한 응답은 다음과 같습니다.
{
"eventType" : " quit " ,
"message" : " OK "
}
이 출력 후 공구가 끊습니다.
LIST
명령은 현재 사용 가능한 직렬 포트 목록을 반환합니다. 응답 형식은 다음과 같습니다.
{
"eventType" : " list " ,
"ports" : [
{
"address" : " /dev/ttyACM0 " ,
"label" : " /dev/ttyACM0 " ,
"properties" : {
"pid" : " 0x804e " ,
"vid" : " 0x2341 " ,
"serialNumber" : " EBEABFD6514D32364E202020FF10181E "
},
"hardwareId" : " EBEABFD6514D32364E202020FF10181E " ,
"protocol" : " serial " ,
"protocolLabel" : " Serial Port (USB) "
}
]
}
ports
필드에는 사용 가능한 직렬 포트 목록이 포함되어 있습니다. 직렬 포트가 USB 직렬 변환기에서 나오는 경우 USB VID/PID 및 USB 일련 번호 특성도 properties
내부에보고됩니다.
목록 명령은 원샷 명령입니다. 포트를 지속적으로 모니터링 해야하는 경우 START_SYNC
명령을 사용해야합니다.
START_SYNC
명령은 도구를 "이벤트"모드에 넣습니다. 디스커버리는 새 포트가 각각 감지되거나 제거 될 때마다 이벤트 add
및 remove
보냅니다. 명령에 대한 즉각적인 응답은 다음과 같습니다.
{
"eventType" : " start_sync " ,
"message" : " OK "
}
그 후 발견은 "이벤트"모드로 들어갑니다.
add
이벤트는 다음과 같습니다.
{
"eventType" : " add " ,
"port" : {
"address" : " /dev/ttyACM0 " ,
"label" : " /dev/ttyACM0 " ,
"properties" : {
"pid" : " 0x804e " ,
"vid" : " 0x2341 " ,
"serialNumber" : " EBEABFD6514D32364E202020FF10181E "
},
"hardwareId" : " EBEABFD6514D32364E202020FF10181E " ,
"protocol" : " serial " ,
"protocolLabel" : " Serial Port (USB) "
}
}
기본적으로 list
이벤트와 동일한 정보를 수집하지만 단일 포트 용. START_SYNC
호출 후 시작 순간에 사용 가능한 모든 포트를보고하기 위해 많은 add
이벤트가 순서대로 생성 될 수 있습니다.
이벤트 remove
다음과 같습니다.
{
"eventType" : " remove " ,
"port" : {
"address" : " /dev/ttyACM0 " ,
"protocol" : " serial "
}
}
이 경우 address
와 protocol
필드 만보 고됩니다.
발견 사용의 가능한 성적표 :
$ ./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"
}
$
이 프로젝트에서 취약성 또는 기타 보안 관련 버그를 발견했다고 생각되면 보안 정책을 읽고 보안 팀에 버그를보고하십시오. ️ 감사합니다!
이메일 연락처 : [email protected]
저작권 (C) 2018 Arduino SA (www.arduino.cc)
이 소프트웨어는 일련의 발견 코드의 본문을 다루는 GNU 일반 공개 라이센스에 따라 릴리스됩니다. 이 라이센스의 조건은 https://www.gnu.org/licenses/gpl-3.0.en.html에서 찾을 수 있습니다.
자세한 내용은 License.txt를 참조하십시오.