diff options
Diffstat (limited to 'src/systemtask')
| -rw-r--r-- | src/systemtask/Messages.h | 5 | ||||
| -rw-r--r-- | src/systemtask/SystemTask.cpp | 80 | ||||
| -rw-r--r-- | src/systemtask/SystemTask.h | 18 |
3 files changed, 71 insertions, 32 deletions
diff --git a/src/systemtask/Messages.h b/src/systemtask/Messages.h index 2e3456a..86e26c1 100644 --- a/src/systemtask/Messages.h +++ b/src/systemtask/Messages.h @@ -22,7 +22,7 @@ namespace Pinetime { DisableSleeping, OnNewDay, OnNewHour, - OnNewHalfHour, + OnChime, OnChargingEvent, OnPairing, SetOffAlarm, @@ -31,7 +31,8 @@ namespace Pinetime { BatteryPercentageUpdated, StartFileTransfer, StopFileTransfer, - BleRadioEnableToggle + BleRadioEnableToggle, + BluetoothPasskeyEnableToggle }; } } diff --git a/src/systemtask/SystemTask.cpp b/src/systemtask/SystemTask.cpp index c7e0f38..c1fd3c1 100644 --- a/src/systemtask/SystemTask.cpp +++ b/src/systemtask/SystemTask.cpp @@ -135,7 +135,14 @@ void SystemTask::Work() { fs.Init(); + settingsController.Init(); + if(settingsController.GetBluetoothPasskeyEnabled()) { + bleController.EnablePasskey(); + } else { + bleController.DisablePasskey(); + } nimbleController.Init(); + lcd.Init(); twiMaster.Init(); @@ -162,7 +169,6 @@ void SystemTask::Work() { motionSensor.Init(); motionController.Init(motionSensor.DeviceType()); - settingsController.Init(); displayApp.Register(this); displayApp.Start(bootError); @@ -289,9 +295,7 @@ void SystemTask::Work() { case Messages::OnNewTime: ReloadIdleTimer(); displayApp.PushMessage(Pinetime::Applications::Display::Messages::UpdateDateTime); - if (alarmController.State() == Controllers::AlarmController::AlarmState::Set) { - alarmController.ScheduleAlarm(); - } + alarmController.RescheduleAlarm(); break; case Messages::OnNewNotification: if (settingsController.GetNotificationStatus() == Pinetime::Controllers::Settings::Notification::ON) { @@ -307,7 +311,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,24 +406,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); + 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); - } - 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); - } - motorController.RunForDuration(35); - } + } while(0); break; case Messages::OnChargingEvent: batteryController.ReadPowerState(); @@ -449,6 +460,13 @@ void SystemTask::Work() { nimbleController.DisableRadio(); } break; + case Messages::BluetoothPasskeyEnableToggle: + if(settingsController.GetBluetoothPasskeyEnabled()) { + bleController.EnablePasskey(); + } else { + bleController.DisablePasskey(); + } + break; default: break; } @@ -494,14 +512,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); + } + }; } } |
