int Ersky9xInterface::save(uint8_t *eeprom, RadioData &radioData, uint32_t variant, uint8_t version) { EEPROMWarnings.clear(); efile->EeFsCreate(eeprom, EESIZE_SKY9X, BOARD_SKY9X); Ersky9xGeneral ersky9xGeneral(radioData.generalSettings); int sz = efile->writeRlc2(FILE_GENERAL, FILE_TYP_GENERAL, (uint8_t*)&ersky9xGeneral, sizeof(Ersky9xGeneral)); if(sz != sizeof(Ersky9xGeneral)) { return 0; } for (int i=0; i<getMaxModels(); i++) { if (!radioData.models[i].isempty()) { Ersky9xModelData_v11 ersky9xModel(radioData.models[i]); applyStickModeToModel(ersky9xModel, radioData.generalSettings.stickMode+1); sz = efile->writeRlc2(FILE_MODEL(i), FILE_TYP_MODEL, (uint8_t*)&ersky9xModel, sizeof(Ersky9xModelData_v11)); if(sz != sizeof(Ersky9xModelData_v11)) { return 0; } } } if (!EEPROMWarnings.isEmpty()) QMessageBox::warning(NULL, QObject::tr("Warning"), QObject::tr("EEPROM saved with these warnings:") + "\n- " + EEPROMWarnings.remove(EEPROMWarnings.length()-1, 1).replace("\n", "\n- ")); return EESIZE_SKY9X; }
bool Ersky9xInterface::loadxml(RadioData &radioData, QDomDocument &doc) { std::cout << "trying ersky9x xml import... "; Ersky9xGeneral ersky9xGeneral; memset(&ersky9xGeneral,0,sizeof(ersky9xGeneral)); if(!loadGeneralDataXML(&doc, &ersky9xGeneral)) { return false; } else { radioData.generalSettings=ersky9xGeneral; std::cout << "version " << (unsigned int)ersky9xGeneral.myVers << " "; } for(int i=0; i<getMaxModels(); i++) { if (ersky9xGeneral.myVers == 10) { if (!loadModelDataXML<Ersky9xModelData_v10>(&doc, &radioData.models[i], i, radioData.generalSettings.stickMode+1)) { std::cout << "ko\n"; return false; } } else { if (!loadModelDataXML<Ersky9xModelData_v11>(&doc, &radioData.models[i], i, radioData.generalSettings.stickMode+1)) { std::cout << "ko\n"; return false; } } } std::cout << "ok\n"; return true; }
int OpenTxEepromInterface::save(uint8_t *eeprom, RadioData &radioData, uint32_t variant, uint8_t version) { EEPROMWarnings.clear(); if (!version) { switch(board) { case BOARD_TARANIS: case BOARD_TARANIS_PLUS: case BOARD_SKY9X: case BOARD_9XRPRO: version = 216; break; case BOARD_GRUVIN9X: case BOARD_MEGA2560: version = 216; break; case BOARD_M128: version = 216; break; case BOARD_STOCK: version = 216; break; } } int size = getEEpromSize(); efile->EeFsCreate(eeprom, size, board); if (board == BOARD_M128) { variant |= M128_VARIANT; } int result = saveGeneral<OpenTxGeneralData>(radioData.generalSettings, board, version, variant); if (!result) { return 0; } for (int i=0; i<getMaxModels(); i++) { if (!radioData.models[i].isempty()) { result = saveModel<OpenTxModelData>(i, radioData.models[i], version, variant); if (!result) { return 0; } } } if (!EEPROMWarnings.isEmpty()) QMessageBox::warning(NULL, QObject::tr("Warning"), QObject::tr("EEPROM saved with these warnings:") + "\n- " + EEPROMWarnings.remove(EEPROMWarnings.length()-1, 1).replace("\n", "\n- ")); return size; }
//------------------------------------------------------------------------------ // newModelEntry() -- Generates a new model entry for this player. // Returns a pointer to the new entry, else zero(0) //------------------------------------------------------------------------------ OtwModel* Otw::newModelEntry(models::Player* const ip) { OtwModel* model = nullptr; // Only if we have a player pointer ... if (ip != nullptr && (getModelTableSize() < getMaxModels())) { // Create a model entry for this player model = modelFactory(); if (model != nullptr) { // Yes, initialize the model entry model->initialize(ip, otwModelTypes.data(), nOtwModelTypes); addModelToList(model, MODEL_TABLE); } } return model; }
bool Er9xInterface::loadxml(RadioData &radioData, QDomDocument &doc) { std::cout << "trying er9x xml import... "; Er9xGeneral er9xGeneral; memset(&er9xGeneral,0,sizeof(er9xGeneral)); if(!loadGeneralDataXML(&doc, &er9xGeneral)) { return false; } else { radioData.generalSettings=er9xGeneral; std::cout << "version " << (unsigned int)er9xGeneral.myVers << " "; } for(int i=0; i<getMaxModels(); i++) { Er9xModelData er9xModel; memset(&er9xModel,0,sizeof(er9xModel)); if(loadModelDataXML(&doc, &er9xModel, i)) { applyStickModeToModel(er9xModel, radioData.generalSettings.stickMode+1); radioData.models[i] = er9xModel; } } std::cout << "ok\n"; return true; }
bool OpenTxEepromInterface::load(RadioData &radioData, const uint8_t *eeprom, int size) { std::cout << "trying " << getName() << " import..."; if (size != getEEpromSize()) { if (size==4096) { int notnull=false; for (int i=2048; i<4096; i++) { if (eeprom[i]!=255) { notnull=true; } } if (notnull) { std::cout << " wrong size (" << size << ")\n"; return false; } else { QMessageBox::warning(NULL, "companion", QObject::tr("Your radio probably uses a wrong firmware,\n eeprom size is 4096 but only the first 2048 are used")); size=2048; } } else { std::cout << " wrong size (" << size << ")\n"; return false; } } if (!efile->EeFsOpen((uint8_t *)eeprom, size, board)) { std::cout << " wrong file system\n"; return false; } efile->openRd(FILE_GENERAL); uint8_t version; if (efile->readRlc2(&version, 1) != 1) { std::cout << " no\n"; return false; } std::cout << " version " << (unsigned int)version; if (!checkVersion(version)) { std::cout << " not open9x\n"; return false; } if (!loadGeneral<OpenTxGeneralData>(radioData.generalSettings, version)) { std::cout << " ko\n"; return false; } std::cout << " variant " << radioData.generalSettings.variant; for (int i=0; i<getMaxModels(); i++) { if (!loadModel(version, radioData.models[i], NULL, i, radioData.generalSettings.variant, radioData.generalSettings.stickMode+1)) { std::cout << " ko\n"; return false; } } std::cout << " ok\n"; return true; }
bool Ersky9xInterface::load(RadioData &radioData, uint8_t *eeprom, int size) { std::cout << "trying ersky9x import... "; if (size != EESIZE_SKY9X) { std::cout << "wrong size\n"; return false; } if (!efile->EeFsOpen(eeprom, size, BOARD_SKY9X)) { std::cout << "wrong file system\n"; return false; } efile->openRd(FILE_GENERAL); Ersky9xGeneral ersky9xGeneral; if (efile->readRlc2((uint8_t*)&ersky9xGeneral, 1) != 1) { std::cout << "no\n"; return false; } std::cout << "version " << (unsigned int)ersky9xGeneral.myVers << " "; switch(ersky9xGeneral.myVers) { case 10: break; case 11: break; default: std::cout << "not ersky9x\n"; return false; } efile->openRd(FILE_GENERAL); if (!efile->readRlc2((uint8_t*)&ersky9xGeneral, sizeof(Ersky9xGeneral))) { std::cout << "ko\n"; return false; } radioData.generalSettings = ersky9xGeneral; for (int i=0; i<getMaxModels(); i++) { uint8_t buffer[4096]; uint size; memset(buffer,0,sizeof(buffer)); efile->openRd(FILE_MODEL(i)); // if (!efile->readRlc2((uint8_t*)&ersky9xModel, sizeof(Ersky9xModelData))) { size=efile->readRlc2(buffer, 4096); if (!size) { radioData.models[i].clear(); } else { if (size<720) { Ersky9xModelData_v10 ersky9xModel; memcpy(&ersky9xModel, buffer, sizeof(ersky9xModel)); applyStickModeToModel(ersky9xModel, radioData.generalSettings.stickMode+1); radioData.models[i] = ersky9xModel; } else { Ersky9xModelData_v11 ersky9xModel; memcpy(&ersky9xModel, buffer, sizeof(ersky9xModel)); applyStickModeToModel(ersky9xModel, radioData.generalSettings.stickMode+1); radioData.models[i] = ersky9xModel; } } } std::cout << "ok\n"; return true; }
unsigned long Gruvin9xInterface::load(RadioData &radioData, const uint8_t *eeprom, int size) { std::cout << "trying " << getName() << " import... "; std::bitset<NUM_ERRORS> errors; if (size != this->getEEpromSize()) { std::cout << "wrong size\n"; errors.set(WRONG_SIZE); return errors.to_ulong(); } if (!efile->EeFsOpen((uint8_t *)eeprom, size, BOARD_STOCK)) { std::cout << "wrong file system\n"; errors.set(WRONG_FILE_SYSTEM); return errors.to_ulong(); } efile->openRd(FILE_GENERAL); uint8_t version; if (efile->readRlc2(&version, 1) != 1) { std::cout << "no\n"; errors.set(UNKNOWN_ERROR); return errors.to_ulong(); } if (version == 0) { efile->openRd(FILE_GENERAL); if (efile->readRlc1(&version, 1) != 1) { std::cout << "no\n"; errors.set(UNKNOWN_ERROR); return errors.to_ulong(); } } std::cout << "version " << (unsigned int)version << " "; switch(version) { case 5: case 100: case 101: case 102: case 103: case 104: case 105: // subtrims(16bits) + function switches added case 106: // trims(10bits), no subtrims break; default: std::cout << "not gruvin9x\n"; errors.set(NOT_GRUVIN9X); return errors.to_ulong(); } efile->openRd(FILE_GENERAL); if (version == 5) { if (!loadGeneral<Gruvin9xGeneral_v103>(radioData.generalSettings, 1)) { errors.set(UNKNOWN_ERROR); return errors.to_ulong(); } } else if (version < 104) { if (!loadGeneral<Gruvin9xGeneral_v103>(radioData.generalSettings)) { errors.set(UNKNOWN_ERROR); return errors.to_ulong(); } } else if (version <= 106) { if (!loadGeneral<Gruvin9xGeneral_v104>(radioData.generalSettings)) { errors.set(UNKNOWN_ERROR); return errors.to_ulong(); } } else { std::cout << "ko\n"; errors.set(UNKNOWN_ERROR); return errors.to_ulong(); } for (int i=0; i<getMaxModels(); i++) { efile->openRd(FILE_MODEL(i)); if (version == 5) { loadModel<Gruvin9xModelData_v102>(radioData.models[i], radioData.generalSettings.stickMode+1, 1); } else if (version < 103) { loadModel<Gruvin9xModelData_v102>(radioData.models[i], radioData.generalSettings.stickMode+1); } else if (version == 103) { loadModel<Gruvin9xModelData_v103>(radioData.models[i], radioData.generalSettings.stickMode+1); } else if (version == 105) { loadModel<Gruvin9xModelData_v105>(radioData.models[i], radioData.generalSettings.stickMode+1); } else if (version == 106) { loadModel<Gruvin9xModelData_v106>(radioData.models[i], radioData.generalSettings.stickMode+1); } else { std::cout << "ko\n"; errors.set(UNKNOWN_ERROR); return errors.to_ulong(); } } std::cout << "ok\n"; errors.set(NO_ERROR); return errors.to_ulong(); }
int OpenTxEepromInterface::save(uint8_t *eeprom, RadioData &radioData, uint32_t variant, uint8_t version) { EEPROMWarnings.clear(); if (!version) { switch(board) { case BOARD_TARANIS: case BOARD_TARANIS_PLUS: case BOARD_SKY9X: case BOARD_9XRPRO: version = 216; break; case BOARD_GRUVIN9X: case BOARD_MEGA2560: version = 217; break; case BOARD_M128: version = 217; break; case BOARD_STOCK: version = 216; break; } } int size = getEEpromSize(); efile->EeFsCreate(eeprom, size, board); if (board == BOARD_M128) { variant |= M128_VARIANT; } int result = saveGeneral<OpenTxGeneralData>(radioData.generalSettings, board, version, variant); if (!result) { return 0; } for (int i=0; i<getMaxModels(); i++) { if (!radioData.models[i].isempty()) { result = saveModel<OpenTxModelData>(i, radioData.models[i], version, variant); if (!result) { return 0; } } } if (!EEPROMWarnings.empty()) { QString msg; int noErrorsToDisplay = std::min((int)EEPROMWarnings.size(),10); for (int n = 0; n < noErrorsToDisplay; n++) { msg += "-" + EEPROMWarnings.front() + "\n"; EEPROMWarnings.pop_front(); } if (!EEPROMWarnings.empty()) { msg = QObject::tr("(displaying only first 10 warnings)") + "\n" + msg; } EEPROMWarnings.clear(); QMessageBox::warning(NULL, QObject::tr("Warning"), QObject::tr("EEPROM saved with these warnings:") + "\n" + msg); } return size; }
bool Er9xInterface::load(RadioData &radioData, const uint8_t *eeprom, int size) { std::cout << "trying er9x import... "; if (size != getEEpromSize()) { std::cout << "wrong size\n"; return false; } if (!efile->EeFsOpen((uint8_t *)eeprom, size, BOARD_STOCK)) { std::cout << "wrong file system\n"; return false; } efile->openRd(FILE_GENERAL); Er9xGeneral er9xGeneral; if (efile->readRlc1((uint8_t*)&er9xGeneral, 1) != 1) { std::cout << "no\n"; return false; } std::cout << "version " << (unsigned int)er9xGeneral.myVers << " "; switch(er9xGeneral.myVers) { case 3: std::cout << "(old gruvin9x) "; case 4: // case 5: case 6: case 7: case 8: case 9: case 10: break; default: std::cout << "not er9x\n"; return false; } efile->openRd(FILE_GENERAL); if (!efile->readRlc1((uint8_t*)&er9xGeneral, sizeof(Er9xGeneral))) { std::cout << "ko\n"; return false; } radioData.generalSettings = er9xGeneral; for (int i=0; i<getMaxModels(); i++) { Er9xModelData er9xModel; efile->openRd(FILE_MODEL(i)); if (!efile->readRlc1((uint8_t*)&er9xModel, sizeof(Er9xModelData))) { radioData.models[i].clear(); } else { applyStickModeToModel(er9xModel, radioData.generalSettings.stickMode+1); radioData.models[i] = er9xModel; } } std::cout << "ok\n"; return true; }