Track the time using RTC
This commit is contained in:
parent
ecf307c559
commit
981dc3fce1
|
@ -64,3 +64,7 @@ $ JLinkExe -device nrf52 -if swd -speed 4000 -autoconnect 1
|
||||||
```
|
```
|
||||||
$ JLinkRTTClient
|
$ 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() {
|
void DisplayApp::Refresh() {
|
||||||
// uint32_t systick_counter = nrf_rtc_counter_get(portNRF_RTC_REG);
|
uint32_t systick_counter = nrf_rtc_counter_get(portNRF_RTC_REG);
|
||||||
// auto raw = systick_counter / 1000;
|
|
||||||
|
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!
|
// TODO make this better!
|
||||||
// minutes = raw / 60;
|
// minutes = raw / 60;
|
||||||
// seconds = raw - (minutes*60);
|
// seconds = raw - (minutes*60);
|
||||||
|
|
||||||
|
|
||||||
|
auto currentHours = hours + deltaHours;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
char minutesChar[3];
|
char minutesChar[3];
|
||||||
sprintf(minutesChar, "%02d", minutes);
|
sprintf(minutesChar, "%02d", currentMinutes);
|
||||||
|
|
||||||
char hoursChar[3];
|
char hoursChar[3];
|
||||||
sprintf(hoursChar, "%02d", hours);
|
sprintf(hoursChar, "%02d", currentHours);
|
||||||
|
|
||||||
uint8_t x = 7;
|
uint8_t x = 7;
|
||||||
if(hoursChar[0] != currentChar[0]) {
|
if(hoursChar[0] != currentChar[0]) {
|
||||||
|
@ -115,3 +130,9 @@ void DisplayApp::Hours(uint8_t h) {
|
||||||
// TODO yeah, I know, race condition too...
|
// TODO yeah, I know, race condition too...
|
||||||
hours = h;
|
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 Minutes(uint8_t m);
|
||||||
void Hours(uint8_t h);
|
void Hours(uint8_t h);
|
||||||
|
|
||||||
|
void SetTime(uint8_t minutes, uint8_t hours);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
TaskHandle_t taskHandle;
|
TaskHandle_t taskHandle;
|
||||||
static void Process(void* instance);
|
static void Process(void* instance);
|
||||||
|
@ -33,6 +35,7 @@ namespace Pinetime {
|
||||||
uint8_t minutes = 0;
|
uint8_t minutes = 0;
|
||||||
uint8_t hours = 0;
|
uint8_t hours = 0;
|
||||||
char currentChar[4];
|
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",
|
NRF_LOG_INFO("\tManual update %x",
|
||||||
p_evt->params.current_time.adjust_reason.manual_time_update);
|
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.SetTime(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);
|
p_evt->params.current_time.exact_time_256.day_date_time.date_time.hours);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue