コード例 #1
0
ファイル: radiointerface.cpp プロジェクト: h0st1le/opentx
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;
}
コード例 #2
0
ファイル: radiointerface.cpp プロジェクト: h0st1le/opentx
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;
}
コード例 #3
0
ファイル: radiointerface.cpp プロジェクト: h0st1le/opentx
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();
}
コード例 #4
0
ファイル: radiointerface.cpp プロジェクト: h0st1le/opentx
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();
}
コード例 #5
0
ファイル: radiointerface.cpp プロジェクト: h0st1le/opentx
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;
}
コード例 #6
0
ファイル: burnconfigdialog.cpp プロジェクト: BenZoFly/opentx
// 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();
}
コード例 #7
0
ファイル: burnconfigdialog.cpp プロジェクト: BenZoFly/opentx
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();
}
コード例 #8
0
ファイル: radiointerface.cpp プロジェクト: h0st1le/opentx
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();
  }
}