Постала інша проблема. Досвіду не вистачає, щоб придумати як обійти, чи зробити по іншому.
Є оголошені такі структури і дефайн:
typedef struct {
char host[33] = NAME_DEVICE;
char blynkToken[33] = "";
char blynkServer[33] = "blynk-cloud.com";
char blynkPort[6] = "8442";
int salt = EEPROM_SALT_WM;
} WMSettings;
WMSettings wmSettings;
typedef const struct Menu_Item {
const uint16_t Index;
const String Text;
const String Value;
} Menu_Item_t;
#define MENU_ITEM(Name, Index, Text, Value) \
Menu_Item_t const Name = {Index, Text, Value}
Є оголошені такі пункти меню:
//--------Name----------Index--------Text-----------Value------
MENU_ITEM(Menu1_1_0, M_BACK_DEVICE, "Back", "<---");
MENU_ITEM(Menu1_1_1, M_DEVICE_NAME, String(wmSettings.host), " ");
MENU_ITEM(Menu1_1_2, M_FIRMWARE_VERSION, "Firmware version", String(FIRMWARE_VERSION));
Плюс масив з пунктів меню (сторінка меню):
Menu_Item_t const * PageDeviceInfo[] = {&Menu1_1_0, &Menu1_1_1, &Menu1_1_2, NULL};
Саме проблема тут в Menu1_1_1, а саме String(wmSettings.host), бо при оголошені "прописується" назва хоста за замовчуванням "IoT-ESP8266". А вже потім на початку програми з EEPROM в wmSetting вантажаться поточні налаштування, наприклад host = "test-device". І коли я формую сторінку з пунктами меню:
TableMenuWrite(PageDeviceInfo);
static void TableMenuWrite(Menu_Item_t const * page[])
{
tableSettings.clear();
int i = 0;
while (page[i] != NULL)
{
tableSettings.addRow(page[i]->Index, page[i]->Text, page[i]->Value);
i++;
}
}
Я отримаю в меню назву host за замовчуванням - "IoT ESP8266", а не бажану назву "test-device". Це зрозуміло мені чому так відбувається. Бо пункт меню сформований під час компіляції і зашитий вже в флеш.
Тимчасово вийшов з положення що після виклику:
TableMenuWrite(PageDeviceInfo);
дописав:
tableSettings.updateRow(M_DEVICE_NAME, wmSettings.host, " ");
тоді вже завантажена з EEPROM назва девайсу перебиває назву за замовчуванням. Але це повна хрінь і нівелює всі мої потуги по зручній структуризації меню і зручної зміни і переробки меню в процесі еволюції прошивки.
От що придумати? Бо даних завантажених з EEPROM чималенько і такі костилі з tableSettings.updateRow мене не влаштовують.