Merge branch 'feature/impl-argandas-serial' into develop

This commit is contained in:
zhiqiang feng
2020-12-29 12:57:50 +08:00
9 changed files with 69 additions and 56 deletions
+1
View File
@@ -1,3 +1,4 @@
tty* tty*
telegram.db telegram.db
.idea .idea
log_*
+3 -3
View File
@@ -91,10 +91,10 @@ func start() {
} }
logger.Info("starting read") logger.Info("starting read")
} }
buffer, count := utils.ReadPort() buffer, err := utils.ReadPort()
if count > 0 { if err == nil {
if lograw && len(buffer) > 0 { if lograw && len(buffer) > 0 {
fmt.Print(string(buffer)) fmt.Println(buffer)
} }
if utils.Append(buffer) { if utils.Append(buffer) {
fmt.Println() fmt.Println()
+2
View File
@@ -3,12 +3,14 @@ module it2000.com.cn/tele-recv
go 1.15 go 1.15
require ( require (
github.com/argandas/serial v0.0.0-20160316175758-889a5ad85462
github.com/fsnotify/fsnotify v1.4.9 // indirect github.com/fsnotify/fsnotify v1.4.9 // indirect
github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible
github.com/lestrrat-go/strftime v1.0.3 // indirect github.com/lestrrat-go/strftime v1.0.3 // indirect
github.com/magiconair/properties v1.8.4 // indirect github.com/magiconair/properties v1.8.4 // indirect
github.com/mattn/go-sqlite3 v1.14.5 github.com/mattn/go-sqlite3 v1.14.5
github.com/mitchellh/mapstructure v1.4.0 // indirect 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/pelletier/go-toml v1.8.1 // indirect
github.com/spf13/afero v1.5.1 // indirect github.com/spf13/afero v1.5.1 // indirect
github.com/spf13/cast v1.3.1 // indirect github.com/spf13/cast v1.3.1 // indirect
+4
View File
@@ -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/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/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/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/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-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= github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8=
@@ -143,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/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= 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/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/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/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc=
github.com/pelletier/go-toml v1.2.0 h1:T5zMGML61Wp+FlcbWjRDT7yAxhJNAiPPLOFECq181zc= github.com/pelletier/go-toml v1.2.0 h1:T5zMGML61Wp+FlcbWjRDT7yAxhJNAiPPLOFECq181zc=
View File
+1
View File
@@ -0,0 +1 @@
[ttyS1] 2020/12/29 10:56:53 Serial port ttyS1@9600 open
+33 -27
View File
@@ -1,10 +1,9 @@
package utils package utils
import ( import (
"io"
"time" "time"
"github.com/tarm/serial" "github.com/argandas/serial"
"go.uber.org/zap" "go.uber.org/zap"
) )
@@ -13,7 +12,8 @@ var (
baudrate int baudrate int
bytesize byte bytesize byte
stopbits byte stopbits byte
port *serial.Port // port *serial.Port
sp *serial.SerialPort
portOpened = false portOpened = false
Log *zap.Logger Log *zap.Logger
) )
@@ -27,34 +27,40 @@ func OpenPort(device string, baudrate int, bytesize byte, stopbits byte) error {
zap.Int("baudrate", baudrate), zap.Int("baudrate", baudrate),
zap.Int("bytesize", int(bytesize)), zap.Int("bytesize", int(bytesize)),
zap.Int("stopbits", int(stopbits))) zap.Int("stopbits", int(stopbits)))
config := &serial.Config{Name: device, sp = serial.New()
Baud: baudrate, sp.EOL('\r')
Size: bytesize, sp.Verbose = false
StopBits: serial.StopBits(stopbits), err := sp.Open(device, baudrate, time.Second*3)
ReadTimeout: readDuration} Log.Info("open ", zap.String("device", device), zap.Error(err))
var err error if err == nil {
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 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 //ReadPort read byte array from port
func ReadPort() ([]byte, int) { func ReadPort() (string, error) {
buffer := make([]byte, 1) // buffer := make([]byte, 1)
if !ServerRunning { // if !ServerRunning {
return buffer, 0 // return buffer, 0
} // }
count, err := port.Read(buffer)
if err != nil && err != io.EOF { return sp.ReadLine()
Log.Error("error in read port ", zap.Error(err))
//TODO: 3 time fail try to
}
return buffer, count
} }
//IsPortOpen check serial port status //IsPortOpen check serial port status
+6 -4
View File
@@ -35,10 +35,9 @@ func Listen(address string) {
Log.Info("client connected on ", zap.Any("address", client.RemoteAddr())) Log.Info("client connected on ", zap.Any("address", client.RemoteAddr()))
LoadUnprocessed() LoadUnprocessed()
} else { } else {
Log.Info("client already connected, close") Log.Info("remove old client")
client.Close() closeClient()
client = nil client = conn
conn.Close()
} }
if IsClientConnected() { if IsClientConnected() {
connCheck() connCheck()
@@ -48,12 +47,15 @@ func Listen(address string) {
} }
func WriteToClient(data string) error { func WriteToClient(data string) error {
if client != nil {
_, err := client.Write([]byte(data + "\r\n")) _, err := client.Write([]byte(data + "\r\n"))
if err != nil { if err != nil {
Log.Error("error in write data to client socket ", zap.Error(err)) Log.Error("error in write data to client socket ", zap.Error(err))
closeClient() closeClient()
} }
return err return err
}
return nil
} }
func connCheck() bool { func connCheck() bool {
+9 -12
View File
@@ -12,28 +12,25 @@ const (
Expression = "(?s)ZCZC.*NNNN" Expression = "(?s)ZCZC.*NNNN"
) )
var buffer []byte var buffer string
var exp, _ = regexp.Compile(Expression)
var RawLog *rotatelogs.RotateLogs var RawLog *rotatelogs.RotateLogs
func Append(data []byte) bool { func Append(data string) bool {
buffer = append(buffer, data...) buffer += (data + "\n")
if buffer[len(buffer)-1] == '\r' {
buffer = append(buffer, '\n')
}
return check() return check()
} }
func check() bool { func check() bool {
teleString := string(buffer) teleString := buffer
if strings.Index(teleString, EndTag) > 0 { if strings.Index(teleString, EndTag) > 0 {
exp, _ := regexp.Compile(Expression) telegram := exp.FindString(teleString)
telegram := exp.FindString(string(buffer))
if len(telegram) > 0 { if len(telegram) > 0 {
// Log.Info("telegram ", zap.String("text", telegram)) // Log.Info("telegram ", zap.String("text", telegram))
telegram = removeEmpty(telegram) + "\n\n" telegram = removeEmpty(telegram) + "\n\n"
RawLog.Write([]byte(telegram)) telegram += "\n"
buffer = nil RawLog.Write([]byte(telegram + "\n"))
buffer = ""
InsertTelegram(telegram) InsertTelegram(telegram)
return true return true
} }