bool writeEeprom(const QString &filename, ProgressWidget *progress) { if (IS_ARM(GetCurrentFirmware()->getBoard())) { QString path = findMassstoragePath("EEPROM.BIN"); if (path.isEmpty()) { // On previous OpenTX we called the EEPROM file "TARANIS.BIN" :( path = findMassstoragePath("TARANIS.BIN"); } if (path.isEmpty()) { // Mike's bootloader calls the EEPROM file "ERSKY9X.BIN" :( path = findMassstoragePath("ERSKY9X.BIN"); } if (!path.isEmpty()) { CopyProcess copyProcess(filename, path, progress); return copyProcess.run(); } } if (!IS_TARANIS(GetCurrentFirmware()->getBoard())) { FlashProcess flashProcess(getRadioInterfaceCmd(), getWriteEEpromCmd(filename), progress); return flashProcess.run(); } if (IS_ARM(GetCurrentFirmware()->getBoard())) { RadioNotFoundDialog dialog; dialog.exec(); } return false; }
bool readFirmware(const QString &filename, ProgressWidget *progress) { bool result = false; QFile file(filename); if (file.exists() && !file.remove()) { QMessageBox::warning(NULL, QObject::tr("Error"), QObject::tr("Could not delete temporary file: %1").arg(filename)); return false; } if (IS_ARM(GetCurrentFirmware()->getBoard())) { QString path = findMassstoragePath("FIRMWARE.BIN"); if (!path.isEmpty()) { qDebug() << "readFirmware: reading" << path << "into" << filename; CopyProcess copyProcess(path, filename, progress); result = copyProcess.run(); } } if (result == false) { qDebug() << "readFirmware: reading" << filename << "with" << getRadioInterfaceCmd() << getReadFirmwareArgs(filename); FlashProcess flashProcess(getRadioInterfaceCmd(), getReadFirmwareArgs(filename), progress); result = flashProcess.run(); } if (!QFileInfo(filename).exists()) { result = false; } return result; }
void readAvrdudeFuses(ProgressWidget *progress) { burnConfigDialog bcd; QStringList args; args << "-c" << bcd.getProgrammer() << "-p" << bcd.getMCU() << bcd.getAvrdudeArgs() << "-U" << "lfuse:r:-:i" << "-U" << "hfuse:r:-:i" << "-U" << "efuse:r:-:i"; FlashProcess flashProcess(bcd.getAVRDUDE(), args, progress); flashProcess.run(); }
bool writeFirmware(const QString &filename, ProgressWidget *progress) { if (IS_ARM(GetCurrentFirmware()->getBoard())) { QString path = findMassstoragePath("FIRMWARE.BIN"); if (!path.isEmpty()) { qDebug() << "writeFirmware: writing" << path << "from" << filename; CopyProcess copyProcess(filename, path, progress); return copyProcess.run(); } } qDebug() << "writeFirmware: writing" << filename << "with" << getRadioInterfaceCmd() << getWriteFirmwareArgs(filename); FlashProcess flashProcess(getRadioInterfaceCmd(), getWriteFirmwareArgs(filename), progress); return flashProcess.run(); }
bool readEeprom(const QString &filename, ProgressWidget *progress) { bool result = false; QFile file(filename); if (file.exists() && !file.remove()) { QMessageBox::warning(NULL, QObject::tr("Error"), QObject::tr("Could not delete temporary file: %1").arg(filename)); return false; } if (IS_ARM(GetCurrentFirmware()->getBoard())) { QString path = findMassstoragePath("EEPROM.BIN"); if (path.isEmpty()) { // On previous OpenTX we called the EEPROM file "TARANIS.BIN" :( path = findMassstoragePath("TARANIS.BIN"); } if (path.isEmpty()) { // Mike's bootloader calls the EEPROM file "ERSKY9X.BIN" :( path = findMassstoragePath("ERSKY9X.BIN"); } if (!path.isEmpty()) { CopyProcess copyProcess(path, filename, progress); result = copyProcess.run(); } } if (result == false && !IS_TARANIS(GetCurrentFirmware()->getBoard())) { FlashProcess flashProcess(getRadioInterfaceCmd(), getReadEEpromCmd(filename), progress); result = flashProcess.run(); } if (result == false && IS_ARM(GetCurrentFirmware()->getBoard())) { RadioNotFoundDialog dialog; dialog.exec(); } if (!QFileInfo(filename).exists()) { result = false; } return result; }
// TODO choose better name when no merge in progress.... void burnConfigDialog::on_pushButton_4_clicked() { ProgressDialog progressDialog(this, tr("Avrdude help"), CompanionIcon("configure.png"), true); FlashProcess flashProcess(ui->avrdude_location->text(), QStringList() << "-?", progressDialog.progress()); flashProcess.run(); }
void burnConfigDialog::listAvrdudeProgrammers() { ProgressDialog progressDialog(this, tr("List available programmers"), CompanionIcon("list.png"), true); FlashProcess flashProcess(ui->avrdude_location->text(), QStringList() << "-c?", progressDialog.progress()); flashProcess.run(); }
void resetAvrdudeFuses(bool eepromProtect, ProgressWidget *progress) { //fuses //avrdude -c usbasp -p m64 -U lfuse:w:<0x0E>:m //avrdude -c usbasp -p m64 -U hfuse:w:<0x89>:m 0x81 for eeprom protection //avrdude -c usbasp -p m64 -U efuse:w:<0xFF>:m burnConfigDialog bcd; QMessageBox::StandardButton ret = QMessageBox::No; ret = QMessageBox::warning(NULL, QObject::tr("Companion"), QObject::tr("<b><u>WARNING!</u></b><br>This will reset the fuses of %1 to the factory settings.<br>" "Writing fuses can mess up your radio.<br>Do this only if you are sure they are wrong!<br>" "Are you sure you want to continue?").arg(bcd.getMCU()), QMessageBox::Yes | QMessageBox::No); if (ret == QMessageBox::Yes) { QStringList args = bcd.getAvrdudeArgs(); QStringList str; if (bcd.getMCU() == "m2560") { args << "-B8"; QString erStr = eepromProtect ? "hfuse:w:0x11:m" : "hfuse:w:0x19:m"; str << "-U" << "lfuse:w:0xD7:m" << "-U" << erStr << "-U" << "efuse:w:0xFC:m"; //use hfuse = 0x81 to prevent eeprom being erased with every flashing } else { QString lfuses; QString tempFile = generateProcessUniqueTempFileName("ftemp.bin"); QStringList argread; argread << "-c" << bcd.getProgrammer() << "-p" << bcd.getMCU() << args <<"-U" << "lfuse:r:"+tempFile+":r"; FlashProcess flashProcess(bcd.getAVRDUDE(), argread, progress); flashProcess.run(); QFile file(tempFile); if (file.exists() && file.size()==1) { file.open(QIODevice::ReadOnly); char bin_flash[1]; file.read(bin_flash, 1); if (bin_flash[0]==0x0E) { lfuses = "lfuse:w:0x0E:m"; } else { lfuses = "lfuse:w:0x3F:m"; } file.close(); qunlink(tempFile); } else { lfuses = "lfuse:w:0x3F:m"; } QString erStr = eepromProtect ? "hfuse:w:0x81:m" : "hfuse:w:0x89:m"; str << "-U" << lfuses << "-U" << erStr << "-U" << "efuse:w:0xFF:m"; //use hfuse = 0x81 to prevent eeprom being erased with every flashing } QStringList arguments; if (bcd.getMCU() == "m2560") { arguments << "-c" << bcd.getProgrammer() << "-p" << bcd.getMCU() << args << "-u" << str; } else { arguments << "-c" << bcd.getProgrammer() << "-p" << bcd.getMCU() << args << "-B" << "100" << "-u" << str; } FlashProcess flashProcess(bcd.getAVRDUDE(), arguments, progress); flashProcess.run(); } }