@@ -27,9 +27,10 @@ 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+ startTime = xTaskGetTickCount ();
3334}
3435
3536FirmwareUpdate::~FirmwareUpdate () {
@@ -40,34 +41,49 @@ bool FirmwareUpdate::Refresh() {
4041 switch (bleController.State ()) {
4142 default :
4243 case Pinetime::Controllers::Ble::FirmwareUpdateStates::Idle:
44+ // This condition makes sure that the app is exited if somehow it got
45+ // launched without a firmware update. This should never happen.
46+ if (state != States::Error) {
47+ if (xTaskGetTickCount () - startTime > (60 * 1024 )) {
48+ UpdateError ();
49+ state = States::Error;
50+ }
51+ } else if (xTaskGetTickCount () - startTime > (5 * 1024 )) {
52+ running = false ;
53+ }
54+ break ;
4355 case Pinetime::Controllers::Ble::FirmwareUpdateStates::Running:
4456 if (state != States::Running)
4557 state = States::Running;
46- return DisplayProgression ();
58+ DisplayProgression ();
59+ break ;
4760 case Pinetime::Controllers::Ble::FirmwareUpdateStates::Validated:
4861 if (state != States::Validated) {
4962 UpdateValidated ();
5063 state = States::Validated;
5164 }
52- return running ;
65+ break ;
5366 case Pinetime::Controllers::Ble::FirmwareUpdateStates::Error:
5467 if (state != States::Error) {
5568 UpdateError ();
5669 state = States::Error;
5770 }
58- return running;
71+ if (xTaskGetTickCount () - startTime > (5 * 1024 )) {
72+ running = false ;
73+ }
74+ break ;
5975 }
76+ return running;
6077}
6178
62- bool FirmwareUpdate::DisplayProgression () const {
79+ void FirmwareUpdate::DisplayProgression () const {
6380 float current = bleController.FirmwareUpdateCurrentBytes () / 1024 .0f ;
6481 float total = bleController.FirmwareUpdateTotalBytes () / 1024 .0f ;
6582 int16_t pc = (current / total) * 100 .0f ;
6683 sprintf (percentStr, " %d %%" , pc);
6784 lv_label_set_text (percentLabel, percentStr);
6885
6986 lv_bar_set_value (bar1, pc, LV_ANIM_OFF);
70- return running;
7187}
7288
7389void FirmwareUpdate::UpdateValidated () {
@@ -78,4 +94,9 @@ void FirmwareUpdate::UpdateValidated() {
7894void FirmwareUpdate::UpdateError () {
7995 lv_label_set_recolor (percentLabel, true );
8096 lv_label_set_text (percentLabel, " #ff0000 Error!#" );
97+ startTime = xTaskGetTickCount ();
98+ }
99+
100+ bool FirmwareUpdate::OnButtonPushed () {
101+ return true ;
81102}
0 commit comments