Added Test Data Message for Game Development Testing

This commit is contained in:
2025-09-27 15:57:52 +02:00
parent df35def702
commit 7097e9e7ab
3 changed files with 123 additions and 24 deletions
+63 -24
View File
@@ -6,7 +6,9 @@ import (
"flag"
"fmt"
"log"
"math"
"os"
"strconv"
"time"
"github.com/pterm/pterm"
@@ -17,9 +19,10 @@ type ParserState int
const (
// MISC
UART_ECHO = 0x01
UART_VERSION = 0x02
UART_CLIENT_INFO = 0x03
UART_ECHO = 0x01
UART_VERSION = 0x02
UART_CLIENT_INFO = 0x03
UART_CLIENT_INPUT = 0x04
// OTA
UART_OTA_START = 0x10
@@ -199,30 +202,63 @@ func parse_uart_client_info_payload(payloadBuffer []byte, payload_len int) {
}
}
func parse_uart_client_input(payloadBuffer []byte, payload_len int) {
clientCount := payloadBuffer[1]
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)
}
}
func message_receive_callback(mr MessageReceive) {
log.Printf("Message Received: % 02X\n", mr.raw_message[:mr.raw_write_index])
switch mr.parsed_message[0] {
case byte(UART_ECHO):
break
case UART_VERSION:
parse_uart_version_payload(mr.parsed_message, mr.write_index)
break
case UART_CLIENT_INFO:
parse_uart_client_info_payload(mr.parsed_message, mr.write_index)
break
case UART_OTA_START:
OTA_UpdateHandler.NewOTAMessage <- mr
break
case UART_OTA_PAYLOAD:
parse_uart_ota_payload_payload(mr.parsed_message, mr.write_index)
OTA_UpdateHandler.NewOTAMessage <- mr
break
case UART_OTA_END:
OTA_UpdateHandler.NewOTAMessage <- mr
break
case UART_OTA_STATUS:
OTA_UpdateHandler.NewOTAMessage <- mr
break
case UART_CLIENT_INPUT:
parse_uart_client_input(mr.parsed_message, mr.write_index)
}
}
@@ -240,7 +276,6 @@ func parseByte(mr *MessageReceive, pbyte byte) {
addByteToRawBuffer(mr, pbyte)
}
// ignore every other byte
break
case GET_MESSAGE_ID:
if pbyte == ESCAPE_BYTE {
mr.state = ESCAPED_MESSAGE_ID
@@ -248,11 +283,9 @@ func parseByte(mr *MessageReceive, pbyte byte) {
addByteToParsedBuffer(mr, pbyte)
mr.state = IN_PAYLOD
}
break
case ESCAPED_MESSAGE_ID:
addByteToParsedBuffer(mr, pbyte)
mr.state = IN_PAYLOD
break
case IN_PAYLOD:
if pbyte == ESCAPE_BYTE {
mr.state = ESCAPED_PAYLOAD_BYTE
@@ -277,11 +310,9 @@ func parseByte(mr *MessageReceive, pbyte byte) {
}
// normal case
addByteToParsedBuffer(mr, pbyte)
break
case ESCAPED_PAYLOAD_BYTE:
addByteToParsedBuffer(mr, pbyte)
mr.state = IN_PAYLOD
break
default:
panic(fmt.Sprintf("unexpected main.ParserState: %#v", mr.state))
}
@@ -454,9 +485,11 @@ func main() {
for {
var input string
_, err := fmt.Scanln(&input)
var input2 string
_, err := fmt.Scanln(&input, &input2)
if err != nil {
log.Fatalf("Could not read from stdin")
log.Fatalf("Could not read from stdin %v", err)
return
}
fmt.Printf("Input %v", input)
@@ -469,28 +502,24 @@ func main() {
payload_buffer[0] = UART_ECHO
n := buildMessage(payload_buffer, 1, send_buffer)
sendMessage(port, send_buffer[:n])
break
case "2":
payload_buffer := make([]byte, 1024)
send_buffer := make([]byte, 1024)
payload_buffer[0] = UART_VERSION
n := buildMessage(payload_buffer, 1, send_buffer)
sendMessage(port, send_buffer[:n])
break
case "3":
payload_buffer := make([]byte, 1024)
send_buffer := make([]byte, 1024)
payload_buffer[0] = UART_CLIENT_INFO
n := buildMessage(payload_buffer, 1, send_buffer)
sendMessage(port, send_buffer[:n])
break
case "4": // start update
payload_buffer := make([]byte, 1024)
send_buffer := make([]byte, 1024)
payload_buffer[0] = UART_OTA_START
n := buildMessage(payload_buffer, 1, send_buffer)
sendMessage(port, send_buffer[:n])
break
case "5": // send payload
payload_buffer := make([]byte, 1024)
send_buffer := make([]byte, 1024)
@@ -500,15 +529,25 @@ func main() {
}
n := buildMessage(payload_buffer, 201, send_buffer)
sendMessage(port, send_buffer[:n])
break
case "6": // end update
case "7": // Start OTA for ESP-NOW clients
payload_buffer := make([]byte, 1024)
send_buffer := make([]byte, 1024)
payload_buffer[0] = UART_OTA_START_ESPNOW // Use the new constant
payload_buffer[0] = UART_OTA_START_ESPNOW
n := buildMessage(payload_buffer, 1, send_buffer)
sendMessage(port, send_buffer[:n])
break
case "8": // Get Fake Client Input
payload_buffer := make([]byte, 1024)
send_buffer := make([]byte, 1024)
payload_buffer[0] = UART_CLIENT_INPUT
seed, err := strconv.Atoi(input2)
if err != nil {
log.Printf("Could not parse %v to a number", input2)
return
}
payload_buffer[1] = byte(seed)
n := buildMessage(payload_buffer, 2, send_buffer)
sendMessage(port, send_buffer[:n])
default:
fmt.Printf("Not a valid input")
}