summaryrefslogtreecommitdiff
path: root/src/displayapp
diff options
context:
space:
mode:
authorRiku Isokoski <riksu9000@gmail.com>2022-04-09 13:57:58 +0300
committerRiku Isokoski <riksu9000@gmail.com>2022-04-25 15:49:29 +0300
commit28ccf15e13c07247d7398fdf806691a4202eb1de (patch)
tree51f1bbcc7f6006c2a9c45a282a16a72fa1684ce4 /src/displayapp
parent3bf6b1cb16e81d564d5846936b41875e469bcd1e (diff)
Stopwatch fixes
Diffstat (limited to 'src/displayapp')
-rw-r--r--src/displayapp/screens/StopWatch.cpp53
-rw-r--r--src/displayapp/screens/StopWatch.h6
2 files changed, 22 insertions, 37 deletions
diff --git a/src/displayapp/screens/StopWatch.cpp b/src/displayapp/screens/StopWatch.cpp
index fcff5f12..ce8d4a54 100644
--- a/src/displayapp/screens/StopWatch.cpp
+++ b/src/displayapp/screens/StopWatch.cpp
@@ -8,10 +8,9 @@
using namespace Pinetime::Applications::Screens;
-// Anonymous namespace for local functions
namespace {
TimeSeparated_t convertTicksToTimeSegments(const TickType_t timeElapsed) {
- const int timeElapsedMillis = (static_cast<float>(timeElapsed) / static_cast<float>(configTICK_RATE_HZ)) * 1000;
+ const int timeElapsedMillis = timeElapsed * 1000 / configTICK_RATE_HZ;
const int hundredths = (timeElapsedMillis % 1000) / 10; // Get only the first two digits and ignore the last
const int secs = (timeElapsedMillis / 1000) % 60;
@@ -19,27 +18,15 @@ namespace {
return TimeSeparated_t {mins, secs, hundredths};
}
- TickType_t calculateDelta(const TickType_t startTime, const TickType_t currentTime) {
- TickType_t delta = 0;
- // Take care of overflow
- if (startTime > currentTime) {
- delta = 0xffffffff - startTime;
- delta += (currentTime + 1);
- } else {
- delta = currentTime - startTime;
- }
- return delta;
+ void play_pause_event_handler(lv_obj_t* obj, lv_event_t event) {
+ auto* stopWatch = static_cast<StopWatch*>(obj->user_data);
+ stopWatch->playPauseBtnEventHandler(event);
}
-}
-static void play_pause_event_handler(lv_obj_t* obj, lv_event_t event) {
- auto stopWatch = static_cast<StopWatch*>(obj->user_data);
- stopWatch->playPauseBtnEventHandler(event);
-}
-
-static void stop_lap_event_handler(lv_obj_t* obj, lv_event_t event) {
- auto stopWatch = static_cast<StopWatch*>(obj->user_data);
- stopWatch->stopLapBtnEventHandler(event);
+ void stop_lap_event_handler(lv_obj_t* obj, lv_event_t event) {
+ auto* stopWatch = static_cast<StopWatch*>(obj->user_data);
+ stopWatch->stopLapBtnEventHandler(event);
+ }
}
StopWatch::StopWatch(DisplayApp* app, System::SystemTask& systemTask)
@@ -67,8 +54,7 @@ StopWatch::StopWatch(DisplayApp* app, System::SystemTask& systemTask)
btnPlayPause = lv_btn_create(lv_scr_act(), nullptr);
btnPlayPause->user_data = this;
lv_obj_set_event_cb(btnPlayPause, play_pause_event_handler);
- lv_obj_set_height(btnPlayPause, 50);
- lv_obj_set_width(btnPlayPause, 115);
+ lv_obj_set_size(btnPlayPause, 115, 50);
lv_obj_align(btnPlayPause, lv_scr_act(), LV_ALIGN_IN_BOTTOM_RIGHT, 0, 0);
txtPlayPause = lv_label_create(btnPlayPause, nullptr);
lv_label_set_text_static(txtPlayPause, Symbols::play);
@@ -76,8 +62,7 @@ StopWatch::StopWatch(DisplayApp* app, System::SystemTask& systemTask)
btnStopLap = lv_btn_create(lv_scr_act(), nullptr);
btnStopLap->user_data = this;
lv_obj_set_event_cb(btnStopLap, stop_lap_event_handler);
- lv_obj_set_height(btnStopLap, 50);
- lv_obj_set_width(btnStopLap, 115);
+ lv_obj_set_size(btnStopLap, 115, 50);
lv_obj_align(btnStopLap, lv_scr_act(), LV_ALIGN_IN_BOTTOM_LEFT, 0, 0);
lv_obj_set_style_local_bg_color(btnStopLap, LV_BTN_PART_MAIN, LV_STATE_DISABLED, lv_color_hex(0x080808));
txtStopLap = lv_label_create(btnStopLap, nullptr);
@@ -107,7 +92,7 @@ StopWatch::~StopWatch() {
lv_obj_clean(lv_scr_act());
}
-void StopWatch::reset() {
+void StopWatch::Reset() {
currentState = States::Init;
oldTimeElapsed = 0;
lv_obj_set_style_local_text_color(time, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_GRAY);
@@ -124,7 +109,7 @@ void StopWatch::reset() {
lv_obj_set_state(txtStopLap, LV_STATE_DISABLED);
}
-void StopWatch::start() {
+void StopWatch::Start() {
lv_obj_set_state(btnStopLap, LV_STATE_DEFAULT);
lv_obj_set_state(txtStopLap, LV_STATE_DEFAULT);
lv_obj_set_style_local_text_color(time, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_GREEN);
@@ -136,7 +121,7 @@ void StopWatch::start() {
systemTask.PushMessage(Pinetime::System::Messages::DisableSleeping);
}
-void StopWatch::pause() {
+void StopWatch::Pause() {
startTime = 0;
// Store the current time elapsed in cache
oldTimeElapsed += timeElapsed;
@@ -150,7 +135,7 @@ void StopWatch::pause() {
void StopWatch::Refresh() {
if (currentState == States::Running) {
- timeElapsed = calculateDelta(startTime, xTaskGetTickCount());
+ timeElapsed = xTaskGetTickCount() - startTime;
currentTimeSeparated = convertTicksToTimeSegments((oldTimeElapsed + timeElapsed));
lv_label_set_text_fmt(time, "%02d:%02d", currentTimeSeparated.mins, currentTimeSeparated.secs);
@@ -163,11 +148,11 @@ void StopWatch::playPauseBtnEventHandler(lv_event_t event) {
return;
}
if (currentState == States::Init) {
- start();
+ Start();
} else if (currentState == States::Running) {
- pause();
+ Pause();
} else if (currentState == States::Halted) {
- start();
+ Start();
}
}
@@ -187,13 +172,13 @@ void StopWatch::stopLapBtnEventHandler(lv_event_t event) {
lv_label_set_text_fmt(lapTwoText, "#%2d %2d:%02d.%02d", lapNr, lapBuffer[0]->mins, lapBuffer[0]->secs, lapBuffer[0]->hundredths);
}
} else if (currentState == States::Halted) {
- reset();
+ Reset();
}
}
bool StopWatch::OnButtonPushed() {
if (currentState == States::Running) {
- pause();
+ Pause();
return true;
}
return false;
diff --git a/src/displayapp/screens/StopWatch.h b/src/displayapp/screens/StopWatch.h
index 06193f68..ef55e2d2 100644
--- a/src/displayapp/screens/StopWatch.h
+++ b/src/displayapp/screens/StopWatch.h
@@ -70,9 +70,9 @@ namespace Pinetime::Applications::Screens {
void stopLapBtnEventHandler(lv_event_t event);
bool OnButtonPushed() override;
- void reset();
- void start();
- void pause();
+ void Reset();
+ void Start();
+ void Pause();
private:
Pinetime::System::SystemTask& systemTask;