Added ClientInput
- refactored some magic numbers
This commit is contained in:
parent
0767ddac38
commit
3c011e272b
@ -20,6 +20,15 @@ const (
|
|||||||
CmdClientInput byte = 0x04
|
CmdClientInput byte = 0x04
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
ClientCountOffset = 1
|
||||||
|
|
||||||
|
// Payload Sizes
|
||||||
|
PayloadVersionSize = 10
|
||||||
|
PayloadClientInfoSize = 19
|
||||||
|
PayloadClientInputSize = 13
|
||||||
|
)
|
||||||
|
|
||||||
type PayloadVersion struct {
|
type PayloadVersion struct {
|
||||||
Version uint16
|
Version uint16
|
||||||
Buildhash [7]uint8
|
Buildhash [7]uint8
|
||||||
@ -36,4 +45,8 @@ type PayloadClientInfo struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type PayloadClientInput struct {
|
type PayloadClientInput struct {
|
||||||
|
ClientID byte
|
||||||
|
X float32
|
||||||
|
Y float32
|
||||||
|
InputMask uint32
|
||||||
}
|
}
|
||||||
|
|||||||
@ -68,6 +68,18 @@ func StartApp(config Config) {
|
|||||||
log.Printf("\tVersion %d", c.Version)
|
log.Printf("\tVersion %d", c.Version)
|
||||||
log.Printf("\tMACAddr % X", c.MACAddr)
|
log.Printf("\tMACAddr % X", c.MACAddr)
|
||||||
}
|
}
|
||||||
|
case api.CmdClientInput:
|
||||||
|
v, err := uart.ParseFrameClientInput(val)
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("Could not Parse Client Input %v", err)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
for _, c := range v {
|
||||||
|
log.Printf("Client ID %d", c.ClientID)
|
||||||
|
log.Printf("\tX %f", c.X)
|
||||||
|
log.Printf("\tY %f", c.Y)
|
||||||
|
log.Printf("\tBitmask %08b", c.InputMask)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -78,6 +90,7 @@ func StartApp(config Config) {
|
|||||||
com.Send(api.CmdEcho, make([]byte, 0))
|
com.Send(api.CmdEcho, make([]byte, 0))
|
||||||
com.Send(api.CmdVersion, make([]byte, 0))
|
com.Send(api.CmdVersion, make([]byte, 0))
|
||||||
com.Send(api.CmdClientInfo, make([]byte, 0))
|
com.Send(api.CmdClientInfo, make([]byte, 0))
|
||||||
|
com.Send(api.CmdClientInput, make([]byte, 0))
|
||||||
|
|
||||||
url := fmt.Sprintf("%s:%d", config.Host, config.Port)
|
url := fmt.Sprintf("%s:%d", config.Host, config.Port)
|
||||||
fserver := frontend.New(bus)
|
fserver := frontend.New(bus)
|
||||||
|
|||||||
@ -10,7 +10,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func ParseFrameVersion(frame api.Frame) (api.PayloadVersion, error) {
|
func ParseFrameVersion(frame api.Frame) (api.PayloadVersion, error) {
|
||||||
if len(frame.Data) != 10 {
|
if len(frame.Data) != api.PayloadVersionSize {
|
||||||
return api.PayloadVersion{}, fmt.Errorf("payload wrong size: got %d bytes, want 10", len(frame.Data))
|
return api.PayloadVersion{}, fmt.Errorf("payload wrong size: got %d bytes, want 10", len(frame.Data))
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -21,7 +21,7 @@ func ParseFrameVersion(frame api.Frame) (api.PayloadVersion, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func parseFrameClientInfoPart(data []byte) (api.PayloadClientInfo, error) {
|
func parseFrameClientInfoPart(data []byte) (api.PayloadClientInfo, error) {
|
||||||
if len(data) != 19 {
|
if len(data) != api.PayloadClientInfoSize {
|
||||||
return api.PayloadClientInfo{}, fmt.Errorf("payload wrong size: got %d bytes, want 19", len(data))
|
return api.PayloadClientInfo{}, fmt.Errorf("payload wrong size: got %d bytes, want 19", len(data))
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -47,7 +47,7 @@ func ParseFrameClientInfo(frame api.Frame) ([]api.PayloadClientInfo, error) {
|
|||||||
|
|
||||||
log.Printf("Clients %d", clientCount)
|
log.Printf("Clients %d", clientCount)
|
||||||
|
|
||||||
expectedLen := 1 + (clientCount * 19)
|
expectedLen := 1 + (clientCount * api.PayloadClientInfoSize)
|
||||||
|
|
||||||
if len(frame.Data) < expectedLen {
|
if len(frame.Data) < expectedLen {
|
||||||
return nil, fmt.Errorf("frame data too short: got %d, want %d", len(frame.Data), expectedLen)
|
return nil, fmt.Errorf("frame data too short: got %d, want %d", len(frame.Data), expectedLen)
|
||||||
@ -56,8 +56,8 @@ func ParseFrameClientInfo(frame api.Frame) ([]api.PayloadClientInfo, error) {
|
|||||||
clientList := make([]api.PayloadClientInfo, 0, clientCount)
|
clientList := make([]api.PayloadClientInfo, 0, clientCount)
|
||||||
|
|
||||||
for i := 0; i < clientCount; i++ {
|
for i := 0; i < clientCount; i++ {
|
||||||
start := 1 + (i * 19)
|
start := 1 + (i * api.PayloadClientInfoSize)
|
||||||
end := start + 19
|
end := start + api.PayloadClientInfoSize
|
||||||
|
|
||||||
client, err := parseFrameClientInfoPart(frame.Data[start:end])
|
client, err := parseFrameClientInfoPart(frame.Data[start:end])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -70,40 +70,50 @@ func ParseFrameClientInfo(frame api.Frame) ([]api.PayloadClientInfo, error) {
|
|||||||
return clientList, nil
|
return clientList, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func parse_uart_client_input(payloadBuffer []byte, payload_len int) {
|
func parseFrameClientInputPart(data []byte) (api.PayloadClientInput, error) {
|
||||||
|
if len(data) != api.PayloadClientInputSize {
|
||||||
clientCount := payloadBuffer[1]
|
return api.PayloadClientInput{}, fmt.Errorf("payload wrong size: got %d bytes, want 13", len(data))
|
||||||
fmt.Printf("Client Count %d\n", clientCount)
|
|
||||||
clientInputLen := 13
|
|
||||||
|
|
||||||
for i := 0; i < int(clientCount); i++ {
|
|
||||||
offset := 2 + (i * clientInputLen)
|
|
||||||
|
|
||||||
// --- Client ID (uint8) ---
|
|
||||||
clientID := payloadBuffer[offset]
|
|
||||||
offset += 1
|
|
||||||
|
|
||||||
fmt.Printf("Client: %d\n", clientID)
|
|
||||||
|
|
||||||
// --- Lage X (float32) ---
|
|
||||||
xBits := binary.LittleEndian.Uint32(payloadBuffer[offset : offset+4])
|
|
||||||
lageX := math.Float32frombits(xBits)
|
|
||||||
offset += 4
|
|
||||||
|
|
||||||
fmt.Printf("\tLAGE_X: %f\n", lageX)
|
|
||||||
|
|
||||||
// --- Lage Y (float32) ---
|
|
||||||
yBits := binary.LittleEndian.Uint32(payloadBuffer[offset : offset+4])
|
|
||||||
lageY := math.Float32frombits(yBits)
|
|
||||||
offset += 4
|
|
||||||
|
|
||||||
fmt.Printf("\tLAGE_Y: %f\n", lageY)
|
|
||||||
|
|
||||||
// --- Bitmask (int32) ---
|
|
||||||
maskBits := binary.LittleEndian.Uint32(payloadBuffer[offset : offset+4])
|
|
||||||
bitmask := uint32(maskBits)
|
|
||||||
offset += 4
|
|
||||||
|
|
||||||
fmt.Printf("\tBITMASK: %032b\n", bitmask)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
v := api.PayloadClientInput{
|
||||||
|
ClientID: data[0],
|
||||||
|
X: math.Float32frombits(binary.LittleEndian.Uint32(data[1 : 1+4])),
|
||||||
|
Y: math.Float32frombits(binary.LittleEndian.Uint32(data[5 : 5+4])),
|
||||||
|
InputMask: binary.LittleEndian.Uint32(data[9 : 9+4]),
|
||||||
|
}
|
||||||
|
|
||||||
|
return v, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func ParseFrameClientInput(frame api.Frame) ([]api.PayloadClientInput, error) {
|
||||||
|
if len(frame.Data) == 0 {
|
||||||
|
return nil, fmt.Errorf("empty frame data")
|
||||||
|
}
|
||||||
|
|
||||||
|
clientCount := int(frame.Data[0])
|
||||||
|
|
||||||
|
log.Printf("Clients %d", clientCount)
|
||||||
|
|
||||||
|
expectedLen := 1 + (clientCount * api.PayloadClientInputSize)
|
||||||
|
|
||||||
|
if len(frame.Data) < expectedLen {
|
||||||
|
return nil, fmt.Errorf("frame data too short: got %d, want %d", len(frame.Data), expectedLen)
|
||||||
|
}
|
||||||
|
|
||||||
|
clientList := make([]api.PayloadClientInput, 0, clientCount)
|
||||||
|
|
||||||
|
for i := 0; i < clientCount; i++ {
|
||||||
|
start := 1 + (i * api.PayloadClientInputSize)
|
||||||
|
end := start + api.PayloadClientInputSize
|
||||||
|
|
||||||
|
client, err := parseFrameClientInputPart(frame.Data[start:end])
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("Could not parse client art %d: %v", i, err)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
clientList = append(clientList, client)
|
||||||
|
}
|
||||||
|
|
||||||
|
return clientList, nil
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user