From d7e2e57cdb6c1b05409be807de321ac4a7b4e49f Mon Sep 17 00:00:00 2001 From: Raphael Coeffic Date: Fri, 9 Apr 2021 08:21:24 +0200 Subject: [PATCH] move eeprom related code into eeprom_common --- radio/src/opentx.cpp | 76 ----------------------------- radio/src/opentx.h | 5 -- radio/src/storage/eeprom_common.cpp | 75 ++++++++++++++++++++++++++++ radio/src/storage/eeprom_common.h | 3 ++ 4 files changed, 78 insertions(+), 81 deletions(-) diff --git a/radio/src/opentx.cpp b/radio/src/opentx.cpp index df3d3d0ee..e21722ab4 100644 --- a/radio/src/opentx.cpp +++ b/radio/src/opentx.cpp @@ -475,82 +475,6 @@ void applyDefaultTemplate() // TODO: what about switch warnings in non-color LCD radios? } -#if defined(EEPROM) -void checkModelIdUnique(uint8_t index, uint8_t module) -{ - if (isModuleXJTD8(module)) - return; - - uint8_t modelId = g_model.header.modelId[module]; - uint8_t additionalOnes = 0; - char * name = reusableBuffer.moduleSetup.msg; - - memset(reusableBuffer.moduleSetup.msg, 0, sizeof(reusableBuffer.moduleSetup.msg)); - - if (modelId != 0) { - for (uint8_t i = 0; i < MAX_MODELS; i++) { - if (i != index) { - if (modelId == modelHeaders[i].modelId[module]) { - if ((WARNING_LINE_LEN - 4 - (name - reusableBuffer.moduleSetup.msg)) > (signed)(modelHeaders[i].name[0] ? zlen(modelHeaders[i].name, LEN_MODEL_NAME) : sizeof(TR_MODEL) + 2)) { // you cannot rely exactly on WARNING_LINE_LEN so using WARNING_LINE_LEN-2 (-2 for the ",") - if (reusableBuffer.moduleSetup.msg[0] != '\0') { - name = strAppend(name, ", "); - } - if (modelHeaders[i].name[0] == 0) { - name = strAppend(name, STR_MODEL); - name = strAppendUnsigned(name+strlen(name), i + 1, 2); - } - else { - name += zchar2str(name, modelHeaders[i].name, LEN_MODEL_NAME); - } - } - else { - additionalOnes++; - } - } - } - } - } - - if (additionalOnes) { - name = strAppend(name, " (+"); - name = strAppendUnsigned(name, additionalOnes); - strAppend(name, ")"); - } - - if (reusableBuffer.moduleSetup.msg[0]) { - POPUP_WARNING(STR_MODELIDUSED, reusableBuffer.moduleSetup.msg); - } -} - -uint8_t findNextUnusedModelId(uint8_t index, uint8_t module) -{ - uint8_t usedModelIds[(MAX_RXNUM + 7) / 8]; - memset(usedModelIds, 0, sizeof(usedModelIds)); - - for (uint8_t modelIndex = 0; modelIndex < MAX_MODELS; modelIndex++) { - if (modelIndex == index) - continue; - - uint8_t id = modelHeaders[modelIndex].modelId[module]; - if (id == 0) - continue; - - uint8_t mask = 1u << (id & 7u); - usedModelIds[id >> 3u] |= 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 id; - } - } - - // failed finding something... - return 0; -} -#endif void modelDefault(uint8_t id) { diff --git a/radio/src/opentx.h b/radio/src/opentx.h index 9e25810c5..caccd0951 100644 --- a/radio/src/opentx.h +++ b/radio/src/opentx.h @@ -667,11 +667,6 @@ void setDefaultOwnerId(); void generalDefault(); void modelDefault(uint8_t id); -#if defined(EEPROM) -void checkModelIdUnique(uint8_t index, uint8_t module); -uint8_t findNextUnusedModelId(uint8_t index, uint8_t module); -#endif - uint32_t hash(const void * ptr, uint32_t size); #define calc100to256_16Bits(x) calc100to256(x) diff --git a/radio/src/storage/eeprom_common.cpp b/radio/src/storage/eeprom_common.cpp index 9c7ab478a..7ade6f98a 100644 --- a/radio/src/storage/eeprom_common.cpp +++ b/radio/src/storage/eeprom_common.cpp @@ -143,3 +143,78 @@ void storageEraseAll(bool warn) storageDirty(EE_GENERAL|EE_MODEL); storageCheck(true); } + +void checkModelIdUnique(uint8_t index, uint8_t module) +{ + if (isModuleXJTD8(module)) + return; + + uint8_t modelId = g_model.header.modelId[module]; + uint8_t additionalOnes = 0; + char * name = reusableBuffer.moduleSetup.msg; + + memset(reusableBuffer.moduleSetup.msg, 0, sizeof(reusableBuffer.moduleSetup.msg)); + + if (modelId != 0) { + for (uint8_t i = 0; i < MAX_MODELS; i++) { + if (i != index) { + if (modelId == modelHeaders[i].modelId[module]) { + if ((WARNING_LINE_LEN - 4 - (name - reusableBuffer.moduleSetup.msg)) > (signed)(modelHeaders[i].name[0] ? zlen(modelHeaders[i].name, LEN_MODEL_NAME) : sizeof(TR_MODEL) + 2)) { // you cannot rely exactly on WARNING_LINE_LEN so using WARNING_LINE_LEN-2 (-2 for the ",") + if (reusableBuffer.moduleSetup.msg[0] != '\0') { + name = strAppend(name, ", "); + } + if (modelHeaders[i].name[0] == 0) { + name = strAppend(name, STR_MODEL); + name = strAppendUnsigned(name+strlen(name), i + 1, 2); + } + else { + name += zchar2str(name, modelHeaders[i].name, LEN_MODEL_NAME); + } + } + else { + additionalOnes++; + } + } + } + } + } + + if (additionalOnes) { + name = strAppend(name, " (+"); + name = strAppendUnsigned(name, additionalOnes); + strAppend(name, ")"); + } + + if (reusableBuffer.moduleSetup.msg[0]) { + POPUP_WARNING(STR_MODELIDUSED, reusableBuffer.moduleSetup.msg); + } +} + +uint8_t findNextUnusedModelId(uint8_t index, uint8_t module) +{ + uint8_t usedModelIds[(MAX_RXNUM + 7) / 8]; + memset(usedModelIds, 0, sizeof(usedModelIds)); + + for (uint8_t modelIndex = 0; modelIndex < MAX_MODELS; modelIndex++) { + if (modelIndex == index) + continue; + + uint8_t id = modelHeaders[modelIndex].modelId[module]; + if (id == 0) + continue; + + uint8_t mask = 1u << (id & 7u); + usedModelIds[id >> 3u] |= 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 id; + } + } + + // failed finding something... + return 0; +} diff --git a/radio/src/storage/eeprom_common.h b/radio/src/storage/eeprom_common.h index a4d33bc55..78171d3b9 100644 --- a/radio/src/storage/eeprom_common.h +++ b/radio/src/storage/eeprom_common.h @@ -39,6 +39,9 @@ void storageClearRadioSettings(); bool storageReadRadioSettings(bool allowFixes = true); void storageReadCurrentModel(); +void checkModelIdUnique(uint8_t index, uint8_t module); +uint8_t findNextUnusedModelId(uint8_t index, uint8_t module); + #if defined(EEPROM_RLC) #include "eeprom_rlc.h" #else