diff --git a/radio/sdcard/taranis-x7/SCRIPTS/WIZARD/wizard.lua b/radio/sdcard/taranis-x7/SCRIPTS/WIZARD/wizard.lua index 513ce253a..2568f22b9 100755 --- a/radio/sdcard/taranis-x7/SCRIPTS/WIZARD/wizard.lua +++ b/radio/sdcard/taranis-x7/SCRIPTS/WIZARD/wizard.lua @@ -14,8 +14,6 @@ ---- # GNU General Public License for more details. # ---- # # ---- ######################################################################### --- Navigation variables -local dirty = true -- Model types local modelType = 0 @@ -27,10 +25,8 @@ local MODELTYPE_QUAD = 2 local function fieldIncDec(event, value, max) if event == EVT_ROT_LEFT or event == EVT_UP_BREAK then value = (value + max) - dirty = true elseif event == EVT_ROT_RIGHT or event == EVT_DOWN_BREAK then value = (value + max + 2) - dirty = true end value = (value % (max+1)) return value @@ -38,7 +34,7 @@ end -- Model Type Menu local function modelTypeSurround(index) - if(index<=1) then + if index <= 1 then lcd.drawFilledRectangle(59*(index%2)+12, 13, 43, 23) else lcd.drawFilledRectangle(59*(index%2)+12, 34, 40, 20) @@ -56,10 +52,7 @@ local function drawModelChoiceMenu() end local function modelTypeMenu(event) - if dirty == true then - drawModelChoiceMenu() - dirty = false - end + drawModelChoiceMenu() if event == EVT_ENTER_BREAK then if modelType == MODELTYPE_PLANE then return "plane.lua" @@ -68,7 +61,6 @@ local function modelTypeMenu(event) elseif modelType == MODELTYPE_QUAD then return "multi.lua" end - dirty = true else modelType = fieldIncDec(event, modelType, 2) end diff --git a/radio/src/gui/212x64/model_setup.cpp b/radio/src/gui/212x64/model_setup.cpp index 18efa2849..2d90d70da 100644 --- a/radio/src/gui/212x64/model_setup.cpp +++ b/radio/src/gui/212x64/model_setup.cpp @@ -1410,15 +1410,15 @@ void menuModelSetup(event_t event) if (old_editMode > 0 && s_editMode == 0) { switch(menuVerticalPosition) { - case ITEM_MODEL_SETUP_INTERNAL_MODULE_NOT_ACCESS_BIND: - if (menuHorizontalPosition == 0) - checkModelIdUnique(g_eeGeneral.currModel, INTERNAL_MODULE); - break; + case ITEM_MODEL_SETUP_INTERNAL_MODULE_NOT_ACCESS_BIND: + if (menuHorizontalPosition == 0) + checkModelIdUnique(g_eeGeneral.currModel, INTERNAL_MODULE); + break; - case ITEM_MODEL_SETUP_EXTERNAL_MODULE_NOT_ACCESS_BIND: - if (menuHorizontalPosition == 0) - checkModelIdUnique(g_eeGeneral.currModel, EXTERNAL_MODULE); - break; + case ITEM_MODEL_SETUP_EXTERNAL_MODULE_NOT_ACCESS_BIND: + if (menuHorizontalPosition == 0) + checkModelIdUnique(g_eeGeneral.currModel, EXTERNAL_MODULE); + break; } } } diff --git a/radio/src/gui/480x272/model_setup.cpp b/radio/src/gui/480x272/model_setup.cpp index 405efbfd5..0b0554336 100644 --- a/radio/src/gui/480x272/model_setup.cpp +++ b/radio/src/gui/480x272/model_setup.cpp @@ -397,7 +397,7 @@ void checkModelIdUnique(uint8_t moduleIdx) // cannot rely exactly on WARNING_LINE_LEN so using WARNING_LINE_LEN-2 size_t warn_buf_len = sizeof(reusableBuffer.moduleSetup.msg) - WARNING_LINE_LEN - 2; - if (!modelslist.isModelIdUnique(moduleIdx,warn_buf,warn_buf_len)) { + if (!modelslist.isModelIdUnique(moduleIdx, warn_buf, warn_buf_len)) { if (warn_buf[0] != 0) { POPUP_WARNING(STR_MODELIDUSED); SET_WARNING_INFO(warn_buf, sizeof(reusableBuffer.moduleSetup.msg), 0); @@ -1754,7 +1754,7 @@ bool menuModelSetup(event_t event) // some field just finished being edited if (old_editMode > 0 && s_editMode == 0) { - ModelCell* mod_cell = modelslist.getCurrentModel(); + ModelCell * mod_cell = modelslist.getCurrentModel(); if (mod_cell) { switch(menuVerticalPosition) { case ITEM_MODEL_SETUP_NAME: diff --git a/radio/src/main.cpp b/radio/src/main.cpp index 0a4d1a346..3f5dbd1ab 100644 --- a/radio/src/main.cpp +++ b/radio/src/main.cpp @@ -469,9 +469,9 @@ void guiMain(event_t evt) lcdRefresh(); - if (mainRequestFlags & (1 << REQUEST_SCREENSHOT)) { + if (mainRequestFlags & (1u << REQUEST_SCREENSHOT)) { writeScreenshot(); - mainRequestFlags &= ~(1 << REQUEST_SCREENSHOT); + mainRequestFlags &= ~(1u << REQUEST_SCREENSHOT); } } #endif diff --git a/radio/src/opentx.cpp b/radio/src/opentx.cpp index d4c6620da..3bf65563f 100644 --- a/radio/src/opentx.cpp +++ b/radio/src/opentx.cpp @@ -437,36 +437,27 @@ void checkModelIdUnique(uint8_t index, uint8_t module) uint8_t findNextUnusedModelId(uint8_t index, uint8_t module) { - // assume 63 is the highest Model ID - // and use 64 bits - uint8_t usedModelIds[8]; + uint8_t usedModelIds[(MAX_RXNUM + 7) / 8]; memset(usedModelIds, 0, sizeof(usedModelIds)); - for (uint8_t mod_i = 0; mod_i < MAX_MODELS; mod_i++) { - - if (mod_i == index) + for (uint8_t modelIndex = 0; modelIndex < MAX_MODELS; modelIndex++) { + if (modelIndex == index) continue; - uint8_t id = modelHeaders[mod_i].modelId[module]; + uint8_t id = modelHeaders[modelIndex].modelId[module]; if (id == 0) continue; - uint8_t mask = 1; - for (uint8_t i = 1; i < (id & 7); i++) - mask <<= 1; - - usedModelIds[id >> 3] |= mask; + uint8_t mask = 1u << (id & 7u); + usedModelIds[id >> 3u] |= mask; } - uint8_t new_id = 1; - uint8_t tst_mask = 1; - for (;new_id < getMaxRxNum(module); new_id++) { - if (!(usedModelIds[new_id >> 3] & tst_mask)) { + for (uint8_t id = 1; id <= getMaxRxNum(module); id++) { + uint8_t mask = 1u << (id & 7u); + if (!(usedModelIds[id >> 3u] & mask)) { // found free ID - return new_id; + return id; } - if ((tst_mask <<= 1) == 0) - tst_mask = 1; } // failed finding something... @@ -482,7 +473,7 @@ void modelDefault(uint8_t id) memcpy(g_model.modelRegistrationID, g_eeGeneral.ownerRegistrationID, PXX2_LEN_REGISTRATION_ID); -#if defined(LUA) && defined(PCBTARANIS) //Horus uses menuModelWizard() for wizard +#if defined(LUA) && defined(PCBTARANIS) // Horus uses menuModelWizard() for wizard if (isFileAvailable(WIZARD_PATH "/" WIZARD_NAME)) { f_chdir(WIZARD_PATH); luaExec(WIZARD_NAME); @@ -492,23 +483,20 @@ void modelDefault(uint8_t id) #if defined(FRSKY_RELEASE) g_model.moduleData[INTERNAL_MODULE].type = IS_PXX2_INTERNAL_ENABLED() ? MODULE_TYPE_ISRM_PXX2 : MODULE_TYPE_XJT_PXX1; g_model.moduleData[INTERNAL_MODULE].channelsCount = defaultModuleChannels_M8(INTERNAL_MODULE); + #if defined(EEPROM) + g_model.header.modelId[INTERNAL_MODULE] = findNextUnusedModelId(id, INTERNAL_MODULE); + modelHeaders[id].modelId[INTERNAL_MODULE] = g_model.header.modelId[INTERNAL_MODULE] + #endif #endif #if defined(PCBXLITE) g_model.trainerData.mode = TRAINER_MODE_MASTER_BLUETOOTH; #endif -#if defined(EEPROM) - for (int i=0; ivalid_rfData) { + ModelCell* modelCell = modelslist.getCurrentModel(); + if (!modelCell || !modelCell->valid_rfData) { // in doubt, pretend it's unique return true; } - uint8_t modelId = mod_cell->modelId[moduleIdx]; - uint8_t type = mod_cell->moduleData[moduleIdx].type; - uint8_t rfProtocol = mod_cell->moduleData[moduleIdx].rfProtocol; + uint8_t modelId = modelCell->modelId[moduleIdx]; + uint8_t type = modelCell->moduleData[moduleIdx].type; + uint8_t rfProtocol = modelCell->moduleData[moduleIdx].rfProtocol; uint8_t additionalOnes = 0; char* curr = warn_buf; @@ -458,10 +458,10 @@ bool ModelsList::isModelIdUnique(uint8_t moduleIdx, char* warn_buf, size_t warn_ bool hit_found = false; const std::list& cats = modelslist.getCategories(); - std::list::const_iterator cat_it = cats.begin(); - for (;cat_it != cats.end(); cat_it++) { - for (ModelsCategory::const_iterator it = (*cat_it)->begin(); it != (*cat_it)->end(); it++) { - if (mod_cell == *it) + std::list::const_iterator catIt = cats.begin(); + for (;catIt != cats.end(); catIt++) { + for (ModelsCategory::const_iterator it = (*catIt)->begin(); it != (*catIt)->end(); it++) { + if (modelCell == *it) continue; if (!(*it)->valid_rfData) @@ -507,24 +507,21 @@ bool ModelsList::isModelIdUnique(uint8_t moduleIdx, char* warn_buf, size_t warn_ uint8_t ModelsList::findNextUnusedModelId(uint8_t moduleIdx) { - ModelCell* mod_cell = modelslist.getCurrentModel(); - if (!mod_cell || !mod_cell->valid_rfData) { + ModelCell * modelCell = modelslist.getCurrentModel(); + if (!modelCell || !modelCell->valid_rfData) { return 0; } - uint8_t type = mod_cell->moduleData[moduleIdx].type; - uint8_t rfProtocol = mod_cell->moduleData[moduleIdx].rfProtocol; + uint8_t type = modelCell->moduleData[moduleIdx].type; + uint8_t rfProtocol = modelCell->moduleData[moduleIdx].rfProtocol; - // assume 63 is the highest Model ID - // and use 64 bits - uint8_t usedModelIds[8]; + uint8_t usedModelIds[(MAX_RXNUM + 7) / 8]; memset(usedModelIds, 0, sizeof(usedModelIds)); - const std::list& cats = modelslist.getCategories(); - std::list::const_iterator cat_it = cats.begin(); - for (;cat_it != cats.end(); cat_it++) { - for (ModelsCategory::const_iterator it = (*cat_it)->begin(); it != (*cat_it)->end(); it++) { - if (mod_cell == *it) + const std::list & cats = modelslist.getCategories(); + for (auto catIt = cats.begin(); catIt != cats.end(); catIt++) { + for (auto it = (*catIt)->begin(); it != (*catIt)->end(); it++) { + if (modelCell == *it) continue; if (!(*it)->valid_rfData) @@ -536,25 +533,18 @@ uint8_t ModelsList::findNextUnusedModelId(uint8_t moduleIdx) (rfProtocol == (*it)->moduleData[moduleIdx].rfProtocol)) { uint8_t id = (*it)->modelId[moduleIdx]; - - uint8_t mask = 1; - for (uint8_t i = 1; i < (id & 7); i++) - mask <<= 1; - - usedModelIds[id >> 3] |= mask; + uint8_t mask = 1 << (id & 7u); + usedModelIds[id >> 3u] |= mask; } } } - uint8_t new_id = 1; - uint8_t tst_mask = 1; - for (;new_id < getMaxRxNum(moduleIdx); new_id++) { - if (!(usedModelIds[new_id >> 3] & tst_mask)) { + for (uint8_t id = 1; id <= getMaxRxNum(moduleIdx); id++) { + uint8_t mask = 1u << (id & 7u); + if (!(usedModelIds[id >> 3u] & mask)) { // found free ID - return new_id; + return id; } - if ((tst_mask <<= 1) == 0) - tst_mask = 1; } // failed finding something...