summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJF <jf@codingfield.com>2019-12-21 22:31:06 +0100
committerJF <jf@codingfield.com>2019-12-21 22:31:06 +0100
commit981dc3fce1c63e79687307cbe5019c9116f7ab2d (patch)
tree5df38dc7de996d1e2e518a5ea0064af07a9cec7c
parentecf307c559624fe82218e3acfc429d549f331075 (diff)
Track the time using RTC
-rw-r--r--README.md6
-rw-r--r--src/DisplayApp/DisplayApp.cpp29
-rw-r--r--src/DisplayApp/DisplayApp.h3
-rw-r--r--src/main.cpp4
4 files changed, 35 insertions, 7 deletions
diff --git a/README.md b/README.md
index 20fecd78..a62fb1d3 100644
--- a/README.md
+++ b/README.md
@@ -63,4 +63,8 @@ $ JLinkExe -device nrf52 -if swd -speed 4000 -autoconnect 1
```
$ JLinkRTTClient
-``` \ No newline at end of file
+```
+
+## Tools
+
+ - https://github.com/eliotstock/memory : display the memory usage (FLASH/RAM) using the .map file from GCC. \ No newline at end of file
diff --git a/src/DisplayApp/DisplayApp.cpp b/src/DisplayApp/DisplayApp.cpp
index e17dd55c..ea92a29d 100644
--- a/src/DisplayApp/DisplayApp.cpp
+++ b/src/DisplayApp/DisplayApp.cpp
@@ -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;
+}
diff --git a/src/DisplayApp/DisplayApp.h b/src/DisplayApp/DisplayApp.h
index 74d35624..e89ff64f 100644
--- a/src/DisplayApp/DisplayApp.h
+++ b/src/DisplayApp/DisplayApp.h
@@ -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;
};
}
}
diff --git a/src/main.cpp b/src/main.cpp
index 0e12740e..ae75c89f 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -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);
}