Files
tele-recv/utils/serial.go
T

64 lines
1.2 KiB
Go
Raw Normal View History

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