@@ -72,71 +72,77 @@ void saveMenuStructure(EepromAbstraction* eeprom, uint16_t magicKey) {
7272 saveRecursively (eeprom, menuMgr.getRoot ());
7373}
7474
75+ void loadSingleItem (EepromAbstraction* eeprom, MenuItem* nextMenuItem) {
76+ if (nextMenuItem->getEepromPosition () == 0xffff ) {
77+ // ignore this one, not got an eeprom entry..
78+ }
79+ else if (nextMenuItem->getMenuType () == MENUTYPE_TEXT_VALUE) {
80+ auto textItem = reinterpret_cast <TextMenuItem*>(nextMenuItem);
81+ eeprom->readIntoMemArray ((uint8_t *)textItem->getTextValue (), textItem->getEepromPosition (), textItem->textLength ());
82+ textItem->cleanUpArray ();
83+ textItem->setSendRemoteNeededAll ();
84+ textItem->setChanged (true );
85+ textItem->triggerCallback ();
86+ }
87+ else if (nextMenuItem->getMenuType () == MENUTYPE_TIME) {
88+ auto timeItem = reinterpret_cast <TimeFormattedMenuItem*>(nextMenuItem);
89+ eeprom->readIntoMemArray ((uint8_t *)timeItem->getUnderlyingData (), timeItem->getEepromPosition (), 4 );
90+ timeItem->setSendRemoteNeededAll ();
91+ timeItem->setChanged (true );
92+ timeItem->triggerCallback ();
93+ }
94+ else if (nextMenuItem->getMenuType () == MENUTYPE_DATE) {
95+ auto dateItem = reinterpret_cast <DateFormattedMenuItem*>(nextMenuItem);
96+ eeprom->readIntoMemArray ((uint8_t *)dateItem->getUnderlyingData (), dateItem->getEepromPosition (), 4 );
97+ dateItem->setSendRemoteNeededAll ();
98+ dateItem->setChanged (true );
99+ dateItem->triggerCallback ();
100+ }
101+ else if (nextMenuItem->getMenuType () == MENUTYPE_IPADDRESS) {
102+ auto ipItem = reinterpret_cast <IpAddressMenuItem*>(nextMenuItem);
103+ eeprom->readIntoMemArray (ipItem->getIpAddress (), ipItem->getEepromPosition (), 4 );
104+ ipItem->setSendRemoteNeededAll ();
105+ ipItem->setChanged (true );
106+ ipItem->triggerCallback ();
107+ }
108+ else if (nextMenuItem->getMenuType () == MENUTYPE_SCROLLER_VALUE) {
109+ auto scroller = reinterpret_cast <ScrollChoiceMenuItem*>(nextMenuItem);
110+ scroller->setCurrentValue (eeprom->read16 (scroller->getEepromPosition ()));
111+ }
112+ else if (nextMenuItem->getMenuType () == MENUTYPE_COLOR_VALUE) {
113+ auto rgb = reinterpret_cast <Rgb32MenuItem*>(nextMenuItem);
114+ auto data = rgb->getUnderlying ();
115+ data->red = eeprom->read8 (rgb->getEepromPosition ());
116+ data->green = eeprom->read8 (rgb->getEepromPosition () + 1 );
117+ data->blue = eeprom->read8 (rgb->getEepromPosition () + 2 );
118+ data->alpha = eeprom->read8 (rgb->getEepromPosition () + 3 );
119+ }
120+ else if (nextMenuItem->getMenuType () == MENUTYPE_LARGENUM_VALUE) {
121+ auto numItem = reinterpret_cast <EditableLargeNumberMenuItem*>(nextMenuItem);
122+ numItem->getLargeNumber ()->setNegative (eeprom->read8 (numItem->getEepromPosition ()));
123+ eeprom->readIntoMemArray (numItem->getLargeNumber ()->getNumberBuffer (), numItem->getEepromPosition () + 1 , 6 );
124+ }
125+ else if (nextMenuItem->getMenuType () == MENUTYPE_INT_VALUE) {
126+ auto intItem = (AnalogMenuItem*)nextMenuItem;
127+ intItem->setCurrentValue (eeprom->read16 (intItem->getEepromPosition ()));
128+ }
129+ else if (nextMenuItem->getMenuType () == MENUTYPE_ENUM_VALUE) {
130+ auto valItem = (EnumMenuItem*)nextMenuItem;
131+ valItem->setCurrentValue (eeprom->read16 (valItem->getEepromPosition ()));
132+ }
133+ else if (nextMenuItem->getMenuType () == MENUTYPE_BOOLEAN_VALUE) {
134+ auto valItem = (BooleanMenuItem*)nextMenuItem;
135+ valItem->setCurrentValue (eeprom->read8 (valItem->getEepromPosition ()));
136+ }
137+ }
138+
75139void loadRecursively (EepromAbstraction* eeprom, MenuItem* nextMenuItem) {
76140 while (nextMenuItem) {
77141 if (nextMenuItem->getMenuType () == MENUTYPE_SUB_VALUE) {
78142 loadRecursively (eeprom, ((SubMenuItem*)nextMenuItem)->getChild ());
79143 }
80- else if (nextMenuItem->getEepromPosition () == 0xffff ) {
81- // ignore this one, not got an eeprom entry..
82- }
83- else if (nextMenuItem->getMenuType () == MENUTYPE_TEXT_VALUE) {
84- auto textItem = reinterpret_cast <TextMenuItem*>(nextMenuItem);
85- eeprom->readIntoMemArray ((uint8_t *)textItem->getTextValue (), textItem->getEepromPosition (), textItem->textLength ());
86- textItem->cleanUpArray ();
87- textItem->setSendRemoteNeededAll ();
88- textItem->setChanged (true );
89- textItem->triggerCallback ();
90- }
91- else if (nextMenuItem->getMenuType () == MENUTYPE_TIME) {
92- auto timeItem = reinterpret_cast <TimeFormattedMenuItem*>(nextMenuItem);
93- eeprom->readIntoMemArray ((uint8_t *)timeItem->getUnderlyingData (), timeItem->getEepromPosition (), 4 );
94- timeItem->setSendRemoteNeededAll ();
95- timeItem->setChanged (true );
96- timeItem->triggerCallback ();
97- }
98- else if (nextMenuItem->getMenuType () == MENUTYPE_DATE) {
99- auto dateItem = reinterpret_cast <DateFormattedMenuItem*>(nextMenuItem);
100- eeprom->readIntoMemArray ((uint8_t *)dateItem->getUnderlyingData (), dateItem->getEepromPosition (), 4 );
101- dateItem->setSendRemoteNeededAll ();
102- dateItem->setChanged (true );
103- dateItem->triggerCallback ();
104- }
105- else if (nextMenuItem->getMenuType () == MENUTYPE_IPADDRESS) {
106- auto ipItem = reinterpret_cast <IpAddressMenuItem*>(nextMenuItem);
107- eeprom->readIntoMemArray (ipItem->getIpAddress (), ipItem->getEepromPosition (), 4 );
108- ipItem->setSendRemoteNeededAll ();
109- ipItem->setChanged (true );
110- ipItem->triggerCallback ();
111- }
112- else if (nextMenuItem->getMenuType () == MENUTYPE_SCROLLER_VALUE) {
113- auto scroller = reinterpret_cast <ScrollChoiceMenuItem*>(nextMenuItem);
114- scroller->setCurrentValue (eeprom->read16 (scroller->getEepromPosition ()));
115- }
116- else if (nextMenuItem->getMenuType () == MENUTYPE_COLOR_VALUE) {
117- auto rgb = reinterpret_cast <Rgb32MenuItem*>(nextMenuItem);
118- auto data = rgb->getUnderlying ();
119- data->red = eeprom->read8 (rgb->getEepromPosition ());
120- data->green = eeprom->read8 (rgb->getEepromPosition () + 1 );
121- data->blue = eeprom->read8 (rgb->getEepromPosition () + 2 );
122- data->alpha = eeprom->read8 (rgb->getEepromPosition () + 3 );
123- }
124- else if (nextMenuItem->getMenuType () == MENUTYPE_LARGENUM_VALUE) {
125- auto numItem = reinterpret_cast <EditableLargeNumberMenuItem*>(nextMenuItem);
126- numItem->getLargeNumber ()->setNegative (eeprom->read8 (numItem->getEepromPosition ()));
127- eeprom->readIntoMemArray (numItem->getLargeNumber ()->getNumberBuffer (), numItem->getEepromPosition () + 1 , 6 );
128- }
129- else if (nextMenuItem->getMenuType () == MENUTYPE_INT_VALUE) {
130- auto intItem = (AnalogMenuItem*)nextMenuItem;
131- intItem->setCurrentValue (eeprom->read16 (intItem->getEepromPosition ()));
132- }
133- else if (nextMenuItem->getMenuType () == MENUTYPE_ENUM_VALUE) {
134- auto valItem = (EnumMenuItem*)nextMenuItem;
135- valItem->setCurrentValue (eeprom->read16 (valItem->getEepromPosition ()));
136- }
137- else if (nextMenuItem->getMenuType () == MENUTYPE_BOOLEAN_VALUE) {
138- auto valItem = (BooleanMenuItem*)nextMenuItem;
139- valItem->setCurrentValue (eeprom->read8 (valItem->getEepromPosition ()));
144+ else {
145+ loadSingleItem (eeprom, nextMenuItem);
140146 }
141147 nextMenuItem = nextMenuItem->getNext ();
142148 }
@@ -154,3 +160,13 @@ bool loadMenuStructure(EepromAbstraction* eeprom, uint16_t magicKey) {
154160 return false ;
155161 }
156162}
163+
164+ bool loadMenuItem (EepromAbstraction* eeprom, MenuItem* theItem, uint16_t magicKey) {
165+ if (eeprom->read16 (0 ) == magicKey) {
166+ loadSingleItem (eeprom, theItem);
167+ return true ;
168+ }
169+ else {
170+ return false ;
171+ }
172+ }
0 commit comments