Exemplo n.º 1
0
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;
}
Exemplo n.º 2
0
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;
}
Exemplo n.º 3
0
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;
}
Exemplo n.º 4
0
//------------------------------------------------------------------------------
// 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;
}
Exemplo n.º 5
0
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;
}
Exemplo n.º 6
0
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;
}
Exemplo n.º 7
0
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;
}
Exemplo n.º 8
0
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();
}
Exemplo n.º 9
0
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;
}
Exemplo n.º 10
0
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;
}