From 97d710c7bb346bff2cb3f0b7f71e0e6173abfb84 Mon Sep 17 00:00:00 2001 From: Eduardo Silva Date: Wed, 11 Mar 2026 23:36:45 +0000 Subject: [PATCH] Quick implementation of passing data to the windows it works, its nice seeing this finally working, but i think I have to go via the composition route for the windows --- src/main.cpp | 2 +- src/methods/methods.cpp | 27 ++++++++++++++++++++++++++- src/methods/methods.h | 2 +- 3 files changed, 28 insertions(+), 3 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 115acfa..c446228 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -193,7 +193,7 @@ void loop(void) { } LOG_WARN(F("\n")); - Data::Parse(payload, resp); + Data::Parse(payload, resp, &mainScreen); break; } diff --git a/src/methods/methods.cpp b/src/methods/methods.cpp index f18fd4c..cd26c3f 100644 --- a/src/methods/methods.cpp +++ b/src/methods/methods.cpp @@ -7,6 +7,7 @@ #include "UIComponent.h" #include "UIScreen.h" #include +#include #include namespace Window { @@ -161,9 +162,11 @@ namespace Window { }; namespace Data { - uint8_t Parse(uint8_t *payload, size_t payloadSize) { + 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; @@ -177,6 +180,8 @@ namespace Data { uint8_t value = payload[curPos + 1]; LOG_WARN(F("RECEIVED [%2d]: %d\n"), wID, value); + sprintf(buffer, "%d", value); + curPos += 2; break; } @@ -184,6 +189,8 @@ namespace Data { int8_t value = (int8_t)payload[curPos + 1]; LOG_WARN(F("RECEIVED [%2d]: %d\n"), wID, value); + sprintf(buffer, "%d", value); + curPos += 2; break; } @@ -192,6 +199,7 @@ namespace Data { memcpy(&value, payload + curPos + 1, 2); LOG_WARN(F("RECEIVED [%2d]: %d\n"), wID, value); + sprintf(buffer, "%d", value); curPos += 3; // 1 (Type) + 2 (Value) break; @@ -200,6 +208,7 @@ namespace Data { int16_t value; memcpy(&value, payload + curPos + 1, 2); LOG_WARN(F("RECEIVED [%2d]: %d\n"), wID, value); + sprintf(buffer, "%d", value); curPos += 3; break; @@ -208,6 +217,7 @@ namespace Data { uint32_t value; memcpy(&value, payload + curPos + 1, 4); LOG_WARN(F("RECEIVED [%2d]: %d\n"), wID, value); + sprintf(buffer, "%d", value); curPos += 5; // 1 (Type) + 4 (Value) break; @@ -216,6 +226,7 @@ namespace Data { int32_t value; memcpy(&value, payload + curPos + 1, 4); LOG_WARN(F("RECEIVED [%2d]: %d\n"), wID, value); + sprintf(buffer, "%d", value); curPos += 5; break; @@ -224,6 +235,7 @@ namespace Data { uint64_t value; memcpy(&value, payload + curPos + 1, 8); LOG_WARN(F("RECEIVED [%2d]: %d\n"), wID, value); + sprintf(buffer, "%ld", value); curPos += 9; // 1 (Type) + 8 (Value) break; @@ -232,6 +244,7 @@ namespace Data { int64_t value; memcpy(&value, payload + curPos + 1, 8); LOG_WARN(F("RECEIVED [%2d]: %d\n"), wID, value); + sprintf(buffer, "%ld", value); curPos += 9; break; @@ -239,6 +252,7 @@ namespace Data { case DataTypeCHAR: { uint8_t value = payload[curPos + 1]; LOG_WARN(F("RECEIVED [%2d]: %c\n"), wID, value); + sprintf(buffer, "%c", value); curPos += 2; break; @@ -251,6 +265,7 @@ namespace Data { strValue[len] = '\0'; // Null terminator // LOG_WARN(F("RECEIVED [%2d] [%d]: %s\n"), wID, len, strValue); + sprintf(buffer, "%s", strValue); curPos += (2 + len); break; @@ -259,7 +274,17 @@ namespace Data { // 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); + continue; } + + // Update the window value here + UIElement* mainWindow = mainScreen->mainWindowHandle; + UIElement* win = mainWindow->GetChild(wID); + if (win == NULL) { + continue; + } + + win->Update(buffer, false); } return 0; diff --git a/src/methods/methods.h b/src/methods/methods.h index 514f735..420a19c 100644 --- a/src/methods/methods.h +++ b/src/methods/methods.h @@ -83,7 +83,7 @@ namespace Data { const DataType DataTypeSTRING = 8; const DataType DataTypeCHAR = 9; - uint8_t Parse(uint8_t *payload, size_t payloadSize); + uint8_t Parse(uint8_t *payload, size_t payloadSize, Curses::Screen* mainScreen); } #endif