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.Logger ) const readDuration = 500 * time.Millisecond // OpenPort open serial port func OpenPort(device string, baudrate int, bytesize byte, stopbits byte) error { Log.Info("opening serial device ", zap.String("port", device), zap.Int("baudrate", baudrate), zap.Int("bytesize", int(bytesize)), zap.Int("stopbits", int(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 ", zap.Error(err)) return err } Log.Info("opened ", zap.String("port", device)) portOpened = true return nil } //ReadPort read byte array from port func ReadPort() ([]byte, int) { buffer := make([]byte, 1) if !ServerRunning { return buffer, 0 } count, err := port.Read(buffer) if err != nil && err != io.EOF { Log.Error("error in read port ", zap.Error(err)) //TODO: 3 time fail try to } return buffer, count } //IsPortOpen check serial port status func IsPortOpen() bool { return portOpened }