2020-12-21 15:38:33 +08:00
|
|
|
package utils
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"time"
|
2020-12-22 12:08:06 +08:00
|
|
|
|
2020-12-29 11:00:01 +08:00
|
|
|
"github.com/argandas/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 (
|
2020-12-29 11:00:01 +08:00
|
|
|
device string
|
|
|
|
|
baudrate int
|
|
|
|
|
// port *serial.Port
|
|
|
|
|
sp *serial.SerialPort
|
2020-12-22 12:08:06 +08:00
|
|
|
portOpened = false
|
2020-12-28 15:58:00 +08:00
|
|
|
Log *zap.Logger
|
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
|
2020-12-29 16:38:53 +08:00
|
|
|
func OpenPort(device string, baudrate int) error {
|
2020-12-28 15:58:00 +08:00
|
|
|
Log.Info("opening serial device ",
|
|
|
|
|
zap.String("port", device),
|
2020-12-29 16:31:23 +08:00
|
|
|
zap.Int("baudrate", baudrate))
|
2020-12-29 11:00:01 +08:00
|
|
|
sp = serial.New()
|
|
|
|
|
sp.EOL('\r')
|
2020-12-29 11:28:10 +08:00
|
|
|
sp.Verbose = false
|
2020-12-29 11:00:01 +08:00
|
|
|
err := sp.Open(device, baudrate, time.Second*3)
|
|
|
|
|
Log.Info("open ", zap.String("device", device), zap.Error(err))
|
|
|
|
|
if err == nil {
|
|
|
|
|
portOpened = true
|
2020-12-21 15:38:33 +08:00
|
|
|
}
|
2020-12-29 11:00:01 +08:00
|
|
|
return err
|
2020-12-21 15:38:33 +08:00
|
|
|
}
|
|
|
|
|
|
2020-12-24 10:35:13 +08:00
|
|
|
//ReadPort read byte array from port
|
2020-12-29 11:00:01 +08:00
|
|
|
func ReadPort() (string, error) {
|
|
|
|
|
// buffer := make([]byte, 1)
|
|
|
|
|
// if !ServerRunning {
|
|
|
|
|
// return buffer, 0
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
return sp.ReadLine()
|
2020-12-21 15:38:33 +08:00
|
|
|
}
|
|
|
|
|
|
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
|
|
|
|
|
}
|