Skip to content

Commit 8fe7c4f

Browse files
committed
Added current chip name/signature to fuse input page
1 parent 43c6b56 commit 8fe7c4f

10 files changed

+129
-18
lines changed

firmware-uim/src/pages/mainPage.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ void MainPage::confirm()
2222
this->pageManager->changePage(new ReadFusesInitPage(this->pageManager));
2323
break;
2424
case 4:
25-
this->pageManager->changePage(new WriteFuseSelectInitPage(this->pageManager));
25+
this->pageManager->changePage(new WriteFuseSelectInit1Page(this->pageManager));
2626
break;
2727
default:
2828
break;

firmware-uim/src/pages/mainPage.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
#include "eraseInitPage.h"
1414
#include "readFusesInitPage.h"
1515
#include "flashSelectInitPage.h"
16-
#include "writeFuseSelectInitPage.h"
16+
#include "writeFuseSelectInit1Page.h"
1717

1818
class MainPage : public TabPage
1919
{

firmware-uim/src/pages/writeFuseInputPage.cpp

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,33 @@
11
#include "writeFuseInputPage.h"
22

3-
WriteFuseInputPage::WriteFuseInputPage(PageManager* manager, byte fuse, byte initValue)
3+
WriteFuseInputPage::WriteFuseInputPage(PageManager* manager, byte sig1, byte sig2, byte sig3, byte fuse, byte initValue)
44
: TabPage ( manager, 10 )
55
{
6+
this->sig1 = sig1;
7+
this->sig2 = sig2;
8+
this->sig3 = sig3;
9+
610
this->fuse = fuse;
711
this->fuseValue = initValue;
812
}
913

14+
void WriteFuseInputPage::init()
15+
{
16+
for (byte j = 0; j < NUMITEMS(signatures); j++)
17+
{
18+
// Copy from PROGMEM to Memory
19+
memcpy_P(&this->signature, &signatures[j], sizeof this->signature);
20+
if (this->signature.sig[0] == this->sig1 &&
21+
this->signature.sig[1] == this->sig2 &&
22+
this->signature.sig[2] == this->sig3)
23+
{
24+
// Signature found and known
25+
this->signatureKnown = true;
26+
return;
27+
}
28+
}
29+
}
30+
1031
void WriteFuseInputPage::confirm()
1132
{
1233
if (this->getTabIndex() < 8)
@@ -31,6 +52,20 @@ void WriteFuseInputPage::initRender(SSD1306Ascii* display)
3152
{
3253
display->println(F("Change fuse bits."));
3354

55+
// Print chip name or signature if unknown
56+
display->setCursor(0, 1);
57+
if (this->signatureKnown)
58+
display->println(this->signature.desc);
59+
else
60+
{
61+
display->print(F("Signature: "));
62+
DisplayUtils::printHex(display, this->sig1);
63+
display->print(F(","));
64+
DisplayUtils::printHex(display, this->sig2);
65+
display->print(F(","));
66+
DisplayUtils::printHex(display, this->sig3);
67+
}
68+
3469
display->setCursor(0, 3);
3570
switch (this->fuse)
3671
{

firmware-uim/src/pages/writeFuseInputPage.h

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,18 @@ class WriteFuseInputPage : public TabPage
1818
const char* back = " Back";
1919
const char* ok = " Confirm";
2020

21+
byte sig1, sig2, sig3;
22+
Signature signature = Signature();
23+
bool signatureKnown = false;
24+
2125
byte fuse;
2226
byte fuseValue;
2327

2428
public:
25-
WriteFuseInputPage(PageManager* manager, byte fuse, byte initValue);
29+
WriteFuseInputPage(PageManager* manager, byte sig1, byte sig2, byte sig3, byte fuse, byte initValue);
30+
2631
void confirm() override;
32+
void init() override;
2733

2834
void initRender(SSD1306Ascii* display) override;
2935
void render(SSD1306Ascii* display) override;
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
#include "writeFuseSelectInit1Page.h"
2+
3+
WriteFuseSelectInit1Page::WriteFuseSelectInit1Page(PageManager* manager)
4+
: LoadingPage(manager, "Loading signature...")
5+
{
6+
}
7+
8+
void WriteFuseSelectInit1Page::init()
9+
{
10+
programmer_request(cmd_readSignature);
11+
}
12+
13+
void WriteFuseSelectInit1Page::update()
14+
{
15+
if (programmer_answer(answer))
16+
{
17+
if (answer.error > 0x00)
18+
{
19+
this->pageManager->changePage(new ErrorPage(this->pageManager, answer.error));
20+
return;
21+
}
22+
if (answer.cmd == cmd_readSignature)
23+
{
24+
this->pageManager->changePage(
25+
new WriteFuseSelectInit2Page(this->pageManager,
26+
answer.data[0], answer.data[1], answer.data[2]));
27+
return;
28+
}
29+
else
30+
{
31+
Serial.println(F("CRITICAL: Invalid response to readSignature command."));
32+
while (true) {};
33+
}
34+
}
35+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
#pragma once
2+
3+
#if defined(ARDUINO) && ARDUINO >= 100
4+
#include "arduino.h"
5+
#else
6+
#include "WProgram.h"
7+
#endif
8+
9+
#include <SSD1306Ascii.h>
10+
#include "../../I2CHelper.h"
11+
#include "../pageManager.h"
12+
#include "loadingPage.h"
13+
#include "writeFuseSelectInit2Page.h"
14+
#include "errorPage.h"
15+
16+
class WriteFuseSelectInit1Page : public LoadingPage
17+
{
18+
private:
19+
Answer answer;
20+
21+
public:
22+
WriteFuseSelectInit1Page(PageManager* manager);
23+
24+
void init() override;
25+
void update() override;
26+
};

firmware-uim/src/pages/writeFuseSelectInitPage.cpp renamed to firmware-uim/src/pages/writeFuseSelectInit2Page.cpp

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,19 @@
1-
#include "writeFuseSelectInitPage.h"
1+
#include "writeFuseSelectInit2Page.h"
22

3-
WriteFuseSelectInitPage::WriteFuseSelectInitPage(PageManager* manager)
4-
: LoadingPage ( manager, "Loading..." )
3+
WriteFuseSelectInit2Page::WriteFuseSelectInit2Page(PageManager* manager, byte sig1, byte sig2, byte sig3)
4+
: LoadingPage ( manager, "Loading fuses..." )
55
{
6+
this->sig1 = sig1;
7+
this->sig2 = sig2;
8+
this->sig3 = sig3;
69
}
710

8-
void WriteFuseSelectInitPage::init()
11+
void WriteFuseSelectInit2Page::init()
912
{
1013
programmer_request(cmd_readFuses);
1114
}
1215

13-
void WriteFuseSelectInitPage::update()
16+
void WriteFuseSelectInit2Page::update()
1417
{
1518
if (programmer_answer(answer))
1619
{
@@ -22,7 +25,7 @@ void WriteFuseSelectInitPage::update()
2225
if (answer.cmd == cmd_readFuses)
2326
{
2427
this->pageManager->changePage(
25-
new WriteFuseSelectPage(this->pageManager,
28+
new WriteFuseSelectPage(this->pageManager, this->sig1, this->sig2, this->sig3,
2629
answer.data[lowFuse], answer.data[highFuse], answer.data[extFuse],
2730
answer.data[lockFuse], answer.data[calibrationFuse]));
2831
return;

firmware-uim/src/pages/writeFuseSelectInitPage.h renamed to firmware-uim/src/pages/writeFuseSelectInit2Page.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,14 @@
1414
#include "writeFuseSelectPage.h"
1515
#include "mainPage.h"
1616

17-
class WriteFuseSelectInitPage : public LoadingPage
17+
class WriteFuseSelectInit2Page : public LoadingPage
1818
{
1919
private:
2020
Answer answer;
21+
byte sig1, sig2, sig3;
2122

2223
public:
23-
WriteFuseSelectInitPage(PageManager* manager);
24+
WriteFuseSelectInit2Page(PageManager* manager, byte sig1, byte sig2, byte sig3);
2425

2526
void init() override;
2627
void update() override;

firmware-uim/src/pages/writeFuseSelectPage.cpp

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,12 @@
11
#include "writeFuseSelectPage.h"
22

3-
WriteFuseSelectPage::WriteFuseSelectPage(PageManager* manager, byte lowFuse, byte highFuse, byte extFuse, byte lockFuse, byte calibration)
3+
WriteFuseSelectPage::WriteFuseSelectPage(PageManager* manager, byte sig1, byte sig2, byte sig3, byte lowFuse, byte highFuse, byte extFuse, byte lockFuse, byte calibration)
44
: TabPage(manager, 5)
55
{
6+
this->sig1 = sig1;
7+
this->sig2 = sig2;
8+
this->sig3 = sig3;
9+
610
this->val_lowFuse = lowFuse;
711
this->val_highFuse = highFuse;
812
this->val_extFuse = extFuse;
@@ -16,19 +20,19 @@ void WriteFuseSelectPage::confirm()
1620
{
1721
case 0: // Low
1822
this->pageManager->changePage(new WriteFuseInputPage(
19-
this->pageManager, lowFuse, this->val_lowFuse));
23+
this->pageManager, this->sig1, this->sig2, this->sig3, lowFuse, this->val_lowFuse));
2024
return;
2125
case 1: // High
2226
this->pageManager->changePage(new WriteFuseInputPage(
23-
this->pageManager, highFuse, this->val_highFuse));
27+
this->pageManager, this->sig1, this->sig2, this->sig3, highFuse, this->val_highFuse));
2428
return;
2529
case 2: // Ext
2630
this->pageManager->changePage(new WriteFuseInputPage(
27-
this->pageManager, extFuse, this->val_extFuse));
31+
this->pageManager, this->sig1, this->sig2, this->sig3, extFuse, this->val_extFuse));
2832
return;
2933
case 3: // Lock
3034
this->pageManager->changePage(new WriteFuseInputPage(
31-
this->pageManager, lockFuse, this->val_lockFuse));
35+
this->pageManager, this->sig1, this->sig2, this->sig3, lockFuse, this->val_lockFuse));
3236
return;
3337
case 4:
3438
this->pageManager->changePage(new MainPage(this->pageManager));

firmware-uim/src/pages/writeFuseSelectPage.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,12 @@
1515
class WriteFuseSelectPage : public TabPage
1616
{
1717
private:
18+
byte sig1, sig2, sig3;
1819
byte val_lowFuse, val_highFuse, val_extFuse, val_lockFuse, val_calibration;
1920
const char* back = " Back";
2021

2122
public:
22-
WriteFuseSelectPage(PageManager* manager, byte lowFuse, byte highFuse, byte extFuse, byte lockFuse, byte calibration);
23+
WriteFuseSelectPage(PageManager* manager, byte sig1, byte sig2, byte sig3, byte lowFuse, byte highFuse, byte extFuse, byte lockFuse, byte calibration);
2324
void confirm() override;
2425

2526
void initRender(SSD1306Ascii* display) override;

0 commit comments

Comments
 (0)