Track the time using RTC

This commit is contained in:
JF 2019-12-21 22:31:06 +01:00
parent ecf307c559
commit 981dc3fce1
4 changed files with 35 additions and 7 deletions

View File

@ -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.

View File

@ -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;
}

View File

@ -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;
};
}
}

View File

@ -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);
}