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
|
||||
}
|
||||
|
||||
func (sc *SerialConnection) Connect(portPath string) error {
|
||||
mode := &serial.Mode{
|
||||
BaudRate: 115200,
|
||||
}
|
||||
func (sc *SerialConnection) Connect(portPath string, mode *serial.Mode) error {
|
||||
port, err := serial.Open(portPath, mode)
|
||||
if err != nil {
|
||||
return err
|
||||
|
||||
5
go.mod
5
go.mod
@ -3,14 +3,11 @@ module serialAlox
|
||||
go 1.23.6
|
||||
|
||||
require (
|
||||
github.com/stretchr/testify v1.7.0
|
||||
github.com/micmonay/keybd_event v1.1.2
|
||||
go.bug.st/serial v1.6.2
|
||||
)
|
||||
|
||||
require (
|
||||
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
|
||||
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/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/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/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/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||
go.bug.st/serial v1.6.2 h1:kn9LRX3sdm+WxWKufMlIRndwGfPWsH1/9lCWXQCasq8=
|
||||
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/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/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||
|
||||
28
main.go
28
main.go
@ -4,8 +4,12 @@ import (
|
||||
"fmt"
|
||||
"log"
|
||||
"net/http"
|
||||
"runtime"
|
||||
parser "serialAlox/Parser"
|
||||
serialinteraction "serialAlox/SerialInteraction"
|
||||
"time"
|
||||
|
||||
"github.com/micmonay/keybd_event"
|
||||
)
|
||||
|
||||
type MainConfig struct {
|
||||
@ -21,6 +25,15 @@ func NewMainConfig() *MainConfig {
|
||||
}
|
||||
|
||||
func main() {
|
||||
kb, err := keybd_event.NewKeyBonding()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
if runtime.GOOS == "linux" {
|
||||
time.Sleep(2 * time.Second)
|
||||
}
|
||||
|
||||
mc := NewMainConfig()
|
||||
mc.Debug = true
|
||||
|
||||
@ -29,8 +42,19 @@ func main() {
|
||||
|
||||
msParserConf := parser.NewParserConfig()
|
||||
msParser := parser.NewParser(*msParserConf)
|
||||
//msHandler := NewMessageHandler(&sc, *msConf)
|
||||
_ = NewMessageHandler(&sc, *msConf, msParser)
|
||||
msHandler := 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)
|
||||
connectString := fmt.Sprintf(":%d", mc.Port)
|
||||
|
||||
@ -1,5 +1,10 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"context"
|
||||
"log"
|
||||
)
|
||||
|
||||
type ReaderWriter interface {
|
||||
Write(p []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,
|
||||
Conf: conf,
|
||||
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