Skip to content

Commit fc93bdb

Browse files
committed
Merge branch 'develop' into refresh_rework
2 parents 331fc2b + 0a0f28f commit fc93bdb

5 files changed

Lines changed: 47 additions & 15 deletions

File tree

src/components/ble/DfuService.cpp

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -266,13 +266,14 @@ int DfuService::ControlPointHandler(uint16_t connectionHandle, os_mbuf* om) {
266266
static_cast<uint8_t>(ErrorCodes::NoError)};
267267
notificationManager.AsyncSend(connectionHandle, controlPointCharacteristicHandle, data, 3);
268268
} else {
269-
bleController.State(Pinetime::Controllers::Ble::FirmwareUpdateStates::Error);
270269
NRF_LOG_INFO("Image Error : bad CRC");
271270

272271
uint8_t data[3] {static_cast<uint8_t>(Opcodes::Response),
273272
static_cast<uint8_t>(Opcodes::ValidateFirmware),
274273
static_cast<uint8_t>(ErrorCodes::CrcError)};
275274
notificationManager.AsyncSend(connectionHandle, controlPointCharacteristicHandle, data, 3);
275+
bleController.State(Pinetime::Controllers::Ble::FirmwareUpdateStates::Error);
276+
Reset();
276277
}
277278

278279
return 0;
@@ -283,17 +284,16 @@ int DfuService::ControlPointHandler(uint16_t connectionHandle, os_mbuf* om) {
283284
return 0;
284285
}
285286
NRF_LOG_INFO("[DFU] -> Activate image and reset!");
286-
bleController.StopFirmwareUpdate();
287-
systemTask.PushMessage(Pinetime::System::Messages::BleFirmwareUpdateFinished);
288-
Reset();
289287
bleController.State(Pinetime::Controllers::Ble::FirmwareUpdateStates::Validated);
288+
Reset();
290289
return 0;
291290
default:
292291
return 0;
293292
}
294293
}
295294

296295
void DfuService::OnTimeout() {
296+
bleController.State(Pinetime::Controllers::Ble::FirmwareUpdateStates::Error);
297297
Reset();
298298
}
299299

@@ -307,7 +307,6 @@ void DfuService::Reset() {
307307
applicationSize = 0;
308308
expectedCrc = 0;
309309
notificationManager.Reset();
310-
bleController.State(Pinetime::Controllers::Ble::FirmwareUpdateStates::Error);
311310
bleController.StopFirmwareUpdate();
312311
systemTask.PushMessage(Pinetime::System::Messages::BleFirmwareUpdateFinished);
313312
}

src/displayapp/DisplayApp.cpp

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -177,9 +177,13 @@ void DisplayApp::Refresh() {
177177
}
178178
break;
179179
case Messages::TouchEvent: {
180-
if (state != States::Running)
180+
if (state != States::Running) {
181181
break;
182+
}
182183
auto gesture = OnTouchEvent();
184+
if (gesture == TouchEvents::None) {
185+
break;
186+
}
183187
if (!currentScreen->OnTouchEvent(gesture)) {
184188
if (currentApp == Apps::Clock) {
185189
switch (gesture) {
@@ -286,6 +290,7 @@ void DisplayApp::LoadApp(Apps app, DisplayApp::FullRefreshDirections direction)
286290
break;
287291
case Apps::FirmwareUpdate:
288292
currentScreen = std::make_unique<Screens::FirmwareUpdate>(this, bleController);
293+
ReturnApp(Apps::Clock, FullRefreshDirections::Down, TouchEvents::None);
289294
break;
290295

291296
case Apps::Notifications:

src/displayapp/screens/FirmwareUpdate.cpp

Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,11 +27,11 @@ FirmwareUpdate::FirmwareUpdate(Pinetime::Applications::DisplayApp* app, Pinetime
2727
lv_bar_set_value(bar1, 0, LV_ANIM_OFF);
2828

2929
percentLabel = lv_label_create(lv_scr_act(), nullptr);
30-
lv_label_set_text(percentLabel, "");
30+
lv_label_set_text(percentLabel, "Waiting...");
3131
lv_obj_set_auto_realign(percentLabel, true);
3232
lv_obj_align(percentLabel, bar1, LV_ALIGN_OUT_TOP_MID, 0, 60);
33-
3433
taskRefresh = lv_task_create(RefreshTaskCallback, LV_DISP_DEF_REFR_PERIOD, LV_TASK_PRIO_MID, this);
34+
startTime = xTaskGetTickCount();
3535
}
3636

3737
FirmwareUpdate::~FirmwareUpdate() {
@@ -43,23 +43,37 @@ void FirmwareUpdate::Refresh() {
4343
switch (bleController.State()) {
4444
default:
4545
case Pinetime::Controllers::Ble::FirmwareUpdateStates::Idle:
46+
// This condition makes sure that the app is exited if somehow it got
47+
// launched without a firmware update. This should never happen.
48+
if (state != States::Error) {
49+
if (xTaskGetTickCount() - startTime > (60 * 1024)) {
50+
UpdateError();
51+
state = States::Error;
52+
}
53+
} else if (xTaskGetTickCount() - startTime > (5 * 1024)) {
54+
running = false;
55+
}
56+
break;
4657
case Pinetime::Controllers::Ble::FirmwareUpdateStates::Running:
4758
if (state != States::Running)
4859
state = States::Running;
4960
DisplayProgression();
50-
return;
61+
break;
5162
case Pinetime::Controllers::Ble::FirmwareUpdateStates::Validated:
5263
if (state != States::Validated) {
5364
UpdateValidated();
5465
state = States::Validated;
5566
}
56-
return;
67+
break;
5768
case Pinetime::Controllers::Ble::FirmwareUpdateStates::Error:
5869
if (state != States::Error) {
5970
UpdateError();
6071
state = States::Error;
6172
}
62-
return;
73+
if (xTaskGetTickCount() - startTime > (5 * 1024)) {
74+
running = false;
75+
}
76+
break;
6377
}
6478
}
6579

@@ -81,4 +95,9 @@ void FirmwareUpdate::UpdateValidated() {
8195
void FirmwareUpdate::UpdateError() {
8296
lv_label_set_recolor(percentLabel, true);
8397
lv_label_set_text(percentLabel, "#ff0000 Error!#");
98+
startTime = xTaskGetTickCount();
99+
}
100+
101+
bool FirmwareUpdate::OnButtonPushed() {
102+
return true;
84103
}

src/displayapp/screens/FirmwareUpdate.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
#include "Screen.h"
44
#include <lvgl/src/lv_core/lv_obj.h>
5+
#include "FreeRTOS.h"
56

67
namespace Pinetime {
78
namespace Controllers {
@@ -25,15 +26,18 @@ namespace Pinetime {
2526
lv_obj_t* titleLabel;
2627
mutable char percentStr[10];
2728

28-
States state;
29+
States state = States::Idle;
2930

3031
void DisplayProgression() const;
3132

33+
bool OnButtonPushed() override;
34+
3235
void UpdateValidated();
3336

3437
void UpdateError();
3538

3639
lv_task_t* taskRefresh;
40+
TickType_t startTime;
3741
};
3842
}
3943
}

src/systemtask/SystemTask.cpp

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -198,7 +198,11 @@ void SystemTask::Work() {
198198
Messages message = static_cast<Messages>(msg);
199199
switch (message) {
200200
case Messages::EnableSleeping:
201-
doNotGoToSleep = false;
201+
// Make sure that exiting an app doesn't enable sleeping,
202+
// if the exiting was caused by a firmware update
203+
if (!bleController.IsFirmwareUpdating()) {
204+
doNotGoToSleep = false;
205+
}
202206
break;
203207
case Messages::DisableSleeping:
204208
doNotGoToSleep = true;
@@ -275,10 +279,11 @@ void SystemTask::Work() {
275279
displayApp.PushMessage(Pinetime::Applications::Display::Messages::BleFirmwareUpdateStarted);
276280
break;
277281
case Messages::BleFirmwareUpdateFinished:
282+
if (bleController.State() == Pinetime::Controllers::Ble::FirmwareUpdateStates::Validated) {
283+
NVIC_SystemReset();
284+
}
278285
doNotGoToSleep = false;
279286
xTimerStart(idleTimer, 0);
280-
if (bleController.State() == Pinetime::Controllers::Ble::FirmwareUpdateStates::Validated)
281-
NVIC_SystemReset();
282287
break;
283288
case Messages::OnTouchEvent:
284289
ReloadIdleTimer();

0 commit comments

Comments
 (0)