From 0f1dfb41ce40cbede053086414eb40b3ff692817 Mon Sep 17 00:00:00 2001 From: Alex Kaspar Date: Thu, 30 Dec 2021 08:49:25 +0100 Subject: [PATCH 1/5] Add showericon and update font readme. --- src/CMakeLists.txt | 2 + src/displayapp/fonts/README.md | 2 +- src/displayapp/fonts/jetbrains_mono_bold_20.c | 38 ++++++++++++------- src/displayapp/screens/ShowerIcon.cpp | 12 ++++++ src/displayapp/screens/ShowerIcon.h | 12 ++++++ src/displayapp/screens/Symbols.h | 1 + 6 files changed, 52 insertions(+), 15 deletions(-) create mode 100644 src/displayapp/screens/ShowerIcon.cpp create mode 100644 src/displayapp/screens/ShowerIcon.h diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 809544c92f..852644c83f 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -435,6 +435,7 @@ list(APPEND SOURCE_FILES displayapp/screens/Error.cpp displayapp/screens/Alarm.cpp displayapp/screens/Styles.cpp + displayapp/screens/ShowerIcon.cpp displayapp/Colors.cpp ## Settings @@ -642,6 +643,7 @@ set(INCLUDE_FILES displayapp/screens/Motion.h displayapp/screens/Timer.h displayapp/screens/Alarm.h + displayapp/screens/ShowerIcon.h displayapp/Colors.h drivers/St7789.h drivers/SpiNorFlash.h diff --git a/src/displayapp/fonts/README.md b/src/displayapp/fonts/README.md index 8a26084613..7cd31a9c3f 100644 --- a/src/displayapp/fonts/README.md +++ b/src/displayapp/fonts/README.md @@ -13,7 +13,7 @@ * Do not enable font compression and horizontal subpixel hinting * Load the file `JetBrainsMono-Bold.tff` (use the file in this repo to ensure the version matches) and specify the following range : `0x20-0x7f, 0x410-0x44f` * Add a 2nd font, load the file `FontAwesome5-Solid+Brands+Regular.woff` and specify the following - range : `0xf293, 0xf294, 0xf244, 0xf240, 0xf242, 0xf243, 0xf241, 0xf54b, 0xf21e, 0xf1e6, 0xf54b, 0xf017, 0xf129, 0xf03a, 0xf185, 0xf560, 0xf001, 0xf3fd, 0xf069, 0xf1fc, 0xf45d, 0xf59f, 0xf5a0, 0xf029, 0xf027, 0xf028, 0xf6a9, 0xf04b, 0xf04c, 0xf048, 0xf051, 0xf095, 0xf3dd, 0xf04d, 0xf2f2, 0xf024, 0xf252, 0xf569, 0xf201, 0xf06e, 0xf015` + range : `0xf293, 0xf294, 0xf244, 0xf240, 0xf242, 0xf243, 0xf241, 0xf54b, 0xf21e, 0xf1e6, 0xf54b, 0xf017, 0xf129, 0xf03a, 0xf185, 0xf560, 0xf001, 0xf3fd, 0xf069, 0xf1fc, 0xf45d, 0xf59f, 0xf5a0, 0xf029, 0xf027, 0xf028, 0xf6a9, 0xf04b, 0xf04c, 0xf048, 0xf051, 0xf095, 0xf3dd, 0xf04d, 0xf2f2, 0xf024, 0xf252, 0xf569, 0xf201, 0xf06e, 0xf015, 0xf2cd` * Click on Convert, and download the file `jetbrains_mono_bold_20.c` and copy it in `src/DisplayApp/Fonts` * Add the font .c file path to src/CMakeLists.txt * Add an LV_FONT_DECLARE line in src/libs/lv_conf.h diff --git a/src/displayapp/fonts/jetbrains_mono_bold_20.c b/src/displayapp/fonts/jetbrains_mono_bold_20.c index d8705528ce..1f10944c8d 100644 --- a/src/displayapp/fonts/jetbrains_mono_bold_20.c +++ b/src/displayapp/fonts/jetbrains_mono_bold_20.c @@ -948,6 +948,14 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x81, 0xf8, 0x6d, 0x99, 0x9a, 0x36, 0x7, 0x80, 0xe0, 0x18, 0x2, 0x0, 0x0, + /* U+F2CD "" */ + 0x1c, 0x0, 0x3, 0xf8, 0x0, 0x67, 0xc0, 0x6, + 0x7c, 0x0, 0x67, 0x80, 0x6, 0x70, 0x0, 0x62, + 0x0, 0x6, 0x0, 0x0, 0x60, 0x0, 0xf, 0xff, + 0xff, 0xff, 0xff, 0xf7, 0xff, 0xfe, 0x7f, 0xff, + 0xe7, 0xff, 0xfe, 0x3f, 0xff, 0xc3, 0xff, 0xfc, + 0x18, 0x1, 0x80, + /* U+F2F2 "" */ 0x7, 0xe0, 0x7, 0xe0, 0x1, 0x80, 0x3, 0xc0, 0xf, 0xf2, 0x1f, 0xff, 0x3e, 0x7e, 0x7e, 0x7e, @@ -1235,16 +1243,17 @@ static const lv_font_fmt_txt_glyph_dsc_t glyph_dsc[] = { {.bitmap_index = 3627, .adv_w = 240, .box_w = 15, .box_h = 19, .ofs_x = 0, .ofs_y = -2}, {.bitmap_index = 3663, .adv_w = 280, .box_w = 15, .box_h = 20, .ofs_x = 1, .ofs_y = -3}, {.bitmap_index = 3701, .adv_w = 200, .box_w = 11, .box_h = 21, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 3730, .adv_w = 280, .box_w = 16, .box_h = 19, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 3768, .adv_w = 400, .box_w = 25, .box_h = 21, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 3834, .adv_w = 360, .box_w = 23, .box_h = 17, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 3883, .adv_w = 320, .box_w = 20, .box_h = 20, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 3933, .adv_w = 400, .box_w = 25, .box_h = 19, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 3993, .adv_w = 320, .box_w = 20, .box_h = 21, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 4046, .adv_w = 360, .box_w = 23, .box_h = 21, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 4107, .adv_w = 360, .box_w = 22, .box_h = 20, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 4162, .adv_w = 360, .box_w = 22, .box_h = 19, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 4215, .adv_w = 320, .box_w = 20, .box_h = 15, .ofs_x = 0, .ofs_y = 0} + {.bitmap_index = 3730, .adv_w = 320, .box_w = 20, .box_h = 17, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 3773, .adv_w = 280, .box_w = 16, .box_h = 19, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 3811, .adv_w = 400, .box_w = 25, .box_h = 21, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 3877, .adv_w = 360, .box_w = 23, .box_h = 17, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 3926, .adv_w = 320, .box_w = 20, .box_h = 20, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 3976, .adv_w = 400, .box_w = 25, .box_h = 19, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 4036, .adv_w = 320, .box_w = 20, .box_h = 21, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 4089, .adv_w = 360, .box_w = 23, .box_h = 21, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 4150, .adv_w = 360, .box_w = 22, .box_h = 20, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 4205, .adv_w = 360, .box_w = 22, .box_h = 19, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 4258, .adv_w = 320, .box_w = 20, .box_h = 15, .ofs_x = 0, .ofs_y = 0} }; /*--------------------- @@ -1255,8 +1264,9 @@ static const uint16_t unicode_list_2[] = { 0x0, 0x14, 0x16, 0x23, 0x26, 0x27, 0x28, 0x39, 0x47, 0x4a, 0x4b, 0x4c, 0x50, 0x68, 0x6d, 0x94, 0x128, 0x184, 0x1e5, 0x1fb, 0x200, 0x21d, 0x23f, 0x240, - 0x241, 0x242, 0x243, 0x251, 0x292, 0x293, 0x2f1, 0x3dc, - 0x3fc, 0x45c, 0x54a, 0x55f, 0x568, 0x59e, 0x59f, 0x6a8 + 0x241, 0x242, 0x243, 0x251, 0x292, 0x293, 0x2cc, 0x2f1, + 0x3dc, 0x3fc, 0x45c, 0x54a, 0x55f, 0x568, 0x59e, 0x59f, + 0x6a8 }; /*Collect the unicode lists and glyph_id offsets*/ @@ -1272,7 +1282,7 @@ static const lv_font_fmt_txt_cmap_t cmaps[] = }, { .range_start = 61441, .range_length = 1705, .glyph_id_start = 160, - .unicode_list = unicode_list_2, .glyph_id_ofs_list = NULL, .list_length = 40, .type = LV_FONT_FMT_TXT_CMAP_SPARSE_TINY + .unicode_list = unicode_list_2, .glyph_id_ofs_list = NULL, .list_length = 41, .type = LV_FONT_FMT_TXT_CMAP_SPARSE_TINY } }; @@ -1321,7 +1331,7 @@ lv_font_t jetbrains_mono_bold_20 = { #if !(LVGL_VERSION_MAJOR == 6 && LVGL_VERSION_MINOR == 0) .subpx = LV_FONT_SUBPX_NONE, #endif -#if LV_VERSION_CHECK(7, 4, 0) +#if LV_VERSION_CHECK(7, 4, 0) || LVGL_VERSION_MAJOR >= 8 .underline_position = -3, .underline_thickness = 1, #endif diff --git a/src/displayapp/screens/ShowerIcon.cpp b/src/displayapp/screens/ShowerIcon.cpp new file mode 100644 index 0000000000..7f1f52f297 --- /dev/null +++ b/src/displayapp/screens/ShowerIcon.cpp @@ -0,0 +1,12 @@ +#include "displayapp/screens/ShowerIcon.h" +#include "displayapp/screens/Symbols.h" + +using namespace Pinetime::Applications::Screens; + +const char* ShowerIcon::GetShowerIcon(bool isEnabled) { + if (isEnabled) + return Symbols::shower; + else + return Symbols::none; + +} \ No newline at end of file diff --git a/src/displayapp/screens/ShowerIcon.h b/src/displayapp/screens/ShowerIcon.h new file mode 100644 index 0000000000..966d09a3cf --- /dev/null +++ b/src/displayapp/screens/ShowerIcon.h @@ -0,0 +1,12 @@ +#pragma once + +namespace Pinetime { + namespace Applications { + namespace Screens { + class ShowerIcon { + public: + static const char* GetShowerIcon(bool isEnabled); + }; + } + } +} \ No newline at end of file diff --git a/src/displayapp/screens/Symbols.h b/src/displayapp/screens/Symbols.h index e68a7af6b2..3ac7c9bd34 100644 --- a/src/displayapp/screens/Symbols.h +++ b/src/displayapp/screens/Symbols.h @@ -44,6 +44,7 @@ namespace Pinetime { static constexpr const char* chartLine = "\xEF\x88\x81"; static constexpr const char* eye = "\xEF\x81\xAE"; static constexpr const char* home = "\xEF\x80\x95"; + static constexpr const char* shower = "\xEF\x8B\x8D"; // f2cd // lv_font_sys_48.c static constexpr const char* settings = "\xEE\xA4\x82"; // e902 From fe34e24a4350899c40d8fce91377b72c0fc58261 Mon Sep 17 00:00:00 2001 From: Alex Kaspar Date: Thu, 30 Dec 2021 08:55:50 +0100 Subject: [PATCH 2/5] added showercontroller --- src/CMakeLists.txt | 3 ++ src/components/shower/ShowerController.cpp | 55 ++++++++++++++++++++++ src/components/shower/ShowerController.h | 31 ++++++++++++ 3 files changed, 89 insertions(+) create mode 100644 src/components/shower/ShowerController.cpp create mode 100644 src/components/shower/ShowerController.h diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 852644c83f..200b5e13e0 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -499,6 +499,7 @@ list(APPEND SOURCE_FILES components/timer/TimerController.cpp components/alarm/AlarmController.cpp components/fs/FS.cpp + components/shower/ShowerController.cpp drivers/Cst816s.cpp FreeRTOS/port.c FreeRTOS/port_cmsis_systick.c @@ -569,6 +570,7 @@ list(APPEND RECOVERY_SOURCE_FILES components/settings/Settings.cpp components/timer/TimerController.cpp components/alarm/AlarmController.cpp + components/shower/ShowerController.cpp drivers/Cst816s.cpp FreeRTOS/port.c FreeRTOS/port_cmsis_systick.c @@ -683,6 +685,7 @@ set(INCLUDE_FILES components/settings/Settings.h components/timer/TimerController.h components/alarm/AlarmController.h + components/shower/ShowerController.h drivers/Cst816s.h FreeRTOS/portmacro.h FreeRTOS/portmacro_cmsis.h diff --git a/src/components/shower/ShowerController.cpp b/src/components/shower/ShowerController.cpp new file mode 100644 index 0000000000..ded49d3957 --- /dev/null +++ b/src/components/shower/ShowerController.cpp @@ -0,0 +1,55 @@ +#include "components/shower/ShowerController.h" +#include "systemtask/Messages.h" + +using namespace Pinetime::Controllers; + +ShowerController* ShowerController::instance = nullptr; + +ShowerController::ShowerController() { + instance = this; +} + +void ShowerController::ToggleShowerMode() { + using WakeOn = Controllers::Settings::WakeUpMode; + + this->isShowerModeOn = !this->isShowerModeOn; + bool settingsChanged = false; + if (this->IsShowerModeOn()) { + if (lastScreenTimeout != settingsController->GetScreenTimeOut()) { + lastScreenTimeout = settingsController->GetScreenTimeOut(); + settingsController->SetScreenTimeOut(5000); + settingsChanged = true; + } + if (settingsController->isWakeUpModeOn(WakeOn::SingleTap)) { + lastWakeUpMode = WakeOn::SingleTap; + settingsController->setWakeUpMode(WakeOn::SingleTap, false); + settingsChanged = true; + } + else if (settingsController->isWakeUpModeOn(WakeOn::DoubleTap)) { + lastWakeUpMode = WakeOn::DoubleTap; + settingsController->setWakeUpMode(WakeOn::DoubleTap, false); + settingsChanged = true; + } + else if (settingsController->isWakeUpModeOn(WakeOn::RaiseWrist)) { + lastWakeUpMode = WakeOn::RaiseWrist; + settingsController->setWakeUpMode(WakeOn::RaiseWrist, false); + settingsChanged = true; + } + if (settingsChanged) { + settingsController->SaveSettings(); + } + } else { + settingsController->SetScreenTimeOut(lastScreenTimeout); + settingsController->setWakeUpMode(lastWakeUpMode, true); + settingsController->SaveSettings(); + + } +} + +void ShowerController::Register(Pinetime::System::SystemTask* systemTask) { + this->systemTask = systemTask; +} + +void ShowerController::SetSettingController(Pinetime::Controllers::Settings* settingsController) { + this->settingsController = settingsController; +} \ No newline at end of file diff --git a/src/components/shower/ShowerController.h b/src/components/shower/ShowerController.h new file mode 100644 index 0000000000..16dd751cec --- /dev/null +++ b/src/components/shower/ShowerController.h @@ -0,0 +1,31 @@ +#pragma once + +#include +#include "components/settings/Settings.h" + +namespace Pinetime { + namespace Controllers { + + class ShowerController { + public: + ShowerController(); + + void Register(System::SystemTask* systemTask); + void SetSettingController(Pinetime::Controllers::Settings* settingsController); + void ToggleShowerMode(); + bool IsShowerModeOn() const { + return isShowerModeOn; + } + + private: + static ShowerController* instance; + + bool isShowerModeOn = false; + uint32_t lastScreenTimeout = 0; + Pinetime::Controllers::Settings::WakeUpMode lastWakeUpMode; + + Pinetime::Controllers::Settings* settingsController = nullptr; + Pinetime::System::SystemTask* systemTask = nullptr; + }; + } +} \ No newline at end of file From ec508a85d55d4ad87739f6813f880f3c52f65e12 Mon Sep 17 00:00:00 2001 From: Alex Kaspar Date: Thu, 30 Dec 2021 09:14:19 +0100 Subject: [PATCH 3/5] added showerController to System and Display --- src/displayapp/DisplayApp.cpp | 3 +++ src/displayapp/DisplayApp.h | 3 +++ src/displayapp/DisplayAppRecovery.cpp | 1 + src/displayapp/DisplayAppRecovery.h | 2 ++ src/main.cpp | 4 ++++ src/systemtask/SystemTask.cpp | 3 +++ src/systemtask/SystemTask.h | 3 +++ 7 files changed, 19 insertions(+) diff --git a/src/displayapp/DisplayApp.cpp b/src/displayapp/DisplayApp.cpp index 233f433dd2..9a098bc821 100644 --- a/src/displayapp/DisplayApp.cpp +++ b/src/displayapp/DisplayApp.cpp @@ -10,6 +10,7 @@ #include "components/ble/NotificationManager.h" #include "components/motion/MotionController.h" #include "components/motor/MotorController.h" +#include "components/shower/ShowerController.h" #include "displayapp/screens/ApplicationList.h" #include "displayapp/screens/Brightness.h" #include "displayapp/screens/Clock.h" @@ -96,6 +97,7 @@ DisplayApp::DisplayApp(Drivers::St7789& lcd, Pinetime::Controllers::MotionController& motionController, Pinetime::Controllers::TimerController& timerController, Pinetime::Controllers::AlarmController& alarmController, + Pinetime::Controllers::ShowerController& showerController, Pinetime::Controllers::TouchHandler& touchHandler) : lcd {lcd}, lvgl {lvgl}, @@ -111,6 +113,7 @@ DisplayApp::DisplayApp(Drivers::St7789& lcd, motionController {motionController}, timerController {timerController}, alarmController {alarmController}, + showerController {showerController}, touchHandler {touchHandler} { } diff --git a/src/displayapp/DisplayApp.h b/src/displayapp/DisplayApp.h index 39fe631455..93effcd056 100644 --- a/src/displayapp/DisplayApp.h +++ b/src/displayapp/DisplayApp.h @@ -35,6 +35,7 @@ namespace Pinetime { class NotificationManager; class HeartRateController; class MotionController; + class ShowerController; class TouchHandler; } @@ -61,6 +62,7 @@ namespace Pinetime { Pinetime::Controllers::MotionController& motionController, Pinetime::Controllers::TimerController& timerController, Pinetime::Controllers::AlarmController& alarmController, + Pinetime::Controllers::ShowerController& showerController, Pinetime::Controllers::TouchHandler& touchHandler); void Start(System::BootErrors error); void PushMessage(Display::Messages msg); @@ -87,6 +89,7 @@ namespace Pinetime { Pinetime::Controllers::MotionController& motionController; Pinetime::Controllers::TimerController& timerController; Pinetime::Controllers::AlarmController& alarmController; + Pinetime::Controllers::ShowerController& showerController; Pinetime::Controllers::TouchHandler& touchHandler; Pinetime::Controllers::FirmwareValidator validator; diff --git a/src/displayapp/DisplayAppRecovery.cpp b/src/displayapp/DisplayAppRecovery.cpp index fd7017a451..7f5273a310 100644 --- a/src/displayapp/DisplayAppRecovery.cpp +++ b/src/displayapp/DisplayAppRecovery.cpp @@ -23,6 +23,7 @@ DisplayApp::DisplayApp(Drivers::St7789& lcd, Pinetime::Controllers::MotionController& motionController, Pinetime::Controllers::TimerController& timerController, Pinetime::Controllers::AlarmController& alarmController, + Pinetime::Controllers::ShowerController& showerController, Pinetime::Controllers::TouchHandler& touchHandler) : lcd {lcd}, bleController {bleController} { diff --git a/src/displayapp/DisplayAppRecovery.h b/src/displayapp/DisplayAppRecovery.h index 86e956d133..ddc5841b77 100644 --- a/src/displayapp/DisplayAppRecovery.h +++ b/src/displayapp/DisplayAppRecovery.h @@ -34,6 +34,7 @@ namespace Pinetime { class MotorController; class TimerController; class AlarmController; + class ShowerController; } namespace System { @@ -57,6 +58,7 @@ namespace Pinetime { Pinetime::Controllers::MotionController& motionController, Pinetime::Controllers::TimerController& timerController, Pinetime::Controllers::AlarmController& alarmController, + Pinetime::Controllers::ShowerController& showerController, Pinetime::Controllers::TouchHandler& touchHandler); void Start(); void Start(Pinetime::System::BootErrors){ Start(); }; diff --git a/src/main.cpp b/src/main.cpp index 53f78ce8a1..50cc47c684 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -37,6 +37,7 @@ #include "components/datetime/DateTimeController.h" #include "components/heartrate/HeartRateController.h" #include "components/fs/FS.h" +#include "components/shower/ShowerController.h" #include "drivers/Spi.h" #include "drivers/SpiMaster.h" #include "drivers/SpiNorFlash.h" @@ -114,6 +115,7 @@ Pinetime::Controllers::ButtonHandler buttonHandler; Pinetime::Controllers::FS fs {spiNorFlash}; Pinetime::Controllers::Settings settingsController {fs}; Pinetime::Controllers::MotorController motorController {}; +Pinetime::Controllers::ShowerController showerController; Pinetime::Applications::DisplayApp displayApp(lcd, lvgl, @@ -129,6 +131,7 @@ Pinetime::Applications::DisplayApp displayApp(lcd, motionController, timerController, alarmController, + showerController, touchHandler); Pinetime::System::SystemTask systemTask(spi, @@ -150,6 +153,7 @@ Pinetime::System::SystemTask systemTask(spi, motionSensor, settingsController, heartRateController, + showerController, displayApp, heartRateApp, fs, diff --git a/src/systemtask/SystemTask.cpp b/src/systemtask/SystemTask.cpp index a95d479dec..e62990b2ad 100644 --- a/src/systemtask/SystemTask.cpp +++ b/src/systemtask/SystemTask.cpp @@ -73,6 +73,7 @@ SystemTask::SystemTask(Drivers::SpiMaster& spi, Pinetime::Drivers::Bma421& motionSensor, Controllers::Settings& settingsController, Pinetime::Controllers::HeartRateController& heartRateController, + Pinetime::Controllers::ShowerController& showerController, Pinetime::Applications::DisplayApp& displayApp, Pinetime::Applications::HeartRateTask& heartRateApp, Pinetime::Controllers::FS& fs, @@ -96,6 +97,7 @@ SystemTask::SystemTask(Drivers::SpiMaster& spi, motionSensor {motionSensor}, settingsController {settingsController}, heartRateController {heartRateController}, + showerController {showerController}, motionController {motionController}, displayApp {displayApp}, heartRateApp(heartRateApp), @@ -162,6 +164,7 @@ void SystemTask::Work() { timerController.Register(this); timerController.Init(); alarmController.Init(this); + showerController.Register(this); // Reset the TWI device because the motion sensor chip most probably crashed it... twiMaster.Sleep(); diff --git a/src/systemtask/SystemTask.h b/src/systemtask/SystemTask.h index e2e6de7f66..6566029e96 100644 --- a/src/systemtask/SystemTask.h +++ b/src/systemtask/SystemTask.h @@ -19,6 +19,7 @@ #include "components/timer/TimerController.h" #include "components/alarm/AlarmController.h" #include "components/fs/FS.h" +#include "components/shower/ShowerController.h" #include "touchhandler/TouchHandler.h" #include "buttonhandler/ButtonHandler.h" #include "buttonhandler/ButtonActions.h" @@ -71,6 +72,7 @@ namespace Pinetime { Pinetime::Drivers::Bma421& motionSensor, Controllers::Settings& settingsController, Pinetime::Controllers::HeartRateController& heartRateController, + Pinetime::Controllers::ShowerController& showerController, Pinetime::Applications::DisplayApp& displayApp, Pinetime::Applications::HeartRateTask& heartRateApp, Pinetime::Controllers::FS& fs, @@ -120,6 +122,7 @@ namespace Pinetime { Pinetime::Drivers::Bma421& motionSensor; Pinetime::Controllers::Settings& settingsController; Pinetime::Controllers::HeartRateController& heartRateController; + Pinetime::Controllers::ShowerController& showerController; Pinetime::Controllers::MotionController& motionController; Pinetime::Applications::DisplayApp& displayApp; From 40cd0ab0cea66b5974619f500a2b36fa73bf2b6a Mon Sep 17 00:00:00 2001 From: Alex Kaspar Date: Thu, 30 Dec 2021 10:02:21 +0100 Subject: [PATCH 4/5] Added showerController to FaceAnalog and Digital --- src/displayapp/DisplayApp.cpp | 3 ++- src/displayapp/screens/Clock.cpp | 15 ++++++++++++--- src/displayapp/screens/Clock.h | 5 ++++- src/displayapp/screens/WatchFaceAnalog.cpp | 21 +++++++++++++++++++++ src/displayapp/screens/WatchFaceAnalog.h | 7 +++++++ src/displayapp/screens/WatchFaceDigital.cpp | 19 +++++++++++++++++++ src/displayapp/screens/WatchFaceDigital.h | 8 ++++++++ 7 files changed, 73 insertions(+), 5 deletions(-) diff --git a/src/displayapp/DisplayApp.cpp b/src/displayapp/DisplayApp.cpp index 9a098bc821..9e31679e8f 100644 --- a/src/displayapp/DisplayApp.cpp +++ b/src/displayapp/DisplayApp.cpp @@ -342,7 +342,8 @@ void DisplayApp::LoadApp(Apps app, DisplayApp::FullRefreshDirections direction) notificationManager, settingsController, heartRateController, - motionController); + motionController, + showerController); break; case Apps::Error: diff --git a/src/displayapp/screens/Clock.cpp b/src/displayapp/screens/Clock.cpp index 96d8e5b0a1..c9e98123a8 100644 --- a/src/displayapp/screens/Clock.cpp +++ b/src/displayapp/screens/Clock.cpp @@ -7,6 +7,7 @@ #include "components/ble/BleController.h" #include "components/ble/NotificationManager.h" #include "components/settings/Settings.h" +#include "components/shower/ShowerController.h" #include "displayapp/DisplayApp.h" #include "displayapp/screens/WatchFaceDigital.h" #include "displayapp/screens/WatchFaceAnalog.h" @@ -21,7 +22,8 @@ Clock::Clock(DisplayApp* app, Controllers::NotificationManager& notificatioManager, Controllers::Settings& settingsController, Controllers::HeartRateController& heartRateController, - Controllers::MotionController& motionController) + Controllers::MotionController& motionController, + Controllers::ShowerController& showerController) : Screen(app), dateTimeController {dateTimeController}, batteryController {batteryController}, @@ -30,6 +32,7 @@ Clock::Clock(DisplayApp* app, settingsController {settingsController}, heartRateController {heartRateController}, motionController {motionController}, + showerController {showerController}, screen {[this, &settingsController]() { switch (settingsController.GetClockFace()) { case 0: @@ -63,12 +66,18 @@ std::unique_ptr Clock::WatchFaceDigitalScreen() { notificatioManager, settingsController, heartRateController, + showerController, motionController); } std::unique_ptr Clock::WatchFaceAnalogScreen() { - return std::make_unique( - app, dateTimeController, batteryController, bleController, notificatioManager, settingsController); + return std::make_unique(app, + dateTimeController, + batteryController, + bleController, + notificatioManager, + showerController, + settingsController); } std::unique_ptr Clock::PineTimeStyleScreen() { diff --git a/src/displayapp/screens/Clock.h b/src/displayapp/screens/Clock.h index 2fad1e2147..ed82f8cfb6 100644 --- a/src/displayapp/screens/Clock.h +++ b/src/displayapp/screens/Clock.h @@ -15,6 +15,7 @@ namespace Pinetime { class Ble; class NotificationManager; class MotionController; + class ShowerController; } namespace Applications { @@ -28,7 +29,8 @@ namespace Pinetime { Controllers::NotificationManager& notificatioManager, Controllers::Settings& settingsController, Controllers::HeartRateController& heartRateController, - Controllers::MotionController& motionController); + Controllers::MotionController& motionController, + Controllers::ShowerController& showerController); ~Clock() override; bool OnTouchEvent(TouchEvents event) override; @@ -41,6 +43,7 @@ namespace Pinetime { Controllers::Settings& settingsController; Controllers::HeartRateController& heartRateController; Controllers::MotionController& motionController; + Controllers::ShowerController& showerController; std::unique_ptr screen; std::unique_ptr WatchFaceDigitalScreen(); diff --git a/src/displayapp/screens/WatchFaceAnalog.cpp b/src/displayapp/screens/WatchFaceAnalog.cpp index f027a74447..a46136670f 100644 --- a/src/displayapp/screens/WatchFaceAnalog.cpp +++ b/src/displayapp/screens/WatchFaceAnalog.cpp @@ -5,6 +5,7 @@ #include "displayapp/screens/BleIcon.h" #include "displayapp/screens/Symbols.h" #include "displayapp/screens/NotificationIcon.h" +#include "displayapp/screens/ShowerIcon.h" #include "components/settings/Settings.h" LV_IMG_DECLARE(bg_clock); @@ -49,6 +50,7 @@ WatchFaceAnalog::WatchFaceAnalog(Pinetime::Applications::DisplayApp* app, Controllers::Battery& batteryController, Controllers::Ble& bleController, Controllers::NotificationManager& notificationManager, + Controllers::ShowerController& showerController, Controllers::Settings& settingsController) : Screen(app), currentDateTime {{}}, @@ -56,6 +58,7 @@ WatchFaceAnalog::WatchFaceAnalog(Pinetime::Applications::DisplayApp* app, batteryController {batteryController}, bleController {bleController}, notificationManager {notificationManager}, + showerController {showerController}, settingsController {settingsController} { settingsController.SetClockFace(1); @@ -77,6 +80,11 @@ WatchFaceAnalog::WatchFaceAnalog(Pinetime::Applications::DisplayApp* app, lv_label_set_text(notificationIcon, NotificationIcon::GetIcon(false)); lv_obj_align(notificationIcon, NULL, LV_ALIGN_IN_TOP_LEFT, 0, 0); + showerIcon = lv_label_create(lv_scr_act(), nullptr); + lv_obj_set_style_local_text_color(showerIcon, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x00FF00)); + lv_label_set_text(showerIcon, Symbols::none); + lv_obj_align(showerIcon, nullptr, LV_ALIGN_IN_BOTTOM_LEFT, 15, 0); + // Date - Day / Week day label_date_day = lv_label_create(lv_scr_act(), NULL); @@ -212,6 +220,8 @@ void WatchFaceAnalog::Refresh() { lv_label_set_text(notificationIcon, NotificationIcon::GetIcon(notificationState.Get())); } + lv_label_set_text(showerIcon, ShowerIcon::GetShowerIcon(showerController.IsShowerModeOn())); + currentDateTime = dateTimeController.CurrentDateTime(); if (currentDateTime.IsUpdated()) { @@ -230,3 +240,14 @@ void WatchFaceAnalog::Refresh() { } } } + +bool WatchFaceAnalog::OnTouchEvent(TouchEvents event) { + if (event == TouchEvents::LongTap) { + showerController.SetSettingController(&settingsController); + showerController.ToggleShowerMode(); + lv_label_set_text(showerIcon, ShowerIcon::GetShowerIcon(showerController.IsShowerModeOn())); + return true; + } + return false; +} + diff --git a/src/displayapp/screens/WatchFaceAnalog.h b/src/displayapp/screens/WatchFaceAnalog.h index a18eb299a2..7ab988d700 100644 --- a/src/displayapp/screens/WatchFaceAnalog.h +++ b/src/displayapp/screens/WatchFaceAnalog.h @@ -9,6 +9,7 @@ #include "components/battery/BatteryController.h" #include "components/ble/BleController.h" #include "components/ble/NotificationManager.h" +#include "components/shower/ShowerController.h" namespace Pinetime { namespace Controllers { @@ -16,6 +17,7 @@ namespace Pinetime { class Battery; class Ble; class NotificationManager; + class ShowerController; } namespace Applications { namespace Screens { @@ -27,11 +29,13 @@ namespace Pinetime { Controllers::Battery& batteryController, Controllers::Ble& bleController, Controllers::NotificationManager& notificationManager, + Controllers::ShowerController& showerController, Controllers::Settings& settingsController); ~WatchFaceAnalog() override; void Refresh() override; + bool OnTouchEvent(TouchEvents event) override; private: uint8_t sHour, sMinute, sSecond; @@ -51,6 +55,7 @@ namespace Pinetime { DirtyValue isCharging {}; DirtyValue> currentDateTime; DirtyValue notificationState {false}; + Pinetime::Controllers::Settings::WakeUpMode lastWakeUpMode; lv_obj_t* hour_body; lv_obj_t* hour_body_trace; @@ -73,12 +78,14 @@ namespace Pinetime { lv_obj_t* label_date_day; lv_obj_t* batteryIcon; lv_obj_t* notificationIcon; + lv_obj_t* showerIcon; Controllers::DateTime& dateTimeController; Controllers::Battery& batteryController; Controllers::Ble& bleController; Controllers::NotificationManager& notificationManager; Controllers::Settings& settingsController; + Controllers::ShowerController& showerController; void UpdateClock(); void SetBatteryIcon(); diff --git a/src/displayapp/screens/WatchFaceDigital.cpp b/src/displayapp/screens/WatchFaceDigital.cpp index 876957938d..5b0932adfc 100644 --- a/src/displayapp/screens/WatchFaceDigital.cpp +++ b/src/displayapp/screens/WatchFaceDigital.cpp @@ -6,6 +6,7 @@ #include "displayapp/screens/BatteryIcon.h" #include "displayapp/screens/BleIcon.h" #include "displayapp/screens/NotificationIcon.h" +#include "displayapp/screens/ShowerIcon.h" #include "displayapp/screens/Symbols.h" #include "components/battery/BatteryController.h" #include "components/ble/BleController.h" @@ -22,6 +23,7 @@ WatchFaceDigital::WatchFaceDigital(DisplayApp* app, Controllers::NotificationManager& notificatioManager, Controllers::Settings& settingsController, Controllers::HeartRateController& heartRateController, + Controllers::ShowerController& showerController, Controllers::MotionController& motionController) : Screen(app), currentDateTime {{}}, @@ -31,6 +33,7 @@ WatchFaceDigital::WatchFaceDigital(DisplayApp* app, notificatioManager {notificatioManager}, settingsController {settingsController}, heartRateController {heartRateController}, + showerController {showerController}, motionController {motionController} { settingsController.SetClockFace(0); @@ -53,6 +56,11 @@ WatchFaceDigital::WatchFaceDigital(DisplayApp* app, lv_label_set_text(notificationIcon, NotificationIcon::GetIcon(false)); lv_obj_align(notificationIcon, nullptr, LV_ALIGN_IN_TOP_LEFT, 0, 0); + showerIcon = lv_label_create(lv_scr_act(), nullptr); + lv_obj_set_style_local_text_color(showerIcon, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x00FF00)); + lv_label_set_text(showerIcon, Symbols::none); + lv_obj_align(showerIcon, nullptr, LV_ALIGN_IN_TOP_LEFT, 15, 0); + label_date = lv_label_create(lv_scr_act(), nullptr); lv_obj_align(label_date, lv_scr_act(), LV_ALIGN_CENTER, 0, 60); lv_obj_set_style_local_text_color(label_date, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x999999)); @@ -132,6 +140,8 @@ void WatchFaceDigital::Refresh() { lv_label_set_text(notificationIcon, NotificationIcon::GetIcon(notificationState.Get())); } + lv_label_set_text(showerIcon, ShowerIcon::GetShowerIcon(showerController.IsShowerModeOn())); + currentDateTime = dateTimeController.CurrentDateTime(); if (currentDateTime.IsUpdated()) { @@ -233,3 +243,12 @@ void WatchFaceDigital::Refresh() { lv_obj_align(stepIcon, stepValue, LV_ALIGN_OUT_LEFT_MID, -5, 0); } } +bool WatchFaceDigital::OnTouchEvent(TouchEvents event) { + if (event == TouchEvents::LongTap) { + showerController.SetSettingController(&settingsController); + showerController.ToggleShowerMode(); + lv_label_set_text(showerIcon, ShowerIcon::GetShowerIcon(showerController.IsShowerModeOn())); + return true; + } + return false; +} diff --git a/src/displayapp/screens/WatchFaceDigital.h b/src/displayapp/screens/WatchFaceDigital.h index 627154c818..15873b7b04 100644 --- a/src/displayapp/screens/WatchFaceDigital.h +++ b/src/displayapp/screens/WatchFaceDigital.h @@ -6,6 +6,7 @@ #include #include "displayapp/screens/Screen.h" #include "components/datetime/DateTimeController.h" +#include "components/shower/ShowerController.h" namespace Pinetime { namespace Controllers { @@ -15,6 +16,7 @@ namespace Pinetime { class NotificationManager; class HeartRateController; class MotionController; + class ShowerController; } namespace Applications { @@ -29,10 +31,12 @@ namespace Pinetime { Controllers::NotificationManager& notificatioManager, Controllers::Settings& settingsController, Controllers::HeartRateController& heartRateController, + Controllers::ShowerController& showerController, Controllers::MotionController& motionController); ~WatchFaceDigital() override; void Refresh() override; + bool OnTouchEvent(TouchEvents event) override; private: char displayedChar[5] {}; @@ -52,6 +56,8 @@ namespace Pinetime { DirtyValue heartbeatRunning {}; DirtyValue notificationState {}; + Pinetime::Controllers::Settings::WakeUpMode lastWakeUpMode; + lv_obj_t* label_time; lv_obj_t* label_time_ampm; lv_obj_t* label_date; @@ -64,6 +70,7 @@ namespace Pinetime { lv_obj_t* stepIcon; lv_obj_t* stepValue; lv_obj_t* notificationIcon; + lv_obj_t* showerIcon; Controllers::DateTime& dateTimeController; Controllers::Battery& batteryController; @@ -71,6 +78,7 @@ namespace Pinetime { Controllers::NotificationManager& notificatioManager; Controllers::Settings& settingsController; Controllers::HeartRateController& heartRateController; + Controllers::ShowerController& showerController; Controllers::MotionController& motionController; lv_task_t* taskRefresh; From a9ab83151f378173ac280b491a86dd0819b88076 Mon Sep 17 00:00:00 2001 From: Alex Kaspar Date: Thu, 30 Dec 2021 11:24:26 +0100 Subject: [PATCH 5/5] fixed linter errors --- src/components/shower/ShowerController.cpp | 2 +- src/components/shower/ShowerController.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/shower/ShowerController.cpp b/src/components/shower/ShowerController.cpp index ded49d3957..87a90bca07 100644 --- a/src/components/shower/ShowerController.cpp +++ b/src/components/shower/ShowerController.cpp @@ -5,7 +5,7 @@ using namespace Pinetime::Controllers; ShowerController* ShowerController::instance = nullptr; -ShowerController::ShowerController() { +ShowerController::ShowerController() : lastWakeUpMode() { instance = this; } diff --git a/src/components/shower/ShowerController.h b/src/components/shower/ShowerController.h index 16dd751cec..20bf688a37 100644 --- a/src/components/shower/ShowerController.h +++ b/src/components/shower/ShowerController.h @@ -1,7 +1,7 @@ #pragma once -#include #include "components/settings/Settings.h" +#include namespace Pinetime { namespace Controllers {