summaryrefslogtreecommitdiff
path: root/src/systemtask
diff options
context:
space:
mode:
Diffstat (limited to 'src/systemtask')
-rw-r--r--src/systemtask/Messages.h6
-rw-r--r--src/systemtask/SystemTask.cpp65
-rw-r--r--src/systemtask/SystemTask.h9
3 files changed, 58 insertions, 22 deletions
diff --git a/src/systemtask/Messages.h b/src/systemtask/Messages.h
index 7a46e06..f939900 100644
--- a/src/systemtask/Messages.h
+++ b/src/systemtask/Messages.h
@@ -7,6 +7,7 @@ namespace Pinetime {
GoToRunning,
TouchWakeUp,
OnNewTime,
+ OnAdjustTime,
OnNewNotification,
OnTimerDone,
OnNewCall,
@@ -22,7 +23,7 @@ namespace Pinetime {
DisableSleeping,
OnNewDay,
OnNewHour,
- OnNewHalfHour,
+ OnChime,
OnChargingEvent,
OnPairing,
SetOffAlarm,
@@ -31,7 +32,8 @@ namespace Pinetime {
BatteryPercentageUpdated,
StartFileTransfer,
StopFileTransfer,
- BleRadioEnableToggle
+ BleRadioEnableToggle,
+ BluetoothPasskeyEnableToggle,
};
}
}
diff --git a/src/systemtask/SystemTask.cpp b/src/systemtask/SystemTask.cpp
index d3f1278..3353a45 100644
--- a/src/systemtask/SystemTask.cpp
+++ b/src/systemtask/SystemTask.cpp
@@ -132,7 +132,14 @@ void SystemTask::Work() {
fs.Init();
+ settingsController.Init();
+ if(settingsController.GetBluetoothPasskeyEnabled()) {
+ bleController.EnablePasskey();
+ } else {
+ bleController.DisablePasskey();
+ }
nimbleController.Init();
+
lcd.Init();
twiMaster.Init();
@@ -158,7 +165,6 @@ void SystemTask::Work() {
motionSensor.Init();
motionController.Init(motionSensor.DeviceType());
- settingsController.Init();
displayApp.Register(this);
displayApp.Start(bootError);
@@ -273,9 +279,15 @@ void SystemTask::Work() {
heartRateApp.PushMessage(Pinetime::Applications::HeartRateTask::Messages::GoToSleep);
break;
case Messages::OnNewTime:
+ case Messages::OnAdjustTime:
ReloadIdleTimer();
displayApp.PushMessage(Pinetime::Applications::Display::Messages::UpdateDateTime);
- if (alarmController.State() == Controllers::AlarmController::AlarmState::Set) {
+ if (alarmController.State() != Controllers::AlarmController::AlarmState::Set) {
+ break;
+ }
+ if (message == Messages::OnAdjustTime) {
+ alarmController.OnAdjustTime();
+ } else {
alarmController.ScheduleAlarm();
}
break;
@@ -387,26 +399,32 @@ void SystemTask::Work() {
stepCounterMustBeReset = true;
break;
case Messages::OnNewHour:
+ case Messages::OnChime:
using Pinetime::Controllers::AlarmController;
- if (settingsController.GetChimeOption() == Controllers::Settings::ChimesOption::Hours &&
- alarmController.State() != AlarmController::AlarmState::Alerting) {
- if (state == SystemTaskState::Sleeping) {
- GoToRunning();
- displayApp.PushMessage(Pinetime::Applications::Display::Messages::Clock);
- }
- motorController.RunForDuration(35);
- }
- break;
- case Messages::OnNewHalfHour:
- using Pinetime::Controllers::AlarmController;
- if (settingsController.GetChimeOption() == Controllers::Settings::ChimesOption::HalfHours &&
- alarmController.State() != AlarmController::AlarmState::Alerting) {
- if (state == SystemTaskState::Sleeping) {
- GoToRunning();
- displayApp.PushMessage(Pinetime::Applications::Display::Messages::Clock);
+ if (alarmController.State() != AlarmController::AlarmState::Alerting) do {
+ auto chimeOption = settingsController.GetChimeOption();
+ if (chimeOption != Controllers::Settings::ChimesOption::None) {
+ uint8_t chimeDuration;
+ bool chimeWakeup = false;
+ uint8_t minute;
+ if (message == Messages::OnNewHour) {
+ chimeDuration = 22;
+ chimeWakeup = true;
+ } else if (chimeOption >= Controllers::Settings::ChimesOption::HalfHours &&
+ (minute = dateTimeController.Minutes()) == 30) {
+ chimeDuration = 18;
+ } else if (chimeOption > Controllers::Settings::ChimesOption::HalfHours) {
+ chimeDuration = 11;
+ } else {
+ break;
+ }
+ if (chimeWakeup && state == SystemTaskState::Sleeping) {
+ GoToRunning();
+ displayApp.PushMessage(Pinetime::Applications::Display::Messages::Clock);
+ }
+ motorController.RunForDuration(chimeDuration);
}
- motorController.RunForDuration(35);
- }
+ } while(0);
break;
case Messages::OnChargingEvent:
batteryController.ReadPowerState();
@@ -436,6 +454,13 @@ void SystemTask::Work() {
nimbleController.DisableRadio();
}
break;
+ case Messages::BluetoothPasskeyEnableToggle:
+ if(settingsController.GetBluetoothPasskeyEnabled()) {
+ bleController.EnablePasskey();
+ } else {
+ bleController.DisablePasskey();
+ }
+ break;
default:
break;
}
diff --git a/src/systemtask/SystemTask.h b/src/systemtask/SystemTask.h
index d1e4a00..e884ca3 100644
--- a/src/systemtask/SystemTask.h
+++ b/src/systemtask/SystemTask.h
@@ -95,6 +95,15 @@ namespace Pinetime {
return state == SystemTaskState::Sleeping || state == SystemTaskState::WakingUp;
}
+ // For accelerator-based games
+ template <typename X, typename Y, typename Z> inline void ObtainAccel(X& x, Y& y, Z& z) {
+#ifndef INFINISIM
+ motionSensor.ObtainAccel(x,y,z);
+#else
+ x = 0; y = 0; z = 0;
+#endif
+ }
+
private:
TaskHandle_t taskHandle;