Added Testing of Callback Message for Parsing messages
This commit is contained in:
parent
730e16cf5d
commit
a743e940c0
@ -22,10 +22,7 @@ func (sc *SerialConnection) GetPortPath() string {
|
|||||||
return sc.portPath
|
return sc.portPath
|
||||||
}
|
}
|
||||||
|
|
||||||
func (sc *SerialConnection) Connect(portPath string) error {
|
func (sc *SerialConnection) Connect(portPath string, mode *serial.Mode) error {
|
||||||
mode := &serial.Mode{
|
|
||||||
BaudRate: 115200,
|
|
||||||
}
|
|
||||||
port, err := serial.Open(portPath, mode)
|
port, err := serial.Open(portPath, mode)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
|||||||
5
go.mod
5
go.mod
@ -3,14 +3,11 @@ module serialAlox
|
|||||||
go 1.23.6
|
go 1.23.6
|
||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/stretchr/testify v1.7.0
|
github.com/micmonay/keybd_event v1.1.2
|
||||||
go.bug.st/serial v1.6.2
|
go.bug.st/serial v1.6.2
|
||||||
)
|
)
|
||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/creack/goselect v0.1.2 // indirect
|
github.com/creack/goselect v0.1.2 // indirect
|
||||||
github.com/davecgh/go-spew v1.1.0 // indirect
|
|
||||||
github.com/pmezard/go-difflib v1.0.0 // indirect
|
|
||||||
golang.org/x/sys v0.0.0-20220829200755-d48e67d00261 // indirect
|
golang.org/x/sys v0.0.0-20220829200755-d48e67d00261 // indirect
|
||||||
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c // indirect
|
|
||||||
)
|
)
|
||||||
|
|||||||
5
go.sum
5
go.sum
@ -2,16 +2,15 @@ github.com/creack/goselect v0.1.2 h1:2DNy14+JPjRBgPzAd1thbQp4BSIihxcBf0IXhQXDRa0
|
|||||||
github.com/creack/goselect v0.1.2/go.mod h1:a/NhLweNvqIYMuxcMOuWY516Cimucms3DglDzQP3hKY=
|
github.com/creack/goselect v0.1.2/go.mod h1:a/NhLweNvqIYMuxcMOuWY516Cimucms3DglDzQP3hKY=
|
||||||
github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=
|
github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=
|
||||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
|
github.com/micmonay/keybd_event v1.1.2 h1:RpgvPJKOh4Jc+ZYe0OrVzGd2eNMCfuVg3dFTCsuSah4=
|
||||||
|
github.com/micmonay/keybd_event v1.1.2/go.mod h1:CGMWMDNgsfPljzrAWoybUOSKafQPZpv+rLigt2LzNGI=
|
||||||
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
||||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
|
||||||
github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY=
|
github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY=
|
||||||
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||||
go.bug.st/serial v1.6.2 h1:kn9LRX3sdm+WxWKufMlIRndwGfPWsH1/9lCWXQCasq8=
|
go.bug.st/serial v1.6.2 h1:kn9LRX3sdm+WxWKufMlIRndwGfPWsH1/9lCWXQCasq8=
|
||||||
go.bug.st/serial v1.6.2/go.mod h1:UABfsluHAiaNI+La2iESysd9Vetq7VRdpxvjx7CmmOE=
|
go.bug.st/serial v1.6.2/go.mod h1:UABfsluHAiaNI+La2iESysd9Vetq7VRdpxvjx7CmmOE=
|
||||||
golang.org/x/sys v0.0.0-20220829200755-d48e67d00261 h1:v6hYoSR9T5oet+pMXwUWkbiVqx/63mlHjefrHmxwfeY=
|
golang.org/x/sys v0.0.0-20220829200755-d48e67d00261 h1:v6hYoSR9T5oet+pMXwUWkbiVqx/63mlHjefrHmxwfeY=
|
||||||
golang.org/x/sys v0.0.0-20220829200755-d48e67d00261/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20220829200755-d48e67d00261/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
|
|
||||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
|
||||||
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo=
|
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo=
|
||||||
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||||
|
|||||||
28
main.go
28
main.go
@ -4,8 +4,12 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"log"
|
"log"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
"runtime"
|
||||||
parser "serialAlox/Parser"
|
parser "serialAlox/Parser"
|
||||||
serialinteraction "serialAlox/SerialInteraction"
|
serialinteraction "serialAlox/SerialInteraction"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"github.com/micmonay/keybd_event"
|
||||||
)
|
)
|
||||||
|
|
||||||
type MainConfig struct {
|
type MainConfig struct {
|
||||||
@ -21,6 +25,15 @@ func NewMainConfig() *MainConfig {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
|
kb, err := keybd_event.NewKeyBonding()
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if runtime.GOOS == "linux" {
|
||||||
|
time.Sleep(2 * time.Second)
|
||||||
|
}
|
||||||
|
|
||||||
mc := NewMainConfig()
|
mc := NewMainConfig()
|
||||||
mc.Debug = true
|
mc.Debug = true
|
||||||
|
|
||||||
@ -29,8 +42,19 @@ func main() {
|
|||||||
|
|
||||||
msParserConf := parser.NewParserConfig()
|
msParserConf := parser.NewParserConfig()
|
||||||
msParser := parser.NewParser(*msParserConf)
|
msParser := parser.NewParser(*msParserConf)
|
||||||
//msHandler := NewMessageHandler(&sc, *msConf)
|
msHandler := NewMessageHandler(&sc, *msConf, msParser)
|
||||||
_ = NewMessageHandler(&sc, *msConf, msParser)
|
|
||||||
|
msHandler.RegisterMessageCallback(0x01, func(b1 byte, b2 []byte) {
|
||||||
|
log.Printf("ICH BIN DER HANDLER % X, % X", b1, b2)
|
||||||
|
kb.SetKeys(keybd_event.VK_A, keybd_event.VK_B)
|
||||||
|
kb.Press()
|
||||||
|
time.Sleep(10 * time.Millisecond)
|
||||||
|
kb.Release()
|
||||||
|
})
|
||||||
|
|
||||||
|
go msHandler.ListenAndServe()
|
||||||
|
|
||||||
|
msHandler.MessageParser.ParseBytes([]byte{0xAA, 0x01, 0x02, 0x10, 0x20, 0x33})
|
||||||
|
|
||||||
log.Printf("Started Server on %d", mc.Port)
|
log.Printf("Started Server on %d", mc.Port)
|
||||||
connectString := fmt.Sprintf(":%d", mc.Port)
|
connectString := fmt.Sprintf(":%d", mc.Port)
|
||||||
|
|||||||
@ -1,5 +1,10 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"log"
|
||||||
|
)
|
||||||
|
|
||||||
type ReaderWriter interface {
|
type ReaderWriter interface {
|
||||||
Write(p []byte) (n int, err error)
|
Write(p []byte) (n int, err error)
|
||||||
Read(b []byte) (n int, err error)
|
Read(b []byte) (n int, err error)
|
||||||
@ -32,5 +37,50 @@ func NewMessageHandler(con ReaderWriter, conf MessageHandlerConfig, msgParser Pa
|
|||||||
WriterReader: con,
|
WriterReader: con,
|
||||||
Conf: conf,
|
Conf: conf,
|
||||||
MessageParser: msgParser,
|
MessageParser: msgParser,
|
||||||
|
handlers: make(map[byte]HandlerFunc),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (mh *MessageHandler) RegisterMessageCallback(typeByte byte, fn HandlerFunc) error {
|
||||||
|
mh.handlers[typeByte] = fn
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (mh *MessageHandler) ListenAndServe() {
|
||||||
|
ctx, cancle := context.WithCancel(context.Background())
|
||||||
|
go mh.readBytes(ctx)
|
||||||
|
defer cancle()
|
||||||
|
|
||||||
|
for {
|
||||||
|
if mh.MessageParser.IsMessageAvailable() {
|
||||||
|
msgType, msgPayload, err := mh.MessageParser.GetNextMessage()
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("Error getting message %v", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
log.Printf("Got messagetype % X, with payload % X", msgType, msgPayload)
|
||||||
|
if mh.handlers[msgType] != nil {
|
||||||
|
mh.handlers[msgType](msgType, msgPayload)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (mh *MessageHandler) readBytes(ctx context.Context) error {
|
||||||
|
buffer := make([]byte, 1024)
|
||||||
|
for {
|
||||||
|
select {
|
||||||
|
case <-ctx.Done():
|
||||||
|
return ctx.Err()
|
||||||
|
default:
|
||||||
|
// Proceed with reading
|
||||||
|
n, err := mh.WriterReader.Read(buffer)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
// Process the read bytes
|
||||||
|
mh.MessageParser.ParseBytes(buffer[:n])
|
||||||
|
//time.Sleep(100 * time.Millisecond)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
62
testdata/prot1.json
vendored
Normal file
62
testdata/prot1.json
vendored
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
{
|
||||||
|
"protocol": {
|
||||||
|
"start_byte": "0xAA",
|
||||||
|
"message_length": 0,
|
||||||
|
"max_payload": 255,
|
||||||
|
"checksum": "xor"
|
||||||
|
},
|
||||||
|
"messages_esp_to_pc": [
|
||||||
|
{
|
||||||
|
"name": "Clients",
|
||||||
|
"id": "0xE1",
|
||||||
|
"payload": [
|
||||||
|
{ "name": "clientCount", "type": "uint8_t" },
|
||||||
|
{ "name": "clientAvaiableBitMask", "type": "uint32_t" }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Status",
|
||||||
|
"id": "0xE2",
|
||||||
|
"payload": [
|
||||||
|
{ "name": "clientId", "type": "uint8_t" },
|
||||||
|
{ "name": "mac", "type": "uint8_t", "array": 6 }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Pong",
|
||||||
|
"id": "0xD1",
|
||||||
|
"payload": [
|
||||||
|
{ "name": "clientId", "type": "uint8_t" },
|
||||||
|
{ "name": "ping", "type": "uint32_t" }
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"messages_pc_to_esp": [
|
||||||
|
{
|
||||||
|
"name": "RequestPing",
|
||||||
|
"id": "0xE1",
|
||||||
|
"payload": [
|
||||||
|
{ "name": "clientId", "type": "uint8_t" }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "RequestStatus",
|
||||||
|
"id": "0xE2",
|
||||||
|
"payload": [
|
||||||
|
{ "name": "clientId", "type": "uint8_t" }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "PrepareFirmwareUpdate",
|
||||||
|
"id": "0xF1"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "FirmwareUpdateLine",
|
||||||
|
"id": "0xF2",
|
||||||
|
"payload": [
|
||||||
|
{ "name": "data", "type": "uint8_t", "array": 240 }
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
Loading…
x
Reference in New Issue
Block a user