From e52a2e27c486d926abe8221b1e01da76b595b59d Mon Sep 17 00:00:00 2001 From: philmoz Date: Thu, 1 Jan 2026 12:22:52 +1100 Subject: [PATCH] fix(color): radio may crash if model yaml file does not contain any screen definitions (#6916) --- radio/src/datastructs_model.cpp | 5 +++++ radio/src/datastructs_private.h | 1 + radio/src/storage/storage_common.cpp | 3 +++ 3 files changed, 9 insertions(+) diff --git a/radio/src/datastructs_model.cpp b/radio/src/datastructs_model.cpp index ab5a65962..284227047 100644 --- a/radio/src/datastructs_model.cpp +++ b/radio/src/datastructs_model.cpp @@ -197,6 +197,11 @@ void ModelData::cfsSetOffColorLuaOverride(uint8_t n, bool v) { static TopBarPersistentData _topbarData; static CustomScreenData* _screenData[MAX_CUSTOM_SCREENS]; +bool ModelData::hasScreenData(int screenNum) +{ + return _screenData[screenNum] != nullptr; +} + CustomScreenData* ModelData::getScreenData(int screenNum) { if (_screenData[screenNum] == nullptr) { diff --git a/radio/src/datastructs_private.h b/radio/src/datastructs_private.h index a95dd9ed3..62e7cf0f1 100644 --- a/radio/src/datastructs_private.h +++ b/radio/src/datastructs_private.h @@ -835,6 +835,7 @@ PACK(struct ModelData { const char* getScreenLayoutId(int screenNum); void setScreenLayoutId(int screenNum, const char* s); TopBarPersistentData* getTopbarData(); + bool hasScreenData(int screenNum); CustomScreenData* getScreenData(int screenNum); LayoutPersistentData* getScreenLayoutData(int screenNum); WidgetPersistentData* getWidgetData(int screenNum, int zoneNum); diff --git a/radio/src/storage/storage_common.cpp b/radio/src/storage/storage_common.cpp index 75f0f942b..92cf584cc 100644 --- a/radio/src/storage/storage_common.cpp +++ b/radio/src/storage/storage_common.cpp @@ -161,6 +161,9 @@ static void sanitizeMixerLines() void postModelLoad(bool alarms) { #if defined(COLORLCD) + if (!g_model.hasScreenData(0)) + LayoutFactory::loadDefaultLayout(); + if (g_model.topbarWidgetWidth[0] == 0) { // Set default width for top bar widgets for (int i = 0; i < MAX_TOPBAR_ZONES; i += 1)