Removed on-the-fly model conversions

This makes no sense for YAML model files, only for BIN models (when YAML is not the format of choice).
This commit is contained in:
Raphael Coeffic
2021-11-10 11:07:03 +01:00
parent 88a9b1c6d9
commit 4a5a0be38c
6 changed files with 57 additions and 34 deletions
+14 -3
View File
@@ -59,7 +59,9 @@ class ModelButton : public Button
void load()
{
#if defined(SDCARD_RAW)
uint8_t version;
#endif
PACK(struct {
ModelHeader header;
@@ -71,17 +73,25 @@ class ModelButton : public Button
if (strncmp(modelCell->modelFilename, g_eeGeneral.currModelFilename,
LEN_MODEL_FILENAME) == 0) {
memcpy(&partialModel.header, &g_model.header, sizeof(partialModel));
#if defined(SDCARD_RAW)
version = EEPROM_VER;
#endif
} else {
#if defined(SDCARD_RAW)
error =
readModel(modelCell->modelFilename, (uint8_t *)&partialModel.header,
sizeof(partialModel), &version);
readModelBin(modelCell->modelFilename, (uint8_t *)&partialModel.header,
sizeof(partialModel), &version);
#else
error = readModel(modelCell->modelFilename,
(uint8_t *)&partialModel.header, sizeof(partialModel));
#endif
}
if (!error) {
if (modelCell->modelName[0] == '\0' &&
partialModel.header.name[0] != '\0') {
#if defined(SDCARD_RAW)
if (version == 219) {
int len = (int)sizeof(partialModel.header.name);
char* str = partialModel.header.name;
@@ -94,6 +104,7 @@ class ModelButton : public Button
str[--len] = '\0';
}
}
#endif
modelCell->setModelName(partialModel.header.name);
}
}
+2 -12
View File
@@ -120,12 +120,11 @@ const char * createModel()
}
#endif
const char * loadModel(char * filename, bool alarms)
const char* loadModel(char* filename, bool alarms)
{
uint8_t version;
preModelLoad();
const char * error = readModel(filename, (uint8_t *)&g_model, sizeof(g_model), &version);
const char* error = readModel(filename, (uint8_t*)&g_model, sizeof(g_model));
if (error) {
TRACE("loadModel error=%s", error);
@@ -139,15 +138,6 @@ const char * loadModel(char * filename, bool alarms)
return error;
}
// Conversions from EEPROM are done in batch when converting the radio file.
// It is not supported on a model by model base when loaded.
#if defined(STORAGE_CONVERSIONS) && !defined(EEPROM_RLC)
if (version < EEPROM_VER) {
convertBinModelData(filename, version);
}
// TODO: reload model afterwards
#endif
postModelLoad(alarms);
return nullptr;
}
+1 -1
View File
@@ -56,7 +56,7 @@ const char* writeFileYaml(const char* path, const YamlNode* root_node, uint8_t*
void getModelPath(char * path, const char * filename);
const char * readModel(const char * filename, uint8_t * buffer, uint32_t size, uint8_t * version);
const char * readModel(const char * filename, uint8_t * buffer, uint32_t size);
const char * loadModel(char * filename, bool alarms=true);
const char * createModel();
const char * writeModel();
+22 -2
View File
@@ -133,14 +133,34 @@ const char *loadFileBin(const char *fullpath, uint8_t *data,
return nullptr;
}
const char * readModelBin(const char * filename, uint8_t * buffer, uint32_t size, uint8_t * version)
#if defined(SDCARD_RAW)
const char* readModel(const char* filename, uint8_t* buffer, uint32_t size)
{
uint8_t version = 0;
// Conversions from EEPROM are done in batch when converting the radio file.
// It is not supported on a model by model base when loaded.
const char *error = readModelBin(filename, buffer, size, &version);
if (error) return error;
#if defined(STORAGE_CONVERSIONS)
if (version < EEPROM_VER) {
convertBinModelData(filename, version);
error = readModelBin(filename, buffer, size, &version);
}
#endif
return error;
}
#endif
const char *readModelBin(const char *filename, uint8_t *buffer, uint32_t size,
uint8_t *version)
{
char path[256];
getModelPath(path, filename);
return loadFileBin(path, buffer, size, version);
}
const char * loadRadioSettingsBin(const char * path)
{
uint8_t version;
+10 -4
View File
@@ -24,19 +24,25 @@
#include "FatFs/ff.h"
#if !defined(SDCARD_YAML)
#if defined(SDCARD_RAW)
#define writeModel writeModelBin
#define loadRadioSettings loadRadioSettingsBin
#define writeGeneralSettings writeGeneralSettingsBin
#define readModel readModelBin
const char* readModel(const char* filename, uint8_t* buffer, uint32_t size);
#endif
const char* loadRadioSettingsBin();
const char * writeGeneralSettingsBin();
const char* openFileBin(const char * fullpath, FIL * file, uint16_t * size, uint8_t * version);
const char* openFileBin(const char* fullpath, FIL* file, uint16_t* size,
uint8_t* version);
const char* readModelBin(const char* filename, uint8_t* buffer, uint32_t size,
uint8_t* version);
const char * writeModelBin();
const char* writeModelBin();
#endif
+8 -12
View File
@@ -189,7 +189,7 @@ const char * writeGeneralSettings()
}
const char * readModelYaml(const char * filename, uint8_t * buffer, uint32_t size, uint8_t * version)
const char * readModelYaml(const char * filename, uint8_t * buffer, uint32_t size)
{
// YAML reader
TRACE("YAML model reader");
@@ -235,23 +235,19 @@ const char * readModelYaml(const char * filename, uint8_t * buffer, uint32_t siz
// md->swashR.elevatorWeight = 100;
}
*version = 255; // max version number
return readYamlFile(path, YamlTreeWalker::get_parser_calls(), &tree);
}
const char* readModel(const char* filename, uint8_t* buffer, uint32_t size,
uint8_t* version)
static const char _wrongExtentionError[] = "wrong file extension";
const char* readModel(const char* filename, uint8_t* buffer, uint32_t size)
{
const char* ext = strrchr(filename, '.');
if (ext != nullptr) {
if (!strncmp(ext, YAML_EXT, 4)) {
return readModelYaml(filename, buffer, size, version);
}
#if !defined(EEPROM_RLC)
return readModelBin(filename, buffer, size, version);
#endif
if (!ext || strncmp(ext, YAML_EXT, 4) != 0) {
return _wrongExtentionError;
}
return nullptr;
return readModelYaml(filename, buffer, size);
}
const char * writeModelYaml(const char* filename)