From ecf307c559624fe82218e3acfc429d549f331075 Mon Sep 17 00:00:00 2001 From: JF Date: Sat, 21 Dec 2019 17:58:00 +0100 Subject: Add BLE and CTS client. Time can be retrieved from a CTS server (like NRFConnect) once it's bond. WIP, the code is really ugly --- src/DisplayApp/DisplayApp.cpp | 53 +++++++++++++++++++++++++------------------ src/DisplayApp/DisplayApp.h | 5 ++++ 2 files changed, 36 insertions(+), 22 deletions(-) (limited to 'src/DisplayApp') diff --git a/src/DisplayApp/DisplayApp.cpp b/src/DisplayApp/DisplayApp.cpp index abaef825..e17dd55c 100644 --- a/src/DisplayApp/DisplayApp.cpp +++ b/src/DisplayApp/DisplayApp.cpp @@ -21,7 +21,6 @@ void DisplayApp::Process(void *instance) { app->InitHw(); while (1) { - NRF_LOG_INFO("BlinkApp task running!"); app->Refresh(); @@ -68,41 +67,51 @@ void DisplayApp::InitHw() { } void DisplayApp::Refresh() { - uint32_t systick_counter = nrf_rtc_counter_get(portNRF_RTC_REG); - auto raw = systick_counter / 1000; - - // TODO make this better! - minutes = raw / 60; - seconds = raw - (minutes*60); - - char secondChar[3]; - sprintf(secondChar, "%02d", seconds); +// uint32_t systick_counter = nrf_rtc_counter_get(portNRF_RTC_REG); +// auto raw = systick_counter / 1000; +// +// TODO make this better! +// minutes = raw / 60; +// seconds = raw - (minutes*60); char minutesChar[3]; sprintf(minutesChar, "%02d", minutes); + char hoursChar[3]; + sprintf(hoursChar, "%02d", hours); + uint8_t x = 7; - if(minutesChar[0] != currentChar[0]) { - gfx->DrawChar(&largeFont, minutesChar[0], &x, 78, 0xffff); - currentChar[0] = minutesChar[0]; + if(hoursChar[0] != currentChar[0]) { + gfx->DrawChar(&largeFont, hoursChar[0], &x, 78, 0xffff); + currentChar[0] = hoursChar[0]; } x = 61; - if(minutesChar[1] != currentChar[1]) { - gfx->DrawChar(&largeFont, minutesChar[1], &x, 78, 0xffff); - currentChar[1] = minutesChar[1]; + if(hoursChar[1] != currentChar[1]) { + gfx->DrawChar(&largeFont, hoursChar[1], &x, 78, 0xffff); + currentChar[1] = hoursChar[1]; } x = 127; - if(secondChar[0] != currentChar[2]) { - gfx->DrawChar(&largeFont, secondChar[0], &x, 78, 0xffff); - currentChar[2] = secondChar[0]; + if(minutesChar[0] != currentChar[2]) { + gfx->DrawChar(&largeFont, minutesChar[0], &x, 78, 0xffff); + currentChar[2] = minutesChar[0]; } x = 181; - if(secondChar[1] != currentChar[3]) { - gfx->DrawChar(&largeFont, secondChar[1], &x, 78, 0xffff); - currentChar[3] = secondChar[1]; + if(minutesChar[1] != currentChar[3]) { + gfx->DrawChar(&largeFont, minutesChar[1], &x, 78, 0xffff); + currentChar[3] = minutesChar[1]; } } + +void DisplayApp::Minutes(uint8_t m) { + // TODO yeah, I know, race condition... + minutes = m; +} + +void DisplayApp::Hours(uint8_t h) { + // TODO yeah, I know, race condition too... + hours = h; +} diff --git a/src/DisplayApp/DisplayApp.h b/src/DisplayApp/DisplayApp.h index 8b5cb4e6..74d35624 100644 --- a/src/DisplayApp/DisplayApp.h +++ b/src/DisplayApp/DisplayApp.h @@ -14,6 +14,9 @@ namespace Pinetime { public: void Start(); + void Minutes(uint8_t m); + void Hours(uint8_t h); + private: TaskHandle_t taskHandle; static void Process(void* instance); @@ -24,6 +27,8 @@ namespace Pinetime { const FONT_INFO largeFont {lCD_70ptFontInfo.height, lCD_70ptFontInfo.startChar, lCD_70ptFontInfo.endChar, lCD_70ptFontInfo.spacePixels, lCD_70ptFontInfo.charInfo, lCD_70ptFontInfo.data}; void Refresh(); + + uint8_t seconds = 0; uint8_t minutes = 0; uint8_t hours = 0; -- cgit v1.2.3-70-g09d2 From 981dc3fce1c63e79687307cbe5019c9116f7ab2d Mon Sep 17 00:00:00 2001 From: JF Date: Sat, 21 Dec 2019 22:31:06 +0100 Subject: Track the time using RTC --- README.md | 6 +++++- src/DisplayApp/DisplayApp.cpp | 29 +++++++++++++++++++++++++---- src/DisplayApp/DisplayApp.h | 3 +++ src/main.cpp | 4 ++-- 4 files changed, 35 insertions(+), 7 deletions(-) (limited to 'src/DisplayApp') 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); } -- cgit v1.2.3-70-g09d2