Merge branch 'feature/impl-argandas-serial' into develop
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
tty*
|
||||
telegram.db
|
||||
.idea
|
||||
log_*
|
||||
+3
-3
@@ -91,10 +91,10 @@ 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))
|
||||
fmt.Println(buffer)
|
||||
}
|
||||
if utils.Append(buffer) {
|
||||
fmt.Println()
|
||||
|
||||
@@ -3,12 +3,14 @@ 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
|
||||
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
|
||||
|
||||
@@ -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=
|
||||
@@ -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/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=
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
[ttyS1] 2020/12/29 10:56:53 Serial port ttyS1@9600 open
|
||||
+33
-27
@@ -1,10 +1,9 @@
|
||||
package utils
|
||||
|
||||
import (
|
||||
"io"
|
||||
"time"
|
||||
|
||||
"github.com/tarm/serial"
|
||||
"github.com/argandas/serial"
|
||||
"go.uber.org/zap"
|
||||
)
|
||||
|
||||
@@ -13,7 +12,8 @@ var (
|
||||
baudrate int
|
||||
bytesize byte
|
||||
stopbits byte
|
||||
port *serial.Port
|
||||
// port *serial.Port
|
||||
sp *serial.SerialPort
|
||||
portOpened = false
|
||||
Log *zap.Logger
|
||||
)
|
||||
@@ -27,34 +27,40 @@ 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
|
||||
}
|
||||
Log.Info("opened ", zap.String("port", device))
|
||||
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 {
|
||||
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
|
||||
|
||||
+6
-4
@@ -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()
|
||||
@@ -48,6 +47,7 @@ func Listen(address string) {
|
||||
}
|
||||
|
||||
func WriteToClient(data string) error {
|
||||
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))
|
||||
@@ -55,6 +55,8 @@ func WriteToClient(data string) error {
|
||||
}
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func connCheck() bool {
|
||||
_, err := client.Read(make([]byte, 0))
|
||||
|
||||
+9
-12
@@ -12,28 +12,25 @@ const (
|
||||
Expression = "(?s)ZCZC.*NNNN"
|
||||
)
|
||||
|
||||
var buffer []byte
|
||||
var buffer string
|
||||
var exp, _ = regexp.Compile(Expression)
|
||||
var RawLog *rotatelogs.RotateLogs
|
||||
|
||||
func Append(data []byte) bool {
|
||||
buffer = append(buffer, data...)
|
||||
if buffer[len(buffer)-1] == '\r' {
|
||||
buffer = append(buffer, '\n')
|
||||
}
|
||||
func Append(data string) bool {
|
||||
buffer += (data + "\n")
|
||||
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"
|
||||
RawLog.Write([]byte(telegram))
|
||||
buffer = nil
|
||||
telegram += "\n"
|
||||
RawLog.Write([]byte(telegram + "\n"))
|
||||
buffer = ""
|
||||
InsertTelegram(telegram)
|
||||
return true
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user