64 lines
1.2 KiB
Go
64 lines
1.2 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.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, 1)
|
|
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
|
|
}
|