diff options
Diffstat (limited to 'src/displayapp/screens/WatchFaceDigital.cpp')
| -rw-r--r-- | src/displayapp/screens/WatchFaceDigital.cpp | 149 |
1 files changed, 95 insertions, 54 deletions
diff --git a/src/displayapp/screens/WatchFaceDigital.cpp b/src/displayapp/screens/WatchFaceDigital.cpp index 9bf3541..44af905 100644 --- a/src/displayapp/screens/WatchFaceDigital.cpp +++ b/src/displayapp/screens/WatchFaceDigital.cpp @@ -3,6 +3,7 @@ #include <date/date.h> #include <lvgl/lvgl.h> #include <cstdio> +#include "drivers/Hrs3300.h" #include "displayapp/screens/BatteryIcon.h" #include "displayapp/screens/BleIcon.h" #include "displayapp/screens/NotificationIcon.h" @@ -16,6 +17,28 @@ #include "displayapp/fonts/neofont.h" using namespace Pinetime::Applications::Screens; +static inline uint8_t sprintuint4hex(uint8_t x) { + return x < 10 ? '0' + x : ('A' - 10) + x; +} + +static void sprintuint32hex(char x[9], uint32_t v) { + uint16_t p = v; + uint16_t q = v >> 16; + uint8_t a = q >> 8; + x[0] = sprintuint4hex(a>>4); + x[1] = sprintuint4hex(a&0xf); + a = q; + x[2] = sprintuint4hex(a>>4); + x[3] = sprintuint4hex(a&0xf); + a = p >> 8; + x[4] = sprintuint4hex(a>>4); + x[5] = sprintuint4hex(a&0xf); + a = p; + x[6] = sprintuint4hex(a>>4); + x[7] = sprintuint4hex(a&0xf); + x[8] = 0; +} + WatchFaceDigital::WatchFaceDigital(DisplayApp* app, Controllers::DateTime& dateTimeController, Controllers::Battery& batteryController, @@ -36,10 +59,11 @@ WatchFaceDigital::WatchFaceDigital(DisplayApp* app, heartRateController {heartRateController}, motionController {motionController} { + lv_obj_t *area1, *area2, *area3, *area4, *area5, *area6, *area7, *area8, *area9, *area10, *area11; if (1) { lv_obj_t * b1, * l1; - b1 = lv_obj_create(lv_scr_act(), nullptr); + area3 = b1 = lv_obj_create(lv_scr_act(), nullptr); lv_obj_set_style_local_bg_color(b1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x000099)); lv_obj_set_style_local_radius(b1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, 0); lv_obj_set_size(b1, 96, 48); @@ -49,7 +73,7 @@ WatchFaceDigital::WatchFaceDigital(DisplayApp* app, lv_obj_set_style_local_text_color(l1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x000000)); lv_obj_align(l1, b1, LV_ALIGN_IN_TOP_MID, 0, 0); - b1 = lv_obj_create(lv_scr_act(), nullptr); + area6 = b1 = lv_obj_create(lv_scr_act(), nullptr); lv_obj_set_style_local_bg_color(b1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x444488)); lv_obj_set_style_local_text_color(b1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x3b5d6e)); lv_obj_set_size(b1, 96, 48); @@ -59,7 +83,7 @@ WatchFaceDigital::WatchFaceDigital(DisplayApp* app, lv_obj_set_style_local_text_color(l1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x000000)); lv_obj_align(l1, b1, LV_ALIGN_IN_TOP_MID, 0, 0); - b1 = lv_obj_create(lv_scr_act(), nullptr); + area1 = b1 = lv_obj_create(lv_scr_act(), nullptr); lv_obj_set_style_local_bg_color(b1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x444488)); lv_obj_set_style_local_radius(b1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, 0); lv_obj_set_size(b1, 96, 48); @@ -69,7 +93,7 @@ WatchFaceDigital::WatchFaceDigital(DisplayApp* app, lv_obj_set_style_local_text_color(l1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x000000)); lv_obj_align(l1, b1, LV_ALIGN_IN_TOP_MID, 0, 0); - b1 = lv_obj_create(lv_scr_act(), nullptr); + area4 = b1 = lv_obj_create(lv_scr_act(), nullptr); lv_obj_set_style_local_bg_color(b1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x444488)); lv_obj_set_style_local_radius(b1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, 0); lv_obj_set_size(b1, 48, 48); @@ -79,7 +103,7 @@ WatchFaceDigital::WatchFaceDigital(DisplayApp* app, lv_obj_set_style_local_text_color(l1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x000000)); lv_obj_align(l1, b1, LV_ALIGN_IN_TOP_MID, 0, 0); - b1 = lv_obj_create(lv_scr_act(), nullptr); + area2 = b1 = lv_obj_create(lv_scr_act(), nullptr); lv_obj_set_style_local_bg_color(b1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x336677)); lv_obj_set_size(b1, 48, 48); lv_obj_align(b1, lv_scr_act(), LV_ALIGN_IN_TOP_LEFT, 96, 0); @@ -88,7 +112,7 @@ WatchFaceDigital::WatchFaceDigital(DisplayApp* app, lv_obj_set_style_local_text_color(l1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x000000)); lv_obj_align(l1, b1, LV_ALIGN_IN_TOP_MID, 0, 0); - b1 = lv_obj_create(lv_scr_act(), nullptr); + area5 = b1 = lv_obj_create(lv_scr_act(), nullptr); lv_obj_set_style_local_bg_color(b1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x336677)); lv_obj_set_style_local_text_color(b1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x3b5d6e)); lv_obj_set_size(b1, 96, 48); @@ -98,7 +122,7 @@ WatchFaceDigital::WatchFaceDigital(DisplayApp* app, lv_obj_set_style_local_text_color(l1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x000000)); lv_obj_align(l1, b1, LV_ALIGN_IN_TOP_MID, 0, 0); - b1 = lv_obj_create(lv_scr_act(), nullptr); + area7 = b1 = lv_obj_create(lv_scr_act(), nullptr); lv_obj_set_style_local_bg_color(b1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x000099)); lv_obj_set_style_local_radius(b1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, 0); lv_obj_set_size(b1, 240, 48); @@ -108,17 +132,7 @@ WatchFaceDigital::WatchFaceDigital(DisplayApp* app, lv_obj_set_style_local_text_color(l1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x000000)); lv_obj_align(l1, b1, LV_ALIGN_IN_TOP_MID, 0, 0); - b1 = lv_obj_create(lv_scr_act(), nullptr); - lv_obj_set_style_local_bg_color(b1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x000099)); - lv_obj_set_style_local_radius(b1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, 0); - lv_obj_set_size(b1, 96, 48); - lv_obj_align(b1, lv_scr_act(), LV_ALIGN_IN_TOP_LEFT, 0, 192); - l1 = lv_label_create(lv_scr_act(), nullptr); - lv_label_set_text_static(l1, "11"); - lv_obj_set_style_local_text_color(l1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x000000)); - lv_obj_align(l1, b1, LV_ALIGN_IN_TOP_MID, 0, 0); - - b1 = lv_obj_create(lv_scr_act(), nullptr); + area8 = b1 = lv_obj_create(lv_scr_act(), nullptr); lv_obj_set_style_local_bg_color(b1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x444488)); lv_obj_set_style_local_text_color(b1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x3b5d6e)); lv_obj_set_size(b1, 96, 48); @@ -128,18 +142,8 @@ WatchFaceDigital::WatchFaceDigital(DisplayApp* app, lv_obj_set_style_local_text_color(l1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x000000)); lv_obj_align(l1, b1, LV_ALIGN_IN_TOP_MID, 0, 0); - b1 = lv_obj_create(lv_scr_act(), nullptr); - lv_obj_set_style_local_bg_color(b1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x444488)); - lv_obj_set_style_local_radius(b1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, 0); - lv_obj_set_size(b1, 96, 48); - lv_obj_align(b1, lv_scr_act(), LV_ALIGN_IN_TOP_LEFT, 144, 192); - l1 = lv_label_create(lv_scr_act(), nullptr); - lv_label_set_text_static(l1, "13"); - lv_obj_set_style_local_text_color(l1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x000000)); - lv_obj_align(l1, b1, LV_ALIGN_IN_TOP_MID, 0, 0); - - b1 = lv_obj_create(lv_scr_act(), nullptr); - lv_obj_set_style_local_bg_color(b1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x444488)); + area10 = b1 = lv_obj_create(lv_scr_act(), nullptr); + lv_obj_set_style_local_bg_color(b1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x222277)); lv_obj_set_style_local_radius(b1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, 0); lv_obj_set_size(b1, 48, 48); lv_obj_align(b1, lv_scr_act(), LV_ALIGN_IN_TOP_LEFT, 192, 144); @@ -148,17 +152,17 @@ WatchFaceDigital::WatchFaceDigital(DisplayApp* app, lv_obj_set_style_local_text_color(l1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x000000)); lv_obj_align(l1, b1, LV_ALIGN_IN_TOP_MID, 0, 0); - b1 = lv_obj_create(lv_scr_act(), nullptr); - lv_obj_set_style_local_bg_color(b1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x336677)); - lv_obj_set_style_local_text_color(b1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x3b5d6e)); - lv_obj_set_size(b1, 48, 48); - lv_obj_align(b1, lv_scr_act(), LV_ALIGN_IN_TOP_LEFT, 96, 192); + area11 = b1 = lv_obj_create(lv_scr_act(), nullptr); + lv_obj_set_style_local_bg_color(b1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x222277)); + lv_obj_set_style_local_radius(b1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, 0); + lv_obj_set_size(b1, 240, 48); + lv_obj_align(b1, lv_scr_act(), LV_ALIGN_IN_TOP_LEFT, 0, 192); l1 = lv_label_create(lv_scr_act(), nullptr); - lv_label_set_text_static(l1, "12"); + lv_label_set_text_static(l1, "11"); lv_obj_set_style_local_text_color(l1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x000000)); - lv_obj_align(l1, b1, LV_ALIGN_IN_TOP_MID, 0, 0); + lv_obj_align(l1, b1, LV_ALIGN_IN_RIGHT_MID, 0, 0); - b1 = lv_obj_create(lv_scr_act(), nullptr); + area9 = b1 = lv_obj_create(lv_scr_act(), nullptr); lv_obj_set_style_local_bg_color(b1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x336677)); lv_obj_set_style_local_text_color(b1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x3b5d6e)); lv_obj_set_size(b1, 96, 48); @@ -171,7 +175,7 @@ WatchFaceDigital::WatchFaceDigital(DisplayApp* app, batteryIcon = lv_label_create(lv_scr_act(), nullptr); lv_label_set_text_fmt(batteryIcon, "B##%%"); - lv_obj_set_style_local_text_font(batteryIcon, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, &neofont1); + lv_obj_set_style_local_text_font(batteryIcon, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, &neofont2); lv_obj_align(batteryIcon, lv_scr_act(), LV_ALIGN_IN_TOP_RIGHT, 0, 0); batteryPlug = lv_label_create(lv_scr_act(), nullptr); @@ -189,11 +193,11 @@ WatchFaceDigital::WatchFaceDigital(DisplayApp* app, lv_label_set_text_static(notificationIcon, NotificationIcon::GetIcon(false)); lv_obj_align(notificationIcon, nullptr, LV_ALIGN_IN_TOP_LEFT, 0, 0); - label_temp = lv_label_create(lv_scr_act(), nullptr); - lv_obj_set_style_local_text_color( label_temp, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x222222)); + label_temp = lv_label_create(area3, nullptr); + lv_obj_set_style_local_text_color( label_temp, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0xCCCCCC)); lv_obj_set_style_local_text_font( label_temp, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, &neofont15); lv_label_set_text_fmt(label_temp, "??°C"); - lv_obj_align(label_temp, lv_scr_act(), LV_ALIGN_CENTER, 75, -75); + lv_obj_align(label_temp, nullptr, LV_ALIGN_IN_BOTTOM_LEFT, 0, 0); label_temp = lv_label_create(lv_scr_act(), nullptr); lv_obj_align(label_temp, lv_scr_act(), LV_ALIGN_CENTER, 0, -60); @@ -217,19 +221,19 @@ WatchFaceDigital::WatchFaceDigital(DisplayApp* app, #else label_time_sec = lv_label_create(lv_scr_act(), nullptr); // lv_obj_set_style_local_text_color(label_time_sec, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0xFFFFFF)); - lv_obj_set_style_local_text_font(label_time_sec, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, &neofont15); + lv_obj_set_style_local_text_font(label_time_sec, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, &neofont2); lv_label_set_text_fmt(label_time_sec, ":??"); lv_obj_align(label_time_sec, label_time, LV_ALIGN_OUT_RIGHT_BOTTOM, 0, 0); // -2 #endif label_time_pm = lv_label_create(lv_scr_act(), nullptr); - lv_label_set_text_static(label_time_pm, "PM"); + lv_label_set_text_static(label_time_pm, "P"); lv_obj_set_style_local_text_font(label_time_pm, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, &neofont1); lv_obj_align(label_time_pm, label_time, LV_ALIGN_OUT_LEFT_TOP, 0, 0); - lv_obj_set_hidden(label_time_pm, 1); + // lv_obj_set_hidden(label_time_pm, 1); label_date_dd = lv_label_create(lv_scr_act(), nullptr); - lv_obj_set_style_local_text_color(label_date_dd, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x999999)); + // lv_obj_set_style_local_text_color(label_date_dd, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x999999)); lv_label_set_text_fmt(label_date_dd, "DD"); lv_obj_set_style_local_text_font(label_date_dd, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, &neofont2); lv_obj_align(label_date_dd, label_time, LV_ALIGN_OUT_TOP_MID, 0, 0); @@ -237,21 +241,21 @@ WatchFaceDigital::WatchFaceDigital(DisplayApp* app, lv_label_set_align(label_date_dd, LV_LABEL_ALIGN_CENTER); label_date_dow = lv_label_create(lv_scr_act(), nullptr); - lv_obj_set_style_local_text_color(label_date_dow, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x999999)); + // lv_obj_set_style_local_text_color(label_date_dow, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x999999)); lv_label_set_text_fmt(label_date_dow, "DOW "); lv_obj_set_style_local_text_font(label_date_dow, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, &neofont2); lv_obj_align(label_date_dow, label_date_dd, LV_ALIGN_OUT_LEFT_MID, 0, 0); label_date_mmm = lv_label_create(lv_scr_act(), nullptr); - lv_obj_set_style_local_text_color(label_date_mmm, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x999999)); + // lv_obj_set_style_local_text_color(label_date_mmm, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x999999)); lv_label_set_text_fmt(label_date_mmm, "MMM"); lv_obj_set_style_local_text_font(label_date_mmm, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, &neofont15); lv_obj_align(label_date_mmm, label_date_dd, LV_ALIGN_OUT_TOP_MID, 0, 0); label_date_yyyy = lv_label_create(lv_scr_act(), nullptr); - lv_obj_set_style_local_text_color(label_date_yyyy, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x999999)); + // lv_obj_set_style_local_text_color(label_date_yyyy, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x999999)); lv_label_set_text_fmt(label_date_yyyy, "YYYY"); - lv_obj_set_style_local_text_font(label_date_yyyy, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, &neofont1); + lv_obj_set_style_local_text_font(label_date_yyyy, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, &neofont0); lv_obj_align(label_date_yyyy, label_date_mmm, LV_ALIGN_OUT_TOP_MID, 0, 0); lv_label_set_long_mode(label_date_yyyy, LV_LABEL_LONG_CROP); lv_label_set_align(label_date_yyyy, LV_LABEL_ALIGN_CENTER); @@ -264,16 +268,45 @@ WatchFaceDigital::WatchFaceDigital(DisplayApp* app, lv_label_set_text_static(backgroundLabel, ""); heartbeatIcon = lv_label_create(lv_scr_act(), nullptr); - lv_label_set_text_static(heartbeatIcon, Symbols::heartBeat); lv_obj_set_style_local_text_color(heartbeatIcon, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0xCE1B1B)); - lv_obj_align(heartbeatIcon, lv_scr_act(), LV_ALIGN_IN_BOTTOM_LEFT, 0, 0); + lv_obj_set_style_local_text_font(heartbeatIcon, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, &neofont2); + lv_label_set_text_static(heartbeatIcon, Symbols::heartBeat); + lv_obj_align(heartbeatIcon, area8, LV_ALIGN_IN_BOTTOM_LEFT, 0, 0); heartbeatValue = lv_label_create(lv_scr_act(), nullptr); lv_obj_set_style_local_text_color(heartbeatValue, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0xCE1B1B)); - lv_label_set_text_static(heartbeatValue, ""); - lv_obj_align(heartbeatValue, heartbeatIcon, LV_ALIGN_OUT_RIGHT_MID, 5, 0); + lv_obj_set_style_local_text_font(heartbeatValue, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, &neofont2); + lv_label_set_text_static(heartbeatValue, "???"); + lv_obj_align(heartbeatValue, heartbeatIcon, LV_ALIGN_OUT_RIGHT_MID, 0, 0); + lv_label_set_align(heartbeatValue, LV_LABEL_ALIGN_RIGHT); + + sprintuint32hex(hrs_label_text, 0x33); + hrsValue = lv_label_create(lv_scr_act(), nullptr); + lv_obj_set_style_local_text_color( hrsValue, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0xFFFFFF)); + lv_obj_set_style_local_text_font( hrsValue, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, &neofont15); + lv_obj_align(hrsValue, heartbeatValue, LV_ALIGN_OUT_BOTTOM_LEFT, 0, 0); + lv_label_set_text_static(hrsValue, hrs_label_text); + + sprintuint32hex(als_label_text, 0x15617811); + alsValue = lv_label_create(lv_scr_act(), nullptr); + lv_obj_set_style_local_text_color( alsValue, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0xFFFFAA)); + lv_obj_set_style_local_text_font( alsValue, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, &neofont15); + lv_obj_align(alsValue, hrsValue, LV_ALIGN_OUT_BOTTOM_LEFT, 0, 0); + lv_label_set_text_static(alsValue, als_label_text); taskRefresh = lv_task_create(RefreshTaskCallback, LV_DISP_DEF_REFR_PERIOD, LV_TASK_PRIO_MID, this); + + lv_obj_del(area1); + lv_obj_del(area2); + lv_obj_del(area4); + lv_obj_del(area5); + lv_obj_del(area6); + lv_obj_del(area7); + lv_obj_del(area8); + lv_obj_del(area9); + lv_obj_del(area10); + lv_obj_del(area11); + Refresh(); } @@ -413,4 +446,12 @@ void WatchFaceDigital::Refresh() { lv_obj_realign(heartbeatIcon); lv_obj_realign(heartbeatValue); } + + { + auto &sensor = systemTask.heartRateSensor; + sprintuint32hex(als_label_text, sensor.ReadHrs()); + sprintuint32hex(hrs_label_text, sensor.ReadAls()); + lv_label_set_text_static(hrsValue, hrs_label_text); + lv_label_set_text_static(alsValue, als_label_text); + } } |
