summaryrefslogtreecommitdiff
path: root/src/systemtask
diff options
context:
space:
mode:
Diffstat (limited to 'src/systemtask')
-rw-r--r--src/systemtask/Messages.h67
-rw-r--r--src/systemtask/SystemTask.cpp78
-rw-r--r--src/systemtask/SystemTask.h18
3 files changed, 101 insertions, 62 deletions
diff --git a/src/systemtask/Messages.h b/src/systemtask/Messages.h
index 3648142..95fca52 100644
--- a/src/systemtask/Messages.h
+++ b/src/systemtask/Messages.h
@@ -2,37 +2,38 @@
namespace Pinetime {
namespace System {
- enum class Messages {
- GoToSleep,
- GoToRunning,
- TouchWakeUp,
- OnNewTime,
- OnAdjustTime,
- OnNewNotification,
- OnTimerDone,
- OnNewCall,
- BleConnected,
- UpdateTimeOut,
- BleFirmwareUpdateStarted,
- BleFirmwareUpdateFinished,
- OnTouchEvent,
- HandleButtonEvent,
- HandleButtonTimerEvent,
- OnDisplayTaskSleeping,
- EnableSleeping,
- DisableSleeping,
- OnNewDay,
- OnNewHour,
- OnNewHalfHour,
- OnChargingEvent,
- OnPairing,
- SetOffAlarm,
- StopRinging,
- MeasureBatteryTimerExpired,
- BatteryPercentageUpdated,
- StartFileTransfer,
- StopFileTransfer,
- BleRadioEnableToggle
- };
- }
+ enum class Messages {
+ GoToSleep,
+ GoToRunning,
+ TouchWakeUp,
+ OnNewTime,
+ OnAdjustTime,
+ OnNewNotification,
+ OnTimerDone,
+ OnNewCall,
+ BleConnected,
+ UpdateTimeOut,
+ BleFirmwareUpdateStarted,
+ BleFirmwareUpdateFinished,
+ OnTouchEvent,
+ HandleButtonEvent,
+ HandleButtonTimerEvent,
+ OnDisplayTaskSleeping,
+ EnableSleeping,
+ DisableSleeping,
+ OnNewDay,
+ OnNewHour,
+ OnChime,
+ OnChargingEvent,
+ OnPairing,
+ SetOffAlarm,
+ StopRinging,
+ MeasureBatteryTimerExpired,
+ BatteryPercentageUpdated,
+ StartFileTransfer,
+ StopFileTransfer,
+ BleRadioEnableToggle,
+ BluetoothPasskeyEnableToggle
+ };
+ }
}
diff --git a/src/systemtask/SystemTask.cpp b/src/systemtask/SystemTask.cpp
index 760f216..14e4dbe 100644
--- a/src/systemtask/SystemTask.cpp
+++ b/src/systemtask/SystemTask.cpp
@@ -133,7 +133,14 @@ void SystemTask::Work() {
fs.Init();
+ settingsController.Init();
+ if(settingsController.GetBluetoothPasskeyEnabled()) {
+ bleController.EnablePasskey();
+ } else {
+ bleController.DisablePasskey();
+ }
nimbleController.Init();
+
lcd.Init();
twiMaster.Init();
@@ -159,7 +166,6 @@ void SystemTask::Work() {
motionSensor.Init();
motionController.Init(motionSensor.DeviceType());
- settingsController.Init();
displayApp.Register(this);
displayApp.Start(bootError);
@@ -307,7 +313,7 @@ void SystemTask::Work() {
if (isSleeping && !isWakingUp) {
GoToRunning();
}
- motorController.RunForDuration(35);
+ motorController.StartRinging();
displayApp.PushMessage(Pinetime::Applications::Display::Messages::TimerDone);
break;
case Messages::SetOffAlarm:
@@ -402,26 +408,31 @@ 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 (isSleeping && !isWakingUp) {
- 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 (isSleeping && !isWakingUp) {
- 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 && isSleeping && !isWakingUp) {
+ GoToRunning();
+ displayApp.PushMessage(Pinetime::Applications::Display::Messages::Clock);
+ }
+ motorController.RunForDuration(chimeDuration);
}
- motorController.RunForDuration(35);
- }
+ } while(0);
break;
case Messages::OnChargingEvent:
batteryController.ReadPowerState();
@@ -451,6 +462,13 @@ void SystemTask::Work() {
nimbleController.DisableRadio();
}
break;
+ case Messages::BluetoothPasskeyEnableToggle:
+ if(settingsController.GetBluetoothPasskeyEnabled()) {
+ bleController.EnablePasskey();
+ } else {
+ bleController.DisablePasskey();
+ }
+ break;
default:
break;
}
@@ -496,14 +514,18 @@ void SystemTask::UpdateMotion() {
motionController.IsSensorOk(motionSensor.IsOk());
motionController.Update(motionValues.x, motionValues.y, motionValues.z, motionValues.steps);
-
- if (settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::RaiseWrist) &&
- motionController.Should_RaiseWake(isSleeping)) {
- GoToRunning();
- }
- if (settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::Shake) &&
- motionController.Should_ShakeWake(settingsController.GetShakeThreshold())) {
- GoToRunning();
+ if (isSleeping) {
+ if (motionController.ShouldRaiseWake() ||
+ (settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::Shake) &&
+ motionController.Should_ShakeWake(settingsController.GetShakeThreshold()))
+ ) {
+ GoToRunning();
+ }
+ } else {
+ if (settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::LowerWrist) &&
+ motionController.ShouldLowerSleep()) {
+ PushMessage(Messages::GoToSleep);
+ }
}
}
diff --git a/src/systemtask/SystemTask.h b/src/systemtask/SystemTask.h
index c5b0379..f141b01 100644
--- a/src/systemtask/SystemTask.h
+++ b/src/systemtask/SystemTask.h
@@ -35,7 +35,7 @@
#include "drivers/Watchdog.h"
#include "systemtask/Messages.h"
-extern std::chrono::time_point<std::chrono::system_clock, std::chrono::nanoseconds> NoInit_BackUpTime;
+extern std::chrono::time_point<std::chrono::system_clock, std::chrono::seconds> NoInit_BackUpTime;
namespace Pinetime {
namespace Drivers {
class Cst816S;
@@ -118,7 +118,9 @@ namespace Pinetime {
Pinetime::Controllers::NotificationManager& notificationManager;
Pinetime::Controllers::MotorController& motorController;
Pinetime::Drivers::Hrs3300& heartRateSensor;
+ public:
Pinetime::Drivers::Bma421& motionSensor;
+ private:
Pinetime::Controllers::Settings& settingsController;
Pinetime::Controllers::HeartRateController& heartRateController;
Pinetime::Controllers::MotionController& motionController;
@@ -149,6 +151,20 @@ namespace Pinetime {
static constexpr TickType_t batteryMeasurementPeriod = pdMS_TO_TICKS(10 * 60 * 1000);
SystemMonitor monitor;
+
+ public:
+ inline double ReadGXYZ(double &X, double &Y, double &Z) const {
+ auto motionValues = motionSensor.Process();
+ // motionController.Update(motionValues.x, motionValues.y, motionValues.z);
+ X = motionValues.x; Y = motionValues.y; Z = motionValues.z;
+ return std::sqrt(X*X + Y*Y + Z*Z);
+ }
+
+ inline double ReadG() const {
+ double x, y, z;
+ return ReadGXYZ(x,y,z);
+ }
+
};
}
}