diff options
author | Kieran Cawthray <kieranc@gmail.com> | 2021-05-21 14:34:25 +0200 |
---|---|---|
committer | Kieran Cawthray <kieranc@gmail.com> | 2021-05-21 14:34:25 +0200 |
commit | 565601ef5060cd4372be9e5bab130aff64f12223 (patch) | |
tree | 5f5156132be07cdb151ae56dca6c9e3cab259e32 /src/components | |
parent | 5c413016a7b9e78040fb8e5b48cd37b7963362df (diff) | |
parent | f88c0f41fac506cc55e026cc67d1d5bce4669d31 (diff) |
Merge remote-tracking branch 'upstream/develop' into pinetimestyle
Diffstat (limited to 'src/components')
-rw-r--r-- | src/components/motor/MotorController.cpp | 1 | ||||
-rw-r--r-- | src/components/timer/TimerController.cpp | 64 | ||||
-rw-r--r-- | src/components/timer/TimerController.h | 36 |
3 files changed, 100 insertions, 1 deletions
diff --git a/src/components/motor/MotorController.cpp b/src/components/motor/MotorController.cpp index a834ab6b..3afa0ced 100644 --- a/src/components/motor/MotorController.cpp +++ b/src/components/motor/MotorController.cpp @@ -13,7 +13,6 @@ MotorController::MotorController(Controllers::Settings& settingsController) : se void MotorController::Init() { nrf_gpio_cfg_output(pinMotor); nrf_gpio_pin_set(pinMotor); - app_timer_init(); app_timer_create(&vibTimer, APP_TIMER_MODE_SINGLE_SHOT, vibrate); } diff --git a/src/components/timer/TimerController.cpp b/src/components/timer/TimerController.cpp new file mode 100644 index 00000000..3b25901c --- /dev/null +++ b/src/components/timer/TimerController.cpp @@ -0,0 +1,64 @@ +// +// Created by florian on 16.05.21. +// + +#include "TimerController.h" +#include "systemtask/SystemTask.h" +#include "app_timer.h" +#include "task.h" + +using namespace Pinetime::Controllers; + + +APP_TIMER_DEF(timerAppTimer); + + +TimerController::TimerController(System::SystemTask& systemTask) : systemTask{systemTask} { +} + + +void TimerController::Init() { + app_timer_create(&timerAppTimer, APP_TIMER_MODE_SINGLE_SHOT, timerEnd); + +} + +void TimerController::StartTimer(uint32_t duration) { + app_timer_stop(timerAppTimer); + auto currentTicks = xTaskGetTickCount(); + app_timer_start(timerAppTimer, APP_TIMER_TICKS(duration), this); + endTicks = currentTicks + APP_TIMER_TICKS(duration); + timerRunning = true; +} + +uint32_t TimerController::GetTimeRemaining() { + if (!timerRunning) { + return 0; + } + auto currentTicks = xTaskGetTickCount(); + + TickType_t deltaTicks = 0; + if (currentTicks > endTicks) { + deltaTicks = 0xffffffff - currentTicks; + deltaTicks += (endTicks + 1); + } else { + deltaTicks = endTicks - currentTicks; + } + + 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; +} + +bool TimerController::IsRunning() { + return timerRunning; +}
\ No newline at end of file diff --git a/src/components/timer/TimerController.h b/src/components/timer/TimerController.h new file mode 100644 index 00000000..5a0b293e --- /dev/null +++ b/src/components/timer/TimerController.h @@ -0,0 +1,36 @@ +#pragma once + +#include <cstdint> +#include "app_timer.h" +#include "portmacro_cmsis.h" + +namespace Pinetime { + namespace System { + class SystemTask; + } + namespace Controllers { + + class TimerController { + public: + TimerController(Pinetime::System::SystemTask& systemTask); + + void Init(); + + void StartTimer(uint32_t duration); + + void StopTimer(); + + uint32_t GetTimeRemaining(); + + bool IsRunning(); + + private: + System::SystemTask& systemTask; + + static void timerEnd(void* p_context); + + TickType_t endTicks; + bool timerRunning = false; + }; + } +}
\ No newline at end of file |