#macos #go #serial-port
#macos #Вперед #последовательный порт
Вопрос:
Я успешно записал массив байтов в порт, но не смог прочитать из него. функция «read» возвращает «read /dev /tty.usbserial1: прерванный системный вызов» ошибка, я запускаю его на macOS sierra 10.12.6, использую «github.com/tarm/serial «, кто-нибудь сталкивался с такой же проблемой? вот код:
func TestTarmSerialDataRecvAndSend(t *testing.T) {
c := amp;serial.Config{
Name: "/dev/cu.usbserial1",
Baud: 9600,
}
s, err := serial.OpenPort(c)
if err != nil {
fmt.Println(err)
return
}
for i := 0; i < 10; i {
n, err := s.Write([]byte("test"))
if err != nil {
fmt.Println(err)
return
}
fmt.Printf("send byte : %v", n)
}
fmt.Println("send over")
buf := make([]byte, 128)
n, err := s.Read(buf)
if err != nil {
fmt.Println(err)
return
}
fmt.Printf("%q", buf[:n])
}
Ответ №1:
func sendCommand(p *serial.Port, command string, waitForOk bool) string {
log.Println("--- SendCommand: ", command)
var status string = ""
p.Flush()
_, err := p.Write([]byte(command))
if err != nil {
log.Fatal(err)
}
buf := make([]byte, 32)
var loop int = 1
if waitForOk {
loop = 10
}
for i := 0; i < loop; i {
// ignoring error as EOF raises error on Linux
n, _ := p.Read(buf)
if n > 0 {
status = string(buf[:n])
log.Printf("SendCommand: rcvd %d bytes: %sn", n, status)
if strings.HasSuffix(status, "OKrn") || strings.HasSuffix(status, "ERRORrn") {
break
}
}
}
return status
}
решения здесь: https://golang.hotexamples.com/examples/github.com.tarm.serial/Port/Read/golang-port-read-method-examples.html