Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Correct OTA process message show on display #137

Merged
merged 8 commits into from
Jun 4, 2024
31 changes: 26 additions & 5 deletions examples/OneOpenAir/OneOpenAir.ino
Original file line number Diff line number Diff line change
Expand Up @@ -507,7 +507,7 @@ static void displayExecuteOta(OtaState state, String msg, int processing) {
switch (state) {
case OtaState::OTA_STATE_BEGIN: {
if (ag->isOne()) {
oledDisplay.showNewFirmwareVersion(msg);
oledDisplay.showFirmwareUpdateVersion(msg);
} else {
Serial.println("New firmware: " + msg);
}
Expand All @@ -516,17 +516,37 @@ static void displayExecuteOta(OtaState state, String msg, int processing) {
}
case OtaState::OTA_STATE_FAIL: {
if (ag->isOne()) {
oledDisplay.showNewFirmwareFailed();
oledDisplay.showFirmwareUpdateFailed();
} else {
Serial.println("Error: Firmware update: failed");
}

delay(2500);
break;
}
case OtaState::OTA_STATE_SKIP: {
if (ag->isOne()) {
oledDisplay.showFirmwareUpdateSkipped();
} else {
Serial.println("Firmware update: Skipped");
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Propose to rephrase to
Firmware update skipped

}

delay(2500);
break;
}
case OtaState::OTA_STATE_UP_TO_DATE: {
if (ag->isOne()) {
oledDisplay.showFirmwareUpdateUpToDate();
} else {
Serial.println("Firmware update: up to date");
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Propose to rephrase to
Firmware is up to date

}

delay(2500);
break;
}
case OtaState::OTA_STATE_PROCESSING: {
if (ag->isOne()) {
oledDisplay.showNewFirmwareUpdating(String(processing));
oledDisplay.showFirmwareUpdateProgress(processing);
} else {
Serial.println("Firmware update: " + String(processing) + String("%"));
}
Expand All @@ -542,13 +562,14 @@ static void displayExecuteOta(OtaState state, String msg, int processing) {
while (i != 0) {
i = i - 1;
if (ag->isOne()) {
oledDisplay.showNewFirmwareSuccess(String(i));
oledDisplay.showFirmwareUpdateSuccess(String(i));
} else {
Serial.println("Rebooting... " + String(i));
}

delay(1000);
}
oledDisplay.setBrightness(0);
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Curious to know, what happens without this line?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This like will be clear all display content while reboot device. If not the display still Show "Firmware update success" while rebooting

esp_restart();
}
break;
Expand Down Expand Up @@ -862,7 +883,7 @@ static void configUpdateHandle() {
fwNewVersion = configuration.newFirmwareVersion();
if (fwNewVersion.length()) {
bool doOta = false;
if (measurements.otaBootCount == 0) {
if (measurements.otaBootCount < 0) {
doOta = true;
Serial.println("First OTA");
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think the message is misleading, the device might have gone through several OTA updates when we arrive here.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's indicate first OTA check. If it's zero and process failed, retry will call for 3-4 times (Because we check cloud configure each 15sec). < 0 should help, that mean the otaBootCount is invalid, after first check it's set to bootCount

} else {
Expand Down
24 changes: 19 additions & 5 deletions examples/OneOpenAir/OtaHandler.h
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@ enum OtaUpdateOutcome {
enum OtaState {
OTA_STATE_BEGIN,
OTA_STATE_FAIL,
OTA_STATE_SKIP,
OTA_STATE_UP_TO_DATE,
OTA_STATE_PROCESSING,
OTA_STATE_SUCCESS
};
Expand All @@ -40,13 +42,22 @@ class OtaHandler {
config.url = urlAsChar;
OtaUpdateOutcome ret = attemptToPerformOta(&config);
Serial.println(ret);
if (ret == OtaUpdateOutcome::UPDATE_PERFORMED) {
if (this->callback) {
if (this->callback) {
switch (ret) {
case OtaUpdateOutcome::UPDATE_PERFORMED:
this->callback(OtaState::OTA_STATE_SUCCESS, "");
}
} else {
if(this->callback) {
break;
case OtaUpdateOutcome::UDPATE_SKIPPED:
this->callback(OtaState::OTA_STATE_SKIP, "");
break;
case OtaUpdateOutcome::ALREADY_UP_TO_DATE:
this->callback(OtaState::OTA_STATE_UP_TO_DATE, "");
break;
case OtaUpdateOutcome::UPDATE_FAILED:
this->callback(OtaState::OTA_STATE_FAIL, "");
break;
default:
break;
}
}
}
Expand Down Expand Up @@ -127,6 +138,9 @@ class OtaHandler {
int data_read =
esp_http_client_read(client, upgrade_data_buf, OTA_BUF_SIZE);
if (data_read == 0) {
if (this->callback) {
this->callback(OtaState::OTA_STATE_PROCESSING, String(100));
}
Serial.println("Connection closed, all data received");
break;
}
Expand Down
40 changes: 33 additions & 7 deletions src/AgOledDisplay.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -330,7 +330,7 @@ void OledDisplay::setBrightness(int percent) {
}
}

void OledDisplay::showNewFirmwareVersion(String version) {
void OledDisplay::showFirmwareUpdateVersion(String version) {
if (isDisplayOff) {
return;
}
Expand All @@ -344,7 +344,7 @@ void OledDisplay::showNewFirmwareVersion(String version) {
} while (DISP()->nextPage());
}

void OledDisplay::showNewFirmwareUpdating(String percent) {
void OledDisplay::showFirmwareUpdateProgress(int percent) {
if (isDisplayOff) {
return;
}
Expand All @@ -353,11 +353,11 @@ void OledDisplay::showNewFirmwareUpdating(String percent) {
do {
DISP()->setFont(u8g2_font_t0_16_tf);
setCentralText(20, "Firmware Update");
setCentralText(50, String("Updating... ") + percent + String("%"));
setCentralText(50, String("Updating... ") + String(percent) + String("%"));
} while (DISP()->nextPage());
}

void OledDisplay::showNewFirmwareSuccess(String count) {
void OledDisplay::showFirmwareUpdateSuccess(String count) {
if (isDisplayOff) {
return;
}
Expand All @@ -371,7 +371,7 @@ void OledDisplay::showNewFirmwareSuccess(String count) {
} while (DISP()->nextPage());
}

void OledDisplay::showNewFirmwareFailed(void) {
void OledDisplay::showFirmwareUpdateFailed(void) {
if (isDisplayOff) {
return;
}
Expand All @@ -380,7 +380,33 @@ void OledDisplay::showNewFirmwareFailed(void) {
do {
DISP()->setFont(u8g2_font_t0_16_tf);
setCentralText(20, "Firmware Update");
setCentralText(40, "Failed");
setCentralText(60, String("Retry after 24h"));
setCentralText(40, "fail, will retry");
// setCentralText(60, "will retry");
} while (DISP()->nextPage());
}

void OledDisplay::showFirmwareUpdateSkipped(void) {
if (isDisplayOff) {
return;
}

DISP()->firstPage();
do {
DISP()->setFont(u8g2_font_t0_16_tf);
setCentralText(20, "Firmware Update");
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Propose to rephrase to
Firmware update skipped

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If it's fit for a line we should reduce the font size.

setCentralText(40, "skipped");
} while (DISP()->nextPage());
}

void OledDisplay::showFirmwareUpdateUpToDate(void) {
if (isDisplayOff) {
return;
}

DISP()->firstPage();
do {
DISP()->setFont(u8g2_font_t0_16_tf);
setCentralText(20, "Firmware Update");
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The term Update is redundant this way, propose to make it a sentence and say

Firmware
is up to date

setCentralText(40, "up to date");
} while (DISP()->nextPage());
}
10 changes: 6 additions & 4 deletions src/AgOledDisplay.h
Original file line number Diff line number Diff line change
Expand Up @@ -36,10 +36,12 @@ class OledDisplay : public PrintLog {
void showDashboard(void);
void showDashboard(const char *status);
void setBrightness(int percent);
void showNewFirmwareVersion(String version);
void showNewFirmwareUpdating(String percent);
void showNewFirmwareSuccess(String count);
void showNewFirmwareFailed(void);
void showFirmwareUpdateVersion(String version);
void showFirmwareUpdateProgress(int percent);
void showFirmwareUpdateSuccess(String count);
void showFirmwareUpdateFailed(void);
void showFirmwareUpdateSkipped(void);
void showFirmwareUpdateUpToDate(void);
};

#endif /** _AG_OLED_DISPLAY_H_ */
2 changes: 1 addition & 1 deletion src/AgValue.h
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ class Measurements {
int countPosition;
const int targetCount = 20;
int bootCount;
int otaBootCount;
int otaBootCount = -1;

String toString(bool isLocal, AgFirmwareMode fwMode, int rssi, void* _ag, void* _config);
};
Expand Down