Read and write serial port on Linux

我的未来我决定 提交于 2019-12-24 20:28:31

问题


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?

来源:https://stackoverflow.com/questions/49260737/read-and-write-serial-port-on-linux

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!