Files
tele-recv/utils/serial.go
T
2020-12-28 15:58:00 +08:00

64 lines
1.3 KiB
Go

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
}