Added Testing of Callback Message for Parsing messages

This commit is contained in:
simon 2025-05-31 18:25:03 +02:00
parent 730e16cf5d
commit a743e940c0
6 changed files with 142 additions and 13 deletions

View File

@ -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
View File

@ -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
View File

@ -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
View File

@ -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)

View File

@ -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
View 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 }
]
}
]
}