package utils import ( "io" "time" "github.com/tarm/serial" "go.uber.org/zap" ) var ( device string baudrate int bytesize byte stopbits byte port *serial.Port portOpened = false Log *zap.SugaredLogger ) const readDuration = 500 * time.Millisecond // OpenPort open serial port func OpenPort(device string, baudrate int, bytesize byte, stopbits byte) error { Log.Infow("opening serial device ", "port", device, "baudrate", baudrate, "bytesize", bytesize, "stopbits", stopbits) config := &serial.Config{Name: device, Baud: baudrate, Size: bytesize, StopBits: serial.StopBits(stopbits), ReadTimeout: readDuration} var err error port, err = serial.OpenPort(config) if err != nil { Log.Fatal("error in open serial port ", err) return err } Log.Infof("%s opened", device) portOpened = true return nil } //ReadPort read byte array from port func ReadPort() ([]byte, int) { buffer := make([]byte, 256) if !ServerRunning { return buffer, 0 } count, err := port.Read(buffer) if err != nil && err != io.EOF { Log.Error("error in read port ", err) //TODO: 3 time fail try to } return buffer, count } //IsPortOpen check serial port status func IsPortOpen() bool { return portOpened }