bool convertEEprom(const QString &sourceEEprom, const QString &destinationEEprom, const QString &firmwareFilename) { Firmware *currentFirmware = GetCurrentFirmware(); FirmwareInterface firmware(firmwareFilename); if (!firmware.isValid()) return false; unsigned int version = firmware.getEEpromVersion(); unsigned int variant = firmware.getEEpromVariant(); QFile sourceFile(sourceEEprom); int eeprom_size = sourceFile.size(); if (!eeprom_size) return false; if (!sourceFile.open(QIODevice::ReadOnly)) return false; QByteArray eeprom(eeprom_size, 0); long result = sourceFile.read(eeprom.data(), eeprom_size); sourceFile.close(); QSharedPointer<RadioData> radioData = QSharedPointer<RadioData>(new RadioData()); if (!loadEEprom(*radioData, (uint8_t *)eeprom.data(), eeprom_size) || !currentFirmware->saveEEPROM((uint8_t *)eeprom.data(), *radioData, variant, version)) return false; QFile destinationFile(destinationEEprom); if (!destinationFile.open(QIODevice::WriteOnly)) return false; result = destinationFile.write(eeprom.constData(), eeprom_size); destinationFile.close(); if (result != eeprom_size) return false; return true; }
bool MdiChild::loadFile(const QString &fileName, bool resetCurrentFile) { QFile file(fileName); if (!file.exists()) { QMessageBox::critical(this, tr("Error"), tr("Unable to find file %1!").arg(fileName)); return false; } int fileType = getFileType(fileName); #if 0 if (fileType==FILE_TYPE_XML) { if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { //reading HEX TEXT file QMessageBox::critical(this, tr("Error"), tr("Error opening file %1:\n%2.") .arg(fileName) .arg(file.errorString())); return false; } QTextStream inputStream(&file); XmlInterface(inputStream).load(radioData); } else #endif if (fileType==FILE_TYPE_HEX || fileType==FILE_TYPE_EEPE) { //read HEX file if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { //reading HEX TEXT file QMessageBox::critical(this, tr("Error"), tr("Error opening file %1:\n%2.") .arg(fileName) .arg(file.errorString())); return false; } QDomDocument doc(ER9X_EEPROM_FILE_TYPE); bool xmlOK = doc.setContent(&file); if(xmlOK) { if (loadEEpromXml(radioData, doc)){ ui->modelsList->refreshList(); if(resetCurrentFile) setCurrentFile(fileName); return true; } } file.reset(); QTextStream inputStream(&file); if (fileType==FILE_TYPE_EEPE) { // read EEPE file header QString hline = inputStream.readLine(); if (hline!=EEPE_EEPROM_FILE_HEADER) { file.close(); return false; } } QByteArray eeprom(EESIZE_MAX, 0); int eeprom_size = HexInterface(inputStream).load((uint8_t *)eeprom.data(), EESIZE_MAX); if (!eeprom_size) { QMessageBox::critical(this, tr("Error"), tr("Invalid EEPROM File %1") .arg(fileName)); file.close(); return false; } file.close(); if (!loadEEprom(radioData, (uint8_t *)eeprom.data(), eeprom_size)) { QMessageBox::critical(this, tr("Error"), tr("Invalid EEPROM File %1") .arg(fileName)); return false; } ui->modelsList->refreshList(); if(resetCurrentFile) setCurrentFile(fileName); return true; } else if (fileType==FILE_TYPE_BIN) { //read binary int eeprom_size = file.size(); if (!file.open(QFile::ReadOnly)) { //reading binary file - TODO HEX support QMessageBox::critical(this, tr("Error"), tr("Error opening file %1:\n%2.") .arg(fileName) .arg(file.errorString())); return false; } uint8_t *eeprom = (uint8_t *)malloc(eeprom_size); memset(eeprom, 0, eeprom_size); long result = file.read((char*)eeprom, eeprom_size); file.close(); if (result != eeprom_size) { QMessageBox::critical(this, tr("Error"), tr("Error reading file %1:\n%2.") .arg(fileName) .arg(file.errorString())); return false; } if (!loadEEprom(radioData, eeprom, eeprom_size) && !::loadBackup(radioData, eeprom, eeprom_size, 0)) { QMessageBox::critical(this, tr("Error"), tr("Invalid binary EEPROM File %1") .arg(fileName)); return false; } ui->modelsList->refreshList(); if(resetCurrentFile) setCurrentFile(fileName); free(eeprom); return true; } return false; }