small bug fix

This commit is contained in:
2026-03-14 22:22:18 +00:00
parent 1e6d5e4c45
commit 53d8938cd2
5 changed files with 47 additions and 31 deletions
+2
View File
@@ -12,6 +12,8 @@ char* CommandToStr(Command id) {
return (char*)"CmdDestroyWindow";
case CmdUpdateWinDims:
return (char*)"CmdUpdateWinDims";
case CMDData:
return (char*)"CMDData";
default:
return (char*)"CmdUnknown";
}
+3 -3
View File
@@ -61,7 +61,7 @@ namespace WalkieTalkie {
return 0;
}
static inline size_t RecvETXRoutine(uint8_t *payload, byte *b) {
static inline int RecvETXRoutine(uint8_t *payload, byte *b) {
LOG_TRACE(F("READING ETX\n"));
state = WaitingSTX;
@@ -109,12 +109,12 @@ namespace WalkieTalkie {
}
case RecvETX: {
return RecvETXRoutine(payload, &byte);
result = RecvETXRoutine(payload, &byte);
break;
}
}
}
return 0;
return result;
}
};
+1 -1
View File
@@ -4,7 +4,6 @@
#include "communication/commands.h"
#include <cstdint>
#include <Arduino.h>
#include <cstring>
namespace WalkieTalkie {
typedef enum {
@@ -16,6 +15,7 @@ namespace WalkieTalkie {
RecvETX = 5,
} RecvState;
static uint8_t tempLenBuffer[2];
inline uint8_t buffer[4096];
inline int16_t bufferIndex = 0;
inline RecvState state = WaitingSTX;
+27 -13
View File
@@ -93,12 +93,32 @@ void setup() {
}
const uint16_t PayloadMax = 2056;
uint8_t payload[PayloadMax] = {0};
char lineBuffer[64]; // Enough for "XX XX XX XX XX XX XX XX "
//
void print_memory_stats() {
multi_heap_info_t info;
// MALLOC_CAP_8BIT ensures we are looking at memory capable of
// storing data (Internal RAM + PSRAM if available)
heap_caps_get_info(&info, MALLOC_CAP_8BIT);
size_t total_free = info.total_free_bytes;
size_t total_allocated = info.total_allocated_bytes;
size_t total_size = total_free + total_allocated;
size_t min_free = info.minimum_free_bytes; // "Low water mark"
LOG_INFO(F("Memory Stats:\r\n"));
LOG_INFO(F(" Total: %u bytes\r\n"), total_size);
LOG_INFO(F(" Used: %u bytes\r\n"), total_allocated);
LOG_INFO(F(" Free: %u bytes\r\n"), total_free);
LOG_INFO(F(" Min Free: %u bytes (Historic peak usage)\r\n"), min_free);
}
void loop(void) {
uint64_t cur = millis();
Command cmd = CmdUnknown;
uint8_t payload[PayloadMax] = {0};
if (Serial.available() > 0) {
int16_t resp = WalkieTalkie::RecvStream(&cmd, payload, PayloadMax);
@@ -106,13 +126,15 @@ void loop(void) {
LOG_WARN(F("Failed to receive data from serial"));
return;
} else if (resp == 0) {
LOG_INFO(F("No data to receive"));
LOG_INFO(F("No data to receive\r\n"));
return;
}
LOG_INFO(F("Command: %s\n"), CommandToStr(cmd));
LOG_INFO(F("Response Payload Len: %d\n"), resp);
print_memory_stats();
switch(cmd) {
case CmdRequestID:
IdentificationPacket papers;
@@ -163,16 +185,8 @@ void loop(void) {
break;
}
case CMDData: {
// Data groups of: windowData {
// idx int16 4 bytes
// data char* 32 bytes
// }
// Packet will be: Data {
// [windowData]
// }
LOG_WARN(F("Data Received: %d bytes\n"), resp);
LOG_WARN(F("Data Received: %d bytes\r\n"), resp);
char lineBuffer[32]; // Enough for "XX XX XX XX XX XX XX XX "
int pos = 0;
for (int k = 0; k < resp; k++) {
@@ -184,14 +198,14 @@ void loop(void) {
if ((k + 1) % 8 == 0 || k == resp - 1) {
// Send the completed line to the logger
// We use LOG_DEBUG or similar so we don't spam [WARN] on every line
Logger::Printf(F("%s\n"), lineBuffer);
LOG_DEBUG(F("%s\r\n"), lineBuffer);
// Reset buffer position for the next line
pos = 0;
memset(lineBuffer, 0, sizeof(lineBuffer));
}
}
LOG_WARN(F("\n"));
LOG_DEBUG(F("\r\n"));
Data::Parse(payload, resp, &mainScreen);
+14 -14
View File
@@ -212,11 +212,12 @@ namespace Window {
};
namespace Data {
char buffer[128];
char strValue[128];
uint8_t Parse(uint8_t *payload, size_t payloadSize, Curses::Screen* mainScreen) {
uint16_t curPos = 0;
char buffer[128];
for (; curPos < payloadSize;) {
// Get the data type from the current position
int16_t wID;
@@ -228,7 +229,7 @@ namespace Data {
switch (type) {
case DataTypeUINT8: {
uint8_t value = payload[curPos + 1];
LOG_WARN(F("RECEIVED [%2d]: %d\n"), wID, value);
LOG_DEBUG(F("[0x%02X] RECEIVED [%2d]: %d\r\n"), type, wID, value);
sprintf(buffer, "%d", value);
@@ -237,7 +238,7 @@ namespace Data {
}
case DataTypeINT8: {
int8_t value = (int8_t)payload[curPos + 1];
LOG_WARN(F("RECEIVED [%2d]: %d\n"), wID, value);
LOG_DEBUG(F("[0x%02X] RECEIVED [%2d]: %d\r\n"), type, wID, value);
sprintf(buffer, "%d", value);
@@ -248,7 +249,7 @@ namespace Data {
uint16_t value;
memcpy(&value, payload + curPos + 1, 2);
LOG_WARN(F("RECEIVED [%2d]: %d\n"), wID, value);
LOG_DEBUG(F("[0x%02X] RECEIVED [%2d]: %d\r\n"), type, wID, value);
sprintf(buffer, "%d", value);
curPos += 3; // 1 (Type) + 2 (Value)
@@ -257,7 +258,7 @@ namespace Data {
case DataTypeINT16: {
int16_t value;
memcpy(&value, payload + curPos + 1, 2);
LOG_WARN(F("RECEIVED [%2d]: %d\n"), wID, value);
LOG_DEBUG(F("[0x%02X] RECEIVED [%2d]: %d\r\n"), type, wID, value);
sprintf(buffer, "%d", value);
curPos += 3;
@@ -266,7 +267,7 @@ namespace Data {
case DataTypeUINT32: {
uint32_t value;
memcpy(&value, payload + curPos + 1, 4);
LOG_WARN(F("RECEIVED [%2d]: %d\n"), wID, value);
LOG_DEBUG(F("[0x%02X] RECEIVED [%2d]: %d\r\n"), type, wID, value);
sprintf(buffer, "%d", value);
curPos += 5; // 1 (Type) + 4 (Value)
@@ -275,7 +276,7 @@ namespace Data {
case DataTypeINT32: {
int32_t value;
memcpy(&value, payload + curPos + 1, 4);
LOG_WARN(F("RECEIVED [%2d]: %d\n"), wID, value);
LOG_DEBUG(F("[0x%02X] RECEIVED [%2d]: %d\r\n"), type, wID, value);
sprintf(buffer, "%d", value);
curPos += 5;
@@ -284,7 +285,7 @@ namespace Data {
case DataTypeUINT64: {
uint64_t value;
memcpy(&value, payload + curPos + 1, 8);
LOG_WARN(F("RECEIVED [%2d]: %d\n"), wID, value);
LOG_DEBUG(F("[0x%02X] RECEIVED [%2d]: %d\r\n"), type, wID, value);
sprintf(buffer, "%ld", value);
curPos += 9; // 1 (Type) + 8 (Value)
@@ -293,7 +294,7 @@ namespace Data {
case DataTypeINT64: {
int64_t value;
memcpy(&value, payload + curPos + 1, 8);
LOG_WARN(F("RECEIVED [%2d]: %d\n"), wID, value);
LOG_DEBUG(F("[0x%02X] RECEIVED [%2d]: %d\r\n"), type, wID, value);
sprintf(buffer, "%ld", value);
curPos += 9;
@@ -301,7 +302,7 @@ namespace Data {
}
case DataTypeCHAR: {
uint8_t value = payload[curPos + 1];
LOG_WARN(F("RECEIVED [%2d]: %c\n"), wID, value);
LOG_DEBUG(F("[0x%02X] RECEIVED [%2d]: %c\r\n"), type, wID, value);
sprintf(buffer, "%c", value);
curPos += 2;
@@ -310,11 +311,10 @@ namespace Data {
case DataTypeSTRING: {
// Strings have: Type (1), Len (1), Data (Len)
uint8_t len = payload[curPos + 1];
char strValue[len + 1];
memcpy(strValue, payload + curPos + 2, len);
strValue[len] = '\0'; // Null terminator
//
LOG_WARN(F("RECEIVED [%2d] [%d]: %s\n"), wID, len, strValue);
LOG_DEBUG(F("[0x%02X] RECEIVED [%2d]: %s\r\n"), type, wID, strValue);
sprintf(buffer, "%s", strValue);
curPos += (2 + len);
@@ -323,7 +323,7 @@ namespace Data {
default:
// If we hit an unknown type, we are desynced.
// Better to stop than to read garbage.
LOG_ERROR(F("Unknown Type 0x%02X at pos %d"), type, curPos);
LOG_ERROR(F("Unknown Type 0x%02X at pos %d\r\n"), type, curPos);
continue;
}