1 #include "burnconfigdialog.h"
2 #include "ui_burnconfigdialog.h"
3 #include "eeprominterface.h"
6 #include "progressdialog.h"
7 #include "process_flash.h"
9 #if !defined WIN32 && defined __GNUC__
13 burnConfigDialog::burnConfigDialog(QWidget
*parent
) :
15 ui(new Ui::burnConfigDialog
)
18 setWindowIcon(CompanionIcon("configure.png"));
19 ui
->avrdude_programmer
->model()->sort(0);
22 populateProgrammers();
23 EEPROMInterface
*eepromInterface
= GetEepromInterface();
24 if (IS_TARANIS(eepromInterface
->getBoard())) {
25 setWindowTitle(tr("DFU-UTIL Configuration"));
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"));
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();
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();
76 ui
->label_dfu2
->hide();
79 QTimer::singleShot(0, this, SLOT(shrink()));
80 connect(this,SIGNAL(accepted()),this,SLOT(putSettings()));
83 burnConfigDialog::~burnConfigDialog()
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();
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();
117 dfuArgs
= g
.dfuArguments().split(" ", QString::SkipEmptyParts
);
118 avrArgs
= g
.avrArguments().split(" ", QString::SkipEmptyParts
);
119 avrProgrammer
= g
.programmer();
120 avrPort
= g
.avrPort();
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
);
143 if (file
.exists(avrLoc
)) {
144 ui
->pushButton_3
->setEnabled(true);
146 ui
->pushButton_3
->setDisabled(true);
150 void burnConfigDialog::putSettings()
152 g
.avrdudeLocation( avrLoc
);
153 g
.programmer( avrProgrammer
);
155 g
.avrPort( avrPort
);
156 g
.avrArguments( avrArgs
.join(" ") );
157 g
.sambaLocation( sambaLoc
);
158 g
.sambaPort( sambaPort
);
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;
177 QString prevline
= "";
178 QTextStream
in(&file
);
182 line
= in
.readLine();
184 if(prevline
.left(10).toLower()=="programmer")
185 items
<< line
.section('"',1,1);
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);
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
);
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
);
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
);
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());
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());
309 void burnConfigDialog::on_advCtrChkB_toggled(bool checked
)
311 EEPROMInterface
*eepromInterface
= GetEepromInterface();
313 if (IS_TARANIS(eepromInterface
->getBoard())) {
314 ui
->label_dfu2
->show();
317 else if (IS_SKY9X(eepromInterface
->getBoard())) {
318 ui
->label_sb2
->show();
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."),
330 if (IS_TARANIS(eepromInterface
->getBoard())) {
331 ui
->label_dfu2
->hide();
334 else if (IS_SKY9X(eepromInterface
->getBoard())) {
335 ui
->label_sb2
->hide();
339 ui
->label_av3
->hide();
340 ui
->avrdude_mcu
->hide();
343 QTimer::singleShot(0, this, SLOT(shrink()));
347 void burnConfigDialog::shrink()