From 2011a10464207480483a429562f78fe4b8d01640 Mon Sep 17 00:00:00 2001 From: zhiqiang feng Date: Tue, 29 Dec 2020 11:00:01 +0800 Subject: [PATCH] use new serial lib --- .gitignore | 3 +- cmd/start.go | 4 +-- go.mod | 1 + go.sum | 2 ++ log_serial_1609210559.txt | 0 log_serial_1609210613.txt | 1 + utils/serial.go | 67 +++++++++++++++++++++------------------ utils/telegram.go | 2 +- 8 files changed, 45 insertions(+), 35 deletions(-) create mode 100644 log_serial_1609210559.txt create mode 100644 log_serial_1609210613.txt diff --git a/.gitignore b/.gitignore index 3c379ef..6cda2fa 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ tty* telegram.db -.idea \ No newline at end of file +.idea +log_* \ No newline at end of file diff --git a/cmd/start.go b/cmd/start.go index 1886d1d..0c4da2e 100644 --- a/cmd/start.go +++ b/cmd/start.go @@ -91,8 +91,8 @@ func start() { } logger.Info("starting read") } - buffer, count := utils.ReadPort() - if count > 0 { + buffer, err := utils.ReadPort() + if err == nil { if lograw && len(buffer) > 0 { fmt.Print(string(buffer)) } diff --git a/go.mod b/go.mod index cd5564d..2752045 100644 --- a/go.mod +++ b/go.mod @@ -3,6 +3,7 @@ module it2000.com.cn/tele-recv go 1.15 require ( + github.com/argandas/serial v0.0.0-20160316175758-889a5ad85462 github.com/fsnotify/fsnotify v1.4.9 // indirect github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible github.com/lestrrat-go/strftime v1.0.3 // indirect diff --git a/go.sum b/go.sum index eb16feb..6a8c7df 100644 --- a/go.sum +++ b/go.sum @@ -17,6 +17,8 @@ github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= +github.com/argandas/serial v0.0.0-20160316175758-889a5ad85462 h1:Hl0NBpA4cJvqHyrm3mhAb+g9bzimPr6pmb9JhfV5PhA= +github.com/argandas/serial v0.0.0-20160316175758-889a5ad85462/go.mod h1:IPXZreh+vkWR8Dr8jwAZJo/L9Kpsw9zSkwYFEJ7eVro= github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= diff --git a/log_serial_1609210559.txt b/log_serial_1609210559.txt new file mode 100644 index 0000000..e69de29 diff --git a/log_serial_1609210613.txt b/log_serial_1609210613.txt new file mode 100644 index 0000000..cfbdddb --- /dev/null +++ b/log_serial_1609210613.txt @@ -0,0 +1 @@ +[ttyS1] 2020/12/29 10:56:53 Serial port ttyS1@9600 open diff --git a/utils/serial.go b/utils/serial.go index 83b671a..2cda036 100644 --- a/utils/serial.go +++ b/utils/serial.go @@ -1,19 +1,19 @@ package utils import ( - "io" "time" - "github.com/tarm/serial" + "github.com/argandas/serial" "go.uber.org/zap" ) var ( - device string - baudrate int - bytesize byte - stopbits byte - port *serial.Port + device string + baudrate int + bytesize byte + stopbits byte + // port *serial.Port + sp *serial.SerialPort portOpened = false Log *zap.Logger ) @@ -27,34 +27,39 @@ func OpenPort(device string, baudrate int, bytesize byte, stopbits byte) error { 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 + sp = serial.New() + sp.EOL('\r') + err := sp.Open(device, baudrate, time.Second*3) + Log.Info("open ", zap.String("device", device), zap.Error(err)) + if err == nil { + portOpened = true } - Log.Info("opened ", zap.String("port", device)) - portOpened = true - return nil + return err + + // 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 +func ReadPort() (string, error) { + // buffer := make([]byte, 1) + // if !ServerRunning { + // return buffer, 0 + // } + + return sp.ReadLine() } //IsPortOpen check serial port status diff --git a/utils/telegram.go b/utils/telegram.go index 3674111..fae2ef3 100644 --- a/utils/telegram.go +++ b/utils/telegram.go @@ -15,7 +15,7 @@ const ( var buffer []byte var RawLog *rotatelogs.RotateLogs -func Append(data []byte) bool { +func Append(data string) bool { buffer = append(buffer, data...) if buffer[len(buffer)-1] == '\r' { buffer = append(buffer, '\n')