summaryrefslogtreecommitdiff
path: root/src/components/timer
diff options
context:
space:
mode:
authorJean-François Milants <jf@codingfield.com>2021-06-06 15:56:03 +0200
committerJean-François Milants <jf@codingfield.com>2021-06-06 15:56:03 +0200
commit7f9cc51b050e1034b573e37484f7afe29c370d81 (patch)
treede5228132fb72e89bb5d999b74b40f4248d41022 /src/components/timer
parent79f0fcb07aa80eb70385223272e29f2ba5657bc8 (diff)
Initialize SystemTask, DisplayApp and HeartRateTask as global static variable instead of variables on the heap. We don't need them on the heap as we know their size at build time, it'll reduce memory fragmentation and it'll make memory analysis easier.
Diffstat (limited to 'src/components/timer')
-rw-r--r--src/components/timer/TimerController.cpp29
-rw-r--r--src/components/timer/TimerController.h13
2 files changed, 24 insertions, 18 deletions
diff --git a/src/components/timer/TimerController.cpp b/src/components/timer/TimerController.cpp
index 3b25901c..8d5f5c33 100644
--- a/src/components/timer/TimerController.cpp
+++ b/src/components/timer/TimerController.cpp
@@ -12,14 +12,17 @@ using namespace Pinetime::Controllers;
APP_TIMER_DEF(timerAppTimer);
-
-TimerController::TimerController(System::SystemTask& systemTask) : systemTask{systemTask} {
+namespace {
+ void TimerEnd(void* p_context) {
+ auto* controller = static_cast<Pinetime::Controllers::TimerController*> (p_context);
+ if(controller != nullptr)
+ controller->OnTimerEnd();
+ }
}
void TimerController::Init() {
- app_timer_create(&timerAppTimer, APP_TIMER_MODE_SINGLE_SHOT, timerEnd);
-
+ app_timer_create(&timerAppTimer, APP_TIMER_MODE_SINGLE_SHOT, TimerEnd);
}
void TimerController::StartTimer(uint32_t duration) {
@@ -47,13 +50,6 @@ uint32_t TimerController::GetTimeRemaining() {
return (static_cast<TickType_t>(deltaTicks) / static_cast<TickType_t>(configTICK_RATE_HZ)) * 1000;
}
-void TimerController::timerEnd(void* p_context) {
-
- auto* controller = static_cast<Controllers::TimerController*> (p_context);
- controller->timerRunning = false;
- controller->systemTask.PushMessage(System::SystemTask::Messages::OnTimerDone);
-}
-
void TimerController::StopTimer() {
app_timer_stop(timerAppTimer);
timerRunning = false;
@@ -61,4 +57,13 @@ void TimerController::StopTimer() {
bool TimerController::IsRunning() {
return timerRunning;
-} \ No newline at end of file
+}
+void TimerController::OnTimerEnd() {
+ timerRunning = false;
+ if(systemTask != nullptr)
+ systemTask->PushMessage(System::Messages::OnTimerDone);
+}
+
+void TimerController::Register(Pinetime::System::SystemTask* systemTask) {
+ this->systemTask = systemTask;
+}
diff --git a/src/components/timer/TimerController.h b/src/components/timer/TimerController.h
index 5a0b293e..fa7bc90d 100644
--- a/src/components/timer/TimerController.h
+++ b/src/components/timer/TimerController.h
@@ -12,7 +12,7 @@ namespace Pinetime {
class TimerController {
public:
- TimerController(Pinetime::System::SystemTask& systemTask);
+ TimerController() = default;
void Init();
@@ -23,12 +23,13 @@ namespace Pinetime {
uint32_t GetTimeRemaining();
bool IsRunning();
-
+
+ void OnTimerEnd();
+
+ void Register(System::SystemTask* systemTask);
+
private:
- System::SystemTask& systemTask;
-
- static void timerEnd(void* p_context);
-
+ System::SystemTask* systemTask = nullptr;
TickType_t endTicks;
bool timerRunning = false;
};