bool OpenTxEepromInterface::loadModel(ModelData &model, uint8_t *data, int index, unsigned int stickMode) { T _model; if (!data) { // load from EEPROM efile->openRd(FILE_MODEL(index)); int sz = efile->readRlc2((uint8_t*)&_model, sizeof(T)); if (sz) { model = _model; if (sz < (int)sizeof(T)) { std::cout << " size(" << model.name << ") " << sz << " < " << (int)sizeof(T) << " "; } if (stickMode) { applyStickModeToModel(model, stickMode); } } else { model.clear(); } } else { // load from SD Backup, size is stored in index if ((unsigned int)index < sizeof(T)) return false; memcpy((uint8_t*)&_model, data, sizeof(T)); model = _model; } return true; }
bool OpenTxEepromInterface::loadModelVariant(unsigned int index, ModelData &model, uint8_t *data, unsigned int version, unsigned int variant) { T open9xModel(model, board, version, variant); if (!data) { // load from EEPROM QByteArray eepromData(sizeof(model), 0); // ModelData should be always bigger than the EEPROM struct efile->openRd(FILE_MODEL(index)); int numbytes = efile->readRlc2((uint8_t *)eepromData.data(), eepromData.size()); if (numbytes) { open9xModel.Import(eepromData); // open9xModel.Dump(); model.used = true; } else { model.clear(); } } else { // load from SD Backup, size is stored in index QByteArray eepromData((char *)data, index); open9xModel.Import(eepromData); } return true; }
void Gruvin9xInterface::loadModel(ModelData &model, unsigned int stickMode, int version) { T _model; if ((version == 2 && efile->readRlc2((uint8_t*)&_model, sizeof(T))) || (version == 1 && efile->readRlc1((uint8_t*)&_model, sizeof(T)))) { model = _model; if (stickMode) { applyStickModeToModel(model, stickMode); } } else { model.clear(); } }