removed PrefixPath debug line
[opentx.git] / companion / src / burnconfigdialog.cpp
blob9c9942ffc8e759d67deb5b7ab471879bf8c04bb3
1 #include "burnconfigdialog.h"
2 #include "ui_burnconfigdialog.h"
3 #include "eeprominterface.h"
4 #include "helpers.h"
5 #include "appdata.h"
6 #include "progressdialog.h"
7 #include "process_flash.h"
9 #if !defined WIN32 && defined __GNUC__
10 #include <unistd.h>
11 #endif
13 burnConfigDialog::burnConfigDialog(QWidget *parent) :
14 QDialog(parent),
15 ui(new Ui::burnConfigDialog)
17 ui->setupUi(this);
18 setWindowIcon(CompanionIcon("configure.png"));
19 ui->avrdude_programmer->model()->sort(0);
21 getSettings();
22 populateProgrammers();
23 EEPROMInterface *eepromInterface = GetEepromInterface();
24 if (IS_TARANIS(eepromInterface->getBoard())) {
25 setWindowTitle(tr("DFU-UTIL Configuration"));
26 ui->avrArgs->hide();
27 ui->avrdude_location->hide();
28 ui->avrdude_port->hide();
29 ui->avrdude_programmer->hide();
30 ui->label_av1->hide();
31 ui->label_av2->hide();
32 ui->label_av4->hide();
33 ui->label_av5->hide();
34 ui->pushButton->hide();
35 ui->pushButton_3->hide();
36 ui->pushButton_4->hide();
37 ui->label_sb1->hide();
38 ui->label_sb3->hide();
39 ui->samba_location->hide();
40 ui->samba_port->hide();
41 ui->sb_browse->hide();
43 else if (IS_SKY9X(eepromInterface->getBoard())) {
44 setWindowTitle(tr("SAM-BA Configuration"));
45 ui->avrArgs->hide();
46 ui->avrdude_location->hide();
47 ui->avrdude_port->hide();
48 ui->avrdude_programmer->hide();
49 ui->label_av1->hide();
50 ui->label_av2->hide();
51 ui->label_av4->hide();
52 ui->label_av5->hide();
53 ui->pushButton->hide();
54 ui->pushButton_3->hide();
55 ui->pushButton_4->hide();
56 ui->label_dfu1->hide();
57 ui->dfu_location->hide();
58 ui->dfu_browse->hide();
60 else {
61 setWindowTitle(tr("AVRDUDE Configuration"));
62 ui->label_sb1->hide();
63 ui->label_sb3->hide();
64 ui->samba_location->hide();
65 ui->samba_port->hide();
66 ui->sb_browse->hide();
67 ui->label_dfu1->hide();
68 ui->label_dfu2->hide();
69 ui->dfu_location->hide();
70 ui->dfu_browse->hide();
72 ui->label_av3->hide();
73 ui->avrdude_mcu->hide();
74 ui->label_sb2->hide();
75 ui->arm_mcu->hide();
76 ui->label_dfu2->hide();
77 ui->dfuArgs->hide();
79 QTimer::singleShot(0, this, SLOT(shrink()));
80 connect(this,SIGNAL(accepted()),this,SLOT(putSettings()));
83 burnConfigDialog::~burnConfigDialog()
85 delete ui;
88 void burnConfigDialog::getSettings()
90 avrLoc = g.avrdudeLocation();
91 sambaLoc = g.sambaLocation();
92 dfuLoc = g.dfuLocation();
94 #if defined WIN32 || !defined __GNUC__
95 if ( avrLoc.isEmpty())
96 avrLoc = QFileInfo("avrdude.exe").absoluteFilePath();
97 if ( sambaLoc.isEmpty())
98 sambaLoc = QFileInfo("sam-ba.exe").absoluteFilePath();
99 if ( dfuLoc.isEmpty())
100 dfuLoc = QFileInfo("dfu-util.exe").absoluteFilePath();
101 #elif defined __APPLE__
102 if ( avrLoc.isEmpty())
103 avrLoc = "/usr/local/bin/avrdude";
104 if ( sambaLoc.isEmpty())
105 sambaLoc = "/usr/local/bin/sam-ba";
106 if ( dfuLoc.isEmpty())
107 dfuLoc = QFileInfo("/opt/local/bin/dfu-util").absoluteFilePath();
108 #else
109 if ( avrLoc.isEmpty())
110 avrLoc = "/usr/bin/avrdude";
111 if ( sambaLoc.isEmpty())
112 sambaLoc = "/usr/bin/sam-ba";
113 if ( dfuLoc.isEmpty())
114 dfuLoc = QFileInfo("/usr/bin/dfu-util").absoluteFilePath();
115 #endif
117 dfuArgs = g.dfuArguments().split(" ", QString::SkipEmptyParts);
118 avrArgs = g.avrArguments().split(" ", QString::SkipEmptyParts);
119 avrProgrammer = g.programmer();
120 avrPort = g.avrPort();
121 avrMCU = g.mcu();
122 armMCU = g.armMcu();
123 sambaPort = g.sambaPort();
125 ui->avrdude_location->setText(getAVRDUDE());
126 ui->avrArgs->setText(avrArgs.join(" "));
128 ui->samba_location->setText(getSAMBA());
129 ui->samba_port->setText(getSambaPort());
131 ui->dfu_location->setText(getDFU());
132 ui->dfuArgs->setText(getDFUArgs().join(" "));
134 int idx1 = ui->avrdude_programmer->findText(getProgrammer());
135 int idx2 = ui->avrdude_port->findText(getPort());
136 int idx3 = ui->avrdude_mcu->findText(getMCU());
137 int idx4 = ui->arm_mcu->findText(getArmMCU());
138 if(idx1>=0) ui->avrdude_programmer->setCurrentIndex(idx1);
139 if(idx2>=0) ui->avrdude_port->setCurrentIndex(idx2);
140 if(idx3>=0) ui->avrdude_mcu->setCurrentIndex(idx3);
141 if(idx4>=0) ui->arm_mcu->setCurrentIndex(idx4);
142 QFile file;
143 if (file.exists(avrLoc)) {
144 ui->pushButton_3->setEnabled(true);
145 } else {
146 ui->pushButton_3->setDisabled(true);
150 void burnConfigDialog::putSettings()
152 g.avrdudeLocation( avrLoc );
153 g.programmer( avrProgrammer);
154 g.mcu( avrMCU );
155 g.avrPort( avrPort );
156 g.avrArguments( avrArgs.join(" ") );
157 g.sambaLocation( sambaLoc );
158 g.sambaPort( sambaPort );
159 g.armMcu( armMCU );
160 g.dfuLocation( dfuLoc );
161 g.dfuArguments( dfuArgs.join(" ") );
164 void burnConfigDialog::populateProgrammers()
166 QString fileName = QFileInfo(avrLoc).canonicalPath() + "/avrdude.conf"; //for windows
167 if(!QFileInfo(fileName).exists()) fileName = "/etc/avrdude.conf"; //for linux
168 if(!QFileInfo(fileName).exists()) fileName = "/etc/avrdude/avrdude.conf"; //for linux
169 if(!QFileInfo(fileName).exists()) return; // not found avrdude.conf - returning
171 QFile file(fileName);
173 if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) return;
175 QStringList items;
176 QString line = "";
177 QString prevline = "";
178 QTextStream in(&file);
179 while (!in.atEnd())
181 prevline = line;
182 line = in.readLine();
184 if(prevline.left(10).toLower()=="programmer")
185 items << line.section('"',1,1);
187 file.close();
189 items.sort();
191 QString avrProgrammer_temp = avrProgrammer;
192 ui->avrdude_programmer->clear();
193 ui->avrdude_programmer->addItems(items);
194 int idx1 = ui->avrdude_programmer->findText(avrProgrammer_temp);
195 if(idx1>=0) ui->avrdude_programmer->setCurrentIndex(idx1);
198 void burnConfigDialog::on_avrdude_programmer_currentIndexChanged(QString )
200 avrProgrammer = ui->avrdude_programmer->currentText();
203 void burnConfigDialog::on_avrdude_mcu_currentIndexChanged(QString )
205 avrMCU = ui->avrdude_mcu->currentText();
208 void burnConfigDialog::on_avrdude_location_editingFinished()
210 avrLoc = ui->avrdude_location->text();
211 if (avrLoc.isEmpty()) {
212 ui->pushButton_3->setDisabled(true);
213 } else {
214 QFile file;
215 if (file.exists(avrLoc)) {
216 ui->pushButton_3->setEnabled(true);
221 void burnConfigDialog::on_avrArgs_editingFinished()
223 avrArgs = ui->avrArgs->text().split(" ", QString::SkipEmptyParts);
226 void burnConfigDialog::on_avrdude_port_currentIndexChanged(QString )
228 avrPort = ui->avrdude_port->currentText();
231 void burnConfigDialog::on_samba_location_editingFinished()
233 sambaLoc = ui->samba_location->text();
236 void burnConfigDialog::on_samba_port_editingFinished()
238 sambaPort = ui->samba_port->text();
241 void burnConfigDialog::on_arm_mcu_currentIndexChanged(QString )
243 armMCU = ui->arm_mcu->currentText();
246 void burnConfigDialog::on_pushButton_clicked()
248 QString fileName = QFileDialog::getOpenFileName(this, tr("Select Location"),ui->avrdude_location->text());
250 if(!fileName.isEmpty())
252 ui->avrdude_location->setText(fileName);
253 avrLoc = fileName;
257 void burnConfigDialog::on_sb_browse_clicked()
259 QString fileName = QFileDialog::getOpenFileName(this, tr("Select Location"),ui->samba_location->text());
260 if(!fileName.isEmpty())
262 ui->samba_location->setText(fileName);
263 sambaLoc = fileName;
267 void burnConfigDialog::on_dfu_browse_clicked()
269 QString fileName = QFileDialog::getOpenFileName(this, tr("Select Location"),ui->dfu_location->text());
271 if(!fileName.isEmpty())
273 ui->dfu_location->setText(fileName);
274 dfuLoc = fileName;
278 void burnConfigDialog::on_dfu_location_editingFinished()
280 dfuLoc = ui->dfu_location->text();
283 void burnConfigDialog::on_dfuArgs_editingFinished()
285 dfuArgs = ui->dfuArgs->text().split(" ", QString::SkipEmptyParts);
288 void burnConfigDialog::listAvrdudeProgrammers()
290 ProgressDialog progressDialog(this, tr("List available programmers"), CompanionIcon("list.png"), true);
291 FlashProcess flashProcess(ui->avrdude_location->text(), QStringList() << "-c?", progressDialog.progress());
292 flashProcess.run();
295 // TODO choose better name when no merge in progress....
296 void burnConfigDialog::on_pushButton_3_clicked()
298 listAvrdudeProgrammers();
301 // TODO choose better name when no merge in progress....
302 void burnConfigDialog::on_pushButton_4_clicked()
304 ProgressDialog progressDialog(this, tr("Avrdude help"), CompanionIcon("configure.png"), true);
305 FlashProcess flashProcess(ui->avrdude_location->text(), QStringList() << "-?", progressDialog.progress());
306 flashProcess.run();
309 void burnConfigDialog::on_advCtrChkB_toggled(bool checked)
311 EEPROMInterface *eepromInterface = GetEepromInterface();
312 if (checked) {
313 if (IS_TARANIS(eepromInterface->getBoard())) {
314 ui->label_dfu2->show();
315 ui->dfuArgs->show();
317 else if (IS_SKY9X(eepromInterface->getBoard())) {
318 ui->label_sb2->show();
319 ui->arm_mcu->show();
321 else {
322 ui->label_av3->show();
323 ui->avrdude_mcu->show();
324 QMessageBox::warning(this, tr("Companion"),
325 tr("<b><u>WARNING!</u></b><br>Normally CPU type is automatically selected according to the chosen firmware.<br>If you change the CPU type the resulting eeprom could be inconsistent."),
326 QMessageBox::Ok);
329 else {
330 if (IS_TARANIS(eepromInterface->getBoard())) {
331 ui->label_dfu2->hide();
332 ui->dfuArgs->hide();
334 else if (IS_SKY9X(eepromInterface->getBoard())) {
335 ui->label_sb2->hide();
336 ui->arm_mcu->hide();
338 else {
339 ui->label_av3->hide();
340 ui->avrdude_mcu->hide();
343 QTimer::singleShot(0, this, SLOT(shrink()));
347 void burnConfigDialog::shrink()
349 resize(0,0);