Skip to content

Commit 49b3cd0

Browse files
committed
Implemented chip autodetection
1 parent 1899f4b commit 49b3cd0

File tree

6 files changed

+147
-21
lines changed

6 files changed

+147
-21
lines changed

qt/chip_db.cpp

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -285,6 +285,49 @@ ChipInfo *ChipDb::chipInfoGetById(int id)
285285
return &chipInfoVector[id];
286286
}
287287

288+
int ChipDb::getIdByChipId(uint32_t id1, uint32_t id2, uint32_t id3,
289+
uint32_t id4, uint32_t id5)
290+
{
291+
for(int i = 0; i < chipInfoVector.size(); i++)
292+
{
293+
// Mandatory IDs
294+
if (id1 != chipInfoVector[i].params[CHIP_PARAM_ID1] ||
295+
id2 != chipInfoVector[i].params[CHIP_PARAM_ID2])
296+
{
297+
continue;
298+
}
299+
300+
// Optinal IDs
301+
if (chipInfoVector[i].params[CHIP_PARAM_ID3] ==
302+
CHIP_PARAM_NOT_DEFINED_VALUE)
303+
{
304+
return i;
305+
}
306+
if (id3 != chipInfoVector[i].params[CHIP_PARAM_ID3])
307+
continue;
308+
309+
if (chipInfoVector[i].params[CHIP_PARAM_ID4] ==
310+
CHIP_PARAM_NOT_DEFINED_VALUE)
311+
{
312+
return i;
313+
}
314+
if (id4 != chipInfoVector[i].params[CHIP_PARAM_ID4])
315+
continue;
316+
317+
if (chipInfoVector[i].params[CHIP_PARAM_ID5] ==
318+
CHIP_PARAM_NOT_DEFINED_VALUE)
319+
{
320+
return i;
321+
}
322+
if (id5 != chipInfoVector[i].params[CHIP_PARAM_ID5])
323+
continue;
324+
325+
return i;
326+
}
327+
328+
return -1;
329+
}
330+
288331
uint32_t ChipDb::pageSizeGetById(int id)
289332
{
290333
ChipInfo *info = chipInfoGetById(id);

qt/chip_db.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,8 @@ class ChipDb : public QObject
8686
explicit ChipDb(QObject *parent = nullptr);
8787
QStringList getNames();
8888
ChipInfo *chipInfoGetById(int id);
89+
int getIdByChipId(uint32_t id1, uint32_t id2, uint32_t id3, uint32_t id4,
90+
uint32_t id5);
8991
uint32_t pageSizeGetById(int id);
9092
uint32_t extendedPageSizeGetById(int id);
9193
uint32_t totalSizeGetById(int id);

qt/main_window.cpp

Lines changed: 64 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
#define CHIP_NAME_DEFAULT "NONE"
2727
#define CHIP_INDEX_DEFAULT 0
2828
#define CHIP_INDEX2ID(index) (index - 1)
29+
#define CHIP_ID2INDEX(id) (id + 1)
2930

3031
void MainWindow::initBufTable()
3132
{
@@ -84,6 +85,8 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent),
8485
SLOT(slotSettingsChipDb()));
8586
connect(ui->actionAbout, SIGNAL(triggered()), this,
8687
SLOT(slotAboutDialog()));
88+
connect(ui->detectPushButton, SIGNAL(clicked()), this,
89+
SLOT(slotDetectChip()));
8790
}
8891

8992
MainWindow::~MainWindow()
@@ -181,6 +184,7 @@ void MainWindow::slotFileSave()
181184
void MainWindow::setUiStateConnected(bool isConnected)
182185
{
183186
ui->chipSelectComboBox->setEnabled(isConnected);
187+
ui->detectPushButton->setEnabled(isConnected);
184188
if (!isConnected)
185189
ui->chipSelectComboBox->setCurrentIndex(CHIP_INDEX_DEFAULT);
186190
}
@@ -463,7 +467,6 @@ void MainWindow::slotProgSelectCompleted(int status)
463467

464468
void MainWindow::slotSelectChip(int selectedChipNum)
465469
{
466-
int index;
467470
QString name;
468471
ChipInfo *chipInfo;
469472

@@ -478,8 +481,66 @@ void MainWindow::slotSelectChip(int selectedChipNum)
478481
connect(prog, SIGNAL(confChipCompleted(int)), this,
479482
SLOT(slotProgSelectCompleted(int)));
480483

481-
index = ui->chipSelectComboBox->currentIndex();
482-
chipInfo = chipDb.chipInfoGetById(CHIP_INDEX2ID(index));
484+
chipInfo = chipDb.chipInfoGetById(CHIP_INDEX2ID(selectedChipNum));
485+
prog->confChip(chipInfo);
486+
}
487+
488+
void MainWindow::slotProgDetectChipReadChipIdCompleted(int status)
489+
{
490+
QString idStr;
491+
int id;
492+
493+
disconnect(prog, SIGNAL(readChipIdCompleted(int)), this,
494+
SLOT(slotProgDetectChipReadChipIdCompleted(int)));
495+
496+
if (status)
497+
return;
498+
499+
idStr.sprintf("0x%02X 0x%02X 0x%02X 0x%02X 0x%02X", chipId.makerId,
500+
chipId.deviceId, chipId.thirdId, chipId.fourthId, chipId.fifthId);
501+
ui->deviceValueLabel->setText(idStr);
502+
503+
qInfo() << QString("ID ").append(idStr).toLatin1().data();
504+
505+
if ((id = chipDb.getIdByChipId(chipId.makerId, chipId.deviceId,
506+
chipId.thirdId, chipId.fourthId, chipId.fifthId)) < 0)
507+
{
508+
qInfo() << "Chip not found in database";
509+
return;
510+
}
511+
512+
ui->chipSelectComboBox->setCurrentIndex(CHIP_ID2INDEX(id));
513+
}
514+
515+
void MainWindow::slotProgDetectChipConfCompleted(int status)
516+
{
517+
disconnect(prog, SIGNAL(confChipCompleted(int)), this,
518+
SLOT(slotProgDetectChipConfCompleted(int)));
519+
520+
if (status)
521+
return;
522+
523+
connect(prog, SIGNAL(readChipIdCompleted(int)), this,
524+
SLOT(slotProgDetectChipReadChipIdCompleted(int)));
525+
prog->readChipId(&chipId);
526+
}
527+
528+
void MainWindow::slotDetectChip()
529+
{
530+
ChipInfo *chipInfo;
531+
532+
qInfo() << "Detecting chip ...";
533+
534+
// Assuming read of ID is the same for all chips thereby use settings of the
535+
// first one.
536+
if (!(chipInfo = chipDb.chipInfoGetById(0)))
537+
{
538+
qCritical() << "Failed to get information from chip database";
539+
return;
540+
}
541+
542+
connect(prog, SIGNAL(confChipCompleted(int)), this,
543+
SLOT(slotProgDetectChipConfCompleted(int)));
483544
prog->confChip(chipInfo);
484545
}
485546

qt/main_window.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,8 @@ private slots:
4949
void slotProgEraseProgress(unsigned int progress);
5050
void slotProgReadBadBlocksCompleted(int status);
5151
void slotProgSelectCompleted(int status);
52+
void slotProgDetectChipConfCompleted(int status);
53+
void slotProgDetectChipReadChipIdCompleted(int status);
5254

5355
public slots:
5456
void slotFileOpen();
@@ -60,6 +62,7 @@ public slots:
6062
void slotProgWrite();
6163
void slotProgReadBadBlocks();
6264
void slotSelectChip(int selectedChipNum);
65+
void slotDetectChip();
6366
void slotSettingsProgrammer();
6467
void slotSettingsChipDb();
6568
void slotAboutDialog();

qt/main_window.ui

Lines changed: 34 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@
4646
</property>
4747
<property name="minimumSize">
4848
<size>
49-
<width>70</width>
49+
<width>71</width>
5050
<height>0</height>
5151
</size>
5252
</property>
@@ -78,7 +78,33 @@
7878
</item>
7979
<item row="0" column="0">
8080
<layout class="QGridLayout" name="gridLayout_3">
81+
<item row="2" column="4">
82+
<spacer name="horizontalSpacer_2">
83+
<property name="orientation">
84+
<enum>Qt::Horizontal</enum>
85+
</property>
86+
<property name="sizeHint" stdset="0">
87+
<size>
88+
<width>40</width>
89+
<height>20</height>
90+
</size>
91+
</property>
92+
</spacer>
93+
</item>
8194
<item row="2" column="1">
95+
<widget class="QLabel" name="label_2">
96+
<property name="maximumSize">
97+
<size>
98+
<width>71</width>
99+
<height>16777215</height>
100+
</size>
101+
</property>
102+
<property name="text">
103+
<string>Select chip:</string>
104+
</property>
105+
</widget>
106+
</item>
107+
<item row="2" column="2">
82108
<widget class="QComboBox" name="chipSelectComboBox">
83109
<property name="enabled">
84110
<bool>false</bool>
@@ -106,32 +132,22 @@
106132
</property>
107133
</widget>
108134
</item>
109-
<item row="2" column="0">
110-
<widget class="QLabel" name="label_2">
135+
<item row="2" column="3">
136+
<widget class="QPushButton" name="detectPushButton">
137+
<property name="enabled">
138+
<bool>false</bool>
139+
</property>
111140
<property name="maximumSize">
112141
<size>
113-
<width>70</width>
142+
<width>50</width>
114143
<height>16777215</height>
115144
</size>
116145
</property>
117146
<property name="text">
118-
<string>Select chip:</string>
147+
<string>Detect</string>
119148
</property>
120149
</widget>
121150
</item>
122-
<item row="2" column="2">
123-
<spacer name="horizontalSpacer_2">
124-
<property name="orientation">
125-
<enum>Qt::Horizontal</enum>
126-
</property>
127-
<property name="sizeHint" stdset="0">
128-
<size>
129-
<width>40</width>
130-
<height>20</height>
131-
</size>
132-
</property>
133-
</spacer>
134-
</item>
135151
</layout>
136152
</item>
137153
<item row="2" column="0">

qt/programmer.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ class Programmer : public QObject
5454
uint32_t pageSize);
5555
void readChipBadBlocks();
5656
void confChip(ChipInfo *chipInfo);
57+
void detectChip();
5758
QString fwVersionToString(FwVersion fwVersion);
5859

5960
signals:

0 commit comments

Comments
 (0)