move eeprom related code into eeprom_common
This commit is contained in:
@@ -475,82 +475,6 @@ void applyDefaultTemplate()
|
|||||||
// TODO: what about switch warnings in non-color LCD radios?
|
// 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)
|
void modelDefault(uint8_t id)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -667,11 +667,6 @@ void setDefaultOwnerId();
|
|||||||
void generalDefault();
|
void generalDefault();
|
||||||
void modelDefault(uint8_t id);
|
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);
|
uint32_t hash(const void * ptr, uint32_t size);
|
||||||
|
|
||||||
#define calc100to256_16Bits(x) calc100to256(x)
|
#define calc100to256_16Bits(x) calc100to256(x)
|
||||||
|
|||||||
@@ -143,3 +143,78 @@ void storageEraseAll(bool warn)
|
|||||||
storageDirty(EE_GENERAL|EE_MODEL);
|
storageDirty(EE_GENERAL|EE_MODEL);
|
||||||
storageCheck(true);
|
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;
|
||||||
|
}
|
||||||
|
|||||||
@@ -39,6 +39,9 @@ void storageClearRadioSettings();
|
|||||||
bool storageReadRadioSettings(bool allowFixes = true);
|
bool storageReadRadioSettings(bool allowFixes = true);
|
||||||
void storageReadCurrentModel();
|
void storageReadCurrentModel();
|
||||||
|
|
||||||
|
void checkModelIdUnique(uint8_t index, uint8_t module);
|
||||||
|
uint8_t findNextUnusedModelId(uint8_t index, uint8_t module);
|
||||||
|
|
||||||
#if defined(EEPROM_RLC)
|
#if defined(EEPROM_RLC)
|
||||||
#include "eeprom_rlc.h"
|
#include "eeprom_rlc.h"
|
||||||
#else
|
#else
|
||||||
|
|||||||
Reference in New Issue
Block a user