Track the time using RTC
This commit is contained in:
parent
ecf307c559
commit
981dc3fce1
4 changed files with 35 additions and 7 deletions
|
@ -63,4 +63,8 @@ $ JLinkExe -device nrf52 -if swd -speed 4000 -autoconnect 1
|
|||
|
||||
```
|
||||
$ JLinkRTTClient
|
||||
```
|
||||
```
|
||||
|
||||
## Tools
|
||||
|
||||
- https://github.com/eliotstock/memory : display the memory usage (FLASH/RAM) using the .map file from GCC.
|
|
@ -67,18 +67,33 @@ void DisplayApp::InitHw() {
|
|||
}
|
||||
|
||||
void DisplayApp::Refresh() {
|
||||
// uint32_t systick_counter = nrf_rtc_counter_get(portNRF_RTC_REG);
|
||||
// auto raw = systick_counter / 1000;
|
||||
uint32_t systick_counter = nrf_rtc_counter_get(portNRF_RTC_REG);
|
||||
|
||||
auto raw = systick_counter / 1000;
|
||||
auto currentDeltaSeconds = raw - deltaSeconds;
|
||||
|
||||
|
||||
auto deltaMinutes = (currentDeltaSeconds / 60);
|
||||
auto currentMinutes = minutes + deltaMinutes;
|
||||
|
||||
auto deltaHours = currentMinutes / 60;
|
||||
currentMinutes -= (deltaHours * 60);
|
||||
|
||||
//
|
||||
// TODO make this better!
|
||||
// minutes = raw / 60;
|
||||
// seconds = raw - (minutes*60);
|
||||
|
||||
|
||||
auto currentHours = hours + deltaHours;
|
||||
|
||||
|
||||
|
||||
char minutesChar[3];
|
||||
sprintf(minutesChar, "%02d", minutes);
|
||||
sprintf(minutesChar, "%02d", currentMinutes);
|
||||
|
||||
char hoursChar[3];
|
||||
sprintf(hoursChar, "%02d", hours);
|
||||
sprintf(hoursChar, "%02d", currentHours);
|
||||
|
||||
uint8_t x = 7;
|
||||
if(hoursChar[0] != currentChar[0]) {
|
||||
|
@ -115,3 +130,9 @@ void DisplayApp::Hours(uint8_t h) {
|
|||
// TODO yeah, I know, race condition too...
|
||||
hours = h;
|
||||
}
|
||||
|
||||
void DisplayApp::SetTime(uint8_t minutes, uint8_t hours) {
|
||||
deltaSeconds = nrf_rtc_counter_get(portNRF_RTC_REG) / 1000;
|
||||
this->minutes = minutes;
|
||||
this->hours = hours;
|
||||
}
|
||||
|
|
|
@ -17,6 +17,8 @@ namespace Pinetime {
|
|||
void Minutes(uint8_t m);
|
||||
void Hours(uint8_t h);
|
||||
|
||||
void SetTime(uint8_t minutes, uint8_t hours);
|
||||
|
||||
private:
|
||||
TaskHandle_t taskHandle;
|
||||
static void Process(void* instance);
|
||||
|
@ -33,6 +35,7 @@ namespace Pinetime {
|
|||
uint8_t minutes = 0;
|
||||
uint8_t hours = 0;
|
||||
char currentChar[4];
|
||||
uint32_t deltaSeconds = 0;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
|
|
@ -682,8 +682,8 @@ static void current_time_print(ble_cts_c_evt_t * p_evt)
|
|||
NRF_LOG_INFO("\tManual update %x",
|
||||
p_evt->params.current_time.adjust_reason.manual_time_update);
|
||||
|
||||
displayApp.Minutes(p_evt->params.current_time.exact_time_256.day_date_time.date_time.minutes);
|
||||
displayApp.Hours(p_evt->params.current_time.exact_time_256.day_date_time.date_time.hours);
|
||||
displayApp.SetTime(p_evt->params.current_time.exact_time_256.day_date_time.date_time.minutes,
|
||||
p_evt->params.current_time.exact_time_256.day_date_time.date_time.hours);
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Reference in a new issue