void eeCheck(bool immediately) { if(!s_eeDirtyMsk) return; if( !immediately && ((g_tmr10ms - s_eeDirtyTime10ms) < WRITE_DELAY_10MS)) return; if(s_eeDirtyMsk & EE_GENERAL){ s_eeDirtyMsk &= ~EE_GENERAL; //not int safe if(theFile.writeRlc2(FILE_TMP, FILE_TYP_GENERAL, (uint8_t*)&g_eeGeneral, sizeof(g_eeGeneral),20) == sizeof(g_eeGeneral)) { EFile::swap(FILE_GENERAL,FILE_TMP); }else{ if(theFile.write_errno()==ERR_TMO){ s_eeDirtyMsk |= EE_GENERAL; //try again s_eeDirtyTime10ms = g_tmr10ms - WRITE_DELAY_10MS; printf("writing aborted GENERAL\n"); }else{ alert(PSTR("EEPROM overflow")); } } //first finish GENERAL, then MODEL !!avoid Toggle effect } else if(s_eeDirtyMsk & EE_MODEL){ s_eeDirtyMsk &= ~EE_MODEL;//not int safe g_model.mdVers = MDVERS_TOP; if(theFile.writeRlc2(FILE_TMP, FILE_TYP_MODEL, (uint8_t*)&g_model, sizeof(g_model),20) == sizeof(g_model)) { EFile::swap(FILE_MODEL(g_eeGeneral.currModel),FILE_TMP); }else{ if(theFile.write_errno()==ERR_TMO){ s_eeDirtyMsk |= EE_MODEL; //try again s_eeDirtyTime10ms = g_tmr10ms - WRITE_DELAY_10MS; printf("writing aborted MODEL\n"); }else{ alert(PSTR("EEPROM overflow")); } } } beepStore(); }
void eeReadAll() { if(!EeFsOpen() || EeFsck() < 0 || !eeLoadGeneral() ) { #ifdef SIM printf("bad eeprom contents\n"); #else alert(PSTR("Bad EEprom Data")); #endif EeFsFormat(); generalDefault(); theFile.writeRlc2(FILE_GENERAL,FILE_TYP_GENERAL,(uint8_t*)&g_eeGeneral, sizeof(g_eeGeneral),200); modelDefault(0); theFile.writeRlc2(FILE_MODEL(0),FILE_TYP_MODEL,(uint8_t*)&g_model, sizeof(g_model),200); } eeLoadModel(g_eeGeneral.currModel); }