diff --git a/radio/src/gui/128x64/model_setup.cpp b/radio/src/gui/128x64/model_setup.cpp index 56a652d49..193b342ec 100644 --- a/radio/src/gui/128x64/model_setup.cpp +++ b/radio/src/gui/128x64/model_setup.cpp @@ -986,6 +986,7 @@ void menuModelSetup(event_t event) g_model.moduleData[moduleIdx].type = reusableBuffer.moduleSetup.newType; reusableBuffer.moduleSetup.previousType = reusableBuffer.moduleSetup.newType; setModuleType(moduleIdx, g_model.moduleData[moduleIdx].type); + storageDirty(EE_MODEL); } else if (g_model.moduleData[moduleIdx].type == MODULE_TYPE_NONE) { g_model.moduleData[moduleIdx].type = reusableBuffer.moduleSetup.newType; @@ -1005,7 +1006,7 @@ void menuModelSetup(event_t event) } else #endif - reusableBuffer.moduleSetup.newType = checkIncDec(event, reusableBuffer.moduleSetup.newType, MODULE_TYPE_NONE, MODULE_TYPE_MAX, EE_MODEL, + reusableBuffer.moduleSetup.newType = checkIncDec(event, reusableBuffer.moduleSetup.newType, MODULE_TYPE_NONE, MODULE_TYPE_MAX, 0, isExternalModuleAvailable); break; @@ -1519,6 +1520,7 @@ void menuModelSetup(event_t event) lcdDrawText(lcdNextPos + 2, y, STR_MODULE_RANGE, l_posHorz == 2 ? attr : 0); } uint8_t newFlag = 0; + uint8_t oldFlag = moduleState[moduleIdx].mode; #if defined(MULTIMODULE) if (isModuleMultimodule(moduleIdx) && getMultiBindStatus(moduleIdx) == MULTI_BIND_FINISHED) { @@ -1548,7 +1550,7 @@ void menuModelSetup(event_t event) startBindMenu(moduleIdx); continue; } - if (moduleState[moduleIdx].mode == MODULE_MODE_BIND) { + if (oldFlag == MODULE_MODE_BIND) { newFlag = MODULE_MODE_BIND; } else { @@ -1560,6 +1562,12 @@ void menuModelSetup(event_t event) else { newFlag = MODULE_MODE_BIND; } + + if (!event && (oldFlag != newFlag) && + (oldFlag == MODULE_MODE_NORMAL)) { + // Bind mode switched off from somewhere else + s_editMode = 0; + } } else if (l_posHorz == 2) { newFlag = MODULE_MODE_RANGECHECK; @@ -1582,6 +1590,12 @@ void menuModelSetup(event_t event) setMultiBindStatus(moduleIdx, MULTI_BIND_INITIATED); } #endif + if (isModuleDSMP(moduleIdx) && + (oldFlag != newFlag) && + (oldFlag == MODULE_MODE_BIND)) { + // Restart DSMP module when exiting bind mode + restartModule(moduleIdx); + } } } break; diff --git a/radio/src/gui/212x64/model_setup.cpp b/radio/src/gui/212x64/model_setup.cpp index 62e276d41..e4b54b703 100644 --- a/radio/src/gui/212x64/model_setup.cpp +++ b/radio/src/gui/212x64/model_setup.cpp @@ -956,6 +956,7 @@ void menuModelSetup(event_t event) g_model.moduleData[EXTERNAL_MODULE].type = reusableBuffer.moduleSetup.newType; reusableBuffer.moduleSetup.previousType = reusableBuffer.moduleSetup.newType; setModuleType(EXTERNAL_MODULE, g_model.moduleData[EXTERNAL_MODULE].type); + storageDirty(EE_MODEL); } else if (g_model.moduleData[EXTERNAL_MODULE].type == MODULE_TYPE_NONE) { g_model.moduleData[EXTERNAL_MODULE].type = reusableBuffer.moduleSetup.newType; @@ -965,7 +966,7 @@ void menuModelSetup(event_t event) if (s_editMode > 0) { switch (menuHorizontalPosition) { case 0: - reusableBuffer.moduleSetup.newType = checkIncDec(event, reusableBuffer.moduleSetup.newType, MODULE_TYPE_NONE, MODULE_TYPE_MAX, EE_MODEL, isExternalModuleAvailable); + reusableBuffer.moduleSetup.newType = checkIncDec(event, reusableBuffer.moduleSetup.newType, MODULE_TYPE_NONE, MODULE_TYPE_MAX, 0, isExternalModuleAvailable); break; case 1: @@ -1360,6 +1361,7 @@ void menuModelSetup(event_t event) lcdDrawText(lcdNextPos + FW, y, STR_MODULE_RANGE, l_posHorz == 2 ? attr : 0); } uint8_t newFlag = 0; + uint8_t oldFlag = moduleState[moduleIdx].mode; #if defined(MULTIMODULE) if (isModuleMultimodule(moduleIdx) && getMultiBindStatus(moduleIdx) == MULTI_BIND_FINISHED) { @@ -1381,7 +1383,7 @@ void menuModelSetup(event_t event) startBindMenu(moduleIdx); continue; } - if (moduleState[moduleIdx].mode == MODULE_MODE_BIND) { + if (oldFlag == MODULE_MODE_BIND) { newFlag = MODULE_MODE_BIND; } else { @@ -1393,6 +1395,12 @@ void menuModelSetup(event_t event) else { newFlag = MODULE_MODE_BIND; } + + if (!event && (oldFlag != newFlag) && + (oldFlag == MODULE_MODE_NORMAL)) { + // Bind mode switched off from somewhere else + s_editMode = 0; + } } else if (l_posHorz == 2) { newFlag = MODULE_MODE_RANGECHECK; @@ -1406,6 +1414,12 @@ void menuModelSetup(event_t event) setMultiBindStatus(moduleIdx, MULTI_BIND_INITIATED); } #endif + if (isModuleDSMP(moduleIdx) && + (oldFlag != newFlag) && + (oldFlag == MODULE_MODE_BIND)) { + // Restart DSMP module when exiting bind mode + restartModule(moduleIdx); + } } } break; diff --git a/radio/src/gui/gui_common.h b/radio/src/gui/gui_common.h index c0b153226..22f2ae096 100644 --- a/radio/src/gui/gui_common.h +++ b/radio/src/gui/gui_common.h @@ -160,7 +160,7 @@ inline uint8_t MODULE_BIND_ROWS(int moduleIdx) else return 2; } - else if (isModuleXJTD8(moduleIdx) || isModuleSBUS(moduleIdx) || isModuleAFHDS3(moduleIdx)) { + else if (isModuleXJTD8(moduleIdx) || isModuleSBUS(moduleIdx) || isModuleAFHDS3(moduleIdx) || isModuleDSMP(moduleIdx)) { return 1; } else if (isModulePPM(moduleIdx) || isModulePXX1(moduleIdx) || isModulePXX2(moduleIdx) || isModuleDSM2(moduleIdx)) {