Skip to content

Commit 1d7576d

Browse files
committed
Reset the step count every day at midnight.
1 parent 52a9028 commit 1d7576d

7 files changed

Lines changed: 45 additions & 8 deletions

File tree

src/components/datetime/DateTimeController.cpp

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,14 @@
11
#include "DateTimeController.h"
22
#include <date/date.h>
33
#include <libraries/log/nrf_log.h>
4+
#include <systemtask/SystemTask.h>
45

56
using namespace Pinetime::Controllers;
67

8+
DateTime::DateTime(System::SystemTask& systemTask) : systemTask{systemTask} {
9+
10+
}
11+
712

813
void DateTime::SetTime(uint16_t year, uint8_t month, uint8_t day, uint8_t dayOfWeek, uint8_t hour, uint8_t minute,
914
uint8_t second, uint32_t systickCounter) {
@@ -62,6 +67,14 @@ void DateTime::UpdateTime(uint32_t systickCounter) {
6267
hour = time.hours().count();
6368
minute = time.minutes().count();
6469
second = time.seconds().count();
70+
71+
// Notify new day to SystemTask
72+
if(hour == 0 and not isMidnightAlreadyNotified) {
73+
isMidnightAlreadyNotified = true;
74+
systemTask.PushMessage(System::SystemTask::Messages::OnNewDay);
75+
} else if (hour != 0) {
76+
isMidnightAlreadyNotified = false;
77+
}
6578
}
6679

6780
const char *DateTime::MonthShortToString() {

src/components/datetime/DateTimeController.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,17 @@
44
#include <chrono>
55

66
namespace Pinetime {
7+
namespace System {
8+
class SystemTask;
9+
}
710
namespace Controllers {
811
class DateTime {
912
public:
1013
enum class Days : uint8_t {Unknown, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday};
1114
enum class Months : uint8_t {Unknown, January, February, March, April, May, June, July, August, September, October, November, December};
1215

16+
DateTime(System::SystemTask& systemTask);
17+
1318
void 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);
1419
void UpdateTime(uint32_t systickCounter);
1520
uint16_t Year() const { return year; }
@@ -31,6 +36,7 @@ namespace Pinetime {
3136
std::chrono::time_point<std::chrono::system_clock, std::chrono::nanoseconds> CurrentDateTime() const { return currentDateTime; }
3237
std::chrono::seconds Uptime() const { return uptime; }
3338
private:
39+
System::SystemTask& systemTask;
3440
uint16_t year = 0;
3541
Months month = Months::Unknown;
3642
uint8_t day = 0;
@@ -43,6 +49,8 @@ namespace Pinetime {
4349
std::chrono::time_point<std::chrono::system_clock, std::chrono::nanoseconds> currentDateTime;
4450
std::chrono::seconds uptime {0};
4551

52+
bool isMidnightAlreadyNotified = false;
53+
4654
static char const *DaysString[];
4755
static char const *DaysStringShort[];
4856
static char const *DaysStringLow[];

src/drivers/Bma421.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,3 +105,7 @@ Bma421::Values Bma421::Process() {
105105
bool Bma421::IsOk() const {
106106
return isOk;
107107
}
108+
109+
void Bma421::ResetStepCounter() {
110+
bma423_reset_step_counter(&bma);
111+
}

src/drivers/Bma421.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,15 +19,17 @@ namespace Pinetime {
1919
Bma421& operator=(Bma421&&) = delete;
2020

2121
void Init();
22-
void Reset();
2322
Values Process();
23+
void ResetStepCounter();
2424

2525
void Read(uint8_t registerAddress, uint8_t *buffer, size_t size);
2626
void Write(uint8_t registerAddress, const uint8_t *data, size_t size);
2727

2828
bool IsOk() const;
2929

3030
private:
31+
void Reset();
32+
3133
TwiMaster& twiMaster;
3234
uint8_t deviceAddress = 0x18;
3335
struct bma4_dev bma;

src/main.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,6 @@ Pinetime::Drivers::Hrs3300 heartRateSensor {twiMaster, heartRateSensorTwiAddress
107107
TimerHandle_t debounceTimer;
108108
Pinetime::Controllers::Battery batteryController;
109109
Pinetime::Controllers::Ble bleController;
110-
Pinetime::Controllers::DateTime dateTimeController;
111110
void ble_manager_set_ble_connection_callback(void (*connection)());
112111
void ble_manager_set_ble_disconnection_callback(void (*disconnection)());
113112
static constexpr uint8_t pinTouchIrq = 28;
@@ -259,7 +258,7 @@ int main(void) {
259258
debounceTimer = xTimerCreate ("debounceTimer", 200, pdFALSE, (void *) 0, DebounceTimerCallback);
260259

261260
systemTask = std::make_unique<Pinetime::System::SystemTask>(spi, lcd, spiNorFlash, twiMaster, touchPanel, lvgl, batteryController, bleController,
262-
dateTimeController, motorController, heartRateSensor, motionSensor, settingsController);
261+
motorController, heartRateSensor, motionSensor, settingsController);
263262
systemTask->Start();
264263
nimble_port_init();
265264

src/systemtask/SystemTask.cpp

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,15 +40,14 @@ SystemTask::SystemTask(Drivers::SpiMaster &spi, Drivers::St7789 &lcd,
4040
Drivers::TwiMaster& twiMaster, Drivers::Cst816S &touchPanel,
4141
Components::LittleVgl &lvgl,
4242
Controllers::Battery &batteryController, Controllers::Ble &bleController,
43-
Controllers::DateTime &dateTimeController,
4443
Pinetime::Controllers::MotorController& motorController,
4544
Pinetime::Drivers::Hrs3300& heartRateSensor,
4645
Pinetime::Drivers::Bma421& motionSensor,
4746
Controllers::Settings &settingsController) :
4847
spi{spi}, lcd{lcd}, spiNorFlash{spiNorFlash},
4948
twiMaster{twiMaster}, touchPanel{touchPanel}, lvgl{lvgl}, batteryController{batteryController},
5049
heartRateController{*this},
51-
bleController{bleController}, dateTimeController{dateTimeController},
50+
bleController{bleController}, dateTimeController{*this},
5251
watchdog{}, watchdogView{watchdog},
5352
motorController{motorController}, heartRateSensor{heartRateSensor}, motionSensor{motionSensor},
5453
settingsController{settingsController},
@@ -210,6 +209,11 @@ void SystemTask::Work() {
210209
isSleeping = true;
211210
isGoingToSleep = false;
212211
break;
212+
case Messages::OnNewDay:
213+
// We might be sleeping (with TWI device disabled.
214+
// Remember we'll have to reset the counter next time we're awake
215+
stepCounterMustBeReset = true;
216+
break;
213217
default: break;
214218
}
215219
}
@@ -239,6 +243,12 @@ void SystemTask::UpdateMotion() {
239243

240244
if(isSleeping)
241245
twiMaster.Wakeup();
246+
247+
if(stepCounterMustBeReset) {
248+
motionSensor.ResetStepCounter();
249+
stepCounterMustBeReset = false;
250+
}
251+
242252
auto motionValues = motionSensor.Process();
243253
if(isSleeping)
244254
twiMaster.Sleep();

src/systemtask/SystemTask.h

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,15 +40,15 @@ namespace Pinetime {
4040
class SystemTask {
4141
public:
4242
enum class Messages {GoToSleep, GoToRunning, OnNewTime, OnNewNotification, OnNewCall, BleConnected,
43-
BleFirmwareUpdateStarted, BleFirmwareUpdateFinished, OnTouchEvent, OnButtonEvent, OnDisplayTaskSleeping
43+
BleFirmwareUpdateStarted, BleFirmwareUpdateFinished, OnTouchEvent, OnButtonEvent, OnDisplayTaskSleeping,
44+
OnNewDay
4445
};
4546

4647
SystemTask(Drivers::SpiMaster &spi, Drivers::St7789 &lcd,
4748
Pinetime::Drivers::SpiNorFlash& spiNorFlash,
4849
Drivers::TwiMaster& twiMaster, Drivers::Cst816S &touchPanel,
4950
Components::LittleVgl &lvgl,
5051
Controllers::Battery &batteryController, Controllers::Ble &bleController,
51-
Controllers::DateTime &dateTimeController,
5252
Pinetime::Controllers::MotorController& motorController,
5353
Pinetime::Drivers::Hrs3300& heartRateSensor,
5454
Pinetime::Drivers::Bma421& motionSensor,
@@ -80,7 +80,7 @@ namespace Pinetime {
8080
std::unique_ptr<Pinetime::Applications::HeartRateTask> heartRateApp;
8181

8282
Pinetime::Controllers::Ble& bleController;
83-
Pinetime::Controllers::DateTime& dateTimeController;
83+
Pinetime::Controllers::DateTime dateTimeController;
8484
QueueHandle_t systemTasksMsgQueue;
8585
std::atomic<bool> isSleeping{false};
8686
std::atomic<bool> isGoingToSleep{false};
@@ -115,6 +115,7 @@ namespace Pinetime {
115115

116116
void GoToRunning();
117117
void UpdateMotion();
118+
bool stepCounterMustBeReset = false;
118119

119120
#if configUSE_TRACE_FACILITY == 1
120121
SystemMonitor<FreeRtosMonitor> monitor;

0 commit comments

Comments
 (0)