I use github.com/jacobsa/go-serial/serial
package to work with serial port in my Go program.
Simplified example:
options := serial.OpenOptions{
PortName: "/dev/ttyUSB0",
BaudRate: 115200,
DataBits: 8,
StopBits: 1,
MinimumReadSize = 0,
InterCharacterTimeout = 100,
}
port, _ := serial.Open(options)
defer port.Close()
res := make([]byte, 1024)
var err error
var i int = 0
for i == 0 {
i, err = port.Read(res)
if err != nil && err != io.EOF {
log.Printf("port.Read: %v", err)
err = errors.New("I/O error")
}
}
log.Println("Read bytes: ", i)
// do something else
When data is not ready, we have io.EOF
error. But, when there is connection lost, there is also io.EOF
errror! How could I distinguish waiting for new data and disconnection? If there is no data, FOR cycle need to be continue untill timeout is reached, but if connection is lost, I need to re-open port, because it's descriptor becames wrong. What is the good practice to handle these cases?