summaryrefslogtreecommitdiff
path: root/src/DisplayApp
diff options
context:
space:
mode:
Diffstat (limited to 'src/DisplayApp')
-rw-r--r--src/DisplayApp/DisplayApp.cpp68
-rw-r--r--src/DisplayApp/DisplayApp.h8
2 files changed, 57 insertions, 19 deletions
diff --git a/src/DisplayApp/DisplayApp.cpp b/src/DisplayApp/DisplayApp.cpp
index abaef825..ea92a29d 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();
@@ -69,40 +68,71 @@ void DisplayApp::InitHw() {
void DisplayApp::Refresh() {
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;
- // TODO make this better!
- minutes = raw / 60;
- seconds = raw - (minutes*60);
- char secondChar[3];
- sprintf(secondChar, "%02d", seconds);
char minutesChar[3];
- sprintf(minutesChar, "%02d", minutes);
+ sprintf(minutesChar, "%02d", currentMinutes);
+
+ char hoursChar[3];
+ sprintf(hoursChar, "%02d", currentHours);
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;
+}
+
+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 8b5cb4e6..e89ff64f 100644
--- a/src/DisplayApp/DisplayApp.h
+++ b/src/DisplayApp/DisplayApp.h
@@ -14,6 +14,11 @@ namespace Pinetime {
public:
void Start();
+ 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);
@@ -24,10 +29,13 @@ 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;
char currentChar[4];
+ uint32_t deltaSeconds = 0;
};
}
}