summaryrefslogtreecommitdiff
path: root/src/components
diff options
context:
space:
mode:
Diffstat (limited to 'src/components')
-rw-r--r--src/components/battery/BatteryController.cpp1
-rw-r--r--src/components/ble/AlertNotificationClient.cpp2
-rw-r--r--src/components/ble/AlertNotificationService.cpp2
-rw-r--r--src/components/ble/DfuService.cpp6
-rw-r--r--src/components/ble/ImmediateAlertService.cpp2
-rw-r--r--src/components/ble/NimbleController.cpp2
-rw-r--r--src/components/datetime/DateTimeController.cpp10
-rw-r--r--src/components/datetime/DateTimeController.h6
-rw-r--r--src/components/heartrate/HeartRateController.cpp3
-rw-r--r--src/components/heartrate/HeartRateController.h4
-rw-r--r--src/components/heartrate/Ppg.cpp11
-rw-r--r--src/components/heartrate/Ppg.h3
-rw-r--r--src/components/motor/MotorController.cpp1
-rw-r--r--src/components/timer/TimerController.cpp69
-rw-r--r--src/components/timer/TimerController.h37
15 files changed, 126 insertions, 33 deletions
diff --git a/src/components/battery/BatteryController.cpp b/src/components/battery/BatteryController.cpp
index b39efefb..bc146457 100644
--- a/src/components/battery/BatteryController.cpp
+++ b/src/components/battery/BatteryController.cpp
@@ -15,7 +15,6 @@ Battery::Battery() {
void Battery::Init() {
nrf_gpio_cfg_input(chargingPin, (nrf_gpio_pin_pull_t) GPIO_PIN_CNF_PULL_Pullup);
- nrf_gpio_cfg_input(powerPresentPin, (nrf_gpio_pin_pull_t) GPIO_PIN_CNF_PULL_Pullup);
}
void Battery::Update() {
diff --git a/src/components/ble/AlertNotificationClient.cpp b/src/components/ble/AlertNotificationClient.cpp
index 6043a129..c3d1d69a 100644
--- a/src/components/ble/AlertNotificationClient.cpp
+++ b/src/components/ble/AlertNotificationClient.cpp
@@ -159,7 +159,7 @@ void AlertNotificationClient::OnNotification(ble_gap_event* event) {
notif.category = Pinetime::Controllers::NotificationManager::Categories::SimpleAlert;
notificationManager.Push(std::move(notif));
- systemTask.PushMessage(Pinetime::System::SystemTask::Messages::OnNewNotification);
+ systemTask.PushMessage(Pinetime::System::Messages::OnNewNotification);
}
}
diff --git a/src/components/ble/AlertNotificationService.cpp b/src/components/ble/AlertNotificationService.cpp
index e9f5941e..d5fc7f65 100644
--- a/src/components/ble/AlertNotificationService.cpp
+++ b/src/components/ble/AlertNotificationService.cpp
@@ -79,7 +79,7 @@ int AlertNotificationService::OnAlert(uint16_t conn_handle, uint16_t attr_handle
break;
}
- auto event = Pinetime::System::SystemTask::Messages::OnNewNotification;
+ auto event = Pinetime::System::Messages::OnNewNotification;
notificationManager.Push(std::move(notif));
systemTask.PushMessage(event);
}
diff --git a/src/components/ble/DfuService.cpp b/src/components/ble/DfuService.cpp
index 2031668e..cec194cc 100644
--- a/src/components/ble/DfuService.cpp
+++ b/src/components/ble/DfuService.cpp
@@ -205,7 +205,7 @@ int DfuService::ControlPointHandler(uint16_t connectionHandle, os_mbuf* om) {
bleController.State(Pinetime::Controllers::Ble::FirmwareUpdateStates::Running);
bleController.FirmwareUpdateTotalBytes(0xffffffffu);
bleController.FirmwareUpdateCurrentBytes(0);
- systemTask.PushMessage(Pinetime::System::SystemTask::Messages::BleFirmwareUpdateStarted);
+ systemTask.PushMessage(Pinetime::System::Messages::BleFirmwareUpdateStarted);
return 0;
} else {
NRF_LOG_INFO("[DFU] -> Start DFU, mode %d not supported!", imageType);
@@ -279,7 +279,7 @@ int DfuService::ControlPointHandler(uint16_t connectionHandle, os_mbuf* om) {
}
NRF_LOG_INFO("[DFU] -> Activate image and reset!");
bleController.StopFirmwareUpdate();
- systemTask.PushMessage(Pinetime::System::SystemTask::Messages::BleFirmwareUpdateFinished);
+ systemTask.PushMessage(Pinetime::System::Messages::BleFirmwareUpdateFinished);
Reset();
bleController.State(Pinetime::Controllers::Ble::FirmwareUpdateStates::Validated);
return 0;
@@ -304,7 +304,7 @@ void DfuService::Reset() {
notificationManager.Reset();
bleController.State(Pinetime::Controllers::Ble::FirmwareUpdateStates::Error);
bleController.StopFirmwareUpdate();
- systemTask.PushMessage(Pinetime::System::SystemTask::Messages::BleFirmwareUpdateFinished);
+ systemTask.PushMessage(Pinetime::System::Messages::BleFirmwareUpdateFinished);
}
DfuService::NotificationManager::NotificationManager() {
diff --git a/src/components/ble/ImmediateAlertService.cpp b/src/components/ble/ImmediateAlertService.cpp
index fd6430af..820d3b6e 100644
--- a/src/components/ble/ImmediateAlertService.cpp
+++ b/src/components/ble/ImmediateAlertService.cpp
@@ -67,7 +67,7 @@ int ImmediateAlertService::OnAlertLevelChanged(uint16_t connectionHandle, uint16
notif.category = Pinetime::Controllers::NotificationManager::Categories::SimpleAlert;
notificationManager.Push(std::move(notif));
- systemTask.PushMessage(Pinetime::System::SystemTask::Messages::OnNewNotification);
+ systemTask.PushMessage(Pinetime::System::Messages::OnNewNotification);
}
}
diff --git a/src/components/ble/NimbleController.cpp b/src/components/ble/NimbleController.cpp
index 67a6d691..2c1d0f99 100644
--- a/src/components/ble/NimbleController.cpp
+++ b/src/components/ble/NimbleController.cpp
@@ -149,7 +149,7 @@ int NimbleController::OnGAPEvent(ble_gap_event* event) {
bleController.Disconnect();
} else {
bleController.Connect();
- systemTask.PushMessage(Pinetime::System::SystemTask::Messages::BleConnected);
+ systemTask.PushMessage(Pinetime::System::Messages::BleConnected);
connectionHandle = event->connect.conn_handle;
// Service discovery is deffered via systemtask
}
diff --git a/src/components/datetime/DateTimeController.cpp b/src/components/datetime/DateTimeController.cpp
index 4f9302eb..28a70abc 100644
--- a/src/components/datetime/DateTimeController.cpp
+++ b/src/components/datetime/DateTimeController.cpp
@@ -5,9 +5,6 @@
using namespace Pinetime::Controllers;
-DateTime::DateTime(System::SystemTask& systemTask) : systemTask {systemTask} {
-}
-
void DateTime::SetTime(
uint16_t year, uint8_t month, uint8_t day, uint8_t dayOfWeek, uint8_t hour, uint8_t minute, uint8_t second, uint32_t systickCounter) {
std::tm tm = {
@@ -70,7 +67,8 @@ void DateTime::UpdateTime(uint32_t systickCounter) {
// Notify new day to SystemTask
if (hour == 0 and not isMidnightAlreadyNotified) {
isMidnightAlreadyNotified = true;
- systemTask.PushMessage(System::SystemTask::Messages::OnNewDay);
+ if(systemTask != nullptr)
+ systemTask->PushMessage(System::Messages::OnNewDay);
} else if (hour != 0) {
isMidnightAlreadyNotified = false;
}
@@ -104,6 +102,10 @@ const char* DateTime::DayOfWeekShortToStringLow() {
return DateTime::DaysStringShortLow[(uint8_t) dayOfWeek];
}
+void DateTime::Register(Pinetime::System::SystemTask* systemTask) {
+ this->systemTask = systemTask;
+}
+
char const* DateTime::DaysStringLow[] = {"--", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"};
char const* DateTime::DaysStringShortLow[] = {"--", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"};
diff --git a/src/components/datetime/DateTimeController.h b/src/components/datetime/DateTimeController.h
index d0ae727e..265d6e9d 100644
--- a/src/components/datetime/DateTimeController.h
+++ b/src/components/datetime/DateTimeController.h
@@ -27,8 +27,6 @@ namespace Pinetime {
December
};
- DateTime(System::SystemTask& systemTask);
-
void SetTime(uint16_t year,
uint8_t month,
uint8_t day,
@@ -75,8 +73,9 @@ namespace Pinetime {
return uptime;
}
+ void Register(System::SystemTask* systemTask);
+
private:
- System::SystemTask& systemTask;
uint16_t year = 0;
Months month = Months::Unknown;
uint8_t day = 0;
@@ -90,6 +89,7 @@ namespace Pinetime {
std::chrono::seconds uptime {0};
bool isMidnightAlreadyNotified = false;
+ System::SystemTask* systemTask = nullptr;
static char const* DaysString[];
static char const* DaysStringShort[];
diff --git a/src/components/heartrate/HeartRateController.cpp b/src/components/heartrate/HeartRateController.cpp
index e84d665a..716813b3 100644
--- a/src/components/heartrate/HeartRateController.cpp
+++ b/src/components/heartrate/HeartRateController.cpp
@@ -4,9 +4,6 @@
using namespace Pinetime::Controllers;
-HeartRateController::HeartRateController(Pinetime::System::SystemTask& systemTask) : systemTask {systemTask} {
-}
-
void HeartRateController::Update(HeartRateController::States newState, uint8_t heartRate) {
this->state = newState;
if (this->heartRate != heartRate) {
diff --git a/src/components/heartrate/HeartRateController.h b/src/components/heartrate/HeartRateController.h
index d3a8460d..a63f1a70 100644
--- a/src/components/heartrate/HeartRateController.h
+++ b/src/components/heartrate/HeartRateController.h
@@ -15,8 +15,7 @@ namespace Pinetime {
public:
enum class States { Stopped, NotEnoughData, NoTouch, Running };
- explicit HeartRateController(System::SystemTask& systemTask);
-
+ HeartRateController() = default;
void Start();
void Stop();
void Update(States newState, uint8_t heartRate);
@@ -32,7 +31,6 @@ namespace Pinetime {
void SetService(Pinetime::Controllers::HeartRateService* service);
private:
- System::SystemTask& systemTask;
Applications::HeartRateTask* task = nullptr;
States state = States::Stopped;
uint8_t heartRate = 0;
diff --git a/src/components/heartrate/Ppg.cpp b/src/components/heartrate/Ppg.cpp
index da0789e0..fcba3815 100644
--- a/src/components/heartrate/Ppg.cpp
+++ b/src/components/heartrate/Ppg.cpp
@@ -38,9 +38,8 @@ namespace {
}
}
-Ppg::Ppg(float spl)
- : offset {spl},
- hpf {0.87033078, -1.74066156, 0.87033078, -1.72377617, 0.75754694},
+Ppg::Ppg()
+ : hpf {0.87033078, -1.74066156, 0.87033078, -1.72377617, 0.75754694},
agc {20, 0.971, 2},
lpf {0.11595249, 0.23190498, 0.11595249, -0.72168143, 0.18549138} {
}
@@ -67,13 +66,7 @@ float Ppg::HeartRate() {
dataIndex = 0;
return hr;
}
-
-int cccount = 0;
float Ppg::ProcessHeartRate() {
-
- if (cccount > 2)
- asm("nop");
- cccount++;
auto t0 = Trough(data.data(), dataIndex, 7, 48);
if (t0 < 0)
return 0;
diff --git a/src/components/heartrate/Ppg.h b/src/components/heartrate/Ppg.h
index ee07dfcf..00014162 100644
--- a/src/components/heartrate/Ppg.h
+++ b/src/components/heartrate/Ppg.h
@@ -8,8 +8,7 @@ namespace Pinetime {
namespace Controllers {
class Ppg {
public:
- explicit Ppg(float spl);
-
+ Ppg();
int8_t Preprocess(float spl);
float HeartRate();
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..8d5f5c33
--- /dev/null
+++ b/src/components/timer/TimerController.cpp
@@ -0,0 +1,69 @@
+//
+// 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);
+
+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);
+}
+
+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::StopTimer() {
+ app_timer_stop(timerAppTimer);
+ timerRunning = false;
+}
+
+bool TimerController::IsRunning() {
+ return timerRunning;
+}
+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
new file mode 100644
index 00000000..fa7bc90d
--- /dev/null
+++ b/src/components/timer/TimerController.h
@@ -0,0 +1,37 @@
+#pragma once
+
+#include <cstdint>
+#include "app_timer.h"
+#include "portmacro_cmsis.h"
+
+namespace Pinetime {
+ namespace System {
+ class SystemTask;
+ }
+ namespace Controllers {
+
+ class TimerController {
+ public:
+ TimerController() = default;
+
+ void Init();
+
+ void StartTimer(uint32_t duration);
+
+ void StopTimer();
+
+ uint32_t GetTimeRemaining();
+
+ bool IsRunning();
+
+ void OnTimerEnd();
+
+ void Register(System::SystemTask* systemTask);
+
+ private:
+ System::SystemTask* systemTask = nullptr;
+ TickType_t endTicks;
+ bool timerRunning = false;
+ };
+ }
+} \ No newline at end of file