void eeLoadModel(uint8_t id) { if (id<MAX_MODELS) { #if defined(SDCARD) closeLogs(); #endif if (pulsesStarted()) { pausePulses(); } pauseMixerCalculations(); uint32_t size = loadModel(id); #if defined(SIMU) if (sizeof(uint16_t) + sizeof(g_model) > EEPROM_ZONE_SIZE) TRACE("Model data size can't exceed %d bytes (%d bytes)", int(EEPROM_ZONE_SIZE-sizeof(uint16_t)), (int)sizeof(g_model)); if (size > 0 && size != sizeof(g_model)) TRACE("Model data read=%d bytes vs %d bytes\n", size, (int)sizeof(ModelData)); #endif if (size < EEPROM_BUFFER_SIZE) { // if not loaded a fair amount modelDefault(id) ; eeCheck(true); } AUDIO_FLUSH(); flightReset(); logicalSwitchesReset(); if (pulsesStarted()) { checkAll(); resumePulses(); } customFunctionsReset(); restoreTimers(); resumeMixerCalculations(); // TODO pulses should be started after mixer calculations ... #if defined(FRSKY) frskySendAlarms(); #endif #if defined(SDCARD) referenceModelAudioFiles(); #endif LOAD_MODEL_BITMAP(); SEND_FAILSAFE_1S(); PLAY_MODEL_NAME(); } }
void onSdManagerMenu(const char *result) { char lfn[SD_SCREEN_FILE_LENGTH]; uint8_t index = m_posVert-1-s_pgOfs; if (result == STR_SD_INFO) { pushMenu(menuGeneralSdManagerInfo); } else if (result == STR_SD_FORMAT) { POPUP_CONFIRMATION(PSTR("Confirm Format?")); } else if (result == STR_DELETE_FILE) { f_getcwd(lfn, SD_SCREEN_FILE_LENGTH); strcat_P(lfn, PSTR("/")); strcat(lfn, reusableBuffer.sdmanager.lines[index]); f_unlink(lfn); strncpy(statusLineMsg, reusableBuffer.sdmanager.lines[index], 13); strcpy_P(statusLineMsg+min((uint8_t)strlen(statusLineMsg), (uint8_t)13), STR_REMOVED); showStatusLine(); if ((uint16_t)m_posVert == reusableBuffer.sdmanager.count) m_posVert--; reusableBuffer.sdmanager.offset = s_pgOfs-1; } #if defined(CPUARM) /* TODO else if (result == STR_LOAD_FILE) { f_getcwd(lfn, SD_SCREEN_FILE_LENGTH); strcat(lfn, "/"); strcat(lfn, reusableBuffer.sdmanager.lines[index]); POPUP_WARNING(eeLoadModelSD(lfn)); } */ else if (result == STR_PLAY_FILE) { f_getcwd(lfn, SD_SCREEN_FILE_LENGTH); strcat(lfn, "/"); strcat(lfn, reusableBuffer.sdmanager.lines[index]); audioQueue.playFile(lfn, PLAY_BACKGROUND, 255); } #endif #if defined(PCBTARANIS) else if (result == STR_ASSIGN_BITMAP) { strcpy(lfn, reusableBuffer.sdmanager.lines[index]); // TODO duplicated code for finding extension uint8_t len = strlen(lfn) - 4; memset(lfn+len, 0, sizeof(g_model.header.bitmap)-len); // TODO duplicated code memcpy(g_model.header.bitmap, lfn, sizeof(g_model.header.bitmap)); LOAD_MODEL_BITMAP(); memcpy(modelHeaders[g_eeGeneral.currModel].bitmap, g_model.header.bitmap, sizeof(g_model.header.bitmap)); eeDirty(EE_MODEL); } #endif }
void eeLoadModel(uint8_t id) { if (id<MAX_MODELS) { #if defined(SDCARD) closeLogs(); #endif if (pulsesStarted()) { pausePulses(); } pauseMixerCalculations(); uint16_t size = File_system[id+1].size ; memset(&g_model, 0, sizeof(g_model)); #if defined(SIMU) if (sizeof(struct t_eeprom_header) + sizeof(g_model) > 4096) TRACE("Model data size can't exceed %d bytes (%d bytes)", int(4096-sizeof(struct t_eeprom_header)), (int)sizeof(g_model)); else if (size > 0 && size != sizeof(g_model)) TRACE("Model data read=%d bytes vs %d bytes\n", size, (int)sizeof(ModelData)); #endif if (size > sizeof(g_model)) { size = sizeof(g_model) ; } if(size < 256) { // if not loaded a fair amount modelDefault(id) ; eeCheck(true); } else { read32_eeprom_data((File_system[id+1].block_no << 12) + sizeof(struct t_eeprom_header), (uint8_t *)&g_model, size) ; } AUDIO_FLUSH(); flightReset(); logicalSwitchesReset(); if (pulsesStarted()) { checkAll(); resumePulses(); } activeFnSwitches = 0; activeFunctions = 0; memclear(lastFunctionTime, sizeof(lastFunctionTime)); restoreTimers(); resumeMixerCalculations(); // TODO pulses should be started after mixer calculations ... #if defined(FRSKY) frskySendAlarms(); #endif #if defined(CPUARM) && defined(SDCARD) referenceModelAudioFiles(); #endif LOAD_MODEL_BITMAP(); SEND_FAILSAFE_1S(); } }