From 2011a10464207480483a429562f78fe4b8d01640 Mon Sep 17 00:00:00 2001 From: zhiqiang feng Date: Tue, 29 Dec 2020 11:00:01 +0800 Subject: [PATCH 1/8] 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') From bb736bba8596eb477ba4d1e1f57001eb781317c9 Mon Sep 17 00:00:00 2001 From: zhiqiang feng Date: Tue, 29 Dec 2020 11:11:13 +0800 Subject: [PATCH 2/8] fix append --- utils/telegram.go | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/utils/telegram.go b/utils/telegram.go index fae2ef3..5f51310 100644 --- a/utils/telegram.go +++ b/utils/telegram.go @@ -12,28 +12,26 @@ const ( Expression = "(?s)ZCZC.*NNNN" ) -var buffer []byte +var buffer string var RawLog *rotatelogs.RotateLogs func Append(data string) bool { - buffer = append(buffer, data...) - if buffer[len(buffer)-1] == '\r' { - buffer = append(buffer, '\n') - } + buffer = buffer + data return check() } func check() bool { - teleString := string(buffer) + teleString := buffer if strings.Index(teleString, EndTag) > 0 { exp, _ := regexp.Compile(Expression) - telegram := exp.FindString(string(buffer)) + telegram := exp.FindString(teleString) if len(telegram) > 0 { // Log.Info("telegram ", zap.String("text", telegram)) telegram = removeEmpty(telegram) + "\n\n" + telegram += "\n" RawLog.Write([]byte(telegram)) - buffer = nil + buffer = "" InsertTelegram(telegram) return true } From fe4faf5a59d051fbcd9fb62cf104e56ae6df1f15 Mon Sep 17 00:00:00 2001 From: fengzhiqiang Date: Tue, 29 Dec 2020 11:28:10 +0800 Subject: [PATCH 3/8] disable verbose --- go.mod | 1 + go.sum | 2 ++ utils/serial.go | 1 + utils/telegram.go | 2 +- 4 files changed, 5 insertions(+), 1 deletion(-) diff --git a/go.mod b/go.mod index 2752045..759677a 100644 --- a/go.mod +++ b/go.mod @@ -10,6 +10,7 @@ require ( github.com/magiconair/properties v1.8.4 // indirect github.com/mattn/go-sqlite3 v1.14.5 github.com/mitchellh/mapstructure v1.4.0 // indirect + github.com/nsf/gocode v0.0.0-20190302080247-5bee97b48836 // indirect github.com/pelletier/go-toml v1.8.1 // indirect github.com/spf13/afero v1.5.1 // indirect github.com/spf13/cast v1.3.1 // indirect diff --git a/go.sum b/go.sum index 6a8c7df..5c81a6b 100644 --- a/go.sum +++ b/go.sum @@ -145,6 +145,8 @@ github.com/mitchellh/mapstructure v1.4.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RR github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= +github.com/nsf/gocode v0.0.0-20190302080247-5bee97b48836 h1:oc3CL18CoGhyOQJ7HDa9gJAde33bwI8Vi28zLdIzJVc= +github.com/nsf/gocode v0.0.0-20190302080247-5bee97b48836/go.mod h1:6Q8/OMaaKAgTX7/jt2bOXVDrm1eJhoNd+iwzghR7jvs= github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/pelletier/go-toml v1.2.0 h1:T5zMGML61Wp+FlcbWjRDT7yAxhJNAiPPLOFECq181zc= diff --git a/utils/serial.go b/utils/serial.go index 2cda036..5f646e8 100644 --- a/utils/serial.go +++ b/utils/serial.go @@ -29,6 +29,7 @@ func OpenPort(device string, baudrate int, bytesize byte, stopbits byte) error { zap.Int("stopbits", int(stopbits))) sp = serial.New() sp.EOL('\r') + sp.Verbose = false err := sp.Open(device, baudrate, time.Second*3) Log.Info("open ", zap.String("device", device), zap.Error(err)) if err == nil { diff --git a/utils/telegram.go b/utils/telegram.go index 5f51310..44b4493 100644 --- a/utils/telegram.go +++ b/utils/telegram.go @@ -16,7 +16,7 @@ var buffer string var RawLog *rotatelogs.RotateLogs func Append(data string) bool { - buffer = buffer + data + buffer = buffer + data + "\n" return check() } From 0b0e3637bf95b9dcf8dfefe9a30c1e67330e8698 Mon Sep 17 00:00:00 2001 From: zhiqiang feng Date: Tue, 29 Dec 2020 11:30:19 +0800 Subject: [PATCH 4/8] add new line --- utils/telegram.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/utils/telegram.go b/utils/telegram.go index 44b4493..566f88b 100644 --- a/utils/telegram.go +++ b/utils/telegram.go @@ -16,7 +16,7 @@ var buffer string var RawLog *rotatelogs.RotateLogs func Append(data string) bool { - buffer = buffer + data + "\n" + buffer = buffer + data return check() } @@ -30,7 +30,7 @@ func check() bool { // Log.Info("telegram ", zap.String("text", telegram)) telegram = removeEmpty(telegram) + "\n\n" telegram += "\n" - RawLog.Write([]byte(telegram)) + RawLog.Write([]byte(telegram + "\n")) buffer = "" InsertTelegram(telegram) return true From e25420a20e324da57c80588efbcce510f3039b35 Mon Sep 17 00:00:00 2001 From: zhiqiang feng Date: Tue, 29 Dec 2020 11:35:09 +0800 Subject: [PATCH 5/8] add new line --- cmd/start.go | 2 +- utils/telegram.go | 5 ++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/cmd/start.go b/cmd/start.go index 0c4da2e..6e98eda 100644 --- a/cmd/start.go +++ b/cmd/start.go @@ -94,7 +94,7 @@ func start() { buffer, err := utils.ReadPort() if err == nil { if lograw && len(buffer) > 0 { - fmt.Print(string(buffer)) + fmt.Println(buffer) } if utils.Append(buffer) { fmt.Println() diff --git a/utils/telegram.go b/utils/telegram.go index 566f88b..3ca3b9e 100644 --- a/utils/telegram.go +++ b/utils/telegram.go @@ -13,19 +13,18 @@ const ( ) var buffer string +var exp, _ = regexp.Compile(Expression) var RawLog *rotatelogs.RotateLogs func Append(data string) bool { - buffer = buffer + data + buffer += data return check() } func check() bool { teleString := buffer if strings.Index(teleString, EndTag) > 0 { - exp, _ := regexp.Compile(Expression) telegram := exp.FindString(teleString) - if len(telegram) > 0 { // Log.Info("telegram ", zap.String("text", telegram)) telegram = removeEmpty(telegram) + "\n\n" From 8ed16fd502625644169955ef2446126bd8655156 Mon Sep 17 00:00:00 2001 From: zhiqiang feng Date: Tue, 29 Dec 2020 11:43:43 +0800 Subject: [PATCH 6/8] add new line --- utils/telegram.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/utils/telegram.go b/utils/telegram.go index 3ca3b9e..032a126 100644 --- a/utils/telegram.go +++ b/utils/telegram.go @@ -17,7 +17,7 @@ var exp, _ = regexp.Compile(Expression) var RawLog *rotatelogs.RotateLogs func Append(data string) bool { - buffer += data + buffer += (data + "\n") return check() } From dd9514ea975a6039cd92ff70e2cb56984c5d4641 Mon Sep 17 00:00:00 2001 From: zhiqiang feng Date: Tue, 29 Dec 2020 12:27:01 +0800 Subject: [PATCH 7/8] socket client nil --- utils/socket.go | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/utils/socket.go b/utils/socket.go index 7a9e89e..fbbfcf5 100644 --- a/utils/socket.go +++ b/utils/socket.go @@ -48,12 +48,15 @@ func Listen(address string) { } func WriteToClient(data string) error { - _, err := client.Write([]byte(data + "\r\n")) - if err != nil { - Log.Error("error in write data to client socket ", zap.Error(err)) - closeClient() + if client != nil { + _, err := client.Write([]byte(data + "\r\n")) + if err != nil { + Log.Error("error in write data to client socket ", zap.Error(err)) + closeClient() + } + return err } - return err + return nil } func connCheck() bool { From 80b7566d264e7895543e7936d6f0274187405b82 Mon Sep 17 00:00:00 2001 From: zhiqiang feng Date: Tue, 29 Dec 2020 12:36:13 +0800 Subject: [PATCH 8/8] always new client, close old one --- utils/socket.go | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/utils/socket.go b/utils/socket.go index fbbfcf5..d1753c4 100644 --- a/utils/socket.go +++ b/utils/socket.go @@ -35,10 +35,9 @@ func Listen(address string) { Log.Info("client connected on ", zap.Any("address", client.RemoteAddr())) LoadUnprocessed() } else { - Log.Info("client already connected, close") - client.Close() - client = nil - conn.Close() + Log.Info("remove old client") + closeClient() + client = conn } if IsClientConnected() { connCheck()