From d13dd6dee3e6194a2f3ed2a1adfbbd32ced525a3 Mon Sep 17 00:00:00 2001 From: Florian Kraupa Date: Wed, 12 May 2021 20:23:04 +0200 Subject: [PATCH 001/173] implemented continuous vibration pattern for incoming calls --- src/components/motor/MotorController.cpp | 36 ++++++++++++++--- src/components/motor/MotorController.h | 7 +++- src/displayapp/DisplayApp.cpp | 4 +- src/displayapp/screens/Notifications.cpp | 39 +++++++++++++------ src/displayapp/screens/Notifications.h | 8 +++- .../screens/settings/QuickSettings.cpp | 2 +- src/systemtask/SystemTask.cpp | 6 ++- 7 files changed, 78 insertions(+), 24 deletions(-) diff --git a/src/components/motor/MotorController.cpp b/src/components/motor/MotorController.cpp index a834ab6b4c..2a14f4b5ef 100644 --- a/src/components/motor/MotorController.cpp +++ b/src/components/motor/MotorController.cpp @@ -3,7 +3,8 @@ #include "systemtask/SystemTask.h" #include "app_timer.h" -APP_TIMER_DEF(vibTimer); +APP_TIMER_DEF(shortVibTimer); +APP_TIMER_DEF(longVibTimer); using namespace Pinetime::Controllers; @@ -14,19 +15,42 @@ void MotorController::Init() { nrf_gpio_cfg_output(pinMotor); nrf_gpio_pin_set(pinMotor); app_timer_init(); - app_timer_create(&vibTimer, APP_TIMER_MODE_SINGLE_SHOT, vibrate); + + app_timer_create(&shortVibTimer, APP_TIMER_MODE_SINGLE_SHOT, vibrate); + app_timer_create(&longVibTimer, APP_TIMER_MODE_REPEATED, vibrate); + isBusy = false; } -void MotorController::SetDuration(uint8_t motorDuration) { +void MotorController::RunForDuration(uint8_t motorDuration) { - if (settingsController.GetVibrationStatus() == Controllers::Settings::Vibration::OFF) + if (settingsController.GetVibrationStatus() == Controllers::Settings::Vibration::OFF || isBusy) return; nrf_gpio_pin_clear(pinMotor); /* Start timer for motorDuration miliseconds and timer triggers vibrate() when it finishes*/ - app_timer_start(vibTimer, APP_TIMER_TICKS(motorDuration), NULL); + app_timer_start(shortVibTimer, APP_TIMER_TICKS(motorDuration), NULL); } -void MotorController::vibrate(void* p_context) { +void MotorController::startRunning(uint8_t motorDuration) { + if (settingsController.GetVibrationStatus() == Controllers::Settings::Vibration::OFF || isBusy ) + return; + //prevent other vibrations while running + isBusy = true; + nrf_gpio_pin_clear(pinMotor); + app_timer_start(longVibTimer, APP_TIMER_TICKS(motorDuration), NULL); +} + +void MotorController::stopRunning() { + + app_timer_stop(longVibTimer); nrf_gpio_pin_set(pinMotor); + isBusy = false; +} + +void MotorController::vibrate(void* p_context) { + if (nrf_gpio_pin_out_read(pinMotor) == 0) { + nrf_gpio_pin_set(pinMotor); + } else { + nrf_gpio_pin_clear(pinMotor); + } } \ No newline at end of file diff --git a/src/components/motor/MotorController.h b/src/components/motor/MotorController.h index df61af7849..be076ad49f 100644 --- a/src/components/motor/MotorController.h +++ b/src/components/motor/MotorController.h @@ -12,11 +12,14 @@ namespace Pinetime { public: MotorController(Controllers::Settings& settingsController); void Init(); - void SetDuration(uint8_t motorDuration); + void RunForDuration(uint8_t motorDuration); + void startRunning(uint8_t motorDuration); + void stopRunning(); private: Controllers::Settings& settingsController; static void vibrate(void* p_context); - }; + bool isBusy; + }; } } diff --git a/src/displayapp/DisplayApp.cpp b/src/displayapp/DisplayApp.cpp index a6c4a3ec9e..731f3d08c3 100644 --- a/src/displayapp/DisplayApp.cpp +++ b/src/displayapp/DisplayApp.cpp @@ -256,12 +256,12 @@ void DisplayApp::LoadApp(Apps app, DisplayApp::FullRefreshDirections direction) case Apps::Notifications: currentScreen = std::make_unique( - this, notificationManager, systemTask.nimble().alertService(), Screens::Notifications::Modes::Normal); + this, notificationManager, systemTask.nimble().alertService(), motorController, Screens::Notifications::Modes::Normal); ReturnApp(Apps::Clock, FullRefreshDirections::Up, TouchEvents::SwipeUp); break; case Apps::NotificationsPreview: currentScreen = std::make_unique( - this, notificationManager, systemTask.nimble().alertService(), Screens::Notifications::Modes::Preview); + this, notificationManager, systemTask.nimble().alertService(), motorController, Screens::Notifications::Modes::Preview); ReturnApp(Apps::Clock, FullRefreshDirections::Up, TouchEvents::SwipeUp); break; diff --git a/src/displayapp/screens/Notifications.cpp b/src/displayapp/screens/Notifications.cpp index f0fd2f6636..482247e634 100644 --- a/src/displayapp/screens/Notifications.cpp +++ b/src/displayapp/screens/Notifications.cpp @@ -11,8 +11,13 @@ extern lv_font_t jetbrains_mono_bold_20; Notifications::Notifications(DisplayApp* app, Pinetime::Controllers::NotificationManager& notificationManager, Pinetime::Controllers::AlertNotificationService& alertNotificationService, + Controllers::MotorController& motorController, Modes mode) - : Screen(app), notificationManager {notificationManager}, alertNotificationService {alertNotificationService}, mode {mode} { + : Screen(app), + notificationManager {notificationManager}, + alertNotificationService {alertNotificationService}, + motorController{motorController}, + mode {mode} { notificationManager.ClearNewNotificationFlag(); auto notification = notificationManager.GetLastNotification(); if (notification.valid) { @@ -23,7 +28,8 @@ Notifications::Notifications(DisplayApp* app, notification.category, notificationManager.NbNotifications(), mode, - alertNotificationService); + alertNotificationService, + motorController); validDisplay = true; } else { currentItem = std::make_unique("Notification", @@ -32,10 +38,13 @@ Notifications::Notifications(DisplayApp* app, notification.category, notificationManager.NbNotifications(), Modes::Preview, - alertNotificationService); + alertNotificationService, + motorController); } if (mode == Modes::Preview) { + + timeoutLine = lv_line_create(lv_scr_act(), nullptr); @@ -63,7 +72,10 @@ bool Notifications::Refresh() { timeoutLinePoints[1].x = pos; lv_line_set_points(timeoutLine, timeoutLinePoints, 2); } - + //make sure we stop any vibrations before exiting + if (!running) { + motorController.stopRunning(); + } return running; } @@ -92,7 +104,8 @@ bool Notifications::OnTouchEvent(Pinetime::Applications::TouchEvents event) { previousNotification.category, notificationManager.NbNotifications(), mode, - alertNotificationService); + alertNotificationService, + motorController); } return true; case Pinetime::Applications::TouchEvents::SwipeUp: { @@ -117,7 +130,8 @@ bool Notifications::OnTouchEvent(Pinetime::Applications::TouchEvents event) { nextNotification.category, notificationManager.NbNotifications(), mode, - alertNotificationService); + alertNotificationService, + motorController); } return true; case Pinetime::Applications::TouchEvents::LongTap: { @@ -152,8 +166,9 @@ Notifications::NotificationItem::NotificationItem(const char* title, Controllers::NotificationManager::Categories category, uint8_t notifNb, Modes mode, - Pinetime::Controllers::AlertNotificationService& alertNotificationService) - : notifNr {notifNr}, notifNb {notifNb}, mode {mode}, alertNotificationService {alertNotificationService} { + Pinetime::Controllers::AlertNotificationService& alertNotificationService, + Controllers::MotorController& motorController) + : notifNr {notifNr}, notifNb {notifNb}, mode {mode}, alertNotificationService {alertNotificationService}, motorController{motorController} { lv_obj_t* container1 = lv_cont_create(lv_scr_act(), NULL); @@ -236,8 +251,10 @@ Notifications::NotificationItem::NotificationItem(const char* title, label_mute = lv_label_create(bt_mute, nullptr); lv_label_set_text(label_mute, Symbols::volumMute); lv_obj_set_style_local_bg_color(bt_mute, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_GRAY); + } break; } + lv_obj_t* backgroundLabel = lv_label_create(lv_scr_act(), nullptr); lv_label_set_long_mode(backgroundLabel, LV_LABEL_LONG_CROP); @@ -249,21 +266,21 @@ Notifications::NotificationItem::NotificationItem(const char* title, void Notifications::NotificationItem::OnAcceptIncomingCall(lv_event_t event) { if (event != LV_EVENT_CLICKED) return; - + motorController.stopRunning(); alertNotificationService.AcceptIncomingCall(); } void Notifications::NotificationItem::OnMuteIncomingCall(lv_event_t event) { if (event != LV_EVENT_CLICKED) return; - + motorController.stopRunning(); alertNotificationService.MuteIncomingCall(); } void Notifications::NotificationItem::OnRejectIncomingCall(lv_event_t event) { if (event != LV_EVENT_CLICKED) return; - + motorController.stopRunning(); alertNotificationService.RejectIncomingCall(); } diff --git a/src/displayapp/screens/Notifications.h b/src/displayapp/screens/Notifications.h index 51ca81da9b..ae83e8eeec 100644 --- a/src/displayapp/screens/Notifications.h +++ b/src/displayapp/screens/Notifications.h @@ -5,6 +5,7 @@ #include #include "Screen.h" #include "components/ble/NotificationManager.h" +#include "components/motor/MotorController.h" namespace Pinetime { namespace Controllers { @@ -19,6 +20,7 @@ namespace Pinetime { explicit Notifications(DisplayApp* app, Pinetime::Controllers::NotificationManager& notificationManager, Pinetime::Controllers::AlertNotificationService& alertNotificationService, + Controllers::MotorController& motorController, Modes mode); ~Notifications() override; @@ -33,7 +35,8 @@ namespace Pinetime { Controllers::NotificationManager::Categories, uint8_t notifNb, Modes mode, - Pinetime::Controllers::AlertNotificationService& alertNotificationService); + Pinetime::Controllers::AlertNotificationService& alertNotificationService, + Controllers::MotorController& motorController); ~NotificationItem(); bool Refresh() { return false; @@ -60,6 +63,7 @@ namespace Pinetime { lv_obj_t* bottomPlaceholder; Modes mode; Pinetime::Controllers::AlertNotificationService& alertNotificationService; + Controllers::MotorController& motorController; }; private: @@ -72,6 +76,8 @@ namespace Pinetime { Modes mode = Modes::Normal; std::unique_ptr currentItem; Controllers::NotificationManager::Notification::Id currentId; + Controllers::MotorController& motorController; + bool validDisplay = false; lv_point_t timeoutLinePoints[2] {{0, 1}, {239, 1}}; diff --git a/src/displayapp/screens/settings/QuickSettings.cpp b/src/displayapp/screens/settings/QuickSettings.cpp index 3994794dd3..7681546f27 100644 --- a/src/displayapp/screens/settings/QuickSettings.cpp +++ b/src/displayapp/screens/settings/QuickSettings.cpp @@ -140,7 +140,7 @@ void QuickSettings::OnButtonEvent(lv_obj_t* object, lv_event_t event) { if (lv_obj_get_state(btn3, LV_BTN_PART_MAIN) & LV_STATE_CHECKED) { settingsController.SetVibrationStatus(Controllers::Settings::Vibration::ON); - motorController.SetDuration(35); + motorController.RunForDuration(35); lv_label_set_text_static(btn3_lvl, Symbols::notificationsOn); } else { settingsController.SetVibrationStatus(Controllers::Settings::Vibration::OFF); diff --git a/src/systemtask/SystemTask.cpp b/src/systemtask/SystemTask.cpp index 6d695e2cd1..0d43b2f344 100644 --- a/src/systemtask/SystemTask.cpp +++ b/src/systemtask/SystemTask.cpp @@ -225,7 +225,11 @@ void SystemTask::Work() { case Messages::OnNewNotification: if (isSleeping && !isWakingUp) GoToRunning(); - motorController.SetDuration(35); + if (notificationManager.GetLastNotification().category == Controllers::NotificationManager::Categories::IncomingCall) { + motorController.startRunning(50); + } else { + motorController.RunForDuration(35); + } displayApp->PushMessage(Pinetime::Applications::Display::Messages::NewNotification); break; case Messages::BleConnected: From 5da65494b3da1a69d08f7b7e6c5242f6ce666e32 Mon Sep 17 00:00:00 2001 From: Florian Kraupa Date: Thu, 13 May 2021 00:08:40 +0200 Subject: [PATCH 002/173] only activate the timeout on call notification previews after they have been interacted with --- src/displayapp/screens/Notifications.cpp | 35 ++++++++++++++++-------- src/displayapp/screens/Notifications.h | 8 ++++-- src/systemtask/SystemTask.cpp | 2 +- 3 files changed, 31 insertions(+), 14 deletions(-) diff --git a/src/displayapp/screens/Notifications.cpp b/src/displayapp/screens/Notifications.cpp index 482247e634..60349a6439 100644 --- a/src/displayapp/screens/Notifications.cpp +++ b/src/displayapp/screens/Notifications.cpp @@ -29,7 +29,8 @@ Notifications::Notifications(DisplayApp* app, notificationManager.NbNotifications(), mode, alertNotificationService, - motorController); + motorController, + &timeoutTickCountEnd); validDisplay = true; } else { currentItem = std::make_unique("Notification", @@ -39,7 +40,8 @@ Notifications::Notifications(DisplayApp* app, notificationManager.NbNotifications(), Modes::Preview, alertNotificationService, - motorController); + motorController, + &timeoutTickCountEnd); } if (mode == Modes::Preview) { @@ -63,7 +65,7 @@ Notifications::~Notifications() { } bool Notifications::Refresh() { - if (mode == Modes::Preview) { + if (mode == Modes::Preview && !currentItem->timeoutOnHold) { auto tick = xTaskGetTickCount(); int32_t pos = 240 - ((tick - timeoutTickCountStart) / ((timeoutTickCountEnd - timeoutTickCountStart) / 240)); if (pos < 0) @@ -105,7 +107,8 @@ bool Notifications::OnTouchEvent(Pinetime::Applications::TouchEvents event) { notificationManager.NbNotifications(), mode, alertNotificationService, - motorController); + motorController, + &timeoutTickCountEnd); } return true; case Pinetime::Applications::TouchEvents::SwipeUp: { @@ -131,7 +134,8 @@ bool Notifications::OnTouchEvent(Pinetime::Applications::TouchEvents event) { notificationManager.NbNotifications(), mode, alertNotificationService, - motorController); + motorController, + &timeoutTickCountEnd); } return true; case Pinetime::Applications::TouchEvents::LongTap: { @@ -167,8 +171,10 @@ Notifications::NotificationItem::NotificationItem(const char* title, uint8_t notifNb, Modes mode, Pinetime::Controllers::AlertNotificationService& alertNotificationService, - Controllers::MotorController& motorController) - : notifNr {notifNr}, notifNb {notifNb}, mode {mode}, alertNotificationService {alertNotificationService}, motorController{motorController} { + Controllers::MotorController& motorController, + uint32_t* timeoutEnd) + : notifNr {notifNr}, notifNb {notifNb}, mode {mode}, alertNotificationService {alertNotificationService}, + motorController{motorController}, timeoutEnd{timeoutEnd} { lv_obj_t* container1 = lv_cont_create(lv_scr_act(), NULL); @@ -251,7 +257,7 @@ Notifications::NotificationItem::NotificationItem(const char* title, label_mute = lv_label_create(bt_mute, nullptr); lv_label_set_text(label_mute, Symbols::volumMute); lv_obj_set_style_local_bg_color(bt_mute, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_GRAY); - + timeoutOnHold = true; } break; } @@ -266,24 +272,31 @@ Notifications::NotificationItem::NotificationItem(const char* title, void Notifications::NotificationItem::OnAcceptIncomingCall(lv_event_t event) { if (event != LV_EVENT_CLICKED) return; - motorController.stopRunning(); + callPreviewInteraction(); alertNotificationService.AcceptIncomingCall(); } void Notifications::NotificationItem::OnMuteIncomingCall(lv_event_t event) { if (event != LV_EVENT_CLICKED) return; - motorController.stopRunning(); + callPreviewInteraction(); alertNotificationService.MuteIncomingCall(); } void Notifications::NotificationItem::OnRejectIncomingCall(lv_event_t event) { if (event != LV_EVENT_CLICKED) return; - motorController.stopRunning(); + callPreviewInteraction(); alertNotificationService.RejectIncomingCall(); } +inline void Notifications::NotificationItem::callPreviewInteraction() { + *timeoutEnd = xTaskGetTickCount() + (5 * 1024); + timeoutOnHold = false; + motorController.stopRunning(); +} + + Notifications::NotificationItem::~NotificationItem() { lv_obj_clean(lv_scr_act()); } diff --git a/src/displayapp/screens/Notifications.h b/src/displayapp/screens/Notifications.h index ae83e8eeec..89b676ecc7 100644 --- a/src/displayapp/screens/Notifications.h +++ b/src/displayapp/screens/Notifications.h @@ -36,7 +36,8 @@ namespace Pinetime { uint8_t notifNb, Modes mode, Pinetime::Controllers::AlertNotificationService& alertNotificationService, - Controllers::MotorController& motorController); + Controllers::MotorController& motorController, + uint32_t* timeoutEnd); ~NotificationItem(); bool Refresh() { return false; @@ -44,8 +45,10 @@ namespace Pinetime { void OnAcceptIncomingCall(lv_event_t event); void OnMuteIncomingCall(lv_event_t event); void OnRejectIncomingCall(lv_event_t event); - + bool timeoutOnHold = false; private: + void callPreviewInteraction(); + uint8_t notifNr = 0; uint8_t notifNb = 0; char pageText[4]; @@ -61,6 +64,7 @@ namespace Pinetime { lv_obj_t* label_mute; lv_obj_t* label_reject; lv_obj_t* bottomPlaceholder; + uint32_t* timeoutEnd; Modes mode; Pinetime::Controllers::AlertNotificationService& alertNotificationService; Controllers::MotorController& motorController; diff --git a/src/systemtask/SystemTask.cpp b/src/systemtask/SystemTask.cpp index 0d43b2f344..2b5e7bbb75 100644 --- a/src/systemtask/SystemTask.cpp +++ b/src/systemtask/SystemTask.cpp @@ -226,7 +226,7 @@ void SystemTask::Work() { if (isSleeping && !isWakingUp) GoToRunning(); if (notificationManager.GetLastNotification().category == Controllers::NotificationManager::Categories::IncomingCall) { - motorController.startRunning(50); + motorController.startRunning(500); } else { motorController.RunForDuration(35); } From 56af4a0b830cd93ff12753042cdf105b65d0bcc8 Mon Sep 17 00:00:00 2001 From: Florian Kraupa Date: Thu, 13 May 2021 00:35:36 +0200 Subject: [PATCH 003/173] cleaned up the code and reduced the size of the diff by removing things like additional whitespaces --- src/components/motor/MotorController.cpp | 2 +- src/components/motor/MotorController.h | 2 +- src/displayapp/screens/Notifications.cpp | 23 ++++++++----------- src/displayapp/screens/Notifications.h | 2 +- .../screens/settings/QuickSettings.cpp | 2 +- src/systemtask/SystemTask.cpp | 2 +- 6 files changed, 14 insertions(+), 19 deletions(-) diff --git a/src/components/motor/MotorController.cpp b/src/components/motor/MotorController.cpp index 2a14f4b5ef..6f02a58368 100644 --- a/src/components/motor/MotorController.cpp +++ b/src/components/motor/MotorController.cpp @@ -21,7 +21,7 @@ void MotorController::Init() { isBusy = false; } -void MotorController::RunForDuration(uint8_t motorDuration) { +void MotorController::runForDuration(uint8_t motorDuration) { if (settingsController.GetVibrationStatus() == Controllers::Settings::Vibration::OFF || isBusy) return; diff --git a/src/components/motor/MotorController.h b/src/components/motor/MotorController.h index be076ad49f..5daeb8cee5 100644 --- a/src/components/motor/MotorController.h +++ b/src/components/motor/MotorController.h @@ -12,7 +12,7 @@ namespace Pinetime { public: MotorController(Controllers::Settings& settingsController); void Init(); - void RunForDuration(uint8_t motorDuration); + void runForDuration(uint8_t motorDuration); void startRunning(uint8_t motorDuration); void stopRunning(); diff --git a/src/displayapp/screens/Notifications.cpp b/src/displayapp/screens/Notifications.cpp index 60349a6439..e4abc67b22 100644 --- a/src/displayapp/screens/Notifications.cpp +++ b/src/displayapp/screens/Notifications.cpp @@ -13,11 +13,11 @@ Notifications::Notifications(DisplayApp* app, Pinetime::Controllers::AlertNotificationService& alertNotificationService, Controllers::MotorController& motorController, Modes mode) - : Screen(app), - notificationManager {notificationManager}, - alertNotificationService {alertNotificationService}, - motorController{motorController}, - mode {mode} { + : Screen(app), + notificationManager{notificationManager}, + alertNotificationService{alertNotificationService}, + motorController{motorController}, + mode{mode} { notificationManager.ClearNewNotificationFlag(); auto notification = notificationManager.GetLastNotification(); if (notification.valid) { @@ -45,8 +45,6 @@ Notifications::Notifications(DisplayApp* app, } if (mode == Modes::Preview) { - - timeoutLine = lv_line_create(lv_scr_act(), nullptr); @@ -75,9 +73,8 @@ bool Notifications::Refresh() { lv_line_set_points(timeoutLine, timeoutLinePoints, 2); } //make sure we stop any vibrations before exiting - if (!running) { + if (!running) motorController.stopRunning(); - } return running; } @@ -173,9 +170,8 @@ Notifications::NotificationItem::NotificationItem(const char* title, Pinetime::Controllers::AlertNotificationService& alertNotificationService, Controllers::MotorController& motorController, uint32_t* timeoutEnd) - : notifNr {notifNr}, notifNb {notifNb}, mode {mode}, alertNotificationService {alertNotificationService}, - motorController{motorController}, timeoutEnd{timeoutEnd} { - + : notifNr{notifNr}, notifNb{notifNb}, mode{mode}, alertNotificationService{alertNotificationService}, + motorController{motorController}, timeoutEnd{timeoutEnd} { lv_obj_t* container1 = lv_cont_create(lv_scr_act(), NULL); lv_obj_set_style_local_bg_color(container1, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x222222)); @@ -260,7 +256,6 @@ Notifications::NotificationItem::NotificationItem(const char* title, timeoutOnHold = true; } break; } - lv_obj_t* backgroundLabel = lv_label_create(lv_scr_act(), nullptr); lv_label_set_long_mode(backgroundLabel, LV_LABEL_LONG_CROP); @@ -291,7 +286,7 @@ void Notifications::NotificationItem::OnRejectIncomingCall(lv_event_t event) { } inline void Notifications::NotificationItem::callPreviewInteraction() { - *timeoutEnd = xTaskGetTickCount() + (5 * 1024); + *timeoutEnd = xTaskGetTickCount() + (5 * 1024); timeoutOnHold = false; motorController.stopRunning(); } diff --git a/src/displayapp/screens/Notifications.h b/src/displayapp/screens/Notifications.h index 89b676ecc7..99c95a8e49 100644 --- a/src/displayapp/screens/Notifications.h +++ b/src/displayapp/screens/Notifications.h @@ -45,6 +45,7 @@ namespace Pinetime { void OnAcceptIncomingCall(lv_event_t event); void OnMuteIncomingCall(lv_event_t event); void OnRejectIncomingCall(lv_event_t event); + bool timeoutOnHold = false; private: void callPreviewInteraction(); @@ -81,7 +82,6 @@ namespace Pinetime { std::unique_ptr currentItem; Controllers::NotificationManager::Notification::Id currentId; Controllers::MotorController& motorController; - bool validDisplay = false; lv_point_t timeoutLinePoints[2] {{0, 1}, {239, 1}}; diff --git a/src/displayapp/screens/settings/QuickSettings.cpp b/src/displayapp/screens/settings/QuickSettings.cpp index 7681546f27..501aee4fef 100644 --- a/src/displayapp/screens/settings/QuickSettings.cpp +++ b/src/displayapp/screens/settings/QuickSettings.cpp @@ -140,7 +140,7 @@ void QuickSettings::OnButtonEvent(lv_obj_t* object, lv_event_t event) { if (lv_obj_get_state(btn3, LV_BTN_PART_MAIN) & LV_STATE_CHECKED) { settingsController.SetVibrationStatus(Controllers::Settings::Vibration::ON); - motorController.RunForDuration(35); + motorController.runForDuration(35); lv_label_set_text_static(btn3_lvl, Symbols::notificationsOn); } else { settingsController.SetVibrationStatus(Controllers::Settings::Vibration::OFF); diff --git a/src/systemtask/SystemTask.cpp b/src/systemtask/SystemTask.cpp index 2b5e7bbb75..24fe4f4c00 100644 --- a/src/systemtask/SystemTask.cpp +++ b/src/systemtask/SystemTask.cpp @@ -228,7 +228,7 @@ void SystemTask::Work() { if (notificationManager.GetLastNotification().category == Controllers::NotificationManager::Categories::IncomingCall) { motorController.startRunning(500); } else { - motorController.RunForDuration(35); + motorController.runForDuration(35); } displayApp->PushMessage(Pinetime::Applications::Display::Messages::NewNotification); break; From 9e8dd9a1e63523f4e3ed322978e5b5e079c50375 Mon Sep 17 00:00:00 2001 From: Florian Kraupa Date: Thu, 13 May 2021 01:51:43 +0200 Subject: [PATCH 004/173] NotificationItem now also redefines the start of the timeout --- src/displayapp/screens/Notifications.cpp | 20 +++++++++++++------- src/displayapp/screens/Notifications.h | 4 +++- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/src/displayapp/screens/Notifications.cpp b/src/displayapp/screens/Notifications.cpp index e4abc67b22..e393e7b937 100644 --- a/src/displayapp/screens/Notifications.cpp +++ b/src/displayapp/screens/Notifications.cpp @@ -30,7 +30,8 @@ Notifications::Notifications(DisplayApp* app, mode, alertNotificationService, motorController, - &timeoutTickCountEnd); + &timeoutTickCountEnd, + &timeoutTickCountStart); validDisplay = true; } else { currentItem = std::make_unique("Notification", @@ -41,7 +42,8 @@ Notifications::Notifications(DisplayApp* app, Modes::Preview, alertNotificationService, motorController, - &timeoutTickCountEnd); + &timeoutTickCountEnd, + &timeoutTickCountStart); } if (mode == Modes::Preview) { @@ -105,7 +107,8 @@ bool Notifications::OnTouchEvent(Pinetime::Applications::TouchEvents event) { mode, alertNotificationService, motorController, - &timeoutTickCountEnd); + &timeoutTickCountEnd, + &timeoutTickCountStart); } return true; case Pinetime::Applications::TouchEvents::SwipeUp: { @@ -132,7 +135,8 @@ bool Notifications::OnTouchEvent(Pinetime::Applications::TouchEvents event) { mode, alertNotificationService, motorController, - &timeoutTickCountEnd); + &timeoutTickCountEnd, + &timeoutTickCountStart); } return true; case Pinetime::Applications::TouchEvents::LongTap: { @@ -169,9 +173,10 @@ Notifications::NotificationItem::NotificationItem(const char* title, Modes mode, Pinetime::Controllers::AlertNotificationService& alertNotificationService, Controllers::MotorController& motorController, - uint32_t* timeoutEnd) + uint32_t* timeoutEnd, + uint32_t* timeoutStart) : notifNr{notifNr}, notifNb{notifNb}, mode{mode}, alertNotificationService{alertNotificationService}, - motorController{motorController}, timeoutEnd{timeoutEnd} { + motorController{motorController}, timeoutEnd{timeoutEnd}, timeoutStart{timeoutStart} { lv_obj_t* container1 = lv_cont_create(lv_scr_act(), NULL); lv_obj_set_style_local_bg_color(container1, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x222222)); @@ -286,7 +291,8 @@ void Notifications::NotificationItem::OnRejectIncomingCall(lv_event_t event) { } inline void Notifications::NotificationItem::callPreviewInteraction() { - *timeoutEnd = xTaskGetTickCount() + (5 * 1024); + *timeoutStart = xTaskGetTickCount(); + *timeoutEnd = *timeoutStart + (5 * 1024); timeoutOnHold = false; motorController.stopRunning(); } diff --git a/src/displayapp/screens/Notifications.h b/src/displayapp/screens/Notifications.h index 99c95a8e49..32bd0770f0 100644 --- a/src/displayapp/screens/Notifications.h +++ b/src/displayapp/screens/Notifications.h @@ -37,7 +37,8 @@ namespace Pinetime { Modes mode, Pinetime::Controllers::AlertNotificationService& alertNotificationService, Controllers::MotorController& motorController, - uint32_t* timeoutEnd); + uint32_t* timeoutEnd, + uint32_t* timeoutStart); ~NotificationItem(); bool Refresh() { return false; @@ -66,6 +67,7 @@ namespace Pinetime { lv_obj_t* label_reject; lv_obj_t* bottomPlaceholder; uint32_t* timeoutEnd; + uint32_t* timeoutStart; Modes mode; Pinetime::Controllers::AlertNotificationService& alertNotificationService; Controllers::MotorController& motorController; From 378fa6b4016b65e2d7b128fdc3ce89c4ca779a4d Mon Sep 17 00:00:00 2001 From: Kieran Cawthray Date: Tue, 18 May 2021 15:23:26 +0200 Subject: [PATCH 005/173] Reset --- .clang-tidy | 6 +- CMakeLists.txt | 12 - README.md | 3 +- doc/buildAndProgram.md | 3 +- doc/contribute.md | 24 +- doc/gettingStarted/appmenu-071.jpg | Bin 109376 -> 0 bytes doc/gettingStarted/appmenu.jpg | Bin 120674 -> 0 bytes doc/gettingStarted/bootloader-1.0.jpg | Bin 160275 -> 0 bytes doc/gettingStarted/gettingStarted-1.0.md | 112 -------- doc/gettingStarted/oldbootloaderlogo.jpg | Bin 116236 -> 0 bytes .../ota-gadgetbridge-nrfconnect.md | 101 ------- doc/gettingStarted/quickactions.jpg | Bin 114900 -> 0 bytes doc/gettingStarted/settings.jpg | Bin 130022 -> 0 bytes doc/gettingStarted/version-071.jpg | Bin 111556 -> 0 bytes doc/gettingStarted/version-1.0.jpg | Bin 116881 -> 0 bytes docker/.gitpod.Dockerfile | 3 - docker/Dockerfile | 3 - src/CMakeLists.txt | 5 +- src/Version.h.in | 2 - src/components/motion/MotionController.h | 6 +- src/components/settings/Settings.h | 10 +- src/displayapp/Apps.h | 4 +- src/displayapp/DisplayApp.cpp | 53 ++-- src/displayapp/DisplayApp.h | 2 +- src/displayapp/DisplayAppRecovery.cpp | 7 +- src/displayapp/fonts/jetbrains_mono_42.c | 258 ------------------ src/displayapp/screens/ApplicationList.cpp | 4 +- src/displayapp/screens/Clock.cpp | 16 +- src/displayapp/screens/Clock.h | 3 +- src/displayapp/screens/FirmwareValidation.cpp | 11 - src/displayapp/screens/FirmwareValidation.h | 3 - src/displayapp/screens/Motion.cpp | 19 +- src/displayapp/screens/Motion.h | 2 +- src/displayapp/screens/Notifications.cpp | 10 - src/displayapp/screens/Steps.cpp | 72 ----- src/displayapp/screens/Steps.h | 39 --- src/displayapp/screens/StopWatch.cpp | 3 +- src/displayapp/screens/SystemInfo.cpp | 8 +- .../screens/settings/SettingSteps.cpp | 98 ------- .../screens/settings/SettingSteps.h | 32 --- .../screens/settings/SettingWatchFace.cpp | 11 +- .../screens/settings/SettingWatchFace.h | 2 +- src/displayapp/screens/settings/Settings.cpp | 10 +- src/libs/lv_conf.h | 4 +- src/logging/NrfLogger.cpp | 5 +- 45 files changed, 101 insertions(+), 865 deletions(-) delete mode 100644 doc/gettingStarted/appmenu-071.jpg delete mode 100644 doc/gettingStarted/appmenu.jpg delete mode 100644 doc/gettingStarted/bootloader-1.0.jpg delete mode 100644 doc/gettingStarted/gettingStarted-1.0.md delete mode 100644 doc/gettingStarted/oldbootloaderlogo.jpg delete mode 100644 doc/gettingStarted/ota-gadgetbridge-nrfconnect.md delete mode 100644 doc/gettingStarted/quickactions.jpg delete mode 100644 doc/gettingStarted/settings.jpg delete mode 100644 doc/gettingStarted/version-071.jpg delete mode 100644 doc/gettingStarted/version-1.0.jpg delete mode 100644 src/displayapp/fonts/jetbrains_mono_42.c delete mode 100644 src/displayapp/screens/Steps.cpp delete mode 100644 src/displayapp/screens/Steps.h delete mode 100644 src/displayapp/screens/settings/SettingSteps.cpp delete mode 100644 src/displayapp/screens/settings/SettingSteps.h diff --git a/.clang-tidy b/.clang-tidy index 8a7d38f0d7..d6036802cc 100644 --- a/.clang-tidy +++ b/.clang-tidy @@ -22,9 +22,5 @@ Checks: '*, -hicpp-no-assembler, -hicpp-avoid-c-arrays, -hicpp-uppercase-literal-suffix, - -hicpp-no-array-decay, -cert-err58-cpp, - -cert-err60-cpp' -CheckOptions: - - key: readability-function-cognitive-complexity.Threshold - value: 100 \ No newline at end of file + -cert-err60-cpp' \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt index 6c529f39da..f777013695 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -55,22 +55,10 @@ if(BUILD_DFU) set(BUILD_DFU true) endif() -set(PROJECT_GIT_COMMIT_HASH "") - -execute_process(COMMAND git rev-parse --short HEAD - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} - OUTPUT_VARIABLE PROJECT_GIT_COMMIT_HASH - RESULT_VARIABLE PROJECT_GIT_COMMIT_HASH_SUCCESS) - -string(STRIP ${PROJECT_GIT_COMMIT_HASH} PROJECT_GIT_COMMIT_HASH) - -message("PROJECT_GIT_COMMIT_HASH_SUCCESS? " ${PROJECT_GIT_COMMIT_HASH_SUCCESS}) - message("BUILD CONFIGURATION") message("-------------------") message(" * Version : " ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}) message(" * Toolchain : " ${ARM_NONE_EABI_TOOLCHAIN_PATH}) -message(" * GitRef(S) : " ${PROJECT_GIT_COMMIT_HASH}) message(" * NRF52 SDK : " ${NRF5_SDK_PATH}) set(PROGRAMMER "???") if(USE_JLINK) diff --git a/README.md b/README.md index 396d7462bc..34f6e84176 100644 --- a/README.md +++ b/README.md @@ -72,8 +72,7 @@ As of now, here is the list of achievements of this project: ## Documentation ### Getting started - - [Getting started with InfiniTime 1.0 (quick user guide, update bootloader and InfiniTime,...)](doc/gettingStarted/gettingStarted-1.0.md) - - [Flash, upgrade (OTA), time synchronization,...](doc/gettingStarted/ota-gadgetbridge-nrfconnect.md) + - [Flash, upgrade (OTA), time synchronization,...](doc/gettingStarted/gettingStarted.md) ### Develop - [Generate the fonts and symbols](src/displayapp/fonts/README.md) diff --git a/doc/buildAndProgram.md b/doc/buildAndProgram.md index afd526e06e..b70bdfc0ce 100644 --- a/doc/buildAndProgram.md +++ b/doc/buildAndProgram.md @@ -3,7 +3,6 @@ To build this project, you'll need: - A cross-compiler : [ARM-GCC (9-2020-q2-update)](https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm/downloads/9-2020-q2-update) - The NRF52 SDK 15.3.0 : [nRF-SDK v15.3.0](https://developer.nordicsemi.com/nRF5_SDK/nRF5_SDK_v15.x.x/nRF5_SDK_15.3.0_59ac345.zip) - - The `cbor` and `intelhex` modules for Python 3 - A reasonably recent version of CMake (I use 3.16.5) ## Build steps @@ -222,4 +221,4 @@ Loading section .sec6, size 0x10000 lma 0x30000 Loading section .sec7, size 0xdf08 lma 0x40000 Start address 0x0, load size 314200 Transfer rate: 45 KB/sec, 969 bytes/write. -``` +``` \ No newline at end of file diff --git a/doc/contribute.md b/doc/contribute.md index 09d20774d5..7958eea16b 100644 --- a/doc/contribute.md +++ b/doc/contribute.md @@ -2,13 +2,13 @@ ## Report bugs You use your Pinetime and find a bug in the firmware? [Create an issue on Github](https://github.com/JF002/InfiniTime/issues) explaining the bug, how to reproduce it, the version of the firmware you use... ## Write and improve documentation -Documentation might be incomplete, or not clear enough, and it is always possible to improve it with better wording, pictures, photo, video,... +Documentation might be incomplete, or not clear enough, and it is always possible to improve it with better wording, pictures, photo, video,... As the documentation is part of the source code, you can submit your improvements to the documentation by submitting a pull request (see below). ## Fix bugs, add functionalities and improve the code You want to fix a bug, add a cool new functionality or improve the code? See *How to submit a pull request below*. ## Spread the word -The Pinetime is a cool open source project that deserves to be known. Talk about it around you, on social networks, on your blog,... and let people know that we are working on an open-source firmware for a smartwatch! +Pinetime is a cool open source project that deserves to be know. Talk about it around you, on social networks, on your blog,... and let people know that we are working on an open-source firmware for a smartwatch! # How to submit a pull request ? @@ -21,28 +21,28 @@ The Pinetime is a cool open source project that deserves to be known. Talk about - Write documentation related to your new feature is applicable; - Create the pull-request and write a great description about it : what does your PR do, why, how,... Add pictures and video if possible; - Wait for someone to review your PR and take part in the review process; - - Your PR will eventually be merged :) + - You PR will eventually be merged :) -Your contribution is more than welcome! +Your contribution is more than welcome! If you want to fix a bug, add a functionality or improve the code, you'll first need to create a branch from the **develop** branch (see [this page about the branching model](./branches.md)). This branch is called a feature branch, and you should choose a name that explains what you are working on (ex: "add-doc-about-contributions"). In this branch, **focus on only one topic, bug or feature**. For example, if you created this branch to work on the UI of a specific application, do not commit modifications about the SPI driver. If you want to work on multiple topics, create one branch per topic. When your feature branch is ready, **make sure it actually works** and **do not forget to write documentation** about it if it's relevant. -I **strongly discourage to create a PR containing modifications that haven't been tested**. If, for any reason, you cannot test your modifications but want to publish them anyway, **please mention it in the description**. This way, other contributors might be willing to test it and provide feedback about your code. +I **strongly discourage to create a PR containing modifications that haven't been tested**. If, for any reason, you cannot test your modifications but want to publish them anyway, **please mention it in the description**. This way, other contributors might be willing to test it and provide feedbacks about your code. Also, before submitting your PR, check the coding style of your code against the **coding conventions** detailed below. This project also provides [clang-format](../.clang-format) and [clang-tidy](../.clang-tidy) configuration files. You can use them to ensure correct formatting of your code. Do not forget to check the files you are going to commit and remove those who are not necessary (config files from your IDE, for example). Remove old comments, commented code,... -Then, you can submit a pull-request for review. Try to **describe your pull request as much as possible**: what did you do in this branch, how does it work, how is it designed, are there any limitations,... This will help the contributors to understand and review your code easily. You can add pictures and video to the description so that contributors will have a quick overview of your work. +Then, you can submit a pull-request for review. Try to **describe your pull request as much as possible**: what did you do in this branch, how does it work, how is it designed, are there any limitations,... This will help the contributors to understand and review your code easily. You can add pictures and video to the description so that contributors will have a quick overview of you work. -Other contributors can post comments about the pull request, maybe ask for more info or adjustments in the code. +Other contributors can post comments about the pull request, maybe ask for more info or adjustements in the code. -Once the pull request is reviewed and accepted, it'll be merge in **develop** and will be released in the next release version of the firmware. +Once the pull request is reviewed an accepted, it'll be merge in **develop** and will be released in the next release version of the firmware. ## Why all these rules? -Reviewing pull-requests is a **very time consuming task** for the creator of this project ([JF002](https://github.com/JF002)) and for other contributors who take the time to review them. Every little thing you do to make their lives easier will **increase the chances your PR will be merge quickly**. +Reviewing pull-requests is a **very time consuming task** for the creator of this project ([JF002](https://github.com/JF002)) and for other contributors who take the time to review them. Every little thing you do to make their lifes easier will **increase the chances your PR will be merge quickly**. When reviewing PR, the author and contributors will first look at the **description**. If it's easy to understand what the PR does, why the modification is needed or interesting and how it's done, a good part of the work is already done : we understand the PR and its context. @@ -58,12 +58,12 @@ It's totally normal for a PR to need some more work even after it was created, t ## Language The language of this project is **C++**, and all new code must be written in C++. (Modern) C++ provides a lot of useful tools and functionalities that are beneficial for embedded software development like `constexpr`, `template` and anything that provides zero-cost abstraction. -It's OK to include C code if this code comes from another library like FreeRTOS, NimBLE, LVGL or the NRF-SDK. +It's OK to include C code if this code comes from another library like FreeRTOS, NimBLE, LVGL or the NRF-SDK. ## Coding style -The most important rule to follow is to try to keep the code as easy to read and maintain as possible. +The most important rule to follow is to try to keep the code as easy to read and maintain as possible. - - **Indentation** : 2 spaces, no tabulation + - **Identation** : 2 spaces, no tabulation - **Opening brace** at the end of the line - **Naming** : Choose self-describing variable name - **class** : PascalCase diff --git a/doc/gettingStarted/appmenu-071.jpg b/doc/gettingStarted/appmenu-071.jpg deleted file mode 100644 index dee7c8f643a911f7380d3f517f244868812566e7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 109376 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 %Jmwi~ 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 VkBHY75E+<(3f+E0l(!*2|JhCS)Y$+4 diff --git a/doc/gettingStarted/appmenu.jpg b/doc/gettingStarted/appmenu.jpg deleted file mode 100644 index 1e52fe782660bead1a0c716b023917f56adcdad6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 120674 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

=9Lqwt^u=qg^@;F-{#jYevgSkt$* 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 O%H$!&AQe%LXaCu%_f;nV diff --git a/doc/gettingStarted/bootloader-1.0.jpg b/doc/gettingStarted/bootloader-1.0.jpg deleted file mode 100644 index 7b639184aea7881cb022bb97c7acb848b82b44c5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 160275 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∓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 1.0 : - -![InfiniTime 1.0 version](version-1.0.jpg) - - -PineTime shipped from June 2020 (to be confirmed) will be flashed with the [new version of the bootloader](https://github.com/JF002/pinetime-mcuboot-bootloader/releases/tag/1.0.0), the [recovery firmware](https://github.com/JF002/InfiniTime/releases/tag/0.14.1) and [InfiniTime 1.0](https://github.com/JF002/InfiniTime/releases/tag/1.0.0). - -The bootloader is easily recognizable with it white pine cone that is progressively drawn in green. It also displays its own version on the bottom (1.0.0 as of now). - -![Bootloader 1.0](bootloader-1.0.jpg) - -## How to update your PineTime? -To update your PineTime, you can use one of the compatible companion applications. Here are the main ones: - - - **[Amazfish](https://github.com/piggz/harbour-amazfish)** (Desktop Linux, mobile Linux, SailfishOS, runs on the PinebookPro and the Pinephone) - - **[Gadgetbridge](https://www.gadgetbridge.org/)** (Android) - - **[Siglo](https://github.com/alexr4535/siglo)** (Linux, GTK based) - - **NRFConnect** (closed source, Android & iOS). - -See [this page](ota-gadgetbridge-nrfconnect.md) for more info about the OTA procedure using Gadgetbrige and NRFCOnnect. - -### From InfiniTime 0.7.1 / old bootloader -If your PineTime is currently running InfiniTime 0.7.1 and the old bootloader, we strongly recommend you update them to more recent version (Bootloader 1.0.0 and InfiniTime 1.0.0 as of now). We also recommend you install the recovery firmware once the bootloader is up-do-date. - -Using the companion app of your choice, you'll need to apply the OTA procedure for these 3 firmwares in this sequence (failing to follow this specific order might temporarily or permanently brick your device): - - 1. Flash the latest version of InfiniTime. The file to upload is named **pinetime-mcuboot-app-dfu-x.y.z.zip**. Here is the link to [InfiniTime 1.0](https://github.com/JF002/InfiniTime/releases/download/1.0.0/pinetime-mcuboot-app-dfu-1.0.0.zip). - 2. Update the bootloader by applying the OTA procedure with the file named [**reloader-mcuboot.zip** from the repo of the bootloader](https://github.com/JF002/pinetime-mcuboot-bootloader/releases/download/1.0.0/reloader-mcuboot.zip). - 3. Install the recovery firmware by applying the OTA procedure with the file named [**pinetime-mcuboot-recovery-loader-dfu-0.14.1.zip** from the version 0.14.1 of InfiniTime](https://github.com/JF002/InfiniTime/releases/download/0.14.1/pinetime-mcuboot-recovery-loader-dfu-0.14.1.zip). - -You'll find more info about this process in [this wiki page](https://wiki.pine64.org/wiki/Upgrade_PineTime_to_InfiniTime_1.0.0). You can also see the procedure in video [here](https://video.codingfield.com/videos/watch/831077c5-16f3-47b4-9b2b-c4bbfecc6529) and [here (from Amazfish)](https://video.codingfield.com/videos/watch/f7bffb3d-a6a1-43c4-8f01-f4aeff4adf9e) - -### From version > 1.0 -If you are already running the new "1.0.0" bootloader, all you have to do is update your version of InfiniTime when it'll be available. We'll write specific instructions when (if) we release a new version of the bootloader. - -### Firmware validation -The bootloader requires a (manual) validation of the firmware. If the watch reset with an updated firmware that was not validated, the bootloader will consider it as non-functionning and will revert to the previous version of the firmware. This is a safety feature to prevent bricking your device with a faulty firmware. - -You can validate your updated firmware on InfiniTime >= 1.0 by following this simple procedure: - - - From the watchface, swipe **right** to display the *Quick Actions menu* - - Open the **Settings** app by tapping the *gear* icon on the bottom right - - Swipe down and tap on the entry named **Firmware** - - This app shows the version that is currently running. If it's not validated yet, it displays 2 buttons: - - **Validate** to validate your firmware - - **Reset** to reset the watch and revert to the previously running version of the firmware - -## InfiniTime 1.0 quick user guide -### Setting the time -By default, InfiniTime starts on the digital watchface. It'll probably display the epoch time (1 Jan 1970, 00:00). The time will be automatically synchronized once you connect on of the companion app to your PineTime using BLE connectivity. InfiniTime does not provide any way to manually set the time for now. - -### Navigation in the menu - -![Quick actions](quickactions.jpg) -![Settings](settings.jpg) -![Application menu](appmenu.jpg) - - - Swipe **down** to display the notification panel. Notification sent by your companion app will be displayed in this panel. - - Swipe **up** to display the application menus. Apps (stopwatch, music, step, games,...) can be started from this menu. - - Swipe **right** to display the Quick Actions menu. This menu allows you to - - Set the brightness of the display - - Start the **flashlight** app - - Enable/disable vibrations on notifications (Do Not Disturb mode) - - Enter the **settings** menu - - Settings - - Display timeout - - Wake up event (Tap, wrist rotation) - - Time format (12/24H) - - Default watchface (digital / analog) - - Battery info - - Firmware validation - - About (system info, firmware version,...) - -### Bootloader - -Most of the time, the bootloader just runs without your intervention (update and load the firmware). - -However, you can enable 2 functionalities using the push button: - - - Push the button until the pine cone is drawn in **blue** to force the rollback of the previous version of the firmware, even if you've already validated the updated one - - Push the button until the pine cone is drawn in **red** to load the recovery firmware. This recovery firmware only provides BLE connectivity and OTA functionality. - -More info about the bootloader in [its project page](https://github.com/JF002/pinetime-mcuboot-bootloader/blob/master/README.md). - diff --git a/doc/gettingStarted/oldbootloaderlogo.jpg b/doc/gettingStarted/oldbootloaderlogo.jpg deleted file mode 100644 index b4d0cdfbd3274351ba0b170af53ea0b02c3982ad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 116236 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
Nh1#hbF$Ers8bkttap^jY3%-8Gk#66D-kn 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 z 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 k0q_2}= 0.7.1). - -2 companion apps provide support for OTA : - - [Gadgetbridge](https://gadgetbridge.org/) (open source, runs on Android, [available on F-Droid](https://f-droid.org/packages/nodomain.freeyourgadget.gadgetbridge/)). - - [NRFConnect](https://www.nordicsemi.com/Software-and-tools/Development-Tools/nRF-Connect-for-mobile) (close source, runs on Android and iOS). - -Both applications need you to download the **DFU file** of InfiniTime. This file contains the new version of InfiniTime that will be flashed into your device. It's called **dfu-x.y.z.zip** (ex: dfu-0.9.0.zip) in the release note. -![Dfu file](dfuFile.png ) - -### Using Gadgetbridge -Launch Gadgetbridge and tap on the **"+"** button on the bottom right to add a new device: - -![Gadgetbridge 0](gadgetbridge0.jpg) - -Wait for the scan to complete, your PineTime should be detected: - -![Gadgetbridge 1](gadgetbridge1.jpg) - -Tap on it. Gadgdetbridge will pair and connect to your device: - -![Gadgetbridge 2](gadgetbridge2.jpg) - -Now that Gadgetbridge is connected to your PineTime, use a file browser application (I'm using Seafile to browse my NAS) and browse to the DFU file (image-xxx.zip) you downloaded previously. Tap on it and open it using the Gadgetbridge application/firmware installer: - -![Gadgetbridge 3](gadgetbridge3.jpg) - -Read carefully the warning and tap **Install**: - -![Gadgetbridge 4](gadgetbridge4.jpg) - -Wait for the transfer to finish. Your PineTime should reset and reboot with the new version of InfiniTime! - -![Gadgetbridge 5](gadgetbridge5.jpg) - -### Using NRFConnect -Open NRFConnect. Swipe down in the *Scanner* tab and wait for your device to appear: - -![NRFConnect 0](nrfconnect0.jpg) - -Tap on the *Connect* button on the right of your device. NRFConnect will connect to your PineTime and discover its characteristics. Tap on the **DFU** button on the top right: - -![NRFConnect 1](nrfconnect1.jpg) - -Select **Distribution packet (ZIP)**: - -![NRFConnect 2](nrfconnect2.jpg) - -Browse to the DFU file you downloaded previously, the DFU transfer will start automatically. When the transfer is finished, your PineTime will reset and restart on the new version of InfiniTime! - -![NRFConnect 3](nrfconnect3.jpg) - -## How to flash InfiniTime using the SWD interface -Download the files **bootloader.bin**, **image-x.y.z.bin** and **pinetime-graphics-x.y.z.bin** from the release page: - -![Image file](imageFile.png ) - -The bootloader reads a boot logo from the external SPI flash memory. The first step consists in flashing a tool in the MCU that will flash the boot logo into this SPI flash memory. This first step is optional but recommanded (the bootloader will display garbage on screen for a few second if you don't do it). -Using your SWD tool, flash **pinetime-graphics-x.y.z.bin** at offset **0x0000**. Reset the MCU and wait for a few second, until the logo is completely drawn on the display. - -Then, using your SWD tool, flash those file at specific offset: - - - bootloader.bin : **0x0000** - - image-x.y.z.bin : **0x8000** - -Reset and voilà, you're running InfiniTime on your PineTime! - -If you are using OpenOCD with a STLinkV2, you can find more info [on this page](../openOCD.md). - -## How to synchronize the time - -### Using Gadgetbridge -Good news! Gadgetbridge **automatically** synchronizes the time when connecting to your PineTime! - -### Using NRFConnect -You must enable the **CTS** *GATT server* into NRFConnect so that InfiniTime can synchronize the time with your smartphone. - -Launch NRFConnect, tap the sandwich button on the top left and select *Configure GATT server*: - -![NRFConnect CTS 0](nrfconnectcts0.jpg) - - -Tap *Add service* and select the server configuration *Current Time service*. Tap OK and connect to your PineTime, it should automcatically sync the time once the connection is established! - -![NRFConnect CTS 1](nrfconnectcts1.jpg) diff --git a/doc/gettingStarted/quickactions.jpg b/doc/gettingStarted/quickactions.jpg deleted file mode 100644 index 0d92b13464a66bfb76dfdb9513b9c5d5d11999b1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 114900 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

dni$!` zolIf0mKCu_+#y)nTj2NOb1Z&JO<#mb_UjktN1o9^mnmV!p!Jw6;4HL1F?~{SE0yck z8N$qy=Fgb%dCT}>253w9mTET3*++rP-_0KJT6`E^W@Vb_bbf)>hooPBB>w=lEame& z*u`&up@&dU zHWdxH1H#_tD2?E%t0N6=;Fd0yy0!Dpx8`hxELc*P#rn%$SF>k5s-_&!m}{CLtF>W6ZBQ-ex1=dnOKoF3nDvKPCGAw2y5rs#I|$L( zVWK%=Zb%o459(9r4WlZAyf;`yNcF$*RHiuk2~yC|UlaZW8(#-N{{V$Ceu;(&)PI4~ zFWE&oV6-faQlJ%YFT!V1_W{JgvKBFKyvcWnqnm&&U@L)vaa+qTzwsPpF{oLC9oT)P z0ch2ik(=e|&73t=sc>Fa?m5kK+8s7fE%iT9t!z3eTcVcLZWJzM4Rx0-zuZe>sytx| zwuZMfmXPa9aOSgQ%wH=*N6}AQxu-5 zT)@*T`M8G`I46 zmSo8VF#iAs@C%o`=?A2uwYHH}cvd53kTcU3<}aOn;50dy?x=U}V?thoFEOpMPGnH{ zLNr~aBS(tLCvKj0%Wa;MFy{Qw*jky{qGwtLBNnAOJ>^x?hSWAU_js0*zAdAooa~#U zEd!OO)2vieK-~_kCKb##v@oJHv*j+E1zbR)v#awTl-ic8usN-Lr8#bPgq;5Xd&9bi z0HbqEu#?6A0Eol%KHXhmh9ziT2fR*(A3}k`Kwty|$43hbpow1acj$XCUZ5DavGE_$ zdZJl44f#GhPeDt$Wh@7b&L-gjOSeRCE1)+O%Rmcj)6y?6IpIna;#HX<$)x*AN@6|p z{7!A)Tv_rX?<|zH_M3fvhv`(s=UFdhf4Gq1R)(SX#4Mp$N)q$rejwn-F#1KIZ7i{4 zsEo&wWK6cTOJ^ReZ?a#qzY#5K+Z%$SVkuO_7NN_JwOH1ruL$NX$DF;|i-;(i1<$hI z%-UI71@vz(-ZS$1a5%wUT=|XB8qMAnllE}MSK$x_XkN@YzDk^ZJ3K%+s>ig$ZbWFe zMY@_A=?mC^^Kd(pVwVA*I)3^jVYU}kT;#1a9VqFJIgCDqN&PMxUW-6w7)Dd=7Z_dF z!xe}RdEQX~qN#;(BEylMT*hXLGcQuMTsFH*6w^4?<@p|k~jr(GiD18ch0kMQ`IO8YtMP+`SJ4o_?G9HTfoWtjWEk4`aNK% zxaHU?o_seDy6htZJXY7<&e6j#K_4a<@Z44TdU)ITM&?Tegu~&FN9h$m^tgh!qoUf5 z^Ij3RayA*WWQOT=6U&Ax$Ry zFiVbE3#ivEUzXz9xe8w^%7tU*Vv52^ArEyDzn4v^ekD8nqB+Td(I6*BqXv6FF~%Jo zI~&Eo7Z*{=8$EquJK>7C5 zvwP^gJtol3AlPhgys+hG@ddk?VkJfSAhnykO!of(Zh?O@@d2yOGCP}zF*7Rc@6i6- zA?|oM4QQ`jpAp}8P{+Akw^ia#0Jo9PuFlins; zY0$PYv-p_i4HR0rxWpRLjV!Hoyw2jM`nyH2W#KlN9->FfYR5RL>?NZqm5tOO< zdR;dz_itf=+3}vsj}`@A3!U& zslpc&&KPXbs2J@lgi=}ADR^d0Ms1d;i0_yDJ4H-WXQLmxlVm&=0tXs?*~3uRNf5kZ ztn6#jQ^Xc76k&v6k2X`eJ92!t61iHYxRmK5XsKa_wDd@4Oi-?^Ww%G%ltv7N$#$x~ zAI!lwTbePW)y`tBUfEBTTa`9g#eCeLzQOqnOM680c{_FYj-eJ0g*zPk&B`ToS5vL?nD|P%-3OMU zy{axHD{{$5Y4Mkhl-IEp4?Rvd^KmhM66Ota1{7a4Dc$&r(h*OPYmbs#raS)B%ZOhTEDuhGuOaIcfI&c7=9!VT#36j!&AIOiz3dmj-yVFiF{b1Zs^roA4=Z{i|D@)#Y$`8S~ul4!WFG8eZTE%eb9)Fq-q}o5V45EFGmyeb;89 zge~~d`ivUgrw`WaT2xL5*~Bfxv>t{!i_wJ6TP@xl$!pB4@9JSM{O3*Ogks`?@CvJ| zwSdaujAe<3G1$Es{UAbLEkLQ(&SrUD@i|%IgzCEUMMq3SEeoydP0Ba`g;UyKqGn*q zZPpg^5JK+c_7460Ma91(P4Ss}^Xd*hI6HF!SVgymO6j#@cLtw6lE}K@hld_KUzx3> z5ndxkpoK>B{oKmgt76v$Ts(ErRz~6Tr~|JEwkY%0`&RVRE`o3~F3Nf6dOaVY-}o4G zf5!b*X)NtEUEmH#v}Z%v6mAL*b2a+G-0jA16Ld;&GX!C+OsbIdIuA;L7oXV5y`f46 zQ$DBeC(4~wThDK|sbeX7^JmOP&O?mW}vq0FUHh268ZR*D+?>CAMe8bU2RO$~u zxP0p=IZj4+^D9c!Xv%@_SbZX>uASm7Gj`KSX!wmYY}sDj%Z&b{deY3!fyb;VP~hU@+DDNKRQmVi*7>mlrAD+LLK{tVb<0 z7xMvJ+q}xPYjBne3bMzhG{Ia{a9CC~o>pJUJV9?-#IpxGSEKlXgd$~(XY-$G!uM0X!c9*+7yr$mmO6gJS&qH#&cbDQD#9nwlA6yv9pxY3W@cqWeFzuyE2ch&Ju-q?@!ruDN;GzE@?1vscoWsPZkf}SJn#Ob`N>t#ED@twC@-yp`twuWfF-;T9qrMc$F)}uN@T1 z>QtfxBDz09>wOP5Fjpw)Rqh5K(pN>tSY9~Zr45l^LB<$HLoh?c``XU)vW|rU16Z$m z_?GyNoqQeTidq08`pU~B%{~y%lve(e4H3{KCCgHQR9$**V#4JM$bEfdOD=(T%*h9oBXP{-niogy6%pSlcLas9cb(>XFoi01zkd?0U8Wtj*Ulwi1%RP0 zsBl*h_mbVKtLXB0l>)bMxX~C=aKmlKKny9YO6$U}vxWQnz&DVEL3c7872;bjF)40{ zXL|cgzQB&zfEX=S;kgBUeMD8b%&e{X2*pgjA3vYq)TU}Buhh7a#Yfemh2Z8`CGA?g|1Zdk@O4FWv&xux6kDnO`?9M(sJSW&Z%Nms@+X-f&|_ zWy3+Hwl?=(FXngUw8|5x!I*VbVp_70xn!9R;1_zn=-_YB{-Mttkq7PG zG2o&-?}>6Dgx;dU-nsN5cy)SPE-bGwGt&N((fUld?ip7A=3g>}rrYdM?FQ7C(h^$? zGRo+O<_HErdsNd2uvf$?&k3Ed7N2%{A24q%MN50)ZYpG1UHzq~nyn9Xr6}R3&|4xO zSATd{-G!>-{n(0>6*gQSGm@L$X_jc7p2Ag*_5d+hag4!MxWMi&!)`MQXm^X1VHg5Pefm6PVglY$z*p1rV5Q?gisLgFiNV{yM{ztM`jD=7jSX)*UY!ve|BW`$zN_? zpTy+p#6N6&*y|lwGtL=NI=?|KSt%(iDIS&dvR^}U6RyJdHSSyhcRS3myMjs}Uog)w zOR~`j0MRmmGJ>G4OvJs|{{R{P07`K10w zn@ySG0ko@gFJ2X$N>n--{p`y;J%pklqOf7ymH|^#sDOzerDCPWR~F(Mq3!|?F~Nhx zLopMxh>IsvQHE0g02Bs%30sD@FItpbSeYLy7WqZX*4`pl@0-JMvmWy0o#!EzTEexR z_hXq}kSfS(T(iH_%S&{>68uZ(UbQ>?{Lf?gnkYcgi9o>U#XO}Z5XKvIcq5GlJK8iB zms1?w;$BoQ$KqX;tYZvGGJwk@IoE#dv?#$s? zwiiLusYEwB-hjl!s+HV3LJZW#W%0f(GZz;%Z_*@cB#aNdVugQ$-di)%Jum9dey%06 zXZR{nD3n1%kXy`enAk~?F?t1t6Ho)?n{2eaCR_?YNwF#YG2>QHXn_)3$q!*F%phEJ zZ7B$ZL#G-hL7S5p2K{CPEq0gEz9s~|dJu-MipHYrT*fBJJa~>W$aP4-S%#k2`^Uk@ z+P0xpRi31*Gn87C!Z6H53^Q|it1pR~ZA=mpzVkbUwLDSdayb(B?4eU@hyOJY^)uzD+c+8A%hpHZaoQ`S%x+-U9YuthRy5J zRdaWw3uEmm=l6o$cQfCp-Q)I`Ot8iYXOagr^ z%2ogl#3oqfg{mBPRv_OGh}=v5WLT_dyQp&f(KptT8MGU4WSL(Cc2g3wqtD|KF@f^vI52<$w`dmy*KigH1FwncE`?c3oN5)xpd<*q5c7SI1}rs!Mq|M_f0;{o4=@8O zScWcLuuJb+m9DDnWd>FAD##Iq=;(SD&=Fxq_KVzKnNyT7HEd(mDt{_GO$Ijr9{kPG zu-O_{c`wU|!C2H}YW*X;LO%j0X?9AzC;X|zFNpK6h<6_o%J`m7#JilQZ{iGJ*q%qk z?6@x}BL9CGIK0WQm{Hwd*+8 zA{rq=A(lbY&M3nHd+JE)45h~{{au|M#s{xA4!<}TsLtYo9o0wsh2X9}5J~{i+NHUW zj{R;Dt^nYBOUkXFZqOMC?)i-_;un-z%p`0!rii4cdRoCKOnC`VqKp}f;#Z=#xuL=o z&ca;CgwRyRARS_lGNikD7!bT%HiWa4ULl%M!)z_C-aMl%zfy%My#!51JIIQE8JX7a-3Z0ZrX9c}`uC3JPuG6-&VBQ}ViX`SJ$xCw08MZvsA zAP%3zBP`&#UhrvQjhGJ!Ws60Jl=QIHgS;TH4dW4*PsuA5ScSwR?QU7K81YIdLR8`D z9Wis@L3Dvt@SIn~IE%MPaS51#wGFapfpG32H!Ob$tYR!CC6cn`%a;|MH9b*~7f@<= zOJUIToW=*E%+@5m(=s!uQC%ehQ;1(^5ys`whf4H?%Mv4Gdu}GGI+(GBImIR5FQN^R zVqg{F3L!n^xT2$q2WzM+lyB`_xPdAqj-{12mpmMZUvgIh(^QAw&z8kXu2sd1;FQ$}Lp!ae%2 z**};noIw_|CWci=4J8vaU@0p11VO%Hlt6Ndc8Xkpv5aLavR4U|EX(#MV>|SLG8YE- zD%Maqj@DUfi(E<(cR}gzFKaPxG4TOwiKOlooxD(Sp3S-y!c;o1Gme3-k5TAMaWA8< zpd*}3O5aTJHbf0dLx*ye+W}O>s0>C^2St2Lc9p`Q-XZ500%5joiRem}3a@!fk&Mh1 z7*URSk0%HhM9F65sxDhl;$71*gn76t78M+I1= z7Wz7#sAeTWm(YPKSyeBn_KU=`UV$bq1AD`t$|jUfWWcB-7H5u$cg$lZFg}JIQM9_DO)VqSz551=xJ6znmra=yvOQXxpL*pI@<@QKSLP7F5z;E-HMBx z*h6|nN@a2&MOi7_7fY7F^Kh30)JW4!xq z$U|F97`PzBI7m^3SeL>LFwB{olF1O}b|tSdrX8}BO47T+&jel-IFA_X5lu`dX&Mv5 z5z&-Ca4AiC%0ZzcJ3?ZA`%<ZlW^Y;~B+K=^H5d6m7r2nSFKV!y|ER#oT zgrh(P80VT7aL|~i*}-!yYSz=#8%#8&-_+JPzqm+A{-`w{<5x&7{;7xo=JBhb(%4^7 zn@vkgfLh?N;9cKaI$fu%&LgUr$?#KxQ%(0S1CvU{(_SSBjS9CZ3fWzv3lif0<|!*%hC znPCQ@=dTi}{fkeE&lH#Dn-pMF9CrOu9v9L{EUiBspO6^|SB;|HFiPuS9>$WH5C@wo zFQS}8d>d+1eHj7Q;TYZV=10sV0{Ps2)2&t^#iaJVy;pf@Oo@4J@{-pu)mAai+lx4s4u+ay7Mg4=>42yNN*TVo2ur|@$NNz z*l^SY#jcvmM@s4D+SQcfWkLI`TNzq*q24d9!O?I=;IUB|z+b^F^BN)yr1}xbzGt1W zElT^c^rwP$Hwp!>>Ql54kac>m`y+#0&e?voG?*DDLG1^=<8a$g+)7yOSjT}8E;k-P z0LbKqLk!aq+~zE^_DkXLQ`;pO`^dnL7jO!d=Eha!dP3lTv1TG`nDpW_^Xg$j*;KTI#FaNi+LAp;H$_Y)oNcf?UR!||N4BLY**kIzY!`OQQw zbsqK#_dD))R5&<7z9q`heEaeUD>^(LEFBB(?JASc& zb+M<%nsn}ex*Wx8O=leYzDnR)Qi|l6sNozQ_(JWOa+X>%aP_iu8J|hcHa*})0L>0| zH3#Dx1F$u>U!0Z?RS3)%))440ly@8ZAI^YoonS%z6Wdc{Y=Zj%Pj0MRM(nC~AP4KX=#Q=o z`-CQz?Nxp;!>?XQwD98bQ+UoB+~M~;qrv%+04jp&h|QIS<-5RQBDkC4E{`w73LG$j zLobs77Wv_19h+C%pEa2Meiaun&|SFk)$@rKke0a;b2R+QJ;;Jl6F-xPM|Y`m@AmN4 zNk64<1h`3VD+PR@PoQ-ccv|JDdye-K*N;i&v7e*y1xmThJmjqu*5 z4en8k*Fg7(bh(D^re%H&V0{#(gjmca1vryl;e&-s8jvUc& zfQSLIo|zA|*Y&sQTjy|~`FxODF z0ENRyY&dfUN|M)j-MAg1s?n6CvO;q8jG_Cl(eq+m`0f1U^8i0Hf|kVPkG22daByHL z7*V=I1R1ohT$Ilqtv79%W1F0Wi#ay|xVS%PWOb!*aPTw<`Mhy(&&3jk=2SNz-Q~9Y zvHUbTWUyWw*fS2-1En0RaNtpyi{BF>gd_nD4vh{j&dbkj-|?`&oG%=wO+#<*DZ6`T zBtORMaN^)(Xq7&R!ltM`+le#hu#ijdU)aNK@L$xRa&pb7A&#eFe*A+_jk>0K!Z;km zO}2wbGvxl5fg)h!dUi!Kiyt`Os_C>{?@nDd`|J@-t$HxY*T06ZLxstNAamHx74Oh@59 zTz|@vcE&u#wHk;`xts8~A5sv`$fMY2lc;QteUSTAn(m;40hh#NsJNg{&PIF0cdZ}A z31*U?au1%b^Pe(KII~j0p5fq12vgv4BihD6QQA>9(_cU8q&*qbFVvKu>dv5%ekAB& z%sbi300`h?3}JZ=tWH`N8Rb$fBoh3ihd3$;9 z$TM<^Tqg#`Y-|3e0(VW~jc|D9U4wc7=`osTYU_*U&v5`Z?;XxJ2svRiJH9*V| z;zCGIa3Opjsuv@u^h;C7fUW)y!DbkXNMV$fwYA8zXWBE(jsSU8;3M3Z!@2_ZK3|Ci zmeL+{+;!kQr7yN8KH()$13ptZSXvadNkU&x0zdL6)bCY?#vYJR(j@$c^RDdDf|&QN zJa2$d_xLt{rvlMnrg;&>oYCdW>!k2G!*!FID8W<6FJ(2!j5r2&Aq8CRr$tWp9}d~J z-Ul;T-{{K3M12JoTGCkLL|Y6{kbjJ=$W&*QK4|Lx8#<5Q5$8G1BiuqAUL4?+?(>)e z)YkTowSNS4X)8@P62=;r34ez_9&m#doH?g+ycmqV5)E`B46Ec=oxtZM5-_*O z(u(tTnh#-#uKpicE$WA=4gY_YwI1Q({;#kWE;SWEoI~|NS4%7ko>}&wtMv?X{J*kV z__(+#RApa=zwrJde{AZhE{G%+aiSwp-Hvw~8iUKBg(+bWgASKqh+z`Jw4hQVHPx#z zR6;r)VKk)N-^G}?UwuMHW5J>9w}={-PfChqVny8D2GmwuT!P3<2u=f^o4@RBl|}UrAiMqf zm7nI%UxS3v&vHpy$e-q0@gzOxwI$EumxA;URKt z(sRlumf~&3rfoP|@+eBjo8%}AfSm*q`V+dHQE}M#ct-PJyRi;nRg!3hJvOz>bUK>9 zSXxg#_BSW9<^*~{v)S|uw{*osUXt~#(iEagO%=vQS>XZM>#Z?Mqa}^6<4tv|m|u-6_iw7&>E^MVrI%Qy zF2ndwP8>HQt8?bcN|H2`#ffr`6K3ImWA&gs#z>aW-9Eci}>h)ZD^-Wt3@v}|#M zNL7&RV0G*ii~IbS0Uhv@nsDT_e0sDX6Xz3wH}H!0pr_}`7%5YQ_0PW*p~{pW7fek` zM&Kh!Ax!SSg{Z2il$}AsaSpw?guQF5Hz_+Q* zWZXxwkl=73Ay?;4wO5!j*7XjqRc{|qa||uJSbu_es|e;TN$&xPcV8Xzr{j>}smJAT zDY%mQpQirp4k>=kI2D2^!6z>4`rRO{{<4Mf)OEV=yf(}txw%i5N}3(%2M?G9=OPd;fUF^~P$hkQZBoy7)27xS<7_n%vs*O@eynd^Z2Q!^5F zkm=>V6w~FFHIT61h(^D1Vfj zJ;ml9fZE$9GIc(6T>>U&>m4Bq(sJ|!6}=nj@GE(~w}UWJyin<+epK9hj>$T}DU}|n zPdNXAR>~3${aes>&8#I4dTrYm1&8cW=uH$c9FWiRn(Fasabp<$d31Obh3Ghv%quN* zo5dN@%EdRL1J-klpSZOCO?sY^PMxZ1AZ;8WkuKp?dYWuMsmNNi~lKz^BMIkP4kH@OKQVVR* zbg1#;_Of`eDu_p;+Z-FCqepIGxaEbBh@s||a?zCla)Uag#kPw$gZ1E_NQ~kTYJe(1 z?Z;eCHQY!kU4@QwCaH3%%h(h8%Hh)bSnj54oqjl=w}Z2}`)K}H-;}Ypa!4fCohWB; z62J?F)nvQaaLn~GvOTfV%(GBS`T=V(shiTV8=-ew?=>xEMlNw=%V=s(a+>k1!@dvD z2={RUK)j}9fD7tGM-*QOeLuIU2DuWk9!)oQ7GvYPTSY~vYmF|DHdfu!3H|4}IG(xS zW6m5?%VR5h>nH#C(zV&hni`oE;u87`YK+8}LyXfwJB&b`1PvNhZW>hrDh*XS>Ib?F zPucvg@ZyswR%s&MM4ek9p>uH^0UZ{di9A}6VTNgrczyllM_Hka?Vp$W%=9`?j*3Hi%=OR+V;J>Va|q|X?NYjy``FrO0bil4gd)`(|l@7N>dxg7nNA~lh+i!=2A;+ z_j4P_l_X5Q?Yi{iD&4Zh+pbipVzOpQ-ME#8~u?cYpZB$ByXJ0 z%wqdu0JB|rerUtND|?cbiHqppK;{lxfOHtnM6S%df`3v$j) zEaR4&TKIyMh7_+PmPe$n83vH(_y<*gJOA!bviRaxZNP47=$Xo!fB#;;kTwS&r*d)K zrmt`=k4~HqDzAICRi5XMeIwD1d~4V8_QU3l2MBX-_7cejEf4yI)k5%QdC?Ep!0i9S zxxAv!TPrBswI9^UtPa7#NgICP_8;?!x`{O=S^`mnqMfwq%R4;VP%LS6D8klI}b|$ho zV8k3z0+^TgJj98zyn~a)q~-MFnazm|1xwf%YU1}3Gg7gA2KvrZ(K<;9eE;F}+24!Qa(MR?*OcKn+`(20udSawA=mX=NuF7BgA~4x>HQb z#p8L}-EtQab5=3|$$LRf^Ca+Zsc~MpkdVZzn_sZ``H^z+N4#n`}2KDI- zD+Jh98!FVIQ2&JS25Cn_4(yMekjNm>BWL}|N-Z<<1(OPNZqkzi!}25L!O@UDZ8mYZ zT?um!+EKXbi(%W#7vT<3lY>E;H%%=$Z+y(Bm{GHdfS#xojyUr4jwLs#{&S65j*Vj0 z^EvCkheGjO;D;?7lcm|4yEU`UHypS&PU)fT{D-P?0F0@aSZ223ES7voC#Fi63v%@i z-wHKiK_=QwYjra2B6UfhZzU(!0ni|(7PWW36GI##x9y)gY!Q)}#bKlttDHQC|w+JIwEo&8M_Cpc-v z$mEayn3x8day)VBjAZFb;Ya549fFc;+GccINceY<$Nfzu&=G%qU(U~{pI$Kf}!T?8h}*`d7f>5 z&;DCME-|@q+f99yos^*eWK&CNof>Kp5A|x_&J-ry_lfx#XGmJXmJ(uC8LwOFQD<(l z9S9&6)%x~%fA;n5Tc7`Mdi7PJBEAwyrSuz}?0d^rEg!ZO`bWs}4}F+DN;f&CqaWwBdJdTa z7$BR{rNvtqm>ij!wj|3)l{Xd>6NjE9E%BJFPwpsZU>1uLOn&;U(eKtl%}kgRKm<~F z&G0JK8sf&ElA`Y(Q}Ykt9@|@|3h{N`p0TWf*Z`b9P`2t})SZ)_yk{0-VtqoMT3!Pn zR=uPVq?ybFo-G8MP z8l18^@F5%;%rUnNH#n_W1sg_lw zm?hZSiIeCh#Y~^-Sx9?E$lV#OR*uWxUBG!QySd!oK@f`t0qr5+T0k|5$0PaC=OF@Ql{BZQMJj z6)wZJ??+N5pFiyglS#d*W(jZY$@*AI!hAnE--5^3d}3HVj0YANJWT0U#v z$Hx9Hf=K&r9rJ0R_GX%fX=1Q!e$wB`%lb`qFIbvZdc;ouct6N+W9_H+ZSrn}w#{AF zo%STF@q4O8@=rOKKV{A zj$BIde~}*70Ur>L*rIn|etRjZeiNpD&|WF%+h%SY`KI%qR7F!7da};7^Cn@3MUm5r zhbZnMZoa_Tvju46fTGUK#A=ibI}o;NagzJExVpN+JfDv}T9$gx1baK&MtWCeByMxF zUAfE+wmbSU5k}tPvLM=b5`&!X|HtDz0cU2{c+W1;w%KtPsl6S$Dw<{38=Nh0GNtgZ zs%O4(NUQV_UB;rVI->{nXzM>5_2^b<+lKVMRi$*!LC!C#RPP5KR;Gcz`$SyLPw|jc zsTkE>VWrAyM_3t1%W&Y}mb5G&c_AkE2Ikycr?vIK7o^|RV^Qj%?x)HMo zHE7Yh>+r^EHQaHR7Fd1tE}@V8E6&0AkB-MAFe| zK?@Bh=2j+Or}F017cHxF_|$ij)<2v|!g*T8^7+vglBBB42$J_~~CM zT*w9ZstcCkB`tJ(#qer5;7+s$A50J3*AUe_y9{?|st|GxsJL6Do6ne0(*@R(Q>Vuh zbt`8)ba@~0k3SGAHLP>5x$iV2lE%p!k59cFs>TZ9DHCkEltiQ6K((Y#47RYhH$6ks z{7DAeVf4=p&dV^V9yuGHQ+}V#$YETq;tOA$t?ziwXs9AAdSZ3A zMRUvh3v0jRfGk&V`Q@cD*mI*H3`9&$KW9A^Q;rf!z?6rPc%+kQ@rR15(-nPjQ6hUreyvmA2FO2f8>}~X(l?1BjkD6l5QE9p5BFkGwVFV2jSyH zWvvqI8p@aAk7?!)G{&QQAf{;_N>C|@^yd9movDci#&^QN0lz`mA;Wux2&z?%7$!}( zb6&$yulIsam|YT6x89?h^7^a1|6L@VQek8C`(QCvV9tlygYwZ--I;SNTWqVci-{WB zV5L%--u5bL$meAnER=s8DpyDf;~6I$iL{PyPVDW%jQYHM^lg2d2(~>-1M__O#QDX3T%7G;nC`9p3a2XOa&bQFnWpnZCmZluTpUK_#O&zx!B3s^#x81E~bgf0^PKP zUceX4M-7fMQv9pfBP!THC9PJ98V!ITourlb#h=Ak$gBI<;OZXk&(s1$m8SA9VCanI zucj!JnKJ3)xXHTx0R}+;l^XP+IW;khuGEVW=ctPUOwTtBR(i`sgmhly3Q)~}EX<1O z$fuqbC&S{)_EpOgV&bxprZpi?|7r1ZE5o)gWnux4=?bUMWlpjS{(4W#WVyxD;SzIs zg`e|c*JMwR1mYSvduy=42_HArbkhsGU34IeA+(c%1N`#+F`RUWFO+yx7s8Za zHQ~8l$D2*BSA;ahVz$)PE3W{B-5xf7mY%+ zp_8ly-$M>AknG6*w=@2mi^u2R>xe`i0*QR#3TL1iaQ-#*DT?b>O`Leeg8zC-1HN%8cC(; zDQiRwCug5dLQPFgg(uAIe*f%YLv$c{l6Y_b+CyEW9SETf`y`=g=B~-9proO+qZnE4Hvk{U^ zoE*ngS)4#L!c@Jc4l2`~)i;sNG~gDilu2&-`NJQ9M098FI044Ws>QhvJ!G(7SKgt`i6>psX1uToBe$(v?QX9*3F^k8pd zB`~xyE}=}B5MdCa#4OZnDuAAtU9gZv(rYxZP#aWN%;)vT`3uFAYsOMI%Zf7af@BDO zK_%*B2$tAZMGIb&Z%M4?7?D@`d-rC%r?r1l(H_AQhfPQ(*6ANh)!?z9MH2V-XeJ#a zOqpmqUVVT{<%vRHWfT-KXsYN;y=l;s`Hrv9}Rpl90m3&lmpvI z^QV3B19}A>j748G!}Ca;q4Wg5oFp=gRAhRI1$kl;b6m_REq!(X+b_xcDy&D$2|qLZ z{$;AL8TC2l3sXUiiy=u}8@f=KWDO6%bo?HhTH$dR`2ghbQ~wWq^MK^w;uAdJG!Mw$ zgFnju19CE>%HWe?z1aW5aq#{J$H5?)S5MrJHht@I3P!@=Ou4Zj2CJDX()HE9 z3zTF)Ii_32xdEUk-Bx?TNY@;5cSu|jH0{V^e#y$|^;V#-tFz&T{%S*AY2rb(&>Ax; z52;?i9IOl}%4`qg?fXthB9pm?4kdI53v!F6Xg;*N1;=S7srm+s;-a{>F1)}i7p@ZN zLc>P_E_qgSCYH!ziRk9zAVd?R9LLmlJk;6cyPXZ<43u{^m~htQti1m-J~;?bjh`t_ z2muB06!XNUrc{j(j*e$@U=Y0-K=>uEb~WBu?gc)UNo!v z=-8JjEZkZ=#DlTNg}NB|%T=uO4I&Yit_%4csc*R|c1c9m;xLBH~SFUm$RdY-{OIZH(;ZZv(riENKI&0&F%N zXF*9^)Gwalh^#OuI?%p;>*AZ`w>JxEVH|d@E7h2o?UIVzC8<sUV3t!xSQrL76|kjbd+|$$)56S+ zuRFkpOHh$|VPTQ;Ahd^YaS%4_Dr&?93_U|`)psd}m2%bkl4-x*k%PvCaRzuWEd0Pv zPBUXWnWCV$XJ#k-I39=f7??#f57)>Je5z0(%)$nUV2?z$qC<>*EySmR8*FyRMZ9l| z#@{Z}cJ>{;yWl>k&$Cnwezkglsc)EH=-oeEr!N?h7z=H?yv8heqZs+jk#=%K^9#O2 zT|ZecJ)ZI{jZt3N2WNqc!|Jn5va0WtS#Qthk2bI9Mgx3Jmr^jJ`JZ(x7J^5bnS*Tx ziJT4(K-w8oR){zG#VULe^{a2X0|1A%t*v>oipql?{p0D&2Y(aJ2(d@S@CdByH(gX- zktjt6)NgkEY@nGuI=P+VJB78ion<~0g&KMgjBAXux9gblyVwjpp3YLFq||1bkLul% z-{7l`ick4{obtV5j%+-Pz+lx;VhIdJ&Smv28JD_(5!g_+VMGA9X~~<6rwdiQf1?CI zc;{~>+|$+joh%_;{eE?Nu8K^T`e4@eJ*+(V8WaCgcC==Z!CSwAhpEz;78kJ|bBtJK z{iS~&hA+}-+GFQ>!CZ-`dvJhOoPIlC{%%bR^mr+Wm&&I5UvYd92Ykx{H{U zjwa}pJ_1{x&T8ZH;mjFn6N+(`z?gPpPooLb!y-W|vqI#DR0lMOGm z5H;{$3+nJ8^;-hzT;xQ{?(T7?73q)E(zxw%Xs4U9)*Z^yNJQ$3Ahr?H`KwIU)^F$J z7usFIt;RJw16*T&FIwyQ{Oh(aTVq>4c5)u3pxW|Vfw^q~ordS%#J!B-$QOmqMUU*> zv}bWy%wQVQByHtC*FW%6KW z{nwhSQr+>KwBQ8^DNI|wEdTx`|HG%$h`|t&HIFqm7DDpP6MX~eH0Fc4?d8HZPh^+B zmNe8y8%ajTf0~BzV#SXDeQTl&U>Z>Q4KABl2+~08uUaDI zUYcy}t{yDy9;JV0uB`#1?u(!L{>@^h7Tt*JW2Rs!fcLuNO-qi$j>cX#vOs1VjPeh= zR(QE`LG4~!G`)pncIwMj#(6>5Yq&CQoyLeo|H@)u2@ zw;xh36;aAWt!3?lfd|&@xFtZ#cvoK&f|f3hqrQfaOIJqJ%Cm}N)?(qUg};$3TZQiG zc_SPlrMd^f?|&_|y;^Kb2DgLTt~{;n-c%1?D5)X$IfIsjb3Iw4?I80Jya_730B-xU_G9lWP-Q$&+HV$P_~m!GHf$J7w=sDa7dA8mu;63z7AhiZ?veryiq-PmGZ$U zvm1SyUXys5vP$CO74lWaLQO^S=!3AZ4zuA%NRNnQ7t#C{Xu0H)a}MnnlJ6djlzc}) zWr-HwAdjxCAv|U~jbS_{%j!q_8E}Uc_(XeC+~)Je`BI#=L|&Lot9Siyy96n+i=4*l zT1ibECk8rP-ron;F+PkW4xUjAw@mwJ?w*@meAlqE5WfnQ>#naaP(Vwy=Rra-w`JSI zZVPT*O6_$w6dS1ssLB=!h1zc(ECxen(*;v5kTINOs~u^Zmd`-Pov&|6E>d1a0H$k9 zm#=&Sk1UQ$F7n6NXkx#OH~U~i+3ES)DTbAuNzGwdj{}0EI zIPp&5x+Kek4YUfeZ}va5(l2xG_ORGg5W&j%hRL%%Q>W;dgVJ5Mp?Bv*^*fDUT7_eG z2J7s$n5o3PulDZ7jr2kklpnN&;75y%XUCKW{?ikpjk`?|luGHByBaX|tZ<@;d(?sr zZDWNm$h>;;QuNMv-KCe226{L&NZfbTnh_0{G7exj4uh3W)ZR06kt@?5pI_ZBkoNq` z592}vVP7jbMDPt~TN+LMwm6x3i1}*6jqgv|-5tJ5eyWxr{$< zv0e0`QzX_l-N0%Y-KEe>yt2VVIH;?TR`j{3wzihEqIxt`CHdkHzRX3B-V>EW_n9+0 z*D^G{-yK6nnN#6)t%CH@-fpNzE#q8D(+9iQ=3DuA;RvWS@?I|Zj14tB(-jX)OxrAl zo{7QX@aJLC<@$Ug2fDqTRCz_ca=~p&mXD>1?n}N|U2cL-p2j{T*m)a^mT=4YB|6B+ zY<1sv;@`H}@fBzdP>`%r)nqo8uX!VdmA{?vqB*m@M0LhS=lSxlWaEd2ksXMy zPqbpHm${T|s%?eqlnB^2t8yVJG& zVt20IHztQ8CuHG8x8pOB1$!f*ium!X>8GTdSISrC>lsoa{_!wx# z!hIN0Ktq*fRO!<^Ldp;!{QHQj=kq!9kFO=8FjXOuPu&n#3ALNHc9_h&!EhD_NAf$2 z0d0@txN~*y+`~FgahUuMr-g>H%3Y-=IBH3Yy|ATOBgQ}M?l4Dx92L=Z!PD0>-1IJF z{N(g#Y`kY}gle$wSh@C?6e@Q1DnC7{cVYKbc^D{@6*#-~CO)>W6EzRIF7?pT-Tz5< z_NekJX7BJgE|hPn>+t%Uz0AW1THuuZ#-dzlUt7PR!$&gX?Gg!)qgl!4A&~rchAD`8}Dw$b16`v(5-A`0fl@cQDLhM z*R{8W<1bh4eD$^LQdx}+;yMYknYTK9X4ZES3;T}vdhnZC2?Hy7LjOb{HqIr7V{iY% zS=7up-T!)C#MaU{9kHSH_X^>$)O25|&1p%-K-QMNjPq0TfqquN8!1l)f(gMv{)vn;noT*^O(Ybo~e#+ML)b%RKbCCcjzx z4~K8zhkq&N4%nmpx8f%F&g0Ga^n=B`4-}~$u-55Pff>1sze?YHj59vpyOR?skTb}B z%zb3ZZbtAdd}}vsE98=GusKwvB=io%b$#dC3EjNtmx*USTo#5q0eL05vMCPhN`veX zr55Aazjx?1xsHA)bN?!Srn_2DIN5Wq_GsxuWsO{+sItk&^oIZ9iZRO-2Z zSsVMf*|i+=n0;7(`s@UPjc@14D`pPf!OSK=lDFtCNm2QJw8XCEU$VmId#5-XpT`u0 zcUOGB6HV`2{)e;nH=WKXqrL01FF9hBxLrRGtP_%{V+E#2>{<~#TzS{7bbO+wyeZKg z($+epPut%%^ZGj9=L5k;#|D8{b{cB*w)*=fF5YaUGo$S7R&sD<#!Tw!ra0|peVW7D zO{KT%6!c*ZjWd`N+i&pproEIRE4XYBF~l824|ZFyapQh%@9q-vaj(5Z&QD%8Z@ZpG`n2Iat!vEEn+&# zckPszL7?bziHa=z$oN2sEv|IB@l>uD$FcEcSS6zu1D5i;q8{^0*h3x4L;C@E6pLa- z05|yfhMRuvDm7Dt{SC=(pfpI>fpRLx!-B6@DnE>cl;*o!!m|IRtj*r`)CROgImA79;m-jE0?^_1q z)OxcvkS@Twt|6`Pg;LUi-D7YE)_iPV#J&vWEY=e!%UWgEo4rcvcRm)-mY0!VtF@Z^ zm`G>THwnlE$it!heWh^Mro}~pn2oB zo7-UW%!eUg=AOvF%jdS8iLfK4>s{TCDf=i?;7o zVd;?JP;|QUsv7bL)@}nd2w5w=ZY8;iJQ}5?lVIb!%4{m7b1n7#&R)5BVL3h>exDa3 zRuJ^4C}tsDUd4+odVF)2M7|`?$DUnwRef23tC&6bjLurmZ#sh&#AtwS;h4HaDhAn-!`s}v7pB*ZDMikNo3x}J zqE;Ms6!CX-9d#b4AqW0^cli-bE!N|aWC>!F<2~K5MdRp@e2?*jw8|6quB0Q_@>ev9 zV(RxzzO2ZNXcq(02jGd)pQEHbVgrn{Cj+5GeEA8}!Y}r_neMH~oeyvB_?`|{4hHS@ za4s%Ry^!cv5F7^lI}audlBL?zRS!CKs(B#iTx25-4w4k!@i+&c=0lZA%6=63?%TWW z-*^RSdjPfaI$wkO(mF{_b0Yv7b0ei>FuM;B7~Vdq%_D0m)$7=IC$qJK_%l;Ep^CKI zE7kt7xhp*gQj4Px%3Cc++CtuLd?*$l`X^*#xwtJKfMCVsg~K`QKB2t|8#epGzNu3m z93D4ia7*Uub+Zs@J748!Eu|($8X$C?`P|ZLB;Umg|F$TJ@m=@$b%q;iQ2EbljzW0D zF@H9XF8he!o64=8(lEk~5pqF2)9tUnd=BYC?oQFHUMdYi*S?T(4V~Xn*(e)lZ;tm6 zv^T!(ynAl+wd7NVUjRI| zy*4!eb13GzVrVC=JnAS1aCdK!t2`#jjY$kp~Y{T zy;9o`kegsdwj#@en0IM@O`5LbZ#XHB(^R68SqN2ixvC3KhcZl3e2#R{~3=lo&a*1tgR+La1_vm7$+BBlg# zOV(13ZoKo)dACdWdrp=(YtSq3?K?~m8+fwR<1-{@UO$+yS$BrSBe1RoFdT&LrnF`B z5|E4#wJ0S*UZcm0yLh~1VY79JPVc|e3@5+h>?>nGKXei>@ooeSR>Jur1_h|mQ1D89 z$7#duTW(9S#Ff}fidzR4u%F@vOLjC!gVicS#wH+q!7H0*7cjK(+x<+XQh-DW1qlUu z7<{i}fUvIkwG@73SF)Cqc75D$m)`b z!q;rMxH3D52tsM1Lp?`N9G5gQvGR&l^H$?-7fOglw>jouWoy*fN*98v6`JkX7d;;#_N&8wU!glDCnKx6Pv!%g zdhf|{VM}p9_Zb#^^bQVLPI{S(dfO`}^BuGhvfk;XxYsmq56MKyEkl>T`YEP>^0vC) z14deZ#W`H&%gS3LBAkYb+Oon&pq8P9e6Gbs-2qv~Pf;vE@C6V2l%go&5E|?Qot%Uq)6L&7NeN5X4Qo+}z)~ zE)?khMZM+x{5 z_&{0Qkc}xMazrKXVs?^?H18ntW<)`;hfwMnNhjbw*($x zS?6_J4_ABvh`Q!oWMA5ri=+>mjPT}obL<7O3#(;kseAc--v@^Jy~C2I&ak<9sn=!$5!Zs`8s#+mSyeU zAbuV(xMft6TVhYheX?JV*cM}4W746aaFGM>QinF?x-wjSrNWmS3a&>?Vor{g7nJo$ z?9jE?WdLevj@>M_A_$eakG?fY2O|v8AhPD`I8xT;LgYaDI}e_|^ag!TNbUJ&5r9EJ&P|1OU?pXU3tQs?%0iWX?ITxXZne@^zjo>$&c&q&Wsow2(w?`Xhp z_ZMcl9W61=ZnDw0meOD|T&BE)I-+DfK6Bz*W|0oc`}EiEQDw^}^=#!;AY9hj8~GP` zjOy!F@K*ZaR_N=OZ`EhxG~5#U9rG?&!B>vj35tFn`J<+<2fvDyLgzl4#Iu^oN|UrLUKuV|J?z)m;kTFQ08aysi=8jew_L^NJNnycuDg zF8k01TpFb4Yr!(RWmvUmrj3C_sXf9W!T5-+sW&UBogm>_+EkHC<|@3Kl95$**^ola zEtXjqM!|xvyzq~0-H@=yEI`9j+G974-ennfbG3YMT2-?1$jd8aGdSxFw{n+Y2_G)T z9a{3Ws8#%K&$nvqXPI}_%Nxu}clL8r=3p?d*qc?~XKauWb)hs^EE8lK9%eLo)IWr^ zGxE7|AqbBT*EX#Fv9Y9l8P+}Co!=8h6ee+^76OJD)vYWkLu3zt?QB+SJb6P+rA|XZ zsoFZM(NK2~7Mz$|tLuk440UbZhx-zvNiZkj_I1cHql3CewsPXtO6bX~Yg9TP78mJDY}G|f`<(mybWs`AHjoJ4#%(=N*KZ3{6-Fb@r;1b-J)TU>o0-6?MXwF7@OZfsKmuA4L z=-dPyS2*jB-Kvoq^9@=RGXGqGxMtO^4S6z}<0lFhEQ{rOr2v!vahWZ)HwNQuDBG!x0)IS?04zSWb4! z9qhLUe;bH*0-@Tv;zwoBQk zM_9%}2~(oUvfQ4OYr0>jZfA;y3&9BLh66|)KjdcF>>>~HUuoM#e46o`6Q>x~z_nA) zZ!}3ZwKWxgp(aI67uG)+7@S1N>ytC0@o<>q;gUvu)#qpWBkjIOlB4nlb}5^}?Dtnp zw~x9u>Jg6wBbe<;dt6oEGK0Jnrc~2<@UXqMJW4+nQZ4 z(G|o}kC2Z5&x2v|0m8Eb3AM|gi$ZfiDg_gIKM#1+Iyni8a?*68|33hIK!U#`7 z(T{3;5`r0O-Waq%cMc^%XxEr6ePcCM9Ym)NKI|gN+vFw)UdoqbBeeLI$%mL>MDC@u zTyX#thLjdpE>X-|fDLM36t38az`o#=ACwkA?Z4a)3DkelfG+b9f_+BLmRFf9C45G$eIxZ;a?whD=kW$ieiUBkjWW+wMGyJF_EK%Lmk zGKX686pS7vRsN-gCdpn^T#lp2-Jy89KY|$XOcw^@K_j{X4X#|lGL9QRc_rx1~cELBI1PK2XMoigmoV6#;jWFDh!7kom_f*d?cYHR(#I7~xDn2KY^EC5lD zL=m8rZL@sBSyvz2ux-DIo*ckAt->eCiAVTEeFTLpX?3V7hddC*)!9)r##zodh}%Bl zZby@OxHeW^ComWH1uO_`BJsQ8Ap*;!ituwUOE;3>JJS=UnACVLUQ_=7CI0|Xh|FRY zcTRkfYb;|ZfUO#^G|IJ*Y9)bhxc5I~Y^Oa;I2BvsH)szMdGit{8q8&=tb-dHTU7}^53sH#3Emoif-Cr?4UWTHo;4uXj361drWY(;VBs@1N4Dk+?>O9its0z~Im1nDr zdIQpu-@ycxmCFjxOeul9W>>`eW3f?KzU7j_Zd(b5EM&^QCxse!aRRSqHm7IYYTQZ{ z6J5#fn}pEciP?h`!x|W*oe@zeGRCWF z+(z;(z7+oe2%A%CtAs?^?kj`7SO&S!Th%<~v&Qon8c^s1T%Jj|e+cJ-$bbvJF!3je5f()=Z zqAUSw`GAnoq2e^MCou}bqBCDJD3{#ueWJ%YRZEDmQz#fX3Kp6A*ZY}))G|*7FR^w3NH}?v&iZ!Ne(e^i<%ZDrS7UX2RZR7(?RB;h^G7EEdz%z z4GT@VZ~aXPT`&WXM7k>*s1XZq2XLOC1$&|T7_JW?yNW`uP`3!TS&Px zvU5OJ(p6od6F$++Z&IHQq`cBNgM$C-hqF`x$4VpCg}16faEAXfNcKz-!^WmKZ> zSfrE2`-27-kgQ{b(ZnYY0MxOe^1sYcR+g|ot;K416wJPbw^+HKKT{+YIXQ#NYpSKe z;1URfp5|k7#8jZ6QR-_N2nk6`RpJ9g&o>xNWaSYm-WZlD#h1)ypWLM=#laPin~ev2 z=20wZS-ZcfVp*L$M8zYuYAMb&u;O1GJw_}w+qi>;g-a`|l$f6SlrU6 z{{S-FB3G4fEDAv5a+Q*zx*HM(ZDu-9zlfrc#uF9hXMacs58Ss3@Tqb`8oq|kr)8FX@y{Y&-{oI8r_o<0OqunP9L&kLa~Swc-5+4xNa;f zQ?nBcAS&V^Ks3BS!Bt|BXBWgSv8ESEMz2hxRyn38vB0YYK-o#A3~(ADZic2ErVns) zf{Tkh$K&G`sZ%-R>-e70M}(J9Eo6A8y;7(9kqZFfRRynyGKIWr6EwS9xEr=!TZeWC zTA!+dFAMRgm3_GqQgCo1Ljb9{L0D?xEGDvC29HcDrXL!G&L!7w@RKEsb22NpY)y~p zHWCHBS(qrX%K@VLf`04W4va#rmgB&{@5w>1O%jk1!IN;&=u4I-?k2@X0oS|^(?a643HZj zO}d-OVThrEn85)k>SEW|a+c6pRDUoA6riQ5>+4WnP;+va>T~P%X8iuHXDa6Oi$;cwAq;(ju$~YB9l(*Hy8v?0ezbtBGHRe2zj0_82GcYuG zNJGK}8KfW8%IV#Ec!shJ>hl(&G|h@RDmJb1O9^~OwO_qJ^iDOXfdZ>G#44`!2-?$u z?p9q>O4P&~Ur`G4!o=%90OIBOyb&@9$TiCpP#P zxm>_0zG32C6%gU`QzG;ZCPNN}RjDha7bpsS!@qi0cq~#;%3nvrG8Cx=(*`!z0H08M z#9`U#h(L*jP!{^sWvabOxmul`qZL$Ij&xkEVy)46$Gk^3=>k6d!phJ+lJNtfZW4{c z<&VU6TIA|50Y?nL0bqYgXu$sfFuQ~_VejYtO0g=SrrlU$=ArTp_YGhe7Oo*i!fd>Z z&43VVG6C=X$S`njt1umbfHWJ31qaM90-FB-nS%jW#C(6@H+Nj(RPZY{MQ^u=S3<7O zFaXyFFb|GBLqXe$cQ4iWgULz*He`h0bU`BkZKpb!6{~H`M($P+Fy|L2iFm{*O7YB2 zTQ;*mPaVM0osZ^GB*##dZQ4wQu&G+e5oyQbR~2~kGz%Qr6#zaG7M1ke9HyA$k7k>^ za}a8;PUXS^=sNQp!*#GCms~jnYpAT>bC{934kPHBQN+b?e3GM|5%~i4S#LjZD}v33 z{6NkQ0@m4044B2# zzt+Z$27lafprU$Q1kyBEl_h(d*D|2bs1n0WQLtjQIF+S~!y1JcOPkO7mBYy7xC=S1 zCEgtRjO}vDMAp{gm`WNhDU-x)nZBafnq>h>@id2ci%(-w#OV-*!BXz-pxt??ToJm* zFjmr#4{_>(-p}nEW$UO?XN-|80=dL(wH&Y-zIQ~mYj`TXOB-tCHv>|hZPa?HzDSTp zZpnZT5K@Zfh+PEouM)JDu%6;+QglmRBf+2Z-`sQsZm9xDD6L2turLC7jsZgHocZcp z3aC@02m>6k2r^8$XZAaYgH;?4P(oFv)R)O~bOxb)tC)}rP1W2yf;p!jFfAqbHz5)F z;RFqvEqy@iqSq#L$2P1ndBg_A@;Z85N^@;pz?X@6t9Wa3D-Cf+IR60b;t4^uf7Alz ziB6G~U^9rZ2Jq+R5QG=HltP?w5U7IUEG5CVB8_IMBBQ-xS($y1MiOD$hObgOWwd^FVOEZVKlDlgJZO;pa2t-;Vs0iS#u#`UL8LYEj#YJh`5i+<} zwi;zAf#w9vVGkRNmk%3-(NSbr>pjF-Q&ON_(NI`9VA5ZRnM7Bc*VMr^b5WTA$q2B~ zt|A6I6SzPRw6@rFUCb~mT%$ln_&Aw0Q_jq}R;z}1EBk|nw8d|Qml-C-CO6kE+P<8h z5rm^=o1Hm@jrG-|YZyGn25W{E_bH$`%|HEsVbMf`$b0?4htZS}(R|TWaIkD(*ZRQ= zrRSNF>uU?~;yhpnv>Agm2m>h@9RwIg4 zs8BTSStWE{1d3-PH*lQd(^HeQ*~~mmcqM;=XsgG$d!bu0;!>6p zATZ@&Fff%D3a4ZV%f%DI5eW-G1i4vxBV5CTf9=4^1>_Z(MFW|p`Ly_yIbCj;fVHhq ziiLrAm4GS8!JS>X;sE0ZHMk`v;Pg3-G<#h~4XN7#k$fL>%zZ!ZQAlYI?TS=vP=pke z+YMqUT3-GLT9vDx<^@cQ3^+_|kG^al&TA3NMmCPizU3rn<(d7=TH>WCw38LEHwF!^ zSXz~Vy(rwx7EBi^ODH#Mi{L+TO0`o^uRf(V(}?ll69>*C3i7LEu1<@>H!xR`gABMXMeSz_p_ za{_P$TWo)TtVA6^qMl$Xz;)cTH1%^@VD>k~%O{bsievz)#I_D<%#aZX9Nev3O_6d; zO4c_hZ_+PMh^b#FiifFj99|)?J_z!4$t(g<)j$OxPZhW7<)_3N*>h|$`;MiKE8NJX zE__Np%EfUXv>nBix5+DP{52a7k!--FSiF*@P)bClsw;5?6P5v6Ei6trnTAU>&S1g& zPc{`)8)d%X2F59co@O`B94A!s0uAjp7i!6YzguA-X<~?uf3=8nbZh9ARy|V@=W>LI zloWNV`Cz>gl&k(D4z(=LIO*zPGmQZLBHVtBn|E^ZGzPD*>57;UEGy^Su$}!U5ls^z9TRx(!@XCl5DIqbhaO{mL z6f%z7I+##kq%YDVM`Rv==oAHBEm}XQwZb+9kZ|X%W8a9{Qk;YS;CSM|Cb_4768U=X zqhpM@!GAHKa;P)ZM+hu*`r;BXQef09EQ|q|IR!0L&T;cGK(MP#ORA!(>wEqn!glfg zU=dpgFpkZt!w;!vd{Z%0T?$m8c-`{@1L*>0Z_hCxhq4MzwqW4%M2NY(}b}7GRiaCA1Hp75?E#wV0J*UL`h| zUC%P(DMsiry!ELBr6Id(e>Sgfjws{I`<~t?=#bG+GY?ch6ZgeNAert#Z zR038z=B{T*=nFgzK`J<6vC|k3BDz=N1_~8`k5*zaGJti}FIhfdq(aRaT!{s#bc)}v z);No(=c!&AmI5p~>EykTF}FDd!)z_;S<{8*pAh0VvX+tkLvr;i2evdo8WoK?aQl@? zvpi6I%e|{)QCjcW_Xq7U#zsEah2N=446U~c0enrvsP$5&4x>SM?Sx#eJBhL*V8iEf z;1zJCcCI61e-WqVZ4Zd3y5l!B;@A{GWm&91RMOHk_N@`gqa8)P z!e9RYASGM^(7i(ljthu5GaQE>3m#jKB(XZdY`AzB=Z&H{U=3Nsd3dZ}a6u{RI8ZNr zOKxqF)Lh9iR-?IM2kI17>KiRgHKNyur4Fy3h^h|xi^MOQo+IrT>ema0v4@;(x!s|9 z;oMH6NqJYTCVa6tv+gq$G=QfLE-m5|1?byPPWp@tp%<-ZM;8(gGOgk6KC}V68(-SS zrZhdSzmf(!un{qK?^BZI8mgC*P_FPm`x)tuZAFDuexh`|Y8k4m8N|(+ac0C3$#ZRZ zi)|?bKNSF~((-~W{7NsFi+yxVp{~WIJeq8e1xZ6>^ZL|oS$Xmhds!z@+1NXTve#Td zTv<#je3OL38MVSDr7ac`<^h+fa4IIn*-$D44^q!uViz>yQ5wAsOeygSZR?3ZO0m%8 z%RIx7fNa#o3!20e*zO}B{{ZA`YQ$yIs^S>f;Zm3NGUZ>?bhQ_7qjENXh}5(%5r!j^ z+$l8f?Eqvo2lCHRR5^8VD^*;_46F2o(p&<6xL8^fP{1YJxGeZ%QfpInEt>HOk{%@p za=66BUX$JQLY9=`05(jVl`#dEyM*$C*$bL_46$jxnzaR5L~=)HqOF1KGeNN%WGYV8 zLDQc^Ma3}}aEgqfrgD41VPeL+tpM1=q$nsZg( zg|dyoYKerj8RI2;BEyR@ zwzu~Y8Zst8(w<+%^EDA^W|d;^d6*F$g-ZErJvH4~$y2q%C}7QRaZ-FLC@!x>8>r^r z)Z!r;i>>AFTaSoB*R&MpIkP6sMTH9(R?%BCw|6W;HqCa0RZ1{R=!HBbbGV&q^8Wz! zEztHj2?0r3x4ZZZSz6#}8Et}8Omp}IjM^Kkc?&Pbq7obD!x3<(8L zjnLz$o4NjCXk}hscLY&TqfPnDr4_!}ibLIQ1^~gEf`J<|65K84mfx5R7~Jy)OG&{fSxUX;Sb8Fq2ODBB zN|>&p$N{Xh#=vy(4CzYK3l^wqP~%KAZYN`3DvTSCBBewPX!QmLFC0O&l!9~_O(HvV;JIucY3Mc@| zyZ&ORSu1hLt<3BICoDdEMg%EHBAP7c4{c*Gsv9Av2>e8veq?-HMWt@fn>i}u`nLmD z_Y4TiRoM9>1UT`65mu}R3^rmcX}%_G$lqL%OFEo2n2e#Gh=D?$$U#kGxm-7Rgc)ya zP)FQdvgx^7Pul~UpHN9;&aZGL+`KTb0C{0)MtFo^^9zuC%J$u?vWYB(H&~@bTt+BM zyMRG{V2LVmamxnj%p>0{X`z-1U^Hh^J+1pAC6Aa*ZmBrYID3xB(G4Y8ozsBLX6Y70;MEr(O3f99O6k3b_%e6=8Cc+H>6W#>lw0 zEgq|_z-*(&0*`z6d_<$m%mKS~H&RL|vW*J8UvMr4$v3vtuQe(#2BR^7Mw&Lk4UC(9 zB8A8YMmmo}B&Amk$`QA~qaQFkh>-sPyhOjIH(IjB^(_@mRblV5>f_jGACOgBekItY z<46@aw>9QF3Lzn&6RX8$6mxD%c*N^p4CGSdWWZ8@);u-(g9;@FLiY3P z5`ea=DZ?CUMpzZ)VXur+%_3qbZF6pG!&Q48d}K{Ny6 z0@3hZAXc|oGR&_!vTuTdDSTKBhq5nrfk>{d3Jok$-mTBXO3I)d{NeL5Cx)CnHsU8} z-boXMO0ArOvIBo71Z$5hX&6vgdz9nqpEm{0T>cd;a;a5;)Cob)c0NUm-jKQ)j zL*q(-EZ$B&hV=Zq3Ub7vAOaHi~z)nh5xy)B|1R~R4 zHwe((V>Jo{3r&Pc9B)HrO5(9W&SMCu+BU%W-;z+;uwS8M%8WIQLd1|GhgJGvi7X2J zqVD{2_W>akEER>@oS5U>b6_ykfpmLq`H1W;sYPUdnT!~{1uM!*$-K9|Lh~(q0dBVI z+;FstN?jhlqeUH8!DT?lGQ_BW0@%+yaCH?$a9#9%i{>(GEKu*7P?mz-fU^6mjxwrU zYr$0ehVd_Uvzn^?#cHe(>T;RlSOQ;#sj$SmsMUnE*xPU96TjR)(IC{fRchaxhEa5u zC&*is(eAANpa8%?PMz^D=vdYFE+yXY?kY0tO9#EoH@q3jfx6LqVN+@`F44zd5CRNq zly*ZP1^mPr37_ENW97WWIn-to# zA4CkiZ_NS5Ph6hmBvVORMuqTfPHcDzlvJB}YX-9S9soC0iYX6`#uv&0>SQZt4Q9S( zL+wq|#!pZxO>mEQDCDzSl;JWE9StS#<{k%@gTYEzpjPqokPB%5XsjFE0W;`kT_nkT zS>b?&6Syk)RCP%RQ)Sk8-w~oN*1vLr8XU_TW!ml})E?u*6*He$JYzZt0i#yNpq4P>-sc_)I8&H1aDum=9F*irazrt>EYRIzE2{?zW?$i3 zP&beJ5jy}j3{0q#C2bN(CW(B^QAOkk-~(DA;8DuN7d4kb#6Uf>BFy!}WRMOa6K&F* z9;LVYJ=xG-!cvx%{Ky6AbB;KOamoP=gH{$5%p@rq!7B?5J?1m$;J~UG60|Q6t4Wa$ zA{;Q$xs;~keA#r8?P97`fy?xPbxsdO5L61oeHC9);F2K@g7E(UQl1~u4+U}X*NsPJ zs;!mBB?9I)U|xUbAwal5idlG~-!~Rx7|{V|d^aB*yuknz1(?miRV+`;qOZOfbOs2C zhHP)6ZR84s)Lxfl z1|m?av5N2Y8}2CX7dA59<&0dnwhP<$E$ux1Xy$y%KQ?zCKaEc^yuobG5C-mRk8y(S z9kY%WA-UcF9iSd$k~t$9YXF*r$G4$7F6j7^1QjutQ5njj4Y|2Y0Gy_yS{5aYuEFM3 zRi0(#6Xqy-et_fgrBUHzFl|c(t0cbF= z)8?tz!FCwJ7#leZn-bVGvCQ>RPHxOm7^48Fvl*ta{hxM+MMw*RTQQQp<{~6=1%3f> zgK~gw5%sBTc*MI5r^77M%{{{UVhsx6_hPCtM77ajlr^H*oNaaN31w(U+_ z(_m+a+**p07z1yqV5>ER_>}Y~m|6&4!kSJYh8Dy&e8O45Sb@>YTOXe8UF$*&!uQU1i#RC9%SO$v}8CDYdTB>p~ z)S$&)FMF^&h~sgv!(>khnDgqQ&Lu(cF5>k{Xy#y|mdd=qp|!B}2p3hJ(>;>3AULM1 zYjM<+a7@8245O;aJ>PIthe*5{^n&d|h*iR2jIyY-7p;g>vZb$LlmWIP2HFi;)}b_o zkh09)Zy2r`6N)El_NIk7;uAnb_2R{&lNoSzEjgTEpb@2^OpNn|#O;HWiv@B(2?FG8 zR28c?T^WlInPdf^j;RaryM-;0Y8I&AdVrxU-xbfHr(BZ`7=p@yjB5p$`;_+O!O)H# z9?SV@J!s%pF|#)DCV-+Mt*ZG}T;Y9-EUutGxf2VD{1#p_E!1+~`SB_(7C^kpI3MxH zKaGAc3xXxeukovaMMM~ha|M7>-sV_^Wjg6@a;a000_sNtg9h4Vfkg)sEyybS?GuY@ z(2*LXG~N-ZkjNZCXcqvxfLsJF`9Jw8D-D#MW!P)1!GaR9%hj}IbXuF%U2b3o`nlvF z2}mqLStF1e8oF@+>1_c;km3CkH)t+M0g5kwq*;KTgEZwzeL2 zMdqPi%Y{@b=spq4oPsXysL_kwOLJ3uJ+_1gkaAZvOxuIf1!%_)1#>@e-HGf8gM_ zp|&)ObU{TE=kc%cM)w03dWmLWq%*1`er^U|B&K9pkU~`~z;6mG(2>${{E>4W5|GUr z!F0z8)D=NmisXWkvf}>$>R~4XfK0HfE^K1zRV%#IAKWN$JQV)`a_NfP=IRsCj&0;P}!)S)}5-UES9 zDn7#*$ryyO#B?>F+2yA(;~}|4*r(vusdG)>mc1Nfh8e2i&F=FmbH-RuJhU2fF>nZK z$RmINqdVquXzU>4H>^EVnR9B>mshsw)Aaz}2Hhm`;jf4j=-M)pojq%)g@!3W2oGPI zC_=qKU6Gm#cLs54i>sOUaF_T!{tG*qvco*MoB;&u>RrUUiQ=Chk#vb%{sj=ShY;ky z;OU(Y#>e8#q|la899LSh_b`O}3GS{2ZOg2Oz@aO0`l>)e)LS|~9wjZZ8bk0X9kGLJ zsZrsXN~~<5c~Ux-uF$aNkVlb#;R#APgp`a#Y(pYEz$8MuYAe@O@YZL>ss#tO10wTK zM#Ak5N^VmVcC1p7Zz%-YP}3~V#1OGpc!?;7RXi`$Od`fRpDRh&wE~9^0g|jm!M8+1k&oz!<4yZ!{hk*;-4y6{^Srrn4GOq@_lzRK zCBPtj#bgHiG?k->U?SvU{mnavNA0D*U@T6UaGani!g;ZJme8!Yg%7o4R7VYqWWR8= zwPqblp|zp}7Qj0-%ok*Oo^}91rLE+gG<*K3OXa5!7TFCsjC5O&aUl%LO>Iqu~u#4xcn1BuHg9uEUE#^ zXpvUJ(M8$6>%?fJ!~)vctnbXoeF12+71?^dMElh3d8IXVk-r#aPB08@vM1S>6&}{^ zG=$v-mJYehy-RR8Tm)=Ose!t!ReV4X0_PC9R&iu#ctkp0$o>u^4p_qPj?VyH$gdfV z5H@7fde2roixmt@Kn%~(8qUt|)0{%Bpi6{p5())bWifY9l_Onq9A!MN%Y!tlI0%4X zP^7#C#ryd}uA$MjWt)OjmK6ScL5@Efek$=$V3-H|QAvD64rck$__0vk(SmDvfHkwC z4ydNwJtSI-SO+}-M~9=TmLOhA9MeZf`9>S4o%oFzDX<}5Qs)Yyg~b7H5x{e~VojYw z>CXga00KDP63Tu&$4jHh+`@(Ws<_<&&YZOs+Ul8djQQb+`DciMM8LGG{^AK&1!AX} z3qpaGc&!B>weQp;VT|bkaN7!gs%yDET(pZ;%d>i<*PRX6RM~26mIiK1M7V++1>2RV5mt{QdbrH+J`yY(+$Lp&Sw71FG^ zMvJY{EBdffyJ!~26TAK`W}p^uc`4BA^5+u0vYo)9qoi3`zshMZ)LU=yQPc1vQ5KoK zepR~v00nk?jELB%NU2@y0w%C**s?u_!ML=$F%<38YbVAV({?E$MR08p5%iH4WWsoc z>D{jR4YDu!36rTREq-Dn$J3LxQ%DQDY2^4b_QUTv3f0MpCl8rDfF{Y z(%q(WixF9|G|^6#icC3lMnO=Tdwi_T9A8Yu_}*trK*29J0{i35LYAm1wu1O#D(L_? zZwsVp^mDmzGT5L<21}<0q!`F=6?Mc`rd67RD)@!KgL2v`?p9wi?^3_Q&i??yxcpJN z{{S?n2Oo?-hIKp=&L@gJ5h|?w?$g9HepR>le+;Uo z#KAAFA{bg2A|p{s)?3C{c#hJdnc`D(ii&z7<(~?e>9@0-#=tq_{`!eg2dk9#`i{B| z`9d4AUj(EgNwTnVAdHSdgc(JKGMk$!(MY&>IEl~V$AGD6c*Rt+6{e!$&P=#46%mea zVypvqNLhTYDwe{{#wsT?D%RGuF`D45bV8M)j1&^fM3?eX2ZV)Q;*8=ws4Gkq6wN z^B*g9!Uc;#W?R64%v_JDWmbSPDvViXDUKMecD)-kjZ;oSVSouHQCwN&Tg!+WBD2-R zHkD2j>L>0fbGO$RAY}^T-}n2L#YVu#CJ>lX}P7-8{IOVpgKXbxW=j9 zL^LzNpYFqB*2n$~Ce!SQ&~dt$gHKWXa|AUkgEr!$0C|;}fp65b+W3x3-h!g={gRs2 z8hEF3E!M-&{{WSuqrg~A0Y1mB20Xh_>KGd{mH~zH6=1({lcCOKc2O^GkMk49yhm?0 zD-f;W{{XWqF&As%3=wNWEfh3&g&lp7+YE{i{{SVZD`%cF_+@7HkiwYR<*}+8%x&># z6)3l8HaC4-F=zm0M(PW@L2$*vco-spRpoorQ%p11O98Uzwqspo9sy)UC43Gpa(`o) ziic#D4*e z%M!D7j?)ok&Svj=@IwXymb3E&z}%yncT>93tkn>xBEPaq z;U^3+R-!bWekpXo!%?<_M{wJPNiUFkj|7!fZsPX-(-p9yftw?AP;yP5i>#l5#-{%O z;OOU=yXFCDz^%GmgbFqp#Vy|S%V0C6A)uBj5uh|_O<$;Ghil3I0NCP+85Yduw1scf zb5}G~3*uh9+YmcCbHp$^U;Rab0XYm*^Pg|~gmAFMlYCP!7%}QvS^&gKt6HUe09X{f zo~@KHhO$xW>-m#X@nN*HcY4kWw71rP;zUL8u!6`*RH7TPchGZ~1Ty#_+iI&XJ;Zok z5`gKJ4;1kzGIpXYAWkW|vz$vSvYVS(vB5mMmQM}9#I;y78Liz+4<6NR$(>frCa{mAYk_uXlymX{d+P?Z*uX7tPJMK5hu4X~99m0tXP?7#;V$UD-SJ1ob9+vVPfNj^W^1YJ4%evrz&^jO0gzsm5zigETQ!hRg~$ZbHpg~V(MHPD|c!OGgY{UVO z!|re+3b0G|RpW1R)T! zqe@~jRa--A7!$_|3W2i#ZFyTns4bzEs$|p!cr_&)%9@-q_IR3p5)d^0C@Eqmt<8mJ zpc3@6Fy8Q12+~7mknR{i(o&L`+g!!gp{wOMq}))AQPe3>XQ*EGQq0%&H-WXVVRJ>U zE2)udo=iH60gFJkvY-x2%%@(6D{(C>Kt~S?Bahs017X6=MSWN_r7>YtUmY+&5})JD z)KZlcPU%i`Ccw>AN-f_ftC++Z08N4_9W*@L8tB->SwkdM(9}cqf}tsHO1ug&lNctf zj<WBa+&7&k0oS;wQt^J8R;OKS>!_p>(&g z`oD;*M>jR=WKh(@JgAojv&Lqm6x3>F1>^AeA$-KZj~Rrsh_z)V(QTlpI|H8KC~|93 zpJO~UM`$9@g<6W><^~KgCI#At!Hs0ZUz6B|jd)mKZKqMc^1Q2a(lvy`0JAcnI}RmM zkLo5>EHcVs90=kGpWpv+#H-YEm3o6(@!erhG(eksl&4?6KHY z?3h|Aj}p0ZFVY60lgIZc5{*@N6IGR*+)aqQ1h4-92l|cjd}xN%l9n~lHEPgcFR(*p z%NExc3FvoXEjJdvS~40r2_D%Ln1Om-TrctvR0^gUafxmGp$x(kt&6Jh4NK@8s!9q4 z`t=JML`jb7&@GpTnN}B~g4V1y#Z*R@g9l1*(Xc{{CtS=Ur$kG5@*#JS*tN?~kiDvv zf1!0MR=&i6i9lxS`KOqL3icNYK4Tj#r)`7`vH^U{B$L!f$OW!yrA|3fdsXI)ZAH(2 z)D+Yf#NtrJ#2qkv3MsE9yf=pzn_3(_4KIO~7>3y5+GAfgcbEw1nBBML#25`hF}@>( zzYu*tTa(sm-CSxmh2Y~MLs1E!4A9JOVxV`KM4k`SbTomu=ERZCBJ1pcPgCGOMWG-Xjsmhup}-w(?=!?hL*T;tdQ-q37|;7;YOQ;O;)9=Bi># zEZVluf`}zbDk2QH(3^N-S<%IOOh zM+^?wIftNJQ9`UDs;W+OP*W_-6cnkWr)*L9m6Bx*?ZcyU@J5crnTa-HZ{!pr%uYTeLCqiheH)wn;)vc>+Pl2=I zB4PYu;Wn6<1v%l;GcHE16wi6DQHibwPIM^Ltlc5mbbWV{8iBATm>-0EYGcCH*EJP zBscdmXhjnIhf?0O-a;;g2}J?Kw@WOGoizx?y4(y9!XZ+}4GUk)K=B_4_ES#@FN4!E zu`=!;so--t=}P<+{%|-c0d1>_ZN6d-(lBfVa{#a#Qtc0W9F}*?sJ_~{g)T!P9S0Ld zhY?uOT8ThFTC+ylx)7nQYKv8z;1Rq*0&o(ffq5A>|3s z)8=$~PMiM#csPl#%vL}wHZs=jaV+f|^&;$E%KqR4&}gPoEP3c_V=dkC4yMAFW#Y+Y zrcnl8xJDJz;$K1dl@0_DX2MmM#$Zv!WNc!c9q~Xzi!qDt0%>w20;pE}73LMRxs6;< zGYNQ46%9L^{C)xey)M|+E~e;?bxIQe0e1&r;}oEh zg^i?Y@m9-;KQ^wH{e^=aQ$Q$hf?~~MYe@ZmqB+Xk6sS+Ikd71|TyXSOA~gOP=LwQy zv6=0D=2$;zRzM>R6}*Ad)D0v-hW_HCej@9U)?!o$BGJivjTtRguWVE?6qzCNQ8OY` zMpxifWC2FGuKZ1Ebx1s71G@Q@mU)7jxB<)d!p0db#wo`K#I?TW`~2zozaNYivXUZo zggW(S%n6pHuS}^AP=zk)BA3T9w+;|AowZSsg2#m4@cM!&N@vtBt;jkT^**7_ zNZmQqJQ^y)Ek*}hFt+?4F;fTvW*J>Ox$gTSI59+|2Gpi_5o3~!_87T4Hr-W?WR~lp zF;ptU$rI~vE6ki&1RDal5Eh3ku>ctZv|4B_Na-DUfo(qRi?o6WmZ)@c>2OViZ`dA%9m2 zXt1#=p)oGGhBotXs;#(ySSuKp%;Kvg{{WppkW!tMw5dwP4Oxful)%KZm<1wKJV$Gp z3$Rk{O40@d5j%?%80+;E5VIU8Xl0I_+2}zMSRo54p-8*Ch2Fd^4y>maTvLW+oQR~G zANV~>L#T`Z7r`iS8CcCRZDcIkDRtVG3-h2r-J4!&(qZi<7FY=IL19YMYh?hBK$l+qpQwfpt#g8s&WROaY3i!xxHRYs%Q=}R?*QefpR1`9NyIfZXPbd&5$ zR7yG027X1nqLOe~swl=qw`Hgn6_s$;25wdoJ~ zFy#+09DZ3(N@?PeO-A}~qBF{y#MU|fkV_BXtEh`gQpT*hg4W{wP3BW<6_P-S~T3$4|$-Ib$30!rLuUY094j2TF5{F_Hosq|~%YsvK2n z@g5X{a|@EGZ)I7#cd1iGC?bXv2qEZd88fDKEbMuj&u9Uo^P}oIKfx>_sUDGp{ulIz z{{R%yx}CR|{X<4~5G`e4gtFSq6@nXV3HxFPINQvjN&~jiBUO-;3GBFuOPP4nG7!pa-y(o$|#|{Sl#D6)`!#X0HuX5mbC>D{g|z` zMA=qb7*@=LKn%HN85+{F3%VmB(g975z`tpe*gUeqqJUo)g{vP8tgr@QPSUgpn3QbL zERv|Lj5tPEF0d0cE`SxVXrr5eDw%J?Wm z^&M)rK!^;qUJSyd5kwy#LA1?0u)EZB_?qfy7d*@S0~~)I9FuCpa`(B0o`K}LH;lYS zaH6clq7=OvD*A=OK`I4W-TJRkYdnskfx5g3r-)$?UVII(%o;}vP;yi*TdIv2SB79E zTwZjXslUYG8m065mg&XIsv#(hA)9EtHAE*j5II*?$!RJgjQdnFp?5|r;v9Z}4Br~$ z3B=2)7XJX;$RWKPF4DncPCC@9mK7m+YJS`K{{RgiQPKVe+D>BO0+8A~K3`ItrTe3IOWhq&jG;d+5evC9EQPLXuMWqb!R3X;eh4aWzfR@$WiLRpuqNJ;2UORbcu zs%E!{oYW60-JFC+1%xu-+5|3>kBDK7VU?g$&cnr%Dq-uHy+F*%nY8&!ALQJf=0 zh@5eQP!(x$ncSd?tw2<^ic))unC2o?3n`lMh&XT{Ys0@3{{T})HMDe$X8>_g1ttzz zVccf{9T5dBia>aUC{Z)QxO$i_9x9LlLe|==p-AQt0dZBAJaajfv$rpKo3`&BBeo)D z>i}RDHe%Vb+Ko%C!~pRC%?tBN%%x6AK zfV_Jat4b-bm-QkwCdy|TNEDi#xace$4D4zNG88U#{DBRg<|`C|FslCms8;Y29#AEN zklnx~F?Uddh#Iu~aFu(QD__Kz%^5YsR@7N`iddp-Tf19vPCJ*Y8kUomiVd(hyL>?? zSA?a-tAS`M3w4txh}U%~thNNah!p$gX!@O!z+7}UOZ>*&MG#zv)fi}_kU6NcYS!bI z$>JN<0xYr^y4|q0R&1^%lwM%#V{Bubi9(ALZ+f=%&jcIlQ-xW`TNQNPX@xS4nqm&I zi23{;lh$NvQ&%)Y@xRO!7FQ20rzR{phdvXnZAz*n03PfwvCo7+(Ta=!cN3M>$|0ej zrAOmSTaIGQT^N^$#!DRN2Pxv^a@Y4!^*rt0V3bBg#<*S1yBG> zC7*;`K`Or(m_Hhq6@C$1IB(o2?1Pm$Ltv`Vwy5&Ql`#YesZ!NnmKlr`J#8C9DyEF} z=45SxDf0{xLW~+J!dslyYWY`(7DXHzDfxtNN-De&(p*0@-_+SZiYsThBe?;VIe`=l zL~KOJ`Gq>Gl;#*l-MP#iCc|Whh$)7Nm5L!O#n2kY7G_GMY~vuyMsekF1F*1M8&%6< zxm-{hQs%iOaO(d6im1Pw{!Qjgl`9BPKo2J1#~po)W8hiMkyDQ2Y*B@)P;A)hH7fcr zjwQ(f@Ro;>w9U#!q2VJEV(O>&2sG9lzGI{cg-4M4mp`;_W?w{*69-B)&(?w6K+4Au%aRmEX(`Hvurae&k-lA;?7lT?FBN5d@Obr%=T zCDXZ1V(VhHYCq--r-ES_oOEciGU7bRvl6=nt&nUkuc#<>32Wen()HcUTo30VSa4Tj zaBw>!YN(u|H%FBeZc8bYqNo{y)03lc=iY77S(S-^$Muq*MOP~jX z2H*p$&>DaD5ECiZZ~*o&YYZ9`uwZk2jUQ`iow^gjm~F1(uC)*-{9Ihlh$OT5fK_<& zbjmF(7~7061{_QU`hn>#+I%D%M2%K}GWaG`Z>=<KW?^h2%0F$b5&ruX+yKdJTl$VrDAGUkl97CfePK|8M|cde zBA$ztXP_oZ6}$)sSy+RFtc9|WDyoEL4Zut)saHaaT9|jRL_wY`o5?^13Wr99Km&!8 zEe;f~Fq>u#!-npl;2Lh~JocAvSpmSNP8CTMc{M>007eCEAvW`7R?ZCo3rs4RnpiDH z6{Oa2h>0OC4W*M8gyg1}KR$e|u!9u=VRjm}kWS4Q3Q9_TU==tKp()R+zlZ^?O9Wo! zfu?|qceex3L|H#jjvo^Z-ieB-6^k7#S}m32mSVs(oQcTwD8z+?&k2*{`IJP9rYEz8 zAfk)ly!eZ7+f9EEnnTy|M7ZkL58!}lvC`QsSkxD#R` zX9-r=@~{Fz7YZy=0t0sr`-)j)tqDzEQM%A3)>&mNQE69+w&!XK7V?=`2+>)F&7r{r zvQVb08S+KJWh)K9YYwtMu_EY+*_BhZvmgU$5E97p6x?izpbBME0ml^DGKn|HIgFKv z0~LZ0sY<%*%&7v+r!hj}>Yi>oZ*xW`oA(mevynk)X4xz$}LPz!R=b{(iG+}IVh*iGC_g@c{7SPp*+T*Z-u%A_o9&fb_|N2I;w z7FA?y3(rhwy{L$w=LS07VZtkRj8xNfIL=|6mVnW^Ii+lCi^MUvJzJ5>yT6%q1Sc#s z5UjSRmJ@exv3|n7=1YOPo5;Xf#2veXFqcbM8`xr2rq9OTAK{AZuQW}{|b2(4g?7UeaRUkJba`GM%8DUb)jhkY=-n$ZD+#$nLt+XN7c^G+tp z6|mKiU)CJPSy#^yGInhL0KLFYFs8BfEgG&a=Y<%8(C4+i8qL;s72ZyGzy!4R=gTPg z27t1((Hq#h;$`Hct&p|S&I`4&1_4Y4rc-v+oYC_yTd7r0)>T2x=!8TTgQbRx>`?`+ zvgNBYBSC74C7c~VEK;LD+%uNf(49-Znt&Rxq*uDE1wp52R0=ZRW30tRrZ3f}47Y@( zH?|s13I$4y_Bo8v9H71&_cj{cOev41003~RF`REUD%VCTo;<~LO*C!%Of=jhnA@qp z#B+`&@5Qm}{44WUv;P3f5lNjAol10lN_8uwr&5lILx@7i%n<&6g8`Kd33l41MoA3i z$4Y_i%tL8Fu@pG^jgm1ILmw#FjgS8TIEX*&`H3xOAZAlCn00A6&Ls>LaeY5?mI%y4 z9N1LaHscslv_x>34ghsze5x!g9l=EvZO)3cCQ^W^#!EpR@@W?*)CQ;#blKTaDzc;l zEiM32VvOD(1Q2ezP%Vo(V1aJ00}A$`WfT|c)?l!b8$?^8sGy-EwaC_rRpc@5U6S^(I4hn{JECiBq}3Id;lM0?+X{bQ zfZMyJ)^g9#%thR(aIju<)Eo=-Hq@~1^*6^;wr>0&E-vvrQ>7@)es!<$D&YM}=*sCW z(*u=$1+>Z+a2Eu$O6E7_0=061k~4MrqarOrt0jFNJdU5XRj}3!CS^dkP2ym$h)NXJ zq5vZLj)D4=(?$1OM7jzKHfV~fyK!>WQI&MX3YCScmm7mCTZ4nxlpln0$Z=AtAYo1h zqS1*-P+iOi2+)RVKPe=2*hiCzZL4(Tg9F(h0W7hyt+z1S4%^+C)~jZ_nTsN-H>If; zi#H>{vY;l}n_&ky>OR)g)oE04P_3bu1pr-3+Nf}7;L#|vcPI!_7k8m$4jBByAaG?x zAgH>a%}^SFzbCO}g5zW>HL8#VGgY+Rg5F}Yy_j4anSINnkN6C4Zon}zlPCk6&Cu)0 z(0h+zR>mHWsLNyOUk0vLwJUm?{7SC)ie{&Rcp_6@fjXD&9pxISzxqIR`jr0w#CyVx zN2(8*PUp0!<&<$OaWPfGnq@#z`1}~j6-=^)@9~&XT7u-1LBIJbas|@OI5t6dpkzsl zO2dRgOz{;`TuhYI!(UWqp$O)G#!d3q8PHiFO* z)G`}a1~H6Fa+DSvN3A_Xt+BRon1E1jo&zlMFM~4i!=giC!i(*env2RIQyZe{T;O}K zZ$Zm?^b21bm`%qpstco`OTZC8LPl0(4q_~qm>92dFojl#1}!vQO8zl|8&P?@we4Uw zD=DD2x&VIS!{!AIF~Jjwg0NMoe3sfAk^ca1?FRv>$L>1nRn|B(E*9W$MB>4w9KNZF zIqqJQ>LLQl`nDO!uSPG%%s=%*d92j{En28wGRt$QD~I!4pIG?(R^f)9c!^YBnvWIS zEVL(;S{!IT;y_If)^g*FLC>#6rBmC2Dt#?+RQ{5@-wKV)fnSajTb#ody&|>B?fxs( z00QmxF9smq$wc6(PDd6(RJhecXmdC7C`6R={6hdyi{=}ixjMpW!a5m25RE}-tHdCb z3g#jzmfUJrXWBOO5uz&9Oa%`RoefkkHn^b6qnIMSm~wz9es1719Bsnr&_c0I#&uZHv&YDg>zjp+fC!P^@zH z0EKQ^Wv&eZ?W_r`LBBGRkwUpOXu_>(88uXlR%?4o zHnpldoPwUz7zTm9&~Bq?s*f<#&{TCrGX|z)CB^9xYvq0b@5H9my|o0EaxJ6gRFxd6 zXn-@%xB`Sf;-~$8`iV?t$xybyweJMX?h3OF99=IusOvf9Sus1HJ|K^PSyLwGRhO})qB2R4S>lp5$^3CR_0=8u_iPg2rl z2L?z70#zAnq)jr%_9cMTtc`{xwTpMhGioiv+o#hW6N}W(dCl{lH*mW3MhC=;jRzF+FgvFnSaP zOhH90c4j3tIBV5Syo|Mh>N(Y-{^OXc>8bw!u#bijJ!Oo7&qS!2BZ*yvnku)KP>IOm z$AVCE0a8h5?rf-HvGE9%^9LnP={2ZBIE=rh4~RWx$4hrDGLnGBt8YSlFd?A?0y`+& zY+HjNynM_6S_QtU;5v1LuT_|+1EOLsCV{Hh7ceA$c{yE3`z!m zV}b1N@^w5#lvUfOh%;8zbqK8;CZ<;mZjcMfEGuGu093mUs0mu4l9A zdp@IHC!|MTih701xcbr4)enQd1QHFm)Bq2H2)<00s1j#P#JYq42I7d!2x2EsP{e)< zuedE1U?ED~(($hm?P9fj{{T=WtaqD+8I2=Z2f6ezlp>}1&}Y5I=w6b$Cm@ny8gXAS3$f&uVzf7R&M_Y+DW$W#Y4;ddr3%F4`hh&i7)yPVRnOj z$(y@=sG-l%VNkFC4#q6QDL77_R^b<03azW#wTrfbDR%R@v*|YxuAd~t5 z2HYGj2l|hSG6nqlh=vZUa{!T_PAa7#? z$Wpcsb0l82exqV)1ta*m=9XQ4R*U=^Km0sEuf-C1Q{Y0&7>TQ?e z8&G>?8wbqfM}`VD^GF}uLs%j$1+fLcPzAi|IRHdrQ?e~uP3RcEsg0HtEGiuc3KRWO z{$m7d6TTaO0eBTmwW6{tTrGrfX%zsYYMx)${{Um~D%(-T`G!;gRjIaAtZvctxGhr| zOQv2#$Q)j-*DmVOjlmBhzRn4n9dEx0LaHlW{{Y#D;secd3gD%?>NMDljMO|4ExX`% zeZ5pCU%Jzp5dEOCGS}}t#T5|`ezi40& zZ#by105=to*2=9O;vn4KK$v0SUHmqY)a+V^7an1o^(Jyti(oVXo}q2TVBALPdyO&i z7^p`>724mJ3h(zfxD-^@WP$-?W!XOx?w`J33S^W6H4&$X0M^ei78XokOlhE61ho8r zFazA-Ku~=}SIU?oL3rhx7%lvx-ChDJ`1?9ss!I1{K3JQ79z2>ao?B=I0X=V7i~l!8yJA< z9aIgjy!ey_S#`RI_E5IbS}5tn1hHB!wHm#|$HT++ML)ZWeTn>TRoHo+(WxRg_$t_c zg3)XmSufAyH->p7y|UilxGqIyJuHq_I!SPiVYwcXo@$e1?=+&l3pw&)rCh{tou$7d|f3E@{dow}C+dy4QSYlPu2mF@xC zA4*Z6z;H$X0H%rI`_W~50UcxRDGIx^8Y1kUh_D%8tz_n6yTqtpa9jbl)?;g9(be zK4tUJm^k%PoTF}D)hS0u6qWYs3g)9aTo5kTs36Y3AxIMxHQ7@rVAEqCwhVbN9m2MI zk6vJ$7crSsfs`-+9*bm4;(L z?Q%?jajozZl3Zrq$dLjI3vKKyiO)JZs1ArxKz=-Xo_GI zBLtw{B7yTjL*S-! zEe9o85VIlFCs$%8@6` zZs3H{&{Rm#T-S2PTfM*@CS$!VC&P#q+9wc1yY2?0pyCBd`hyjZ12AETn!kxuV3aDC z7NUkXDq=V&k;|RHTX=;q)BviLSt7EW*by4c6w@qG`-6->UxkgO-eS8;RU3d;Ukn^# z3NXQdOQ@K`33x`pUqo($yivJRb(d6Ky^fLv%Jfe8Oz)_O)klKQAj=|yc+>^^DKF%RfpU_XVw=Mo23rrIcy5s zh8$6td=P~%&r6sjZOMCL%I?PN5dnuVFEBm}1PQsF64q-&d=W#IG`g1F3Zu*x>Wgns ztW7(qS(I=~Z{iW80^787r{6Jaif4lxF-^*M{)&Q>K+r%Y9XWt2%|&+ZFe=E-{*l;k zWY(q@A-o1W!i{HL#Kf;n%eX4%Lly2iv-J_=h#cGzHz`+eEG`r*bv!Ikb5$uob5W?G zEoFf(Ii@@oyMvVCY{P7?00U~U(}xfKAjdy0zo>i^-~;(oFi-$~Yhkc+31ElK6)j0l zFwSzb4BUbPOy}?YM+xB8pvkF;w~t5;O5Ie}#oO216-N0dlkF3$4OcL5YTzxvM$Q&B z0

Wa0@ESO8}S$AcNjWzS7%(K8P!Z_$8noE+Df|YbM|a1DSjaT^?ea1T88K4FRZu zjI(gi+8kSXmRi%MW5Ph?FLHy`tK|x$dCWE-wHFvrJxa^xrVs*xq%L?BHNP*<%Bq27g7=!{mTU_Vdclo)v`UH83 z2=BC{xaB6<0`DoMOg$J@EQC%QQ!D_@SUtxaLQ_{wKuZ0^20DTpf*BL$S#dGMqS}>o z5Im3EFuQ$28CS%!aD{JvV7iIwJx-CUVVu$z+LKS zT)&xwQ#eSu$9H6J0m|iIS!cu|qnH2{#mfHx@{c(Ma$_2$h7$EpH!Z5Lv3rgiW{pN~ zE*M2>GhCPgOErAdKqV;B!(&)tqNa$>8HQ&q=HP`Ap}tv+YM-fwq{bNZVki!vh1*mC zC@*ZX&^`AB2*Xt<72_V~5GQeg3U|-?fqSRH8bDAr?ft-2uBwQS5|?aCVS$D-+-SiR z?i9%et|hi=1p%Jfh^V#tianxn^8!4e4B{!uo@kcVSQk+XXdvx*msxR^y6#v>R|^Ho zwR@Hr+`9s}g-4PTAvW9NS;DvD9zScL3N3#-I)tS*R+@eN5s@>LFsNHHbT- z^&F?-;UytmMj=a#!vk+?86sapE1K;E=6D})G;lhb7Co@fXiogivAgA9#o>=Js{v`$ zsuUAfnB;JD5VojsdW#eW%a{WAx9u|myg-L{a={8=JC7YuSSw*ySGH2gSjR{zbn>#@ zlxU{mR}sw-AyqzLI<=vgbg!}$**(gP!n^t*0v}|%hc7Hzz=>M^{{TD4%T>L>7^mg~ z)I>uB6=b*uu{1qLJXJ!W)JEd0aS3IJM)fY5xC+x2+ktGM7Ga=b8%Y`S#5P{wzd;-M zmHaGR1yHxaQOFtN5S3VXAHYDgoXTcU$_zlQ$6(!AnSj57qS!d%AR4$GO(f0+-pstvop>5fGK3c6g4TNtK3EfLV(ue(_+;|5N(0b%a)ti%wAh_a0kxfidoto zYx0-Yo;Zwn>$W7Q50uR`#(9^?k)|S#X)lG~(R!B3CPNZo<^t5`2acd|Rkd*_#^A7w z5T^Tyve<*RqFs?)WY-bs%qZ$soWcap;aP`DIs77VA$3vLbKUAq)z zhABaZX68w;Y9xPWD}WgMp~}K)>!2kiYw;a>&X=e~y92qed4lETm>z<^NmZUnyyi69 zo@I4b`eMD&^1&m7BxEZz-qsKDnf-yok zqjSu_TApU5N5-l+Oz()RYYZR*XAq^kaRr5!#Y%gZEZGPhBc}O*ba|C?431;E*jFlI zDM5j;WF9nosOl}?!w}%VnB^Rfr9HIYn1w+#(B=XFk99FX8r*UmHx5;|OtHqiG09$F z*>k~iicJ&G7E8D48eWydF}0(`#P_JoK;xyw#^47kMhw(w%&?>})U`CN!o4EPgbdMf zP#ngV!(PG^vABv_;$$s7z|mRAvFx&>aXHMvBX!9O1)d;%gz((X5Q_JAR|vogmX2Zs zSXq3hR6APz#gSsM73jn|LxBFHDqTOD94aAEC{9s|T&xv$8=&_s&BSLs#{j_^nPTxz z#Nro-8)=3tSgV;XF%VnvC=q}yp`zkZ@<*DDQC(vY8{_j8ES}@7jtA+?XtItfCfOdK zA*W%1Mk|2~x*p{j_M3%RZ>yGs(UyLb5;%rFXZ+O3zG0k9Rgua>HHzA}m_rP2KsX~t z+TkV8E%=pV#@EblPV+44yOcvXyMP!(dyiGFGpL~DboB*A%PEOS4%d{zqv~YW<$`X* zc0z@k-eD?*jnr-Cv4W-olgR1-BLbybzz@`ND`ZWWD-njQ+{;1K!%HDn2!XrQRg_{j z#vm^f7W}}#Cs*SS{-ISv1);2d3{WD=O?4E+++f{JDTr9Qtu?BER4z9ZXw5E2Jb^54 zd3l7WEBKg#=z5nvM=%!bx1TZg(%^vFx%U!iSmcICS+WD6t6GJ$0(q8#S5P!xA}aVM zwJqoBE^gw9S;Dk9m*C)01VUdIn7v83sD0@e0Yk0&vh+G)~+{b6^z0G zTUpGkhWmqtT-m9-rA*kqA;iTjRAuJx zJu?Yf-7K<}H;dwbB3qP!MQqzKvoIL6b-8YX3YY-SH#|vF$+j^N8xAU5l-D#*)DGg% zk-PyIl~Xl2TD+-=XS=|wxR5qATTu+aVC7)%ADL4Rsj#}-tX$Wq_-f>n3Ukb@2HMPX zDT2C4UtH*tt9D`N=(qs$f=J;xdRnU|n#+%8T0N2Gd= zP!EP0Y}V>%GVn}LO6H~Jhw4=B;RG{%%B{N%;$1l};sW9AxVWIEyhlK`)q6k&y+)}^ zvQ?Qc%&TH#tB+C$lyxv)a+4?2O(`?X!9Boou74C&lgz=s;$Z&e4xp;&m*T|oN;7%t zQQqZpL7S_%ntCN>kBLWh3Kx2Yv`cdixj5=^2h`53^#}V^55>Nqq3ph*t_@s6D_jdJ zp?BOg5o?K9NqReu$it&u%nEO?nO4ti@}H=+8`)-Vfq7yLZ>&aW{Y!M>Ab3p9_szr} ztF}BwUNsXDb-^rcRlGrk1ClG_na;6lmp&i|*&V|UF&f&%R>b6rzixuh$E;BhW$=4zAi4+ z4Qn3~hSDe$oS&L$nQ5|Cu(D|5$Fehv)hT)Be6IhlnvI5+LQMBN^%S7-Z yn=yUQ8i-XQ^vZZICCZCKP`cZ!ff#r3Z~~?2izt4k4S4EZw(F=W;GQ@4KmXZJW8NbG diff --git a/doc/gettingStarted/settings.jpg b/doc/gettingStarted/settings.jpg deleted file mode 100644 index 510b29ebf4ab608e63ba6fc52039e3bc00872fe0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 130022 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 YCP-kFN5C7&t= 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ⅈTaQ6vLYe9OutXC!$agv&ot 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∈#w^D-ia-h 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

    NROY;Mj8w`ILVUI~%OcP{cJjLX9M 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 YProA*ug2nSiOsV0bcHdqbo(d&*)(Rp2><{9 diff --git a/doc/gettingStarted/version-071.jpg b/doc/gettingStarted/version-071.jpg deleted file mode 100644 index bc9bc5b589bd4191be73d5461534b19125598825..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 111556 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

    G7XeozNzPL3~9pW3(Dj8wX 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


    db_cmGgMG!o@1 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 z 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 z z0B#$fcv#{FXRe#SZ@;?~cT5+5FMfZBIyc(y<2>@|m-05#Kk|K8WYKr0z4V=tKt8}% zf1RI7EbQ$1_8a`e=|2qgE&CO7{KQq)(y9Gf06Xma-`CWoi)!1$N096|Uv1#AvB~p; zydK_dLBXYsmm`Bv$6a2+?2MOyP8+vN*ENuOfs|)9)tB9?xzPUra6s7;dP-Q@lFQ$G z7Ty}&wqa|=LELY)UvSD%q&UcQ`TL&Fyav3!-Z`;@yBsa7I~~h?+QPSImu7l!-L`j? zx}4Z$Vp?VC4dt@V5Zxmd_8tb3EtW$W8FGp0)(+sa&v{&JJgFw_TCR{Bkal! z2tygX40#!8yfCtSmR%thr17$Cu`wn0@E!}Y_rmfia1XKVOHE!)|ZQK5XHEVnDFmXf1Zv)>CkcK>nWu|p+S5PuT zJC}V*@NJ2D%(1)})MUFT_Q)T8dRvjX@Y376VU^=j)*Z1g;@+)zdYCqnmhIi&D{BU@ z5Nm|XUfwTKeLNLCif_?b! z!@InM;qvM_Ez7jMa6IRE_m93Z%cF(Y23j_p4luR{Ztvgs_`FY)EFlg>awg0#yKTnZ zVRjbEvki%hvnX~Qk0;(Vj`+@264AOFZridRaLEEZjmS1}&qH-5U0JYXqsz`29>K9z z96igEJ;F9|y~bJ>S83M{PrL%sVcs4eA&x`fWXN-dBeGn*wLG_DjZZCj!qWa0?0LtR zT#tANKQc)(?7PG72LUqOdWn0P-Ll-Y90oDtcZ2Qq3qsb_jp4jIV=hN<>~!68>x{Ew z&xTKt*~!O^+;A4WVwNy|cpR5_>BGur2b@gOSnge3=2v;uj!7n6#u_@p^%(;-^>w6wAHdf}zg18He#X(E0jXMy97P-Ggt@s<`1nRgj5%bM_R z+FRVkP7QCi)vHp}Z{4?Z)%Rz?yVbeFR=y^-WwYlaZMK%@oG~eDYJ2|xK=+T(mG?52 z-wyHua6;13Z<3Z^Ht_k&z+^XQeh%9Y^bGk9OUC>_ki3U@-o67%P8!;^<6&EuZ7$ky z*4JS|`;$pUkHUKlIVhZIb!Q`Xw3V^La^IL~VthTkc+Iu(54qffY;MaV{(|9Z*4BF9 zvggBc8PsFR?2=8f2XHK(e08&B+Xv?8gu1ji3Lnjd)xQz6x=GFlE$-9q9<4IzoZxM> zw>WLP!jP+PEZKLCxO|+uox5ah;Bx61VWhTGIO=?|=`T`;SeL%xx1B@TSXe}Cj`rIh zENn>@#>U3W&T>l|8yh)fo%|nfuY&Im@Ux8h!nU@=c_?tpmbSe3h84Z`#hqDX`yEEC zat{1BS?~?vixw(IkTLr!|j`9N3d8NZr0 zA^NwwR-u?D4pqxoTQA&eKK=}CK%C``x;SRPBaX)gT}vl(@;<&q*%>pP1|6AGgWGef zxwBd7_6rEf%;W2go~>iK!ZU>~%zME*ZJPtL?WD34L+mih*nU4P+&j+OEwc4K@%O+s96ZabZMVKV;pZ79 zTb8Y3c0A;Uc*!7b2I;yIZTKICw@(k25O-yzi%x##@0V?4>~8U)EvGA%lLsdgvxBFH zA(mM79G>r}a_n7CM-94Xo$lW4eBw!y0bp28JPPse4$GFd+dkia4$1AXe1Z?VI+K9I zm(Q3%*9W{lUaZq3W!E2E6CmR(;V$fKu`j9f=N_hQ&K;rHb`BLAR`ot|x2t0r4B_*J zJh!V{pE=y&9ygQNAsk?qPwMft_-&^lVY@E;2wz+-@VPI5uidiEop3qt1BIGe-J}*A zdcas6%fs#0$so=?_->ds$j(#PvEi3nwsmahBhEbI4X}eBxhIF0;5SQcB|fZJ{G`3J zhVg_8>xPr$4#u`|i`aAFyf);!d1_sbtz}3}+lYi2gj@G$L|H!Ulc@6EuJSiyolB}pyg zjut03jf<~_ZGmn?3kDZBAv}35Sw3*N9!bE)%qC`M2d3D^sWL9x|HJ?&5CH%K00II6 z0s;a90RaF20096IAu&NwVR37I6lbV# zLExmewO`yFK;G^Wl;Zh}0vD!Rlf*5+^)A`_g1;hWsX5SI;s)2^4i!G;E&RZ|dWdDP zUs3fd>RduKDSbu&6vQkvT};a~ljAIkb1!MjIlmpn-5kp>eNKyAkZ%KugV-$1fTGWG z;c)KD)O!|J+(p=JoVG?07g6GP;U*=|bCwwutRlTK;2m=JP56mOZD7Wjx#Q z1^r48&WN*^0gRb{;awLE!-5}u$&5Xa(Vq56RV#$xxAj^r?x?hq+gm2nJH zZfT4-_rzC4xGTxx#1{yk?;5;x}~}Y^zGY9l=p5uw$3E%Mk6~buOg<_XNGq%pFWU zl8~xSIg}Mct(41m!*NY@-p0LMV_$I5RB;?2E71=eU!FfRDxP?n!#){8Ke9a&$Pg*R ze=`YYH`Cm*+il6R?eK&@Q2KsiC8~8+2wD^^FHr$xdV}g=pQt+m{W0%S<@cvD>m z$7gUQBUva?qbsHF5h;auf`ksETjKEmwpbO`U*wb}M@8a(Tn^&uQGbcZieNzvXK~ef zhYU7{+(AfHY)s}NruJtn+)pnaWmddOh#$BtpxUe1q98C8R}36zHLsbIQV#1P&}T^t zzBA?!)oD$T2rH-+M*PK49ERwwrk(yEyI&l~TbiP{w?dMf6sz?pfaOt|5vfmnT&07! z2ie+)7bLJPbqfCgU4smp0xj}jtd-g--h6?Q;pg`h505cLggz0L9`3Sam*OP=2XDAK zf_L@*0N9hh$uO6Lh)yJEJbc7dJ6R0f*Tl-# zx`|rR^9?!=?f_+Xuv-%FOS<~83`Y^GL(ICMd1@1z68!%F*ASvFrVL+EC6)C6EUV@X zaa$0eo;O{~kr&)F&Uv|I-ku>I6)ak3R|dR1Jwiw#ih^PTedJ}TIq@hM&1w8h&Y}%B z4pi@$izbd<2ybs#&81FSm#u?UT|=_^fC<6opeDDCb5snt4&aW?SWF9lGcf#0ZILJP zK&USJWn3rJp+j8FOG)ErF+SpO1~4|hLiw7Moe3Pl8*H}eOCS)@P6|nCpz`12nOs9j zLo$xMeZZtnZoEquyVG!dA5j9wKzTkRGl<7P;s6-mfR+j;Dr}2TCjBB0FEY09fS1Q; zaKYORClcO^UCaRs%9+@InCPMID%z&gf+$s#v#aJ^zDV(Z^gv}`ba9X#P)rn1bUeT; z#a_z`Zl&dJFb-!7r6{-JHv-oy<}e7>Y@=A%6(-76ZuJ@qPnZB3d}mQ9K>8q@MM=f- zSx)MrHGFXf6@NDyvG7d<`HVAzf8h%HjfoY$N`cATrC0R=3^V}Xf{!>K6#oDuc-ea; z=yG?|ZMG{Z<|TCcj>xstldFTgom6>84-=TN@fU>k+!28KAQ=VkpNff< z{4W!lYq-{+k7=>ON4Q~4^+anHD_-iw{(Qy@!N45K33&s=3?h&?R7*O(u2z>kLue=$ zRpLFP2?dh`YfXI1)pS=KcnPkZWHws^06!iptvP|5j-h}W(q?6vb`H8Z%7 zp>61x6d2?tSKM|Ge~d+1QQf$MiuH4fQ$~Uj$ATr7th&Qieq||RkxQj@2rf1HB+r1N zi+29vm$AuHwUy1pnMQLoP!`xqvYB@Wy^4wRFs|aP4SMcz7ak>QF$WFgI6;AcRZ=US z*f!~1KjoaLw;S#@h#L>IDliW*q%(# z^zjXq`-TYNfe4)sP~WG)8--t@R9ozv!a8hDpD|bq&XH2pV%&%j@c~u4#w%@W$%xU4 z(#(LMaR%MWpDahJRwt{s`He=B>Fz5^{J_*zo%a`eM)-J!(Q~sLvILUn9P!3z>a5^<%;xl1Z zo_)vE(Rd+XgL`Crjt|6cgT?a;7u|#kS>|dhCTKn(8%NaS7V=LyL#(jUM%A3WJQ)Ru4+kKdaZuDU)f5-n?%=#jX|}3R^@K%h&Jx+b5If$+ za$K&ao^A}iYz~KyiHf>87je)!&nG|m0bfo}_x&cBT=JioDzQzCIJm1~0Bn4Dg=Pw&w+BqNX}j~2OGv|>e;j?oQWeNY zs~A>oHO^J@5!Kbe^idDEtHh^-srWFaRA3KtJrhmghp-EL+&Yf9iKSO^-hv_ksJTF2 zh}7Xmm!=Y8i;tPbE9Z#Y01epIgHI9i_uk)7{0pjm%1|1Fv~!H25nHTVy9Iko{va_J zd5MP|k5Hi2cd<(4#Vy5aVd4Vl2Tw5qisXgW@wPNQOhmbtp;Xi|;dXT_zszh1zR5&- z1w_%Wi0%e+P$NoO@HXNTZn%`%j=YFHj>h8&k^#l|&|qMJ`FP)b6!a3gM|Ckz%Y zK2uok*BsThpmhM3$EI{SyunObJk3%9@PjFhz)MR$khZSdUBp@?fEPp4Ij64>1*>Ro zFxsehk=o|{PFSU+(er%5RctM-dFK4WOQ;xlh~S`G!|@6#ScG%HrT$@;D~c7>E|30M z0V0ur0uF4^>N0C_RS>Y1d6_nAzTr>+;9S$u3c$De0d6*wR8xDJLa9?nvbd&Pg=H%O zoWas-#KvMAnmFcKAX&iJ$7wkN?0w48KHXvmB(sh>jsOesHzNCm21fPKhyFosp+kHB z0JW9G@mfcr=Mkd9<-)~R%oD>iB{k8`L1_lra?AwTAx>t&AX9KG(A|{E^hO&`?FNTl zB@)yX%Pq0|%B(ubF46UDys-mQkGW3lJjw$90Lfrqn63_Y7_64r8W-_Q5OB+3oDb?6 zB_6iMhG{Dwg5rQU@iG?Qh~cdl(Kz)Fe1A zAwsbFxmJr*y?75(v_DV{X4xFE6Df-ZEn;#p*T_?As`U^k40xyt0qKx{OyKu@z!tD4 z5>OhQzG0i#JX|IyI|$2v5WyAUg$6!4{tHj;FsE^O7_|_7V%4F>aRGkN^AoPnz}LWB z>^~6JQFW2sCG2L(2RqE~e{e>t9w3U1zfqt5N&uWnj7FG<8w`hu7J|K8Z7Sjw9yzIO zH~}nOg;ca3%%_qym&7P1_cVZ=@*@5U`;N>N!~Xk);p2*Bbb`EGrh)z?w-@M_cnnR7 zS%Pl7N71jag?9E@mxPVlZ}k?g^S%C|R@=3w^((@<^AUkz(wr~_B3VwUfY_^{%i2du zhJdRay_P=e6m<~XCz*A3A0p)-e<&g zZ54=BPIi_$1&4`Nn%SEaIu7ZXGK05B4sWh7f4)X~cf;_W}Eb_?!&H7ZraH-%cv5IYH= z?&0QMHoe1)p3WmW2CCwO6M3+BABMVlAjn^ zfCArDIp^Kt3Tuz#F=C2rnS!zW9r`L5CVdUJaf|5E8OzK9Ubs*WxhQ3kSP#FUCyi&uuDJ#T+Vlf`S79 z8#%bpZfIyZVw6{t`i*8Kic{e}_8dnB+9=plH1EU*AbeIufkhYgf4(7rZ5`Zy_I&P8 zDTI!T)4^|+`}Z=DRF}gqliex#iDIc67}6@fSawJBl?%GwcbF3I&vAhReh#6k9hVy@ zBl0i#X5~(8$9%^XEKs5~M{=p!Jk(xacqM3-+Mb5g<0U>Ks?K0koHdX$ z74-*sms-6n=1}{oFFnlB_G3IxSj1?d+!Aw_;*l{E9zNGkaf<%{M!y<7Q} z9EsE`Sb$S$Nfm#I1Ox&@NWpwvz-@vYak}(B<{n_u4Xj??;nhB)N5XPUN)g!DEcRqv z)o81y{{Uk2pvXnKf9@x=OD;V>xnQtWjt3Z3s8BDZd4WXUTI#XmA)G9?Ro#Et4Nrhb zN@DVu^prk6YIA}u-9>JL7QP~2P=#$brYxbfdAL(CTSuy#Qw`CFmjlq;u(s+2){4!A zWVxeq$$938Da0QM4K3q_U7@9fpbJe;+$EwosJ7+csd8)a3dPTfg{!?*E3fqc2cBY7 z8j_Bj;tNRI93v~t^Adqm&$)*AiJ&X~|0#Vchh>v^yIgATbxpew@r!rXEi zKyQz6A6!4iES%fwjH*RW`*&ATgy;zzzp3{)n1zTh+!%vuG}qsKKrZKNx_|O1tpnu& zVdsuo1Jf@9Q$r%%!|BQGDDR7l`7WI+*_e+Bnl1avirA zqrnkG+tv-G_=J`H%Tc$DftD!w5IGMMXhjVV%B8*$8w1?Uz9$2Sv8#WGRLgsM*_W=M z*1Wn)I(az-SOi`1P(%{o)w&PFS7nb8lvFKv+|Q^fJ)sW&0Qm~-H9$e4kD8a@z*t^! z!*?!LixdT<_v#W^;U788^ptRKSDA$q9x8LMaJ4_QE$k$|Z=462Pp}TJfjZtC19Tu86nGI3O3R21kZajU#&Pd?~+80-)Q3p%&$urK<|$-O zPYL1Q?xj-KrSU0Mh2=_91*q)wR1Gi_8x7Idb3|~;mzFit87jq?)JMQOL|0c)h^Q#x z^&KO}Ll)_m<-3)zW40QA__$gE;Wn4r+6VP7xRtF`Mf)+xL8Pc~Zxi**yf9nYPULu>r~rxzZo*!}Um=*>68FpQ&8Z8*TF27&t?iv?F_F z)novG4;Pl7;s!&*f!dz`00m0e0YhQ=^&WcdCxh4GaYncf{mStCtdtHwDc8Ai#M)Fz z$y3 zMN1af*(kC4m`2Ubr+A$$AF&p`N-kCnrvc2RD!v6XIH&l6wTtnvWd-nJa+)f-J_%Ka zdg?wjQWf7v7K3VHQ+-D=jjWkl>xdt0e1$AWf`>WYd6}<(ofe=Gt}C~gPsR}i%ORKTwn_1<}dW8A9jcRVDBFiJ^l)*=<()MO?nc z>uN3YXYLIp_D(|L1778Oo4Gjw?k3e|5OSNb!+SJejfI*M;#>wb5Ca0Vb<|BI*p^`) z6S%3Mn*;sJp@9vbbCCAzh$wm?Nbs&@^-z&au@nc0Y^4gMBA`8F71#d4)n4W774&9} zejGxvHh#_^hJxd3RNVc z%O@?=5TI(;EZ;Y=m{4Vd%zA*7jc3HfYO31C(|;)S9HEM^f6x1{97;Tkj^tEW2JwI5 z9sw%DyE0VETKv%Wm$8LNA5c_v-NC8|Z9K}P*j??Ijh(Db5vB9yJa9R)JuAD9K=%N! z@!K56er3!X?q0*v;-bIIcC_PRhTG;<1IUKh50;{W#xndx&6n@E^J-bm{^AvQh6Fdl zN*}Js#|*(rWu;ja!~x`gv?`_QY0C8&Tpft#C`)_Gp;5M5OB~V{? z{{V7?MEQ=_ZnGZ#=N7ldgGo!^=VBJH7dqTQeSh{*C|ZsWej)d497o9f{&?jOq61wI+ZYEV9T%#(iP)op zD7*N7h@RWQU1$M=Iwuvws(14f6dq|mP#*{sTkfxjo>caiiMovsb;A~c>1ZF^C{_+m ziHyRg6t6QWMXpjIvlT;8jdM^9K`!c+>GLT_14k&Lpsj1_0bpKCK(IZ@Lmo>d#LX0? zFkx_cl$6KB9J(Jcie~#R1xZh2G>~#|i>bE_173VYa@U6CIu`U}V!eg1D*2Q!{r>aK0S$n58x7QM0Z7$GE_a&DUUq72U&` zMe>>B>#`QMX|j(7RsR6&pclvusb9u-P(o>{90DxPTZF1LwTVkT0?!P)QBf!pgO8C{ z%|&u_Fd0i*j-N8VL~iimR+rZ~D^hNdDt79?=HXEFVNDCYmi}Kc5}fOif#&`o*2P5` z(z?rA`irU@fp_Xu2eI`PV@wOc6G{ zLd$(kBSBosTC2ls#;l^V`sP)oPqrAkd=Mw~rIl;BLC7Wa0(rR7sJ`wR3jQZmw*yLo zD2WP4W7SxF!Z6rG6;hP|zV4-B%Q05`)bD}u2rCkuq5-rw5sVDbk!yBeCrTuG+^?ec zQVUCM)j_5T$xz;vk3GOEbhT)Z9Yw40`IVHyIB6aminU9hXU@i>0N}vS@FJ^ zr!2P>`-$l+Gx2i`RmG_L4-iGAXp99SG_>)|D8YlvTl<^h;VgCiG5aP6b;SmkUN|+7 zW%XRtqN8gsjFy0V*x6)RJf0wcE0uK{aLOu~)xP5D4~bd1@c`B(hWLi3(ZtsaD1vC0 zOSpI9Im5G3NK@7S*&;JoZW#&{>0h`1zNKbxO;3Me7w*E){*XxIs>SeN;JY z9jOT6D&2+YsC=G)ii?)Vp8SVU(Gj6+ZtlGi(7(A(25qm*Yq6N_1(g6ejO+du6a(fB zJMPCukv=yZJjgR=`{7jn*TT4DK zJ{DF|HiSFCPY)xcdSYnmaD0|;WhXI^cDRHpEaF&2ee##8!bdgrOb{lXG6bgI4^aXD zzc4j{>I;IECi;MbgGHJRA+5F8PO5Sm3u+rkqg%HKNdVpwgbTXRZ#a)NjcU5$y4!yw zwI-BefmHLtyjrX?EawW@TJM^>?i-Np$CxU7@tAA^8AJ*2HD%NP0I+ewRwb%Vr;)t~ zJ`$T-Dm3AFTk%c1RY?@piSx-D`hYfozs=p+z)c**uMP1C30ImIT#j`J;U*@_s-pJc zzMd*%djm=?d-wUAa|WABS9bn*_=yBI&HWoqkGWT8_$R)g+=M-5kp3ZoDGRVi{{TS+kIZt3EYKjVMvqGEF9E~Bb@G<{ zr11^e6BPm{k-50Gbnz4q{;+J}v3-06SIFS-S*@3soq)DW|%(${P_d2-LjzcHnxx3fR`pqoo=31f^E? z)kwDDFI^uofZjr@mrnz~nPGc26gFO;w=ulHBH|id;ZM1(DP3vg9x7F7y*M9VQ9}=Hr_a^Hwg%q!{{W<_5?cm#L%{8TX%AX{rM;$* zyK1j0-{x2_RdZQ)Emk2Kj492da>cmn8uBL>`pZR7)EB?ZwR02P8tQx}!dI3dG4241 zIQ~$1BTgc`&zZmQZ^XDtW%-r^(>gW}NP%M(m`$cn)arjAak$B~ZgYmMLJ1mrP13+HysE`^&Xo=W)qqt4f=q?}x$G+@DT;}(=r=0Vl7^dX&RW9f47ue;)q; zm;B2-$_^rXn8;g|pq0x*;)^>X_Bbz`8=!Et6-aB%!eyheC#!~5M zh;9C0sTlf)P{=u5OCj5c)p+$PAqG{tT_~kcHTP^Tr8ZJ1N431~V_8j!$U|v)GRuc| z`;F8jT4_#zol7I^xRBN>$XBy6A>JDU8k9S{VQJg#QE_myRf5&>wOM+z5vr_GH(Lpk zbcL$~!&LHd3%oC)%7wm*zAw!|$0_(Cg%_Z22F&JIHp^SuwM(InJa!mt-KxOwI{KEU zQn*<1C1rE&3Z~3Lu%RC^gw_=o3OQT8qCHJ5E+?QcNk9hP&A;RE9Da&b>dO@>bmXpO z%HLC~iO8cFL!<@pO1xA_%u(Q!c>e&KkW$zi!GfBDdGY)!V(V&pB3=`T-~5vjEL`XK z9nb1g4nd|Ru2b}&TI)(m1?=F*I)MyE`8|W4=)K3rvI3DGD2RK%&CaSuZY8GFMxl&wN z#qD2YR;9+Ap-7I|mkro7*%f(zpI`9<>(t4@1Ck(iT%(HqCx(1~39tMwXrAEhol9oD z5)pD%9-+Wexn<6XCC}j(_JZN}AFNS{rCzD{1>k@Ng8&~X#nCuoKc;|*tnvcKr?MbW zHmhUt4j>*z_uK@QA*$vxhSzH4aUM1RxwX}e6yxa&Titku!sWhm24+32AvxTSN7zM2w+K|_6*udEwb z#GM}nY_eJN99vsK1-5K#01kVW@L|GN(X>-JAw4*G4=$^Rikf<*VRfe0Dj)8;!6`E! zI24_7%4;rkX}8Tc@hT*cJlFn4^`O#){{UhiFr^k$2BQl`exYy|q14dwWV*Uw%ToUU zairK0%?1mJ$zZ|wNoSZJl;me{VZ_zB?EW5o$H(#~nUmsKb^ibW0h5%c2Z*Iyy|xb} zbpSYndpOQxLm-^J!M6$VDZ$}=mnkJ8&j3e}g&Bq% zER96F0>@LQ_Yo)p0uUtDD7dvNrh?_!;%mL0>bSqft|T6aivzF1YI^l z`)48dxdTAKZA}3it|AT)=ek-2*fei+fDN)m0Lt*KcAs(Chy_7oH4(L6D48ziSwg_+ z$QJp=ZV0B{YXdkn#X~4zEmLEfC~~+<*+SPYz!WK#tj`kBKqU@EdB~7=9wE2oeBa_+ zvd4Wf0DET3!uSH#JErmLc%9T!OWU5|q)55S;m7=Fcl^Wn{{RRbK~#d;nK_>jtBnfJ z;565Wdz4OZze{uz(cUY0kq5 zqzp?Ki_uaRerUZS$Z%|8!Rf@7N_hxAtHTF|{4vd0ergM#_fQjlCUq{O(oGacLi1S! z+yaYIG0+IE?=l@3(#3!psV6S)7byaW%~=AjXi zev|tX*pA~QYTT~<4rQ_hUIX}fpo4Uu6O16QP;9xXK&vHu$_ug`cSV%1$iUMG#P02|0XLFB@r-|tAdd_|rJV*Y60{bX z7m7jikz2w;r3?MUVmfWpr^JQ87L+t zh+Gbr3#wyrE!}Pvqh8)ln4sV-Kn4w#9ItFt0VXIxv<^bP{{RrzKq0(a+H}x&@M?_p z!E1-mC|#;ACmP8EhCS!$9`H20hDXe70Yj>jb=5^C_tiiES4C#B2v^>yMYp@@jr)ElK*`rAg94CB7> zDudmUBM#gGo*qc(0dCPU102+<9$W+v>GuezU}%sSQ<9U}a`AkXQtFE@vy;0Hj4s+? zXKkQi#z3f4?FyjQm+Q8Me3a3M3yj{8!fwIzVVmQVhCh-7VnpT1B)5ROuqEectIy+B|oV)=D z){Cz_#&7FZ)HgWhQpG}?0c&@+%NXB4r4|PqzA|yU5rqr-K-pW|L;kTgYtnPVv)L>{ zRL-YA;<`cweI@z+Zm(XY{dd{XM<~Hw7jm$FX-@@%%qU#ImF@sFJvPf&I0j=l4YN_& zF$5F7X9)vR!0VjV?raz}=`RW!%7Pugl8z_?PQ5ve2f4z9sv6HRS(Z}>69p!7!ZQ5}NO&Y9d0=_OXJ zb%H%NSqO-#Wq~D-jI+0I+!1KfF_yG+c_kB}t*++a&^@-P?b@owCN(m5P zXn^wIa?AGH^d}9U2t^6bs3Jto>?<45R~{<%EwUP+R0`Gjeqf|PG&$r|JdkiHv@(MG zfss{*qyCs_v?Jxu+$E38HN#BxIDP*B4fve6{sqy8Za6LVE4Wp^riK0KXe4CM~f>%lm@iWjb8G<6yh#w|ESBOcYnp%)OGlkX#(0mjwnkjhZDc4 zlj<8KGBD_TcTf0ESAvQ%{ut_=UB+I;@hS-XL1Y5zkpZFtv8;O`>6gL8Hk{qQW#o0x zI))V#Da&$%V6*Fr^C(`j0J3pJL!8QG@KLm2%dAzyO@!k4F|90s+aexEHb7_@00QRy3`svTBMD@dzkc2Qf>q_G>CuV>F8> zs`xJXc2i3REnru05y?YKf-)e6)dNc^miO?0RZTQ_DM3Z1xp{ohum>;)5$65M7{4G3 z6cRgm2sM0F-P=2D1k zPjOQ*+h=0iWY6Kz6_T3SM91+A6HXYo0p-h4ZMFqtQi$Wd>mVF%0q+$nqRV_(zwQeO zXNrIYE9$DJ0Mp`g4Ohg(3aql?cw2PbJKEk8w%oLOaCc*1%^N9hm{Lc6z@S(p(Wn5r zt0}VJg^|S=5U#7dV0e2ev>v;D>h^2=gAf9oCE~oblF}rQIMFX^_5t6m795Da^x@or z;sgSNDzp&3O4}*ByrJ0-g5Hw&AP|x~j~azV-W2u{+vX@}>aPK*#w}_!u(?8&&?9%q ze8J{gf$j}~u@kX?6ea0I zN@{ohdqkW{_=u~L=Bjt+V_YmE$~OHm1G_76JW7JvzG_*5^aO2z;VM|sA;c{|CFz;tO^tlk?%AI82!$<4N5MO%9d;>Em~ZSrRdns&E$924s_vF zOm=TgF8=`RJ{y>>(yy!fO4KXCRg|%D>?Ty9sYW3?u^j%BCIX6A)<80GPFl zv^g_)jC~S-_+ZSwjisnSh7_)#P*TpDE2&;Q-qmnQQR{-G7=O2M<*8xrF{Oc@iF=Re zBv?d&oq(F!;O>Y-;8S(!Ua9pR<|Hhf!OJW;pE=|}CoBThvejq?Z2th#B@oyYLa&W` zWVJ3htQ>g5KlW1Co_7n+Da;vubXhfr7)=2ePrJ(dehd_+V!aeW!2bYbvNa>M=FzXe zQL9p-&C6bJ{lGeqkzN4jgMMR1vnI#o#1z;CD`Yq@aonwm17}#(-c_QgwdZ3b>%r(n zJX6p8#s_;>5EQ6L#}`CsQIeoIHjGhRQN#~6V@~k^+=S*3(ip9>Qk0|w<-kCEyr?Q| zfxL{B#PFL53_|>m;J*I=j<7rk#+1TQH&P$!)&oV~n2M`BBe1?D%974nTgXs9Bl(Fq zFOy@HqZl9~D z$)>1o?9LXOs#kEl#jOiA1zDAqlHOri9$!}02UJ3YMbHIy`zKyHaXgZyvbG!x+lVwM zGlLOVg>jxTSPZdsaci{wdyI!QbXPG6C3OQ_{$j&tyxT|6{-;L@?H%Kcu6Otn;3@^> z_W=o(A5*%xtSIVuJA;`6W8zs~+r1TSu6mjlha} z&P>gBIca-ZKd==5eB}#|TM<-zToF~AHwX-oc^&%DhBPmBxDSwelmmZouSM{O{>r4c z{Yswjzq90u?Z9-3ahjlwh=vta$!!~#OYCqI#6twPummlQ$)?xtm^cc`igL!?1z}KC zH^3Kii*xs4k2zCXMwadhe|omPQ?}#rH;@}@15{|J3?$>f1s0_Ul(gxgA9x4ky`ZFG z0cG6;8yo;#0K6+Or>3g&K30sOD?t+Ko7M@;2a->KG+^tAWI^0p;fSHd-yv08x<59V z2TW-^#_Iy#JH$pko!Ytn5!!*p3LyQr?i%?f^!?#l@QMPtU+`3-1!>%(sv_juo{7U^ zqPl|lL6j1o6YCVS`u-_+C6=mH!~26aO`vRw=>5Qsqu3@KMDSt;mt*`@4y9g5mj%jr z{w9xNA8Z-pe}kQrp_S8-WkkXa9%?O^6dInCapY{sz-{ghE{T&@^O3-%_RFjS7VWYA zW$Eckj8KPFWYX}y20{0(A7P%lRkQL>7M~kRn7#5-$S~e9;RCeYMTR^x9pj$Y+ zG(syqaVG0%1?xZxNzK`Z6+3Wog_R$V90-6TqdX|sb_|!q>pVCt~Z0T;G)>T`i z66PW_{{RNTUBQeK?o@J}sVs8y0e?_TEdkhUqDs9d+yjjHi8~<*4=MBfA(t@L2h6uP zl)8zxQoLWeezG7{&XxT^&SIWoXh^S?QI{{~VN?n{8Q#l}|uMZFtL>y=_f7P?Dm()ukxkpNr0I%~Z^Un|v<+^b`Lh{?wWV(UN z5@}lqBYWP!MmrOwT7@FEm3WuYS325D(2Fk^GoA)B@}^M$A-4q}=d61Etx2;GICkUSEk zFXgS{h0)rp$$2O-gtf6uH${1w{4`Z;6fUr{pNQrZ1a}Hw&-V~ZK^-A))Ul`wauaXc zDKK5HLTg|{440BOW1wj09#(Uy$^3i0gdFEmmaM;U8jqNuC#VVoE+wC&RnZD~gDBUQ zA(Sa)3M>-B9s}+vj8Nut3!cy6TPxrqdmo3)vl?UyY=qxOY(uX3bYg+uH z{{Xo$&}vf9f-5xOY+YTeDqHL(5XTQtyFhcebWuf=s0*MOZ7G%bF!Tk5P8!DS67xOe zfGWYPg@ToyCMvMSEe|Efh4pi%epDQ)2O!f+@S#xBs>^}sux%F@u5bcy4T%vFkfW$3 zG?Z`=OXX;>)H&@cDB`+83p!xAj66E1unTLZf?Pz0OGN=!*&kFXmIhMFx6`Ro6X;dL zoczG2L~eEd60QC>rTPd#?M<;xc?TI)%s?VEjn{TrT4EA*1Vn@+mlea$&FRPyHce(ev-?a3A@)YNq1$B3|0EMb)WQ@wFKvMDq0G95nhkD z3B;*U3PpU3&W67i^IS`4(0#&1KKqw#=234gVjgHY4yZ+nz}T&8pNYiidwan3=34d| zC~LK>b#*asma?BQJ0$`i77;}}%hVctM2!q8d4h8Ub|0Ak029O$xv}8}C+Kra1+J?H z--zfmYB3z3j~Dk56yqzv0eIjO`i>}U=;{)?cal>TD=D}7m8QPQNgTeVx6}nN#o!Va zSW6@6moYniniadVx`+DubDordwXQ}-S*!vDoQfu5`YXx;blO~O(aFD3g0%=Rq^Mnu z(yFBkz%Z2|NCnU>{FD+)VBn~R)S4y(Y&ueaJ61R$mK0om0ji+n9kX#0KvW=tPF@tv zmKbYJe3?A;N=;n=6Uh&Ev!%>v6xTi1%n@3d3KA-a;yo_a%3ecsg-zJK(EF5YLI>pk z08z?ds<|9(AEAiaytUH3p>FtMY?TpI#3BO(fm^}Mv&W~z< zl6r*)SAO+#P$$JCV#T{;wHHJLL9bgCs1d~9dqF`Rw}=59G~&zi#lt*8!NIa>w_s3I zvhO#6L!@X{ysYjB#USHhZy3~6+N2gXm1~z(npD_SAn9Ca%vJJhh$5w+7A&N;H{!T5 zk4jDI+N<0V-F7Xr%U5c>{jh!~Io2PCxVYMuC6$u|j$VDb;H z@em7#l>Yz>0nz3F0>Xc5giRD31;UQ2kG5UgFr{s$ zZ@JTjn_cK1w6!@DM%z}^VUaC!O2y#e^h|4GEctOd>T!bY{jsXAxDiT%M>g4gK(@jJ ziXWqciN%4;&uISuRT%LGf+0)sL?{Sfa#xM+X3RvzU+5d_{6xoUK>7oN_@%;H!RMd& zxYDcmY}5P(11ylc;v)pd34~DsSrDp35UaLfEC7`HHKqCEGjm9_P8>5yjfs_!&#hjd+JV1n2c5bhiHWMn}JXYD3MW*sG;f3!&aw8AaIwqMA0YX>%$YHN~<9A_7%fc!gb@R8HtGvRHFL!K)9t zIcn=B#7V+68v{sM_u#03XmQ1#TT2n<4aDfHA*|q3piV_VMd;N>xl_zs7S-(Yz_C!R zLedr2p;_kakE5(Doc{ngBcIw6YIgnwDgw?nHXNW`!s`Y0FL6>lTzgx~U~s}L2MlbW zA?=f=HoU_@&wmiGTW~f|WffD@ujuki`Hs<5ajPsU_(9OkeBAYkZeSj44lkErHE&hX6~|-2r+5l{HcU2PiCX5jC9a9ipuY zTiDW9wgY!z)`2n6H|37)miD-oL^syK9g>2|Lu;XCUT;!K zp%t>SGBTGd#4(U=Nctl=>I2CuO-wgk{{S4N*I(3bYD6t{cSC6?2FjBKUD@OwZ;G3; zYWRb04nSB(tE4K@^)6?wQGyPd;S|59Cx?Etu1}io2QUe`l&0O)dzl%QlcLQgx+>eb zQ4$t_C>&5JPF=!@ymyAS{oG5)ko`{kxTw^$1b&{YpG53}n^&g-(FLQl1qtvoopRXF zw_*Sraqc!7pcP2#IF3xHPPjZu-bwTsk_ifC~1M7?uIhu zJO^HGTA&G@*Ou?snQK82pi;-l{Y&C3u$Yyt4ik&z$yFx#I_=*Q+vE%A{{SFD;$=#B zY86g2hcL??A~LuI^fP{AJd>K+2ZEZhMKW;yD=lsQh64ZvJ>TPrO4)aCd|ogTlc*-w zzZ3l`P>7!%p+}$Lhb;0zd{h#UM|k0sqhCoY355iCP{+9#9@hfrV8^=U06C*jDOMdu zoM47J8!Y!Syh8(fdG#s|1(hHY(gInKMUvV9d7*U!3*<5=@7TWJk;JP_)F`Rx{0U@A?h8o6>I3rR8@wxNplKwce$Vlc=>ve&AHHh76RD%P4j`BK=a6Vx!3P1*UAcD)_Rn zORkFtIVG{u`f7n}c>>Qn6Ru0B`ZjKb_AJd<)&X5*tyfL~fhQ%oZnNV7dK=<#5_ZC! zB?|=A4I@g^ohqnoXlR-(-XOpSI2&s1bQgSG%Sia#-C7+eC094y!j5^XmqEnXa$58+ z;+7YHTe=4dLkJ$1r6g_A)l6%VGZD4?u;x(ev~S?QiL$ZFTPO=dUX7Py_v;Xbya(I3 z=HDX61JR~8;_X3IFrn%5Hur$u@bZ9uBH)qQlxRxopa7>8s~_|XY|wF#p;DJg#5@CX zvhwu4{m%?WSWcHc7FLtN%zI;-f|QHLLA2p;V$FESnr-EHe?f2&KmeT5&cSSocVW1Dh9z+DpfRI(la7tsu0Q1<)IYh2}bdlRcpf>Hj1U6xu zpgC6(i#0-wp`vz*%`>_vXl3JDYn5CxZ#c+da+N6127+j;yTN5NJ2hpVrI^q~eLL3c z^BnhD?RB74_XdawbSCKe#HB+VglbS5x+Sl1w;3Qcl}n(8t2-75N&v71ia>}}(mIhu zl7$P{Z8~($OA?pL5AzxA6kNHIN@+_5p?8rX>&1+yQ0iNIRRPULqSA*z1J&~ha;+~+ z_`B{P>vgF;UT^r1)o2on8eX`Yo>3Os*0c?Ch`x-u)mo5nv*HqV8o^Td(S@EZI!`{y zl*+Fvfw{}(X0Z1WF47XWPY*K4%cbP-2NjhsGZ*-0p-Ibek80G1t4BbBG&pR|$6S`y z9bUWmO1x(GM=4uZM7v3?0s^oj9F_P@Rv0sBG!P~ceRArTRN1y{Ik09fV7gU#xrXCw z1DYXiX!k5&ppjV>T-WSQj~N!YZCau=OV|WEY}&D|=3Pus^8?yUGD&NyV@8=4f9w$V z_?t(NPM<&U=@VhoNROcACD?k)j9%yv^j=_xmMmFssgjHvyG;3E(&8i)EGcOiRZ5LZ zwFoG|HKYAztt)On8ZiD_Hs5Wf34|zLO=+^%VO0xVd2>*T62sP83(<1z;pVDQB^DI1 zR?HMHqM2aWvUXP$jt1Jc(oXa4oly$MG_B0nHf$4HS5#3!eZg9*lmG!-aQq%6%el!? z5Nx@1S1wk^r8Qt1eik-WQjst~0YPU3Dd#zXmCn*8mD|Vx+J+rQH1oJ3JQtN?9vgis zY@mP#IhX>CL0D3?uFSUV481156@K8QrliWG7s4a{Au9>>Et=^>v%8N#h_y;2_B3ax zbI*pS(UKqFWXsun9I$FjYR2HL0}IMYz_`N71Bw?+Q3=A;x_w(3NHK6`dO(0OCbmnwFP0kkB+d2LWx} z>PJ%=^{o5PI;*5T&|FfAEZ^RKp}#Ia9JyK&xi+(<|^fYc!H~y40?tT>G0(C9YVnvo|4yX zMxgnG@qr%dL|4#NGxZQ4?YR)iM~S3E5~jZ}qo6V`mLL`u)0l^B*+D@|KwGYbkkGXP zvDHfn_R-FX%3uInYr%JmUvjoCVqi1_Lbxn>Rvd1lo=W!1+qTtGsjYYjl-;`F_?612 zI~D?9(0us@F~1mxKrF>=R-kE&?ZuTIajz#qC)DLxK_CEKsQ!k09{FCFw$XFgU_HX^h*{xQT5b_F>)Ju)UjeiWMN>nJp$MCV(+lHWp z+w&EcVqCYW)kLRdf#r)8t%ZkL79u-A_%>gyI4siq74QoP<7nul1{xw9)u>Y%aSbfR zgW+9W{J?bsA+ZyWk;rb%+PPg@^!^y%Q;YcpYFiTW5VinNoN}CU3MR}@I`l%FEzR7x z9i;$zLz?#qO)uhNlF+Y=F28kmJ9E(FzXj&`fZ6FqO-D7bm)g7-0dm#=D(MPoc8ZCR zTQUl5EW9AGzzh|seUz;tfu=;Nq%zd1DP>eVEvsNa335=DTUL7L?wM`A9q^!96Oz0_ z+ND(hm0W40jt`*~!6B*9Vh0xQH@xBvC=mg*ni079>c;p^;YLc@wmLxTNJbH%tV?NK zK}K8B#e-VXxV0z@tGoNJ0%#g=Inb%mkM73R*Wl)2vMF@rIL%bK!b{mF@ni_=DYg1A zB-7ErTDeiL6%F&|D0)SFW;9cYbF?G|#_`<&bnz96g_g8)DpYb#PcdMyc1j+uW%mWD zeZ&B;+GRMfWq|(xOnzR6Yg~=44|g^qh%wDA#&SBB`%zYClXbo!!Rvu#sZfr{;#tah zsNx$EB@5h7Y;5jbq`q_|28(_olsn>B{{W;2sapAnE5vSPBKedN#Kth`Cy|uKX%RP917Z+Y zr3Eq#K4-MKWvfdPfv!lsoDEbYqi~8-&LtwCdJYgA){@-3<%regtcN77Hn~Tjgn(f7 z^;W$us-@fg-5F;B(Urk)867B)Fbhp8Tcfs7_&$kHby`7$Zm7k)uyYqM60UVQ3NOOy zT1};j;W6u{kV9As{@2`V)u3jm6xuB|1KAUhz_yEFRZymqq1}UW@0I@US?9u~EBq<< z61UEIk5CKSf+-0BqA(ny?(d5J1JKKAIN`eSF71oud5)(+V%5L3{6j0DWq#3hQC~Tf z+_x*Tn6A$p+bUsvI6Jeocj{U|qF$}#Z_ys+ZB33@#7>lNHqhBwZLs`DUQQJCE!uvg zg^v*(s26a8oF^j|m(MI8!zCj}nMnxHCa}3j97ep)xo?&)^uh30UR;brmmgon0#OcU zlxbo3mINj!;CjnG;WL^EQA$-H_pT!`U#J)2g+Qt@r=I04p*PCO9B4N;Dr%y@tBR&m zh*XhzuH%8r!2%i!6w?CA!RWLVxgr3Rf$2koIJZc=fsu%MUH<^mGRsSobg(E}UDw1; z{<)eOF(h&`2I@NtctXNTLQ$#|jceyf0J;jCZDYYlve0nifPgB-H8re)k+rPpMtdE= zRUABAqNr+%sxfe6-N1qZM#9xiz22n%08ng5~MT$loX{f_k?eWFTZEI^7 zw)lvxV-L1dvMcBD3$UF&@infgh{A76-IW*C=siH*RkoMhwPMkw`GM#F2FzGfUQu-@ z=^-%WvNq*SM-tSc%i>=06#T{L*)V0^S?)cI1%r|-1M>@M7_?mH_bpsa7fMulAOS^zea|YA=p=u-Zun<+4H9rwmkEB z2ZkbvN0ET;ySb`Q{OM)H>ZKLPaxH5jxEw9;8uu{|E16YdGC z{{Z2+VyBz&8gfqy2z}bV{?8Tn9rB-ZVSK?HiP)B=J{p#rzN!0&b%ktUM*jcnSd=;=yItx&^ zIsvn=E&Yt-eIIPv^EJJg|j2U3!%Huo!km0n>LY!sE$OR-{p<(S8DZqyld%NF1dY<$tU z7lc|0;tMoY4?7pIR(MA!qR)tKo%K)>pm}m4YHLM8R0x}Yt0=N2~C4n4(?lEJ;Pp{13RA0=o!T6YD<1AEHaTOEcFML3_ z#1U;Z^)m|BU&jzV!5A?$io77Ezu~ZXXDIi0{{VZ0r?n9kIJ1eAk=VXDs5GfMVGf_b z8!OJQ%x;$#>K=w8NJC)K<$u5H0owF0VK)lkEBb&l0Y|W0)ULv=`E3*#V5>{lkoT|U!TX5#s;I8K~m(1>hTK*y>K44PrAT%*w+zWzMx|O|h z*TheWR|I?+u(yBkRNcg_LKHv)l~Av9)s&P_0a|;3XmtR-eMC73D{ep)m`;H=FDkd2 zH}A&C=s;CTaWObC75n8VR`@Gm0HwA7?a5-qqB;q9R1Ythhetx1B%D zoP=}(ikXuUtwt6oRH5jmT?Hvn0T2%hl)7qj6|zBCry|`$uc)%DZ5dg=CRqynFx_;HWl?hHh@m*}CGL8PuEGvZO^U7jd`uFKU>Gyq z6vc|AuW&W7Lz(WL$%zkf;XD5TAIZg>33<=)NyHF4tZ|np@hI>@3?Qs$AHU-AznFuI zRyJA1)4fHu8e2>cZltK1u}wZ*g?6)i4~2W!m zg}8zkU~_e65vfW}m?d0R#5|IQ>V1C}1ApM*f5pgq{{Vx?SpCP(h%HeiuZiyEMO>rX z{8j9YK^mJ2btzmixDGr=Ak?gI{x|p*2%^8?RYI*O8!db#%(kBQ;)_>MOAirc^>DKX zdC6+-K>OTxNStgrcW{b@Tj~*FqRmmplEPuJg8&7#xi1xxn;{vbJGQywB^tLuXP1=- z@Yjh?Wj6UvWh)GYLF%Y;2!@@+(u9<26nWrl+&QygP~fjX68Yk6Bo|YPjjOx)w}@bB zd7G>ww%5ay2#_vSIYHooA4c-{y6_gD@KxMp&@P(idzW8Ow>0Hmw^UU_NL+fbZ4N7X z@hG}BfC^P?v+Iu#+^^y{LbOG@5kskqEMaIIVoFYACYc=!~eztw(Ta%VWOBtt9$KB?hZ? zTnqi|R#Q@*c6+6qKk$6qLQsD!x@WQ_<^B>SGK{*2QuhdqSWDY+kPMb}5!51C2Hvm4 zNU98PmKiDoxm#!zM7u!3UoZ$px*<{tagw8w-eOcP7PrI)BnsUbQ3f~#+^(Hm)j3+N z1wnLR1;R^=xx`6U^x*#hGTEExxS`^uUO}I#CV^1X#xCG_bmWw`d%N*vUSiqmu8pTK$fken}en2h*4|n_!@v( zp6Krg_dm}60LzZxF#~d)Kd7!)T0F*$mem`KPlsjy0CR;wWsvh*0jVBp2nx^Q0HBLT z0%%<+=5nOPZV=JbI(CWyjavTz91zJ!r!!MufN$|HkQ#yyy?%#?S^84}*dp$spNWA_ znS><}%HyRP#(71tI6tux2Yd$ZFsnxwEUv2uD{b>x6LLFkoemyljf?@JX?Q6R+a4I; z9FlhgToqJN6(plH+Iar}G1QK7mA3x?Y_ufx#R;iaTK2iM6^cqA+lMOfSG{Vz>TpCB z(^~5IiK57sxm9q4qL{hC1~d{hC1^V8TWd0E-Uopj>LEekRerh0%wWS^u=8S;KE!6z zt3|(WOi}GTafN?F^u?Cza-~T)k9W)-5f`#gS2Q!F?ufUD%c9OxK~LywpfDB zr)^Z86Lr&^;ymlE-&yMuXAWieN{?14mzoE={#k+=YpjT514{AcX}Lf5ow~AN9TNcj!K{>xODTR zZQmAD6nJu&R@&!RW5p7ga_7loL4mMZekU%=9c2+&F@Z{*)SOC-7h z72ey-8jS}BiF;0YSa?c*>IoK!5O-^56av40m;i-W69nl(kMl6Xh46gEz*p96+SZsx zgo_qMm%#U5n4B`;X?Z-t#qNz#KUISn^o;2@L^k;q$GzfhcOzlqivFV!tRyH0JdG6a z!nLE6TkBzrpujH5YFXlchUzvX-FRG zh166QBVz$8)CV2!`l#u9QyStMVY51c9g38I+cv5za<%3JL(RQ{!j^&0if1(Sv2E%V zQercDslPIY>`nrtUdKJIyF#w+9 zSrInIKCOTcM^_k(U7-4$lJ%HL=|RU*)>`w*TA@?fJJaMIB8m!*l_|&YMHIxFP9CL> z$H@-^_?6)*x{tr(59O{UpC7?~(qGKi2|g$$kWK}j_u_m10Ei)DuQeFiiBtsX4Y6jx z{6?d4=P_GuAft$(&oPxm97ZhuqVqXKm%polRvn%WzflS*@Q91uw&tW%W|Z3*SpGLr zWwCWvzcRy4Db>p_zE8|~K-ee>y+(eJyMKvi1O#9Heq)MxE)PACx1MURc6U0-%`(u&llz;=~Q)fZ3 z#WJO`3BelhPB9|b$XGw9w=Mqw4aOkUE`+*O9oz(IVNjGAWh)_@D2Ax3j`6V}ouQVe z!Trju0b39GAYDRWYe`&A)~!}^3n<>(Y)TZ-nIAc7*MvE*G!U-7kHn=zqP4pQDAb_5 zfIMl6A@Hx;@j9uZrm-_hp&b@y4}Kshc==aYlx~~ z2O##GYCO!cd!ScrZ>BrIo~h`biRzxH5Z~tCKe=y~7ku^nptml$XQ`Kej(=apl^n4v zD_jx$M~>j&8s=z4l}*fE`I~}OF|Xnj)j4f6L3dJGwSHxa#;9no5y~>c4lr~LN;2+y zR~HjbMcA{n!(yd21wFs_AR0QNwfy%jBko=ySK6ih%E{xeNqlIxr12GV73^GVPzDh~ z8k2*4{F4v3sQ^%010_>YH{t`d2e)v7r7-%O?HC6TNUa(iz@jwi{Xr_VkCycWuKwZV zx(k=PmJkWhGT)9ajQNF~zhUVgCQ~kpc3!`)`*j(w?uo!c^I`!Jt_55HH`=B0HM)_3 z^got5t9nRJ?MoCh+CYR`mO%KZDyVs79JAfR?1z<(aHgm&%(zo;!7#J;M6Hl^lm7se z#EVzK1iBu%MH?rsuZRqO@z_5c%f)_5B71)l5hKO0B%EuBh_m$^S}IYIoSK$4I}+wS zLR7FUCe{5;;xUih@z^0qrH^k1t%Dzfj$laEdW#A*!$5f<*zr}#%VD1k(=KHVuR>j)3b=V9f`CvsoQ>nr_XZjx zeLiE8?^-skc!~q5ShvgsqUV~pZm3nFhBZ!HJQxQki=_~G_YH8ggXRzgIuaY-4LeVn z1=#`c)w)md^8pv9-2vhIj0FuLRUFWD0*vl?y+XyE5CLm^6JmESOPm(ABw!VWEFp(T zY{Ip2t_vXtL<>0e3MCh0pyT_G6Lyp~aSSR@{6wZ)ZJu%hh6%xPv94!f1mbcg!pf$Q z4hw`9GF-ATq1{ZTfQfhG>-{A|PEmkx2T+08wDkoSXEl0CyJhKPlGkEf)zg&o95}A# z6p-p)sutUl!Th{two7fQNbJQs59X+?vU)~lDcD?s}g*VP+y>L2fc@9sGXumbps z6$PaS!Td|;Az=9~Rany6c!!p&n%&D#Q-?xRMD(xtgh11v-%y#M6NPB4lZ;OVTQ4}{{RqhHx+c1;rfLK)NIAJ5=W3WvdH)VAEsFWq(uBG5I=y0 zf84hqA4^VVs)>Zjdx4Kf#5hX}8(kAucTQmF^$a0m*}-r~iU9C@!VXp61fdd|q!KBO z7ya%ju8SLmg>FELSX-B}2K(SE_YAZiHYTkVJuG^(b!q_G!gfa)fOD3#PM*f%L+`GB&yj~R2EYT!WH@Eyu@Bc-GJi368FkM$W|0ik~v z0(X_a*p7k)osYEF5 z8AnO9>O2_ja;|{lvIr=2nx5g33Z$S**rFqJb1KCEmko54;umRks1*b_2Okqvh8cAh zB|*j8g1>^wV2c+u+|G4X*@`0(54s0h5W&^K(wXgG;85(zKPosmI0!YiqSSP_uy&BvgGpuZ4JFj z+xR;X?E@5a>f0a~^MQmJ6;_476HjnERFjGxZXsR=TWD8??WgmPN8;W!yi!dH|a_xB3o zH|}I6Os%B17Zt*y0_CdS=GDKz+(xj~5?xD#t=j%dKnCcx)%unoa#F#iTHjM-bFG!` zE->m^qhB3M;zS~aDe$0*)jiq-YrGZ!Mb)e28V6)*DMv{Q zk_7|e4I&;kGPBWcA5ke`UZV!Qi*qXsH$!jY78k3z%yzI)-?)HGS73#;#h#CH=`~$A ziop~(>4rp4100~d{6w=J52*OpfO(s|c8-1{_9}ijna~{_l|)<>3FSjth%pxcS{)#t z<_f*A34{xYhVfdcC+K1hN4S*6{L5t>%Bu1p<}$;cr3o+b5WK(@bzWI$8!-KGH&kHj zV5Fzzs93Z0D_2o%bsba`EP{?scA$=Zoz5y|#2bwbUU389bRk8~{SjKFB+C83hu-cL ziA7t)sudj}^z1jvR8TPL0&>lv&v0}g#=O823SMQLrbI&G!MW!H~_+{-#XLyA6 zD3~U zWmAw+!;FYD65e0T9dQ>zv-s?}hZzVcXp{gkw;hs>qSkjlNy}bkVLS%n=96j@p#U)f zlc}Ka$Lxr;YOVT~N9_toTY?r3<#4r8=U@>OO~y*hyYIwoy&fY%rcJ}X*(uC99ZU~- z=!yfTDHWkkl^Q5IvTACWl>qU(yIo{(sxB(YXExkrN{=mEv@#U#LqdT_E=w`XnqcIh z;^FICRgZB&s%}(%%KeF7S;KZr-u+1-*9e0Mwl=Lx7{yu#06y1970>}yhS^IxHR_~ISX-e z!2xt)aDjS)s!k;=b11no>gIJhk;2a%!P&|(_vQ;SUbpFvYbqm?{UBcDL-8457B|9L z1BW#gaG|fLaOeEREtKWK!+ONbWanF!5yz2c^zXcYTSq7usX<;53q@8hoP=n6)Cz$7 zK#JJ&AB$iStO{PQP_CI2#QiYvB}GMc_EZ4!<`RpPxMkehs``kcsD*%e$n^m79%UH6 z%*ZYAE?A}1D$~4NS&8bRstzSEVTR&nD&`zOr|?RgaXGMq;?G79Z3{t_a^Kz^m{b&6QK?psBf;w)OK2o$5MEmew#AYaT355a+S zJ;u4r=Ax7{o5WH1zGspTmMASt#^t(4?G~X`FWkr;83_wiww@)_5?oU8%-)%QF%AuR zhJb<4OkPC8LG~%XIRwoZ1a99X;U`y`X$R7G$qmr@mTq|Q< zm>21w*Ko#%QGX@boVmg~FV8VPli57=;MN2= z1H*2}g5lh61YBJGMF~c+fm*z!IQPhg=qESa5C&CIbF+__RXA}^Fk+#=61YC)Z}Qw* zy?wCS)0~VZs63oSXuKjuyv6duh!`k{(a%w-*87iW8uG&wO(?bs30}{AN^-m8xnqz4 zL48b+T)es;q69=VMwAb^M&EH2$07pQC{uS3vKI*cCPkxR%8I?tbq8vt39J?fF9aHe zPKPxS8o%HIkM1#JlKm#}C>!w(!2yj!bu~u+05SZlrEy?ekD?tnjj^pU>Kfzf&v_5SI#M4M8GO5xk?fFlwE)|k=zyFC(wy3 zw|&G-AfisBI7dx5w$ z;g`$Pm`|#}J_$y0sN1DJN9G~nit$seAw~^x9=8Cc

    fXxpB-u)Ungdql8O|5#g3q zz*dQP5A_OrmZe8~$yX0s3B%0r4|fK@KHzDH5zJcr&k~N_@+tyq41<$_h`T}im*^PKRGMFwo2pnIFmk*<0kZW99k(MnhnBaE2z_I7tuqw`26z5nTDvIHG%hACd}7fo>L@KCe7+(Yx+NKv zETLt_a9l7M>X7VJD=uL+mu#~(xM4rdE>$NGq*3N904dDASU3fJP TmBq@zUkngMyly=}ekcFg+z$A& diff --git a/docker/.gitpod.Dockerfile b/docker/.gitpod.Dockerfile index 4fbc7be001..2f7099a565 100644 --- a/docker/.gitpod.Dockerfile +++ b/docker/.gitpod.Dockerfile @@ -19,11 +19,8 @@ RUN apt-get update -qq \ libffi-dev \ libssl-dev \ python3-dev \ - git \ && rm -rf /var/cache/apt/* /var/lib/apt/lists/*; -# Git needed for PROJECT_GIT_COMMIT_HASH variable setting - # Needs to be installed as root RUN pip3 install adafruit-nrfutil RUN pip3 install -Iv cryptography==3.3 diff --git a/docker/Dockerfile b/docker/Dockerfile index 0a4f69f0cf..a6caa24e44 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -19,11 +19,8 @@ RUN apt-get update -qq \ libssl-dev \ python3-dev \ python \ - git \ && rm -rf /var/cache/apt/* /var/lib/apt/lists/*; -# Git needed for PROJECT_GIT_COMMIT_HASH variable setting - RUN pip3 install adafruit-nrfutil RUN pip3 install -Iv cryptography==3.3 diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index acbfba18c8..5c6af93bb9 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -406,7 +406,6 @@ list(APPEND SOURCE_FILES displayapp/screens/FlashLight.cpp displayapp/screens/List.cpp displayapp/screens/BatteryInfo.cpp - displayapp/screens/Steps.cpp ## Settings displayapp/screens/settings/QuickSettings.cpp @@ -415,12 +414,12 @@ list(APPEND SOURCE_FILES displayapp/screens/settings/SettingTimeFormat.cpp displayapp/screens/settings/SettingWakeUp.cpp displayapp/screens/settings/SettingDisplay.cpp - displayapp/screens/settings/SettingSteps.cpp ## Watch faces displayapp/icons/bg_clock.c displayapp/screens/WatchFaceAnalog.cpp displayapp/screens/WatchFaceDigital.cpp + displayapp/screens/PineTimeStyle.cpp ## @@ -468,7 +467,7 @@ list(APPEND SOURCE_FILES displayapp/fonts/jetbrains_mono_extrabold_compressed.c displayapp/fonts/jetbrains_mono_bold_20.c displayapp/fonts/jetbrains_mono_76.c - displayapp/fonts/jetbrains_mono_42.c + displayapp/fonts/open_sans_light.c displayapp/fonts/lv_font_sys_48.c displayapp/lv_pinetime_theme.c diff --git a/src/Version.h.in b/src/Version.h.in index 8cd39c96a0..6ff5938e20 100644 --- a/src/Version.h.in +++ b/src/Version.h.in @@ -8,13 +8,11 @@ namespace Pinetime { static constexpr uint32_t Major() {return major;} static constexpr uint32_t Minor() {return minor;} static constexpr uint32_t Patch() {return patch;} - static constexpr const char* GitCommitHash() {return commitHash;} static constexpr const char* VersionString() {return versionString;} private: static constexpr uint32_t major = @PROJECT_VERSION_MAJOR@; static constexpr uint32_t minor = @PROJECT_VERSION_MINOR@; static constexpr uint32_t patch = @PROJECT_VERSION_PATCH@; - static constexpr const char* commitHash = "@PROJECT_GIT_COMMIT_HASH@"; static constexpr const char* versionString = "@PROJECT_VERSION_MAJOR@.@PROJECT_VERSION_MINOR@.@PROJECT_VERSION_PATCH@"; }; } \ No newline at end of file diff --git a/src/components/motion/MotionController.h b/src/components/motion/MotionController.h index 3a238262a7..bf644812af 100644 --- a/src/components/motion/MotionController.h +++ b/src/components/motion/MotionController.h @@ -8,13 +8,13 @@ namespace Pinetime { public: void Update(int16_t x, int16_t y, int16_t z, uint32_t nbSteps); - int16_t X() const { + uint16_t X() const { return x; } - int16_t Y() const { + uint16_t Y() const { return y; } - int16_t Z() const { + uint16_t Z() const { return z; } uint32_t NbSteps() const { diff --git a/src/components/settings/Settings.h b/src/components/settings/Settings.h index 4409425be4..18c87fd4f2 100644 --- a/src/components/settings/Settings.h +++ b/src/components/settings/Settings.h @@ -86,14 +86,6 @@ namespace Pinetime { return settings.brightLevel; }; - void SetStepsGoal( uint32_t goal ) { - if ( goal != settings.stepsGoal ) - settingsChanged = true; - settings.stepsGoal = goal; - }; - - uint32_t GetStepsGoal() const { return settings.stepsGoal; }; - private: Pinetime::Drivers::SpiNorFlash& spiNorFlash; struct SettingsData { @@ -103,7 +95,7 @@ namespace Pinetime { uint8_t clockFace = 0; - uint32_t stepsGoal = 10000; + uint32_t stepsGoal = 1000; uint32_t screenTimeOut = 15000; WakeUpMode wakeUpMode = WakeUpMode::None; diff --git a/src/displayapp/Apps.h b/src/displayapp/Apps.h index 09a2018178..936a3ae825 100644 --- a/src/displayapp/Apps.h +++ b/src/displayapp/Apps.h @@ -21,14 +21,12 @@ namespace Pinetime { Navigation, StopWatch, Motion, - Steps, QuickSettings, Settings, SettingWatchFace, SettingTimeFormat, SettingDisplay, - SettingWakeUp, - SettingSteps + SettingWakeUp }; } } diff --git a/src/displayapp/DisplayApp.cpp b/src/displayapp/DisplayApp.cpp index a6c4a3ec9e..3a20c76695 100644 --- a/src/displayapp/DisplayApp.cpp +++ b/src/displayapp/DisplayApp.cpp @@ -25,7 +25,6 @@ #include "displayapp/screens/Twos.h" #include "displayapp/screens/FlashLight.h" #include "displayapp/screens/BatteryInfo.h" -#include "displayapp/screens/Steps.h" #include "drivers/Cst816s.h" #include "drivers/St7789.h" @@ -38,7 +37,6 @@ #include "displayapp/screens/settings/SettingTimeFormat.h" #include "displayapp/screens/settings/SettingWakeUp.h" #include "displayapp/screens/settings/SettingDisplay.h" -#include "displayapp/screens/settings/SettingSteps.h" using namespace Pinetime::Applications; using namespace Pinetime::Applications::Display; @@ -67,7 +65,7 @@ DisplayApp::DisplayApp(Drivers::St7789& lcd, notificationManager {notificationManager}, heartRateController {heartRateController}, settingsController {settingsController}, - motorController {motorController}, + motorController{motorController}, motionController {motionController} { msgQueue = xQueueCreate(queueSize, itemSize); // Start clock when smartwatch boots @@ -75,9 +73,8 @@ DisplayApp::DisplayApp(Drivers::St7789& lcd, } void DisplayApp::Start() { - if (pdPASS != xTaskCreate(DisplayApp::Process, "displayapp", 800, this, 0, &taskHandle)) { + if (pdPASS != xTaskCreate(DisplayApp::Process, "displayapp", 800, this, 0, &taskHandle)) APP_ERROR_HANDLER(NRF_ERROR_NO_MEM); - } } void DisplayApp::Process(void* instance) { @@ -88,7 +85,7 @@ void DisplayApp::Process(void* instance) { // Send a dummy notification to unlock the lvgl display driver for the first iteration xTaskNotifyGive(xTaskGetCurrentTaskHandle()); - while (true) { + while (1) { app->Refresh(); } } @@ -216,7 +213,7 @@ void DisplayApp::StartApp(Apps app, DisplayApp::FullRefreshDirections direction) LoadApp(app, direction); } -void DisplayApp::ReturnApp(Apps app, DisplayApp::FullRefreshDirections direction, TouchEvents touchEvent) { +void DisplayApp::returnApp(Apps app, DisplayApp::FullRefreshDirections direction, TouchEvents touchEvent) { returnToApp = app; returnDirection = direction; returnTouchEvent = touchEvent; @@ -227,12 +224,12 @@ void DisplayApp::LoadApp(Apps app, DisplayApp::FullRefreshDirections direction) SetFullRefresh(direction); // default return to launcher - ReturnApp(Apps::Launcher, FullRefreshDirections::Down, TouchEvents::SwipeDown); + returnApp(Apps::Launcher, FullRefreshDirections::Down, TouchEvents::SwipeDown); switch (app) { case Apps::Launcher: currentScreen = std::make_unique(this, settingsController, batteryController, dateTimeController); - ReturnApp(Apps::Clock, FullRefreshDirections::Down, TouchEvents::SwipeDown); + returnApp(Apps::Clock, FullRefreshDirections::Down, TouchEvents::SwipeDown); break; case Apps::None: case Apps::Clock: @@ -248,7 +245,7 @@ void DisplayApp::LoadApp(Apps app, DisplayApp::FullRefreshDirections direction) case Apps::FirmwareValidation: currentScreen = std::make_unique(this, validator); - ReturnApp(Apps::Settings, FullRefreshDirections::Down, TouchEvents::SwipeDown); + returnApp(Apps::Settings, FullRefreshDirections::Down, TouchEvents::SwipeDown); break; case Apps::FirmwareUpdate: currentScreen = std::make_unique(this, bleController); @@ -257,58 +254,54 @@ void DisplayApp::LoadApp(Apps app, DisplayApp::FullRefreshDirections direction) case Apps::Notifications: currentScreen = std::make_unique( this, notificationManager, systemTask.nimble().alertService(), Screens::Notifications::Modes::Normal); - ReturnApp(Apps::Clock, FullRefreshDirections::Up, TouchEvents::SwipeUp); + returnApp(Apps::Clock, FullRefreshDirections::Up, TouchEvents::SwipeUp); break; case Apps::NotificationsPreview: currentScreen = std::make_unique( this, notificationManager, systemTask.nimble().alertService(), Screens::Notifications::Modes::Preview); - ReturnApp(Apps::Clock, FullRefreshDirections::Up, TouchEvents::SwipeUp); + returnApp(Apps::Clock, FullRefreshDirections::Up, TouchEvents::SwipeUp); break; // Settings case Apps::QuickSettings: - currentScreen = std::make_unique( - this, batteryController, dateTimeController, brightnessController, motorController, settingsController); - ReturnApp(Apps::Clock, FullRefreshDirections::LeftAnim, TouchEvents::SwipeLeft); + currentScreen = + std::make_unique(this, batteryController, dateTimeController, brightnessController, motorController, settingsController); + returnApp(Apps::Clock, FullRefreshDirections::LeftAnim, TouchEvents::SwipeLeft); break; case Apps::Settings: currentScreen = std::make_unique(this, settingsController); - ReturnApp(Apps::QuickSettings, FullRefreshDirections::Down, TouchEvents::SwipeDown); + returnApp(Apps::QuickSettings, FullRefreshDirections::Down, TouchEvents::SwipeDown); break; case Apps::SettingWatchFace: currentScreen = std::make_unique(this, settingsController); - ReturnApp(Apps::Settings, FullRefreshDirections::Down, TouchEvents::SwipeDown); + returnApp(Apps::Settings, FullRefreshDirections::Down, TouchEvents::SwipeDown); break; case Apps::SettingTimeFormat: currentScreen = std::make_unique(this, settingsController); - ReturnApp(Apps::Settings, FullRefreshDirections::Down, TouchEvents::SwipeDown); + returnApp(Apps::Settings, FullRefreshDirections::Down, TouchEvents::SwipeDown); break; case Apps::SettingWakeUp: currentScreen = std::make_unique(this, settingsController); - ReturnApp(Apps::Settings, FullRefreshDirections::Down, TouchEvents::SwipeDown); + returnApp(Apps::Settings, FullRefreshDirections::Down, TouchEvents::SwipeDown); break; case Apps::SettingDisplay: currentScreen = std::make_unique(this, settingsController); - ReturnApp(Apps::Settings, FullRefreshDirections::Down, TouchEvents::SwipeDown); - break; - case Apps::SettingSteps: - currentScreen = std::make_unique(this, settingsController); - ReturnApp(Apps::Settings, FullRefreshDirections::Down, TouchEvents::SwipeDown); + returnApp(Apps::Settings, FullRefreshDirections::Down, TouchEvents::SwipeDown); break; case Apps::BatteryInfo: currentScreen = std::make_unique(this, batteryController); - ReturnApp(Apps::Settings, FullRefreshDirections::Down, TouchEvents::SwipeDown); + returnApp(Apps::Settings, FullRefreshDirections::Down, TouchEvents::SwipeDown); break; case Apps::SysInfo: currentScreen = std::make_unique(this, dateTimeController, batteryController, brightnessController, bleController, watchdog); - ReturnApp(Apps::Settings, FullRefreshDirections::Down, TouchEvents::SwipeDown); + returnApp(Apps::Settings, FullRefreshDirections::Down, TouchEvents::SwipeDown); break; // case Apps::FlashLight: currentScreen = std::make_unique(this, systemTask, brightnessController); - ReturnApp(Apps::Clock, FullRefreshDirections::Down, TouchEvents::None); + returnApp(Apps::Clock, FullRefreshDirections::Down, TouchEvents::None); break; case Apps::StopWatch: currentScreen = std::make_unique(this); @@ -334,9 +327,6 @@ void DisplayApp::LoadApp(Apps app, DisplayApp::FullRefreshDirections direction) case Apps::Motion: currentScreen = std::make_unique(this, motionController); break; - case Apps::Steps: - currentScreen = std::make_unique(this, motionController, settingsController); - break; } currentApp = app; } @@ -359,9 +349,8 @@ TouchEvents DisplayApp::OnTouchEvent() { if (info.isTouch) { switch (info.gesture) { case Pinetime::Drivers::Cst816S::Gestures::SingleTap: - if (touchMode == TouchModes::Gestures) { + if (touchMode == TouchModes::Gestures) lvgl.SetNewTapEvent(info.x, info.y); - } return TouchEvents::Tap; case Pinetime::Drivers::Cst816S::Gestures::LongPress: return TouchEvents::LongTap; diff --git a/src/displayapp/DisplayApp.h b/src/displayapp/DisplayApp.h index ffe27cf1bc..75e5275518 100644 --- a/src/displayapp/DisplayApp.h +++ b/src/displayapp/DisplayApp.h @@ -103,7 +103,7 @@ namespace Pinetime { static void Process(void* instance); void InitHw(); void Refresh(); - void ReturnApp(Apps app, DisplayApp::FullRefreshDirections direction, TouchEvents touchEvent); + void returnApp(Apps app, DisplayApp::FullRefreshDirections direction, TouchEvents touchEvent); void LoadApp(Apps app, DisplayApp::FullRefreshDirections direction); }; } diff --git a/src/displayapp/DisplayAppRecovery.cpp b/src/displayapp/DisplayAppRecovery.cpp index a132a47cac..6db987fa0e 100644 --- a/src/displayapp/DisplayAppRecovery.cpp +++ b/src/displayapp/DisplayAppRecovery.cpp @@ -37,7 +37,7 @@ void DisplayApp::Process(void* instance) { xTaskNotifyGive(xTaskGetCurrentTaskHandle()); app->InitHw(); - while (true) { + while (1) { app->Refresh(); } } @@ -51,11 +51,10 @@ void DisplayApp::Refresh() { if (xQueueReceive(msgQueue, &msg, 200)) { switch (msg) { case Display::Messages::UpdateBleConnection: - if (bleController.IsConnected()) { + if (bleController.IsConnected()) DisplayLogo(colorBlue); - } else { + else DisplayLogo(colorWhite); - } break; case Display::Messages::BleFirmwareUpdateStarted: DisplayLogo(colorGreen); diff --git a/src/displayapp/fonts/jetbrains_mono_42.c b/src/displayapp/fonts/jetbrains_mono_42.c deleted file mode 100644 index 6f25f5abe6..0000000000 --- a/src/displayapp/fonts/jetbrains_mono_42.c +++ /dev/null @@ -1,258 +0,0 @@ -/******************************************************************************* - * Size: 42 px - * Bpp: 1 - * Opts: - ******************************************************************************/ - -#ifdef LV_LVGL_H_INCLUDE_SIMPLE -#include "lvgl.h" -#else -#include "lvgl/lvgl.h" -#endif - -#ifndef JETBRAINS_MONO_42 -#define JETBRAINS_MONO_42 1 -#endif - -#if JETBRAINS_MONO_42 - -/*----------------- - * BITMAPS - *----------------*/ - -/*Store the image of the glyphs*/ -static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { - /* U+0025 "%" */ - 0x1f, 0x80, 0x7, 0x3f, 0xc0, 0xe, 0x7f, 0xe0, - 0x1c, 0xf0, 0xf0, 0x1c, 0xe0, 0x70, 0x38, 0xe0, - 0x70, 0x70, 0xe0, 0x70, 0x70, 0xe0, 0x70, 0xe0, - 0xe0, 0x71, 0xc0, 0xe0, 0x71, 0xc0, 0xf0, 0xf3, - 0x80, 0x7f, 0xe7, 0x0, 0x3f, 0xc7, 0x0, 0x1f, - 0x8e, 0x0, 0x0, 0x1c, 0x0, 0x0, 0x3c, 0x0, - 0x0, 0x38, 0x0, 0x0, 0x71, 0xf8, 0x0, 0xe3, - 0xfc, 0x0, 0xe7, 0xfe, 0x1, 0xcf, 0xf, 0x3, - 0x8e, 0x7, 0x3, 0x8e, 0x7, 0x7, 0xe, 0x7, - 0xe, 0xe, 0x7, 0xe, 0xe, 0x7, 0x1c, 0xe, - 0x7, 0x38, 0xf, 0xf, 0x38, 0x7, 0xfe, 0x70, - 0x3, 0xfc, 0xe0, 0x1, 0xf8, - - /* U+0030 "0" */ - 0x3, 0xf8, 0x1, 0xff, 0xc0, 0xff, 0xfe, 0x1f, - 0x7, 0xc7, 0xc0, 0x7c, 0xf0, 0x7, 0xbc, 0x0, - 0x7f, 0x80, 0xf, 0xf0, 0x1, 0xfe, 0x0, 0x3f, - 0xc0, 0x7, 0xf8, 0x0, 0xff, 0xe, 0x1f, 0xe3, - 0xe3, 0xfc, 0x7c, 0x7f, 0x8f, 0x8f, 0xf0, 0xe1, - 0xfe, 0x0, 0x3f, 0xc0, 0x7, 0xf8, 0x0, 0xff, - 0x0, 0x1f, 0xe0, 0x3, 0xfc, 0x0, 0x7f, 0x80, - 0xf, 0xf0, 0x1, 0xef, 0x0, 0x79, 0xf0, 0x1f, - 0x1f, 0x7, 0xc3, 0xff, 0xf8, 0x1f, 0xfc, 0x0, - 0xfe, 0x0, - - /* U+0031 "1" */ - 0x3, 0xf0, 0x0, 0xfe, 0x0, 0x3f, 0xc0, 0x1f, - 0xf8, 0x7, 0xcf, 0x1, 0xf1, 0xe0, 0x3c, 0x3c, - 0x7, 0x7, 0x80, 0x80, 0xf0, 0x0, 0x1e, 0x0, - 0x3, 0xc0, 0x0, 0x78, 0x0, 0xf, 0x0, 0x1, - 0xe0, 0x0, 0x3c, 0x0, 0x7, 0x80, 0x0, 0xf0, - 0x0, 0x1e, 0x0, 0x3, 0xc0, 0x0, 0x78, 0x0, - 0xf, 0x0, 0x1, 0xe0, 0x0, 0x3c, 0x0, 0x7, - 0x80, 0x0, 0xf0, 0x0, 0x1e, 0x0, 0x3, 0xc0, - 0x0, 0x78, 0xf, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xf8, - - /* U+0032 "2" */ - 0x3, 0xf8, 0x1, 0xff, 0xc0, 0x7f, 0xfe, 0x1f, - 0x7, 0xc7, 0xc0, 0x3c, 0xf0, 0x7, 0xbc, 0x0, - 0x7f, 0x80, 0xf, 0xf0, 0x1, 0xe0, 0x0, 0x3c, - 0x0, 0x7, 0x80, 0x1, 0xf0, 0x0, 0x3c, 0x0, - 0xf, 0x80, 0x1, 0xe0, 0x0, 0x7c, 0x0, 0x1f, - 0x0, 0x7, 0xc0, 0x1, 0xf0, 0x0, 0x7e, 0x0, - 0xf, 0x80, 0x3, 0xe0, 0x0, 0xf8, 0x0, 0x3e, - 0x0, 0xf, 0x80, 0x3, 0xe0, 0x0, 0xf8, 0x0, - 0x3e, 0x0, 0x7, 0xff, 0xfe, 0xff, 0xff, 0xdf, - 0xff, 0xf8, - - /* U+0033 "3" */ - 0x7f, 0xff, 0x8f, 0xff, 0xf1, 0xff, 0xfe, 0x0, - 0x3, 0xc0, 0x0, 0xf0, 0x0, 0x3c, 0x0, 0xf, - 0x0, 0x3, 0xc0, 0x0, 0xf0, 0x0, 0x3e, 0x0, - 0x7, 0x80, 0x1, 0xfe, 0x0, 0x3f, 0xf0, 0x7, - 0xff, 0x0, 0x3, 0xf0, 0x0, 0x1e, 0x0, 0x3, - 0xc0, 0x0, 0x3c, 0x0, 0x7, 0x80, 0x0, 0xf0, - 0x0, 0x1e, 0x0, 0x3, 0xfc, 0x0, 0x7f, 0x80, - 0xf, 0xf0, 0x1, 0xef, 0x0, 0x79, 0xf0, 0x1f, - 0x1f, 0x7, 0xc3, 0xff, 0xf0, 0x1f, 0xfc, 0x0, - 0xfe, 0x0, - - /* U+0034 "4" */ - 0x0, 0x1e, 0x0, 0xf, 0x80, 0x3, 0xc0, 0x1, - 0xe0, 0x0, 0x78, 0x0, 0x3c, 0x0, 0x1f, 0x0, - 0x7, 0x80, 0x3, 0xc0, 0x1, 0xf0, 0x0, 0x78, - 0x0, 0x3e, 0x0, 0xf, 0x0, 0x7, 0x80, 0xf3, - 0xe0, 0x3c, 0xf0, 0xf, 0x7c, 0x3, 0xde, 0x0, - 0xff, 0x0, 0x3f, 0xc0, 0xf, 0xf0, 0x3, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0, 0x3, - 0xc0, 0x0, 0xf0, 0x0, 0x3c, 0x0, 0xf, 0x0, - 0x3, 0xc0, 0x0, 0xf0, 0x0, 0x3c, - - /* U+0035 "5" */ - 0x7f, 0xff, 0x9f, 0xff, 0xe7, 0xff, 0xf9, 0xe0, - 0x0, 0x78, 0x0, 0x1e, 0x0, 0x7, 0x80, 0x1, - 0xe0, 0x0, 0x78, 0x0, 0x1e, 0x0, 0x7, 0x8f, - 0x81, 0xef, 0xf8, 0x7f, 0xff, 0x1f, 0x87, 0xe7, - 0xc0, 0x79, 0xe0, 0x1f, 0x0, 0x3, 0xc0, 0x0, - 0xf0, 0x0, 0x3c, 0x0, 0xf, 0x0, 0x3, 0xc0, - 0x0, 0xf0, 0x0, 0x3c, 0x0, 0xf, 0xf0, 0x3, - 0xde, 0x1, 0xe7, 0x80, 0x78, 0xf8, 0x7e, 0x3f, - 0xff, 0x3, 0xff, 0x80, 0x3f, 0x0, - - /* U+0036 "6" */ - 0x0, 0x3c, 0x0, 0x7, 0x80, 0x0, 0x78, 0x0, - 0xf, 0x0, 0x1, 0xe0, 0x0, 0x1e, 0x0, 0x3, - 0xc0, 0x0, 0x3c, 0x0, 0x7, 0x80, 0x0, 0x70, - 0x0, 0xf, 0x0, 0x1, 0xe7, 0xc0, 0x1f, 0xff, - 0x3, 0xff, 0xfc, 0x3f, 0xf, 0xc7, 0xc0, 0x3e, - 0x78, 0x1, 0xe7, 0x80, 0x1f, 0xf0, 0x0, 0xff, - 0x0, 0xf, 0xf0, 0x0, 0xff, 0x0, 0xf, 0xf0, - 0x0, 0xff, 0x0, 0xf, 0xf8, 0x1, 0xe7, 0x80, - 0x1e, 0x7c, 0x3, 0xe3, 0xf0, 0xfc, 0x1f, 0xff, - 0x80, 0xff, 0xf0, 0x1, 0xf8, 0x0, - - /* U+0037 "7" */ - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0x0, 0x1e, 0xf0, 0x1, 0xef, 0x0, 0x1e, 0xf0, - 0x3, 0xcf, 0x0, 0x3c, 0x0, 0x3, 0x80, 0x0, - 0x78, 0x0, 0x7, 0x80, 0x0, 0xf0, 0x0, 0xf, - 0x0, 0x0, 0xf0, 0x0, 0x1e, 0x0, 0x1, 0xe0, - 0x0, 0x3c, 0x0, 0x3, 0xc0, 0x0, 0x3c, 0x0, - 0x7, 0x80, 0x0, 0x78, 0x0, 0x7, 0x80, 0x0, - 0xf0, 0x0, 0xf, 0x0, 0x1, 0xe0, 0x0, 0x1e, - 0x0, 0x1, 0xe0, 0x0, 0x3c, 0x0, 0x3, 0xc0, - 0x0, 0x7c, 0x0, 0x7, 0x80, 0x0, - - /* U+0038 "8" */ - 0x1, 0xf8, 0x0, 0xff, 0xf0, 0x1f, 0xff, 0x83, - 0xf0, 0xfc, 0x3c, 0x3, 0xc7, 0xc0, 0x3e, 0x78, - 0x1, 0xe7, 0x80, 0x1e, 0x78, 0x1, 0xe7, 0x80, - 0x1e, 0x3c, 0x3, 0xc3, 0xe0, 0x7c, 0x1f, 0xf, - 0x80, 0xff, 0xf0, 0x3, 0xfc, 0x0, 0x7f, 0xe0, - 0xf, 0xff, 0x3, 0xe0, 0x7c, 0x3c, 0x3, 0xc7, - 0x80, 0x1e, 0xf0, 0x0, 0xff, 0x0, 0xf, 0xf0, - 0x0, 0xff, 0x0, 0xf, 0xf0, 0x0, 0xff, 0x80, - 0x1f, 0x7c, 0x3, 0xe7, 0xe0, 0x7e, 0x3f, 0xff, - 0xc0, 0xff, 0xf0, 0x3, 0xfc, 0x0, - - /* U+0039 "9" */ - 0x3, 0xf8, 0x0, 0xff, 0xf0, 0x1f, 0xff, 0x83, - 0xe0, 0xfc, 0x7c, 0x3, 0xe7, 0x80, 0x1e, 0xf8, - 0x1, 0xff, 0x0, 0xf, 0xf0, 0x0, 0xff, 0x0, - 0xf, 0xf0, 0x0, 0xff, 0x0, 0xf, 0xf8, 0x1, - 0xf7, 0x80, 0x1e, 0x7c, 0x3, 0xe3, 0xe0, 0x7e, - 0x3f, 0xff, 0xc1, 0xff, 0xfc, 0x7, 0xe7, 0x80, - 0x0, 0xf8, 0x0, 0xf, 0x0, 0x1, 0xe0, 0x0, - 0x1e, 0x0, 0x3, 0xc0, 0x0, 0x3c, 0x0, 0x7, - 0x80, 0x0, 0xf8, 0x0, 0xf, 0x0, 0x1, 0xe0, - 0x0, 0x1e, 0x0, 0x3, 0xc0, 0x0, - - /* U+003A ":" */ - 0x7d, 0xff, 0xff, 0xff, 0xef, 0x80, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, - 0xf7, 0xff, 0xff, 0xff, 0xbe -}; - - -/*--------------------- - * GLYPH DESCRIPTION - *--------------------*/ - -static const lv_font_fmt_txt_glyph_dsc_t glyph_dsc[] = { - {.bitmap_index = 0, .adv_w = 0, .box_w = 0, .box_h = 0, .ofs_x = 0, .ofs_y = 0} /* id = 0 reserved */, - {.bitmap_index = 0, .adv_w = 403, .box_w = 24, .box_h = 31, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 93, .adv_w = 403, .box_w = 19, .box_h = 31, .ofs_x = 3, .ofs_y = 0}, - {.bitmap_index = 167, .adv_w = 403, .box_w = 19, .box_h = 31, .ofs_x = 4, .ofs_y = 0}, - {.bitmap_index = 241, .adv_w = 403, .box_w = 19, .box_h = 31, .ofs_x = 3, .ofs_y = 0}, - {.bitmap_index = 315, .adv_w = 403, .box_w = 19, .box_h = 31, .ofs_x = 3, .ofs_y = 0}, - {.bitmap_index = 389, .adv_w = 403, .box_w = 18, .box_h = 31, .ofs_x = 3, .ofs_y = 0}, - {.bitmap_index = 459, .adv_w = 403, .box_w = 18, .box_h = 31, .ofs_x = 3, .ofs_y = 0}, - {.bitmap_index = 529, .adv_w = 403, .box_w = 20, .box_h = 31, .ofs_x = 3, .ofs_y = 0}, - {.bitmap_index = 607, .adv_w = 403, .box_w = 20, .box_h = 31, .ofs_x = 3, .ofs_y = 0}, - {.bitmap_index = 685, .adv_w = 403, .box_w = 20, .box_h = 31, .ofs_x = 3, .ofs_y = 0}, - {.bitmap_index = 763, .adv_w = 403, .box_w = 20, .box_h = 31, .ofs_x = 3, .ofs_y = 0}, - {.bitmap_index = 841, .adv_w = 403, .box_w = 7, .box_h = 24, .ofs_x = 9, .ofs_y = 0} -}; - -/*--------------------- - * CHARACTER MAPPING - *--------------------*/ - - - -/*Collect the unicode lists and glyph_id offsets*/ -static const lv_font_fmt_txt_cmap_t cmaps[] = -{ - { - .range_start = 37, .range_length = 1, .glyph_id_start = 1, - .unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY - }, - { - .range_start = 48, .range_length = 11, .glyph_id_start = 2, - .unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY - } -}; - - - -/*-------------------- - * ALL CUSTOM DATA - *--------------------*/ - -#if LV_VERSION_CHECK(8, 0, 0) -/*Store all the custom data of the font*/ -static lv_font_fmt_txt_glyph_cache_t cache; -static const lv_font_fmt_txt_dsc_t font_dsc = { -#else -static lv_font_fmt_txt_dsc_t font_dsc = { -#endif - .glyph_bitmap = glyph_bitmap, - .glyph_dsc = glyph_dsc, - .cmaps = cmaps, - .kern_dsc = NULL, - .kern_scale = 0, - .cmap_num = 2, - .bpp = 1, - .kern_classes = 0, - .bitmap_format = 0, -#if LV_VERSION_CHECK(8, 0, 0) - .cache = &cache -#endif -}; - - -/*----------------- - * PUBLIC FONT - *----------------*/ - -/*Initialize a public general font descriptor*/ -#if LV_VERSION_CHECK(8, 0, 0) -const lv_font_t jetbrains_mono_42 = { -#else -lv_font_t jetbrains_mono_42 = { -#endif - .get_glyph_dsc = lv_font_get_glyph_dsc_fmt_txt, /*Function pointer to get glyph's data*/ - .get_glyph_bitmap = lv_font_get_bitmap_fmt_txt, /*Function pointer to get glyph's bitmap*/ - .line_height = 31, /*The maximum line height required by the font*/ - .base_line = 0, /*Baseline measured from the bottom of the line*/ -#if !(LVGL_VERSION_MAJOR == 6 && LVGL_VERSION_MINOR == 0) - .subpx = LV_FONT_SUBPX_NONE, -#endif -#if LV_VERSION_CHECK(7, 4, 0) - .underline_position = -7, - .underline_thickness = 2, -#endif - .dsc = &font_dsc /*The custom font data. Will be accessed by `get_glyph_bitmap/dsc` */ -}; - - - -#endif /*#if JETBRAINS_MONO_42*/ - diff --git a/src/displayapp/screens/ApplicationList.cpp b/src/displayapp/screens/ApplicationList.cpp index 1eb36999ef..7e38b3f453 100644 --- a/src/displayapp/screens/ApplicationList.cpp +++ b/src/displayapp/screens/ApplicationList.cpp @@ -49,7 +49,7 @@ std::unique_ptr ApplicationList::CreateScreen1() { {Symbols::stopWatch, Apps::StopWatch}, {Symbols::music, Apps::Music}, {Symbols::map, Apps::Navigation}, - {Symbols::shoe, Apps::Steps}, + {Symbols::shoe, Apps::Motion}, {Symbols::heartBeat, Apps::HeartRate}, {"", Apps::None}, }}; @@ -62,7 +62,7 @@ std::unique_ptr ApplicationList::CreateScreen2() { {Symbols::paintbrush, Apps::Paint}, {Symbols::paddle, Apps::Paddle}, {"2", Apps::Twos}, - {"M", Apps::Motion}, + {"", Apps::None}, {"", Apps::None}, {"", Apps::None}, }}; diff --git a/src/displayapp/screens/Clock.cpp b/src/displayapp/screens/Clock.cpp index 142998408f..e0c1f62bd8 100644 --- a/src/displayapp/screens/Clock.cpp +++ b/src/displayapp/screens/Clock.cpp @@ -14,6 +14,7 @@ #include "../DisplayApp.h" #include "WatchFaceDigital.h" #include "WatchFaceAnalog.h" +#include "PineTimeStyle.h" using namespace Pinetime::Applications::Screens; @@ -42,6 +43,9 @@ Clock::Clock(DisplayApp* app, [this]() -> std::unique_ptr { return WatchFaceAnalogScreen(); }, + [this]() -> std::unique_ptr { + return PineTimeStyleScreen(); + }, // Examples for more watch faces //[this]() -> std::unique_ptr { return WatchFaceMinimalScreen(); }, //[this]() -> std::unique_ptr { return WatchFaceCustomScreen(); } @@ -80,6 +84,16 @@ std::unique_ptr Clock::WatchFaceAnalogScreen() { app, dateTimeController, batteryController, bleController, notificatioManager, settingsController); } +std::unique_ptr Clock::PineTimeStyleScreen() { + return std::make_unique(app, + dateTimeController, + batteryController, + bleController, + notificatioManager, + settingsController, + heartRateController); +} + /* // Examples for more watch faces std::unique_ptr Clock::WatchFaceMinimalScreen() { @@ -91,4 +105,4 @@ std::unique_ptr Clock::WatchFaceCustomScreen() { return std::make_unique(app, dateTimeController, batteryController, bleController, notificatioManager, settingsController); } -*/ \ No newline at end of file +*/ diff --git a/src/displayapp/screens/Clock.h b/src/displayapp/screens/Clock.h index 9879985f27..920d58bb2f 100644 --- a/src/displayapp/screens/Clock.h +++ b/src/displayapp/screens/Clock.h @@ -47,9 +47,10 @@ namespace Pinetime { Controllers::HeartRateController& heartRateController; Controllers::MotionController& motionController; - ScreenList<2> screens; + ScreenList<3> screens; std::unique_ptr WatchFaceDigitalScreen(); std::unique_ptr WatchFaceAnalogScreen(); + std::unique_ptr PineTimeStyleScreen(); // Examples for more watch faces // std::unique_ptr WatchFaceMinimalScreen(); diff --git a/src/displayapp/screens/FirmwareValidation.cpp b/src/displayapp/screens/FirmwareValidation.cpp index ad37a3df4b..873a22f567 100644 --- a/src/displayapp/screens/FirmwareValidation.cpp +++ b/src/displayapp/screens/FirmwareValidation.cpp @@ -27,17 +27,6 @@ FirmwareValidation::FirmwareValidation(Pinetime::Applications::DisplayApp* app, sprintf(version, "%ld.%ld.%ld", Version::Major(), Version::Minor(), Version::Patch()); lv_label_set_text(labelVersionValue, version); - labelShortRefInfo = lv_label_create(lv_scr_act(), nullptr); - lv_obj_align(labelShortRefInfo, nullptr, LV_ALIGN_IN_TOP_LEFT, 0, 25); - lv_label_set_text(labelShortRefInfo, "ShortRef : "); - lv_label_set_align(labelShortRefInfo, LV_LABEL_ALIGN_LEFT); - - labelShortRefValue = lv_label_create(lv_scr_act(), nullptr); - lv_obj_align(labelShortRefValue, labelShortRefInfo, LV_ALIGN_OUT_RIGHT_MID, 0, 0); - lv_label_set_recolor(labelShortRefValue, true); - sprintf(shortref, "%s", Version::GitCommitHash()); - lv_label_set_text(labelShortRefValue, shortref); - labelIsValidated = lv_label_create(lv_scr_act(), nullptr); lv_obj_align(labelIsValidated, nullptr, LV_ALIGN_IN_TOP_LEFT, 0, 50); lv_label_set_recolor(labelIsValidated, true); diff --git a/src/displayapp/screens/FirmwareValidation.h b/src/displayapp/screens/FirmwareValidation.h index 303c215463..67662fd9ec 100644 --- a/src/displayapp/screens/FirmwareValidation.h +++ b/src/displayapp/screens/FirmwareValidation.h @@ -25,10 +25,7 @@ namespace Pinetime { lv_obj_t* labelVersionInfo; lv_obj_t* labelVersionValue; - lv_obj_t* labelShortRefInfo; - lv_obj_t* labelShortRefValue; char version[9]; - char shortref[9]; lv_obj_t* labelIsValidated; lv_obj_t* buttonValidate; lv_obj_t* labelButtonValidate; diff --git a/src/displayapp/screens/Motion.cpp b/src/displayapp/screens/Motion.cpp index a8bb3c1879..e7196267bd 100644 --- a/src/displayapp/screens/Motion.cpp +++ b/src/displayapp/screens/Motion.cpp @@ -3,6 +3,8 @@ #include "../DisplayApp.h" using namespace Pinetime::Applications::Screens; +extern lv_font_t jetbrains_mono_extrabold_compressed; +extern lv_font_t jetbrains_mono_bold_20; Motion::Motion(Pinetime::Applications::DisplayApp* app, Controllers::MotionController& motionController) : Screen(app), motionController {motionController} { @@ -27,16 +29,13 @@ Motion::Motion(Pinetime::Applications::DisplayApp* app, Controllers::MotionContr lv_chart_init_points(chart, ser3, 0); lv_chart_refresh(chart); /*Required after direct set*/ - label = lv_label_create(lv_scr_act(), NULL); - lv_label_set_text_fmt(label, "X #FF0000 %d# Y #008000 %d# Z #FFFF00 %d#", 0, 0, 0); - lv_label_set_align(label, LV_LABEL_ALIGN_CENTER); - lv_obj_align(label, NULL, LV_ALIGN_IN_TOP_MID, 0, 10); - lv_label_set_recolor(label, true); - labelStep = lv_label_create(lv_scr_act(), NULL); lv_obj_align(labelStep, chart, LV_ALIGN_IN_BOTTOM_LEFT, 0, 0); - lv_label_set_text(labelStep, "Steps ---"); + lv_label_set_text(labelStep, "Steps: "); + labelStepValue = lv_label_create(lv_scr_act(), NULL); + lv_obj_align(labelStepValue, labelStep, LV_ALIGN_OUT_RIGHT_MID, 0, 0); + lv_label_set_text(labelStepValue, "-"); } Motion::~Motion() { @@ -48,10 +47,8 @@ bool Motion::Refresh() { lv_chart_set_next(chart, ser2, motionController.Y()); lv_chart_set_next(chart, ser3, motionController.Z()); - lv_label_set_text_fmt(labelStep, "Steps %lu", motionController.NbSteps()); - - lv_label_set_text_fmt(label, "X #FF0000 %d# Y #008000 %d# Z #FFFF00 %d#", motionController.X() / 0x10, motionController.Y() / 0x10, motionController.Z() / 0x10); - lv_obj_align(label, NULL, LV_ALIGN_IN_TOP_MID, 0, 10); + snprintf(nbStepsBuffer, nbStepsBufferSize, "%lu", motionController.NbSteps()); + lv_label_set_text(labelStepValue, nbStepsBuffer); return running; } diff --git a/src/displayapp/screens/Motion.h b/src/displayapp/screens/Motion.h index 132b20ec5c..1100786641 100644 --- a/src/displayapp/screens/Motion.h +++ b/src/displayapp/screens/Motion.h @@ -26,9 +26,9 @@ namespace Pinetime { lv_chart_series_t* ser1; lv_chart_series_t* ser2; lv_chart_series_t* ser3; - lv_obj_t* label; lv_obj_t* labelStep; + lv_obj_t* labelStepValue; static constexpr uint8_t nbStepsBufferSize = 9; char nbStepsBuffer[nbStepsBufferSize + 1]; bool running = true; diff --git a/src/displayapp/screens/Notifications.cpp b/src/displayapp/screens/Notifications.cpp index 1f1137503a..f0fd2f6636 100644 --- a/src/displayapp/screens/Notifications.cpp +++ b/src/displayapp/screens/Notifications.cpp @@ -176,17 +176,7 @@ Notifications::NotificationItem::NotificationItem(const char* title, lv_obj_set_style_local_text_color(alert_type, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x888888)); if (title == nullptr) title = "Notification"; - char* pchar; - pchar = strchr(title, '\n'); - while (pchar != nullptr) { - *pchar = ' '; - pchar = - pchar = strchr(pchar + 1, '\n'); - } lv_label_set_text(alert_type, title); - lv_label_set_long_mode(alert_type, LV_LABEL_LONG_SROLL_CIRC); - lv_label_set_anim_speed(alert_type, 3); - lv_obj_set_width(alert_type, 180); lv_obj_align(alert_type, NULL, LV_ALIGN_IN_TOP_LEFT, 0, 16); ///////// diff --git a/src/displayapp/screens/Steps.cpp b/src/displayapp/screens/Steps.cpp deleted file mode 100644 index b485c9756d..0000000000 --- a/src/displayapp/screens/Steps.cpp +++ /dev/null @@ -1,72 +0,0 @@ -#include "Steps.h" -#include -#include "../DisplayApp.h" -#include "Symbols.h" - -using namespace Pinetime::Applications::Screens; - -Steps::Steps( - Pinetime::Applications::DisplayApp *app, - Controllers::MotionController& motionController, - Controllers::Settings &settingsController) - : Screen(app), - motionController{motionController}, - settingsController{settingsController} { - - stepsArc = lv_arc_create(lv_scr_act(), nullptr); - - lv_obj_set_style_local_bg_opa(stepsArc, LV_ARC_PART_BG, LV_STATE_DEFAULT, LV_OPA_0); - lv_obj_set_style_local_border_width(stepsArc, LV_ARC_PART_BG, LV_STATE_DEFAULT, 2); - lv_obj_set_style_local_radius(stepsArc, LV_ARC_PART_BG, LV_STATE_DEFAULT, 0); - lv_obj_set_style_local_line_color(stepsArc, LV_ARC_PART_INDIC, LV_STATE_DEFAULT, lv_color_hex(0x0000FF)); - lv_arc_set_end_angle(stepsArc, 200); - lv_obj_set_size(stepsArc, 220, 220); - lv_arc_set_range(stepsArc, 0, 500); - lv_obj_align(stepsArc, nullptr, LV_ALIGN_CENTER, 0, 0); - - stepsCount = motionController.NbSteps(); - - lv_arc_set_value(stepsArc, int16_t(500 * stepsCount / settingsController.GetStepsGoal())); - - lSteps = lv_label_create(lv_scr_act(), nullptr); - lv_obj_set_style_local_text_color(lSteps, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x00FF00)); - lv_obj_set_style_local_text_font(lSteps, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, &jetbrains_mono_42); - lv_label_set_text_fmt(lSteps, "%li", stepsCount); - lv_obj_align(lSteps, nullptr, LV_ALIGN_CENTER, 0, -20); - - lv_obj_t * lstepsL = lv_label_create(lv_scr_act(), nullptr); - lv_obj_set_style_local_text_color(lstepsL, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x111111)); - lv_label_set_text_static(lstepsL, "Steps"); - lv_obj_align(lstepsL, lSteps, LV_ALIGN_OUT_BOTTOM_MID, 0, 10); - - lv_obj_t * lstepsGoal = lv_label_create(lv_scr_act(), nullptr); - lv_obj_set_style_local_text_color(lstepsGoal, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_CYAN); - lv_label_set_text_fmt(lstepsGoal,"Goal\n%i", settingsController.GetStepsGoal()); - lv_label_set_align(lstepsGoal, LV_LABEL_ALIGN_CENTER); - lv_obj_align(lstepsGoal, lSteps, LV_ALIGN_OUT_BOTTOM_MID, 0, 60); - - lv_obj_t * backgroundLabel = lv_label_create(lv_scr_act(), nullptr); - lv_label_set_long_mode(backgroundLabel, LV_LABEL_LONG_CROP); - lv_obj_set_size(backgroundLabel, 240, 240); - lv_obj_set_pos(backgroundLabel, 0, 0); - lv_label_set_text_static(backgroundLabel, ""); - -} - -Steps::~Steps() { - lv_obj_clean(lv_scr_act()); -} - -bool Steps::Refresh() { - - stepsCount = motionController.NbSteps(); - - lv_label_set_text_fmt(lSteps,"%li", stepsCount); - lv_obj_align(lSteps, nullptr, LV_ALIGN_CENTER, 0, -20); - - lv_arc_set_value(stepsArc, int16_t(500 * stepsCount / settingsController.GetStepsGoal())); - - return running; -} - - diff --git a/src/displayapp/screens/Steps.h b/src/displayapp/screens/Steps.h deleted file mode 100644 index 9c135e260a..0000000000 --- a/src/displayapp/screens/Steps.h +++ /dev/null @@ -1,39 +0,0 @@ -#pragma once - -#include -#include -#include "Screen.h" -#include - -namespace Pinetime { - - namespace Controllers { - class Settings; - } - - namespace Applications { - namespace Screens { - - class Steps : public Screen { - public: - Steps(DisplayApp* app, Controllers::MotionController& motionController, Controllers::Settings &settingsController); - ~Steps() override; - - bool Refresh() override; - - - private: - - Controllers::MotionController& motionController; - Controllers::Settings& settingsController; - - lv_obj_t * lSteps; - lv_obj_t * lStepsIcon; - lv_obj_t * stepsArc; - - uint32_t stepsCount; - - }; - } - } -} diff --git a/src/displayapp/screens/StopWatch.cpp b/src/displayapp/screens/StopWatch.cpp index d7cd20c38b..e06981af8a 100644 --- a/src/displayapp/screens/StopWatch.cpp +++ b/src/displayapp/screens/StopWatch.cpp @@ -115,9 +115,8 @@ bool StopWatch::Refresh() { // Init state when an user first opens the app // and when a stop/reset button is pressed case States::Init: { - if (btnStopLap != nullptr) { + if (btnStopLap) { lv_obj_del(btnStopLap); - btnStopLap = nullptr; } // The initial default value lv_label_set_text(time, "00:00"); diff --git a/src/displayapp/screens/SystemInfo.cpp b/src/displayapp/screens/SystemInfo.cpp index e4ef691146..f6e8d61a92 100644 --- a/src/displayapp/screens/SystemInfo.cpp +++ b/src/displayapp/screens/SystemInfo.cpp @@ -69,14 +69,12 @@ std::unique_ptr SystemInfo::CreateScreen1() { lv_label_set_text_fmt(label, "#FFFF00 InfiniTime#\n\n" "#444444 Version# %ld.%ld.%ld\n\n" - "#444444 Short Ref# %s\n\n" "#444444 Build date#\n" - "%s\n" - "%s\n", + "\t%s\n" + "\t%s\n", Version::Major(), Version::Minor(), Version::Patch(), - Version::GitCommitHash(), __DATE__, __TIME__); lv_label_set_align(label, LV_LABEL_ALIGN_CENTER); @@ -244,4 +242,4 @@ std::unique_ptr SystemInfo::CreateScreen5() { lv_label_set_align(label, LV_LABEL_ALIGN_CENTER); lv_obj_align(label, lv_scr_act(), LV_ALIGN_CENTER, 0, 0); return std::unique_ptr(new Screens::Label(4, 5, app, label)); -} +} \ No newline at end of file diff --git a/src/displayapp/screens/settings/SettingSteps.cpp b/src/displayapp/screens/settings/SettingSteps.cpp deleted file mode 100644 index b7c024f1fa..0000000000 --- a/src/displayapp/screens/settings/SettingSteps.cpp +++ /dev/null @@ -1,98 +0,0 @@ -#include "SettingSteps.h" -#include -#include "displayapp/DisplayApp.h" -#include "displayapp/screens/Symbols.h" - -using namespace Pinetime::Applications::Screens; - -namespace { - static void event_handler(lv_obj_t * obj, lv_event_t event) { - SettingSteps* screen = static_cast(obj->user_data); - screen->UpdateSelected(obj, event); - } -} - -SettingSteps::SettingSteps( - Pinetime::Applications::DisplayApp *app, Pinetime::Controllers::Settings &settingsController) : - Screen(app), - settingsController{settingsController} -{ - - lv_obj_t * container1 = lv_cont_create(lv_scr_act(), nullptr); - - //lv_obj_set_style_local_bg_color(container1, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x111111)); - lv_obj_set_style_local_bg_opa(container1, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, LV_OPA_TRANSP); - lv_obj_set_style_local_pad_all(container1, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, 10); - lv_obj_set_style_local_pad_inner(container1, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, 5); - lv_obj_set_style_local_border_width(container1, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, 0); - lv_obj_set_pos(container1, 30, 60); - lv_obj_set_width(container1, LV_HOR_RES - 50); - lv_obj_set_height(container1, LV_VER_RES - 60); - lv_cont_set_layout(container1, LV_LAYOUT_COLUMN_LEFT); - - lv_obj_t * title = lv_label_create(lv_scr_act(), NULL); - lv_label_set_text_static(title,"Daily steps goal"); - lv_label_set_align(title, LV_LABEL_ALIGN_CENTER); - lv_obj_align(title, lv_scr_act(), LV_ALIGN_IN_TOP_MID, 15, 15); - - lv_obj_t * icon = lv_label_create(lv_scr_act(), NULL); - lv_obj_set_style_local_text_color(icon, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_ORANGE); - - lv_label_set_text_static(icon, Symbols::shoe); - lv_label_set_align(icon, LV_LABEL_ALIGN_CENTER); - lv_obj_align(icon, title, LV_ALIGN_OUT_LEFT_MID, -10, 0); - - - stepValue = lv_label_create(lv_scr_act(), NULL); - lv_obj_set_style_local_text_font(stepValue, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, &jetbrains_mono_42); - lv_label_set_text_fmt(stepValue,"%i", settingsController.GetStepsGoal()); - lv_label_set_align(stepValue, LV_LABEL_ALIGN_CENTER); - lv_obj_align(stepValue, lv_scr_act(), LV_ALIGN_CENTER, 0, -10); - - btnPlus = lv_btn_create(lv_scr_act(), NULL); - btnPlus->user_data = this; - lv_obj_set_size(btnPlus, 80, 50); - lv_obj_align(btnPlus, lv_scr_act(), LV_ALIGN_CENTER, 55, 80); - lv_obj_set_style_local_value_str(btnPlus, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, "+"); - lv_obj_set_event_cb(btnPlus, event_handler); - - btnMinus = lv_btn_create(lv_scr_act(), NULL); - btnMinus->user_data = this; - lv_obj_set_size(btnMinus, 80, 50); - lv_obj_set_event_cb(btnMinus, event_handler); - lv_obj_align(btnMinus, lv_scr_act(), LV_ALIGN_CENTER, -55, 80); - lv_obj_set_style_local_value_str(btnMinus, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, "-"); - -} - -SettingSteps::~SettingSteps() { - lv_obj_clean(lv_scr_act()); - settingsController.SaveSettings(); -} - -bool SettingSteps::Refresh() { - return running; -} - - -void SettingSteps::UpdateSelected(lv_obj_t *object, lv_event_t event) { - uint32_t value = settingsController.GetStepsGoal(); - if(object == btnPlus && (event == LV_EVENT_PRESSED)) { - value += 1000; - if ( value <= 500000 ) { - settingsController.SetStepsGoal(value); - lv_label_set_text_fmt(stepValue,"%i", settingsController.GetStepsGoal()); - lv_obj_align(stepValue, lv_scr_act(), LV_ALIGN_CENTER, 0, -10); - } - } - - if(object == btnMinus && (event == LV_EVENT_PRESSED)) { - value -= 1000; - if ( value >= 1000 ) { - settingsController.SetStepsGoal(value); - lv_label_set_text_fmt(stepValue,"%i", settingsController.GetStepsGoal()); - lv_obj_align(stepValue, lv_scr_act(), LV_ALIGN_CENTER, 0, -10); - } - } - -} \ No newline at end of file diff --git a/src/displayapp/screens/settings/SettingSteps.h b/src/displayapp/screens/settings/SettingSteps.h deleted file mode 100644 index 0a4c2056b2..0000000000 --- a/src/displayapp/screens/settings/SettingSteps.h +++ /dev/null @@ -1,32 +0,0 @@ -#pragma once - -#include -#include -#include "components/settings/Settings.h" -#include "displayapp/screens/Screen.h" - -namespace Pinetime { - - namespace Applications { - namespace Screens { - - class SettingSteps : public Screen{ - public: - SettingSteps(DisplayApp* app, Pinetime::Controllers::Settings &settingsController); - ~SettingSteps() override; - - bool Refresh() override; - void UpdateSelected(lv_obj_t *object, lv_event_t event); - - private: - - Controllers::Settings& settingsController; - - lv_obj_t * stepValue; - lv_obj_t * btnPlus; - lv_obj_t * btnMinus; - - }; - } - } -} diff --git a/src/displayapp/screens/settings/SettingWatchFace.cpp b/src/displayapp/screens/settings/SettingWatchFace.cpp index 457cebf664..3914a04801 100644 --- a/src/displayapp/screens/settings/SettingWatchFace.cpp +++ b/src/displayapp/screens/settings/SettingWatchFace.cpp @@ -58,6 +58,15 @@ SettingWatchFace::SettingWatchFace(Pinetime::Applications::DisplayApp* app, Pine lv_checkbox_set_checked(cbOption[optionsTotal], true); } + optionsTotal++; + cbOption[optionsTotal] = lv_checkbox_create(container1, nullptr); + lv_checkbox_set_text_static(cbOption[optionsTotal], " PineTimeStyle"); + cbOption[optionsTotal]->user_data = this; + lv_obj_set_event_cb(cbOption[optionsTotal], event_handler); + if (settingsController.GetClockFace() == 2) { + lv_checkbox_set_checked(cbOption[optionsTotal], true); + } + optionsTotal++; } @@ -81,4 +90,4 @@ void SettingWatchFace::UpdateSelected(lv_obj_t* object, lv_event_t event) { } } } -} \ No newline at end of file +} diff --git a/src/displayapp/screens/settings/SettingWatchFace.h b/src/displayapp/screens/settings/SettingWatchFace.h index 1930a22853..6f65d69298 100644 --- a/src/displayapp/screens/settings/SettingWatchFace.h +++ b/src/displayapp/screens/settings/SettingWatchFace.h @@ -21,7 +21,7 @@ namespace Pinetime { private: Controllers::Settings& settingsController; uint8_t optionsTotal; - lv_obj_t* cbOption[2]; + lv_obj_t* cbOption[3]; }; } } diff --git a/src/displayapp/screens/settings/Settings.cpp b/src/displayapp/screens/settings/Settings.cpp index 2c72c832ca..e24be3d7fc 100644 --- a/src/displayapp/screens/settings/Settings.cpp +++ b/src/displayapp/screens/settings/Settings.cpp @@ -44,7 +44,9 @@ std::unique_ptr Settings::CreateScreen1() { {Symbols::clock, "Wake Up", Apps::SettingWakeUp}, {Symbols::clock, "Time format", Apps::SettingTimeFormat}, {Symbols::clock, "Watch face", Apps::SettingWatchFace}, - }}; + } + + }; return std::unique_ptr(new Screens::List(0, 2, app, settingsController, applications)); } @@ -52,11 +54,13 @@ std::unique_ptr Settings::CreateScreen1() { std::unique_ptr Settings::CreateScreen2() { std::array applications {{ - {Symbols::shoe, "Steps", Apps::SettingSteps}, {Symbols::batteryHalf, "Battery", Apps::BatteryInfo}, {Symbols::check, "Firmware", Apps::FirmwareValidation}, {Symbols::list, "About", Apps::SysInfo}, - }}; + {"", "", Apps::None}, + } + + }; return std::unique_ptr(new Screens::List(1, 2, app, settingsController, applications)); } diff --git a/src/libs/lv_conf.h b/src/libs/lv_conf.h index 761baba249..e774091bc4 100644 --- a/src/libs/lv_conf.h +++ b/src/libs/lv_conf.h @@ -415,8 +415,8 @@ typedef void* lv_indev_drv_user_data_t; /*Type of user data in the in #define LV_FONT_CUSTOM_DECLARE LV_FONT_DECLARE(jetbrains_mono_bold_20) \ LV_FONT_DECLARE(jetbrains_mono_extrabold_compressed) \ - LV_FONT_DECLARE(jetbrains_mono_42) \ LV_FONT_DECLARE(jetbrains_mono_76) \ + LV_FONT_DECLARE(open_sans_light) \ LV_FONT_DECLARE(lv_font_sys_48) /* Enable it if you have fonts with a lot of characters. @@ -758,4 +758,4 @@ typedef void* lv_obj_user_data_t; /*--END OF LV_CONF_H--*/ -#endif /*LV_CONF_H*/ \ No newline at end of file +#endif /*LV_CONF_H*/ diff --git a/src/logging/NrfLogger.cpp b/src/logging/NrfLogger.cpp index 1c048f2c20..70a00e61df 100644 --- a/src/logging/NrfLogger.cpp +++ b/src/logging/NrfLogger.cpp @@ -12,9 +12,8 @@ void NrfLogger::Init() { NRF_LOG_DEFAULT_BACKENDS_INIT(); - if (pdPASS != xTaskCreate(NrfLogger::Process, "LOGGER", 200, this, 0, &m_logger_thread)) { + if (pdPASS != xTaskCreate(NrfLogger::Process, "LOGGER", 200, this, 0, &m_logger_thread)) APP_ERROR_HANDLER(NRF_ERROR_NO_MEM); - } } void NrfLogger::Process(void*) { @@ -22,7 +21,7 @@ void NrfLogger::Process(void*) { // Suppress endless loop diagnostic #pragma clang diagnostic push #pragma ide diagnostic ignored "EndlessLoop" - while (true) { + while (1) { NRF_LOG_FLUSH(); vTaskDelay(100); // Not good for power consumption, it will wake up every 100ms... } From a4968b502990f4a9e848c5240be2ee73348dd38e Mon Sep 17 00:00:00 2001 From: Kieran Cawthray Date: Tue, 18 May 2021 15:25:38 +0200 Subject: [PATCH 006/173] PineTimeStyle --- src/displayapp/fonts/open_sans_light.c | 1261 ++++++++++++++++++++++ src/displayapp/screens/PineTimeStyle.cpp | 294 +++++ src/displayapp/screens/PineTimeStyle.h | 83 ++ 3 files changed, 1638 insertions(+) create mode 100644 src/displayapp/fonts/open_sans_light.c create mode 100644 src/displayapp/screens/PineTimeStyle.cpp create mode 100644 src/displayapp/screens/PineTimeStyle.h diff --git a/src/displayapp/fonts/open_sans_light.c b/src/displayapp/fonts/open_sans_light.c new file mode 100644 index 0000000000..15f0ddf6da --- /dev/null +++ b/src/displayapp/fonts/open_sans_light.c @@ -0,0 +1,1261 @@ +/******************************************************************************* + * Size: 150 px + * Bpp: 1 + * Opts: + ******************************************************************************/ + +#ifdef LV_LVGL_H_INCLUDE_SIMPLE +#include "lvgl.h" +#else +#include "lvgl/lvgl.h" +#endif + +#ifndef OPEN_SANS_LIGHT +#define OPEN_SANS_LIGHT 1 +#endif + +#if OPEN_SANS_LIGHT + +/*----------------- + * BITMAPS + *----------------*/ + +/*Store the image of the glyphs*/ +static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { + /* U+0030 "0" */ + 0x0, 0x0, 0x0, 0xf, 0xff, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x7, 0xff, 0xff, 0xc0, 0x0, + 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, 0x80, + 0x0, 0x0, 0x0, 0x0, 0x3f, 0xff, 0xff, 0xff, + 0x0, 0x0, 0x0, 0x0, 0x7, 0xff, 0xff, 0xff, + 0xfe, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xff, 0xff, + 0xff, 0xf8, 0x0, 0x0, 0x0, 0xf, 0xff, 0xe0, + 0x3, 0xff, 0xf0, 0x0, 0x0, 0x0, 0xff, 0xf8, + 0x0, 0x3, 0xff, 0xc0, 0x0, 0x0, 0xf, 0xfe, + 0x0, 0x0, 0x7, 0xff, 0x0, 0x0, 0x0, 0xff, + 0xe0, 0x0, 0x0, 0xf, 0xfc, 0x0, 0x0, 0x7, + 0xfe, 0x0, 0x0, 0x0, 0x3f, 0xf0, 0x0, 0x0, + 0x7f, 0xc0, 0x0, 0x0, 0x0, 0xff, 0x80, 0x0, + 0x7, 0xfc, 0x0, 0x0, 0x0, 0x1, 0xfe, 0x0, + 0x0, 0x7f, 0xc0, 0x0, 0x0, 0x0, 0xf, 0xf8, + 0x0, 0x3, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x3f, + 0xc0, 0x0, 0x3f, 0xe0, 0x0, 0x0, 0x0, 0x0, + 0xff, 0x0, 0x1, 0xfe, 0x0, 0x0, 0x0, 0x0, + 0x3, 0xfc, 0x0, 0x1f, 0xf0, 0x0, 0x0, 0x0, + 0x0, 0x1f, 0xe0, 0x0, 0xff, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x7f, 0x80, 0xf, 0xf8, 0x0, 0x0, + 0x0, 0x0, 0x3, 0xfc, 0x0, 0x7f, 0x80, 0x0, + 0x0, 0x0, 0x0, 0xf, 0xe0, 0x3, 0xfc, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x7f, 0x80, 0x3f, 0xc0, + 0x0, 0x0, 0x0, 0x0, 0x3, 0xfc, 0x1, 0xfe, + 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf0, 0xf, + 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0x80, + 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xfc, + 0x7, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, + 0xf0, 0x3f, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x7f, 0x81, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x3, 0xfc, 0x1f, 0xe0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xf, 0xe0, 0xff, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x7f, 0x87, 0xf8, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x3, 0xfc, 0x3f, 0xc0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1f, 0xe1, 0xfe, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0xff, 0x1f, 0xe0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x3, 0xf8, 0xff, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xe7, 0xf8, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x3f, + 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xf9, + 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, + 0xcf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, + 0xfe, 0x7f, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, + 0xf, 0xf3, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x7f, 0xbf, 0xc0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x3, 0xfd, 0xfe, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0xf, 0xff, 0xf0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x7f, 0xff, 0x80, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x3, 0xff, 0xfc, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1f, 0xff, 0xe0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xff, 0xf8, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xff, + 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, + 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, + 0xff, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x7f, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x3, 0xff, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1f, 0xff, 0xe0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x7, 0xff, 0xf8, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x3f, 0xff, 0xc0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1, 0xff, 0xfe, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0xf, 0xff, 0xf0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xff, 0x80, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, 0xfc, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xff, + 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, + 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, + 0xff, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x3f, 0xff, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1, 0xfe, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1f, 0xe7, 0xf8, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0xff, 0x3f, 0xc0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x7, 0xf9, 0xfe, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x3f, 0xcf, 0xf0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1, 0xfe, 0x7f, 0x80, 0x0, + 0x0, 0x0, 0x0, 0x0, 0xf, 0xf3, 0xfc, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0x9f, 0xe0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xfc, 0x7f, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xe3, + 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xfe, + 0x1f, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, + 0xf0, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x7f, 0x87, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x3, 0xfc, 0x1f, 0xc0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1f, 0xe0, 0xff, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1, 0xfe, 0x7, 0xf8, 0x0, 0x0, 0x0, + 0x0, 0x0, 0xf, 0xf0, 0x3f, 0xc0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x7f, 0x80, 0xfe, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x7, 0xfc, 0x7, 0xf8, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x3f, 0xc0, 0x3f, 0xc0, + 0x0, 0x0, 0x0, 0x0, 0x1, 0xfe, 0x0, 0xfe, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xf0, 0x7, + 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, + 0x3f, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xf8, + 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, + 0x80, 0x7, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x3, + 0xfc, 0x0, 0x1f, 0xe0, 0x0, 0x0, 0x0, 0x0, + 0x3f, 0xe0, 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, + 0x1, 0xfe, 0x0, 0x3, 0xfc, 0x0, 0x0, 0x0, + 0x0, 0x1f, 0xf0, 0x0, 0x1f, 0xf0, 0x0, 0x0, + 0x0, 0x1, 0xff, 0x0, 0x0, 0x7f, 0xc0, 0x0, + 0x0, 0x0, 0x1f, 0xf0, 0x0, 0x1, 0xfe, 0x0, + 0x0, 0x0, 0x0, 0xff, 0x80, 0x0, 0xf, 0xf8, + 0x0, 0x0, 0x0, 0xf, 0xf8, 0x0, 0x0, 0x3f, + 0xf0, 0x0, 0x0, 0x1, 0xff, 0x80, 0x0, 0x0, + 0xff, 0xc0, 0x0, 0x0, 0x1f, 0xf8, 0x0, 0x0, + 0x3, 0xff, 0x80, 0x0, 0x3, 0xff, 0x80, 0x0, + 0x0, 0xf, 0xff, 0x0, 0x0, 0x7f, 0xf8, 0x0, + 0x0, 0x0, 0x3f, 0xff, 0x0, 0x1f, 0xff, 0x80, + 0x0, 0x0, 0x0, 0xff, 0xff, 0xff, 0xff, 0xf8, + 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, + 0x0, 0x0, 0x0, 0x0, 0x7, 0xff, 0xff, 0xff, + 0xf0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xff, 0xff, + 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xff, + 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, + 0xff, 0xc0, 0x0, 0x0, 0x0, + + /* U+0031 "1" */ + 0x0, 0x0, 0x0, 0xf, 0xe0, 0x0, 0x0, 0x3, + 0xfc, 0x0, 0x0, 0x1, 0xff, 0x80, 0x0, 0x0, + 0x7f, 0xf0, 0x0, 0x0, 0x1f, 0xfe, 0x0, 0x0, + 0xf, 0xff, 0xc0, 0x0, 0x3, 0xff, 0xf8, 0x0, + 0x0, 0xff, 0xbf, 0x0, 0x0, 0x7f, 0xe7, 0xe0, + 0x0, 0x1f, 0xf8, 0xfc, 0x0, 0x7, 0xfe, 0x1f, + 0x80, 0x3, 0xff, 0x83, 0xf0, 0x0, 0xff, 0xc0, + 0xfe, 0x0, 0x3f, 0xf0, 0x1f, 0xc0, 0x1f, 0xfc, + 0x3, 0xf8, 0x7, 0xff, 0x0, 0x7f, 0x1, 0xff, + 0x80, 0xf, 0xe0, 0xff, 0xe0, 0x1, 0xfc, 0x3f, + 0xf8, 0x0, 0x3f, 0x8f, 0xfc, 0x0, 0x7, 0xf7, + 0xff, 0x0, 0x0, 0xff, 0xff, 0xc0, 0x0, 0x1f, + 0xff, 0xf0, 0x0, 0x3, 0xfb, 0xf8, 0x0, 0x0, + 0x7f, 0x3e, 0x0, 0x0, 0xf, 0xe3, 0x80, 0x0, + 0x1, 0xfc, 0x20, 0x0, 0x0, 0x3f, 0x80, 0x0, + 0x0, 0x7, 0xf0, 0x0, 0x0, 0x0, 0xfe, 0x0, + 0x0, 0x0, 0x1f, 0xc0, 0x0, 0x0, 0x3, 0xf8, + 0x0, 0x0, 0x0, 0x7f, 0x0, 0x0, 0x0, 0xf, + 0xe0, 0x0, 0x0, 0x1, 0xfc, 0x0, 0x0, 0x0, + 0x3f, 0x80, 0x0, 0x0, 0x7, 0xf0, 0x0, 0x0, + 0x0, 0xfe, 0x0, 0x0, 0x0, 0x1f, 0xc0, 0x0, + 0x0, 0x3, 0xf8, 0x0, 0x0, 0x0, 0x7f, 0x0, + 0x0, 0x0, 0xf, 0xe0, 0x0, 0x0, 0x1, 0xfc, + 0x0, 0x0, 0x0, 0x3f, 0x80, 0x0, 0x0, 0x7, + 0xf0, 0x0, 0x0, 0x0, 0xfe, 0x0, 0x0, 0x0, + 0x1f, 0xc0, 0x0, 0x0, 0x3, 0xf8, 0x0, 0x0, + 0x0, 0x7f, 0x0, 0x0, 0x0, 0xf, 0xe0, 0x0, + 0x0, 0x1, 0xfc, 0x0, 0x0, 0x0, 0x3f, 0x80, + 0x0, 0x0, 0x7, 0xf0, 0x0, 0x0, 0x0, 0xfe, + 0x0, 0x0, 0x0, 0x1f, 0xc0, 0x0, 0x0, 0x3, + 0xf8, 0x0, 0x0, 0x0, 0x7f, 0x0, 0x0, 0x0, + 0xf, 0xe0, 0x0, 0x0, 0x1, 0xfc, 0x0, 0x0, + 0x0, 0x3f, 0x80, 0x0, 0x0, 0x7, 0xf0, 0x0, + 0x0, 0x0, 0xfe, 0x0, 0x0, 0x0, 0x1f, 0xc0, + 0x0, 0x0, 0x3, 0xf8, 0x0, 0x0, 0x0, 0x7f, + 0x0, 0x0, 0x0, 0xf, 0xe0, 0x0, 0x0, 0x1, + 0xfc, 0x0, 0x0, 0x0, 0x3f, 0x80, 0x0, 0x0, + 0x7, 0xf0, 0x0, 0x0, 0x0, 0xfe, 0x0, 0x0, + 0x0, 0x1f, 0xc0, 0x0, 0x0, 0x3, 0xf8, 0x0, + 0x0, 0x0, 0x7f, 0x0, 0x0, 0x0, 0xf, 0xe0, + 0x0, 0x0, 0x1, 0xfc, 0x0, 0x0, 0x0, 0x3f, + 0x80, 0x0, 0x0, 0x7, 0xf0, 0x0, 0x0, 0x0, + 0xfe, 0x0, 0x0, 0x0, 0x1f, 0xc0, 0x0, 0x0, + 0x3, 0xf8, 0x0, 0x0, 0x0, 0x7f, 0x0, 0x0, + 0x0, 0xf, 0xe0, 0x0, 0x0, 0x1, 0xfc, 0x0, + 0x0, 0x0, 0x3f, 0x80, 0x0, 0x0, 0x7, 0xf0, + 0x0, 0x0, 0x0, 0xfe, 0x0, 0x0, 0x0, 0x1f, + 0xc0, 0x0, 0x0, 0x3, 0xf8, 0x0, 0x0, 0x0, + 0x7f, 0x0, 0x0, 0x0, 0xf, 0xe0, 0x0, 0x0, + 0x1, 0xfc, 0x0, 0x0, 0x0, 0x3f, 0x80, 0x0, + 0x0, 0x7, 0xf0, 0x0, 0x0, 0x0, 0xfe, 0x0, + 0x0, 0x0, 0x1f, 0xc0, 0x0, 0x0, 0x3, 0xf8, + 0x0, 0x0, 0x0, 0x7f, 0x0, 0x0, 0x0, 0xf, + 0xe0, 0x0, 0x0, 0x1, 0xfc, 0x0, 0x0, 0x0, + 0x3f, 0x80, 0x0, 0x0, 0x7, 0xf0, 0x0, 0x0, + 0x0, 0xfe, 0x0, 0x0, 0x0, 0x1f, 0xc0, 0x0, + 0x0, 0x3, 0xf8, 0x0, 0x0, 0x0, 0x7f, 0x0, + 0x0, 0x0, 0xf, 0xe0, 0x0, 0x0, 0x1, 0xfc, + 0x0, 0x0, 0x0, 0x3f, 0x80, + + /* U+0032 "2" */ + 0x0, 0x0, 0x0, 0x7f, 0xfe, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x1, 0xff, 0xff, 0xfc, 0x0, 0x0, + 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xf0, 0x0, + 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, + 0x0, 0x0, 0x0, 0xff, 0xff, 0xff, 0xff, 0xfc, + 0x0, 0x0, 0x0, 0x7f, 0xff, 0xff, 0xff, 0xff, + 0xe0, 0x0, 0x0, 0x1f, 0xff, 0xf0, 0x1, 0xff, + 0xfe, 0x0, 0x0, 0xf, 0xff, 0xc0, 0x0, 0x3, + 0xff, 0xe0, 0x0, 0x7, 0xff, 0xe0, 0x0, 0x0, + 0x1f, 0xfe, 0x0, 0x1, 0xff, 0xe0, 0x0, 0x0, + 0x0, 0xff, 0xe0, 0x0, 0x7f, 0xf0, 0x0, 0x0, + 0x0, 0xf, 0xfe, 0x0, 0xf, 0xfc, 0x0, 0x0, + 0x0, 0x0, 0xff, 0xc0, 0x0, 0xfe, 0x0, 0x0, + 0x0, 0x0, 0xf, 0xfc, 0x0, 0xf, 0x80, 0x0, + 0x0, 0x0, 0x0, 0xff, 0xc0, 0x1, 0xc0, 0x0, + 0x0, 0x0, 0x0, 0xf, 0xf8, 0x0, 0x10, 0x0, + 0x0, 0x0, 0x0, 0x0, 0xff, 0x80, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1f, 0xf0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1, 0xfe, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xe0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xfc, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0x80, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, + 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, + 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x7f, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0xf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x3f, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x7, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x1f, 0xe0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x3, 0xfc, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x7f, 0x80, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1f, 0xf0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x3, 0xfc, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x7f, 0x80, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0xf, 0xf0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x3, 0xfe, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0x80, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xfe, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0x80, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xfe, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, + 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, + 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, + 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x3f, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x7, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x7f, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xf, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x3, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x3f, 0xf0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x7, 0xfc, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x1, 0xff, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x7f, 0xc0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1f, 0xf8, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x7, 0xfe, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1, 0xff, 0x80, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x7f, 0xe0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0xf, 0xf8, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xc0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xf0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xfc, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xc0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xf0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xfc, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, + 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, + 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, + 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, + 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x7f, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1f, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x7, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x7f, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1f, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x7, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x7f, 0xe0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x1f, 0xf8, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x7, 0xfe, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x1, 0xff, 0x80, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x7f, 0xe0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1f, 0xf8, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x7, 0xfe, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0xff, 0x80, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x3f, 0xe0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0xf, 0xf8, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x3, 0xfe, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x80, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xe0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf8, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xfe, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x80, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xf0, + + /* U+0033 "3" */ + 0x0, 0x0, 0x0, 0x1f, 0xff, 0x80, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x7f, 0xff, 0xff, 0xc0, 0x0, + 0x0, 0x0, 0x0, 0x3f, 0xff, 0xff, 0xff, 0x80, + 0x0, 0x0, 0x0, 0x1f, 0xff, 0xff, 0xff, 0xff, + 0x0, 0x0, 0x0, 0xf, 0xff, 0xff, 0xff, 0xff, + 0xf8, 0x0, 0x0, 0x3, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xe0, 0x0, 0x0, 0xff, 0xff, 0xe0, 0x0, + 0xff, 0xff, 0x0, 0x0, 0x3f, 0xff, 0xc0, 0x0, + 0x0, 0xff, 0xf8, 0x0, 0x7, 0xff, 0xe0, 0x0, + 0x0, 0x3, 0xff, 0xc0, 0x1, 0xff, 0xf0, 0x0, + 0x0, 0x0, 0xf, 0xfe, 0x0, 0x3f, 0xfc, 0x0, + 0x0, 0x0, 0x0, 0x7f, 0xf0, 0x7, 0xff, 0x0, + 0x0, 0x0, 0x0, 0x1, 0xff, 0x80, 0x3f, 0xc0, + 0x0, 0x0, 0x0, 0x0, 0xf, 0xfc, 0x1, 0xf8, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xc0, 0xe, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xfe, 0x0, + 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xe0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xfe, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, + 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0xf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x7, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x7f, 0x80, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x7, 0xf8, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x7f, 0x80, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x7, 0xf8, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x7f, 0x80, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x7, 0xf8, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0x80, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xf8, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0x80, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf8, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, + 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1f, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x3f, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x3, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x7f, 0xc0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0xf, 0xf8, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x1, 0xff, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x3f, 0xf0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x7, 0xfe, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0xff, 0xc0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x3f, 0xf8, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x7, 0xfe, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xc0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xf8, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xfe, 0x0, + 0x0, 0x0, 0x0, 0xff, 0xff, 0xff, 0xff, 0x0, + 0x0, 0x0, 0x0, 0xf, 0xff, 0xff, 0xff, 0x80, + 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0xff, 0xc0, + 0x0, 0x0, 0x0, 0x0, 0xf, 0xff, 0xff, 0xff, + 0xc0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0xff, + 0xff, 0xc0, 0x0, 0x0, 0x0, 0xf, 0xff, 0xff, + 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, + 0xf, 0xff, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x3, 0xff, 0xf8, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x7, 0xff, 0xc0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0xf, 0xff, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x3f, 0xf8, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xc0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xfe, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xf0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, + 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x7, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x3f, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x3, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x1f, 0xe0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x1, 0xfe, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1f, 0xe0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0xf, 0xf0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, + 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0xf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1f, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x1f, 0xe0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x1, 0xfe, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x3f, 0xe0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x3, 0xfc, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x7f, 0xc0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x7, 0xfc, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x80, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf8, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xe0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xfe, + 0x8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, + 0xc0, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, + 0xf8, 0xf, 0x80, 0x0, 0x0, 0x0, 0x0, 0x7, + 0xff, 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0x1, + 0xff, 0xe0, 0xf, 0xfe, 0x0, 0x0, 0x0, 0x0, + 0x7f, 0xfc, 0x0, 0xff, 0xfe, 0x0, 0x0, 0x0, + 0x7f, 0xff, 0x80, 0xf, 0xff, 0xff, 0x80, 0x0, + 0xff, 0xff, 0xe0, 0x0, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xfc, 0x0, 0x1, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x0, 0x0, 0x7, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xc0, 0x0, 0x0, 0xf, 0xff, + 0xff, 0xff, 0xff, 0xe0, 0x0, 0x0, 0x0, 0x7, + 0xff, 0xff, 0xff, 0xe0, 0x0, 0x0, 0x0, 0x0, + 0x1, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, + + /* U+0034 "4" */ + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xfc, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x7, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x7, 0xff, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, 0x80, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, + 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x3, 0xff, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x3, 0xfb, 0xf0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1, 0xfd, 0xf8, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xfc, + 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1, 0xfc, 0x7e, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0xfe, 0x3f, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0xfe, 0x1f, 0x80, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xfe, + 0xf, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x7f, 0x7, 0xe0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x7f, 0x3, 0xf0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0x1, 0xf8, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, + 0x80, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x3f, 0x80, 0x7e, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x3f, 0xc0, 0x3f, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xc0, 0x1f, + 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, + 0xc0, 0xf, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1f, 0xc0, 0x7, 0xe0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1f, 0xe0, 0x3, 0xf0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xe0, 0x1, + 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, + 0xe0, 0x0, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xf, 0xf0, 0x0, 0x7e, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0xf, 0xf0, 0x0, 0x3f, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xf0, 0x0, + 0x1f, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, + 0xf8, 0x0, 0xf, 0xc0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x7, 0xf8, 0x0, 0x7, 0xe0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x3, 0xf8, 0x0, 0x3, 0xf0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xf8, 0x0, + 0x1, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, + 0xfc, 0x0, 0x0, 0xfc, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x3, 0xfc, 0x0, 0x0, 0x7e, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1, 0xfc, 0x0, 0x0, 0x3f, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xfe, 0x0, + 0x0, 0x1f, 0x80, 0x0, 0x0, 0x0, 0x0, 0x1, + 0xfe, 0x0, 0x0, 0xf, 0xc0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0xfe, 0x0, 0x0, 0x7, 0xe0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0x3, + 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, + 0x0, 0x1, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, + 0xff, 0x0, 0x0, 0x0, 0xfc, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x7f, 0x0, 0x0, 0x0, 0x7e, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x7f, 0x80, 0x0, 0x0, + 0x3f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0x80, + 0x0, 0x0, 0x1f, 0x80, 0x0, 0x0, 0x0, 0x0, + 0x3f, 0x80, 0x0, 0x0, 0xf, 0xc0, 0x0, 0x0, + 0x0, 0x0, 0x3f, 0xc0, 0x0, 0x0, 0x7, 0xe0, + 0x0, 0x0, 0x0, 0x0, 0x3f, 0xc0, 0x0, 0x0, + 0x3, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xc0, + 0x0, 0x0, 0x1, 0xf8, 0x0, 0x0, 0x0, 0x0, + 0x1f, 0xe0, 0x0, 0x0, 0x0, 0xfc, 0x0, 0x0, + 0x0, 0x0, 0x1f, 0xe0, 0x0, 0x0, 0x0, 0x7e, + 0x0, 0x0, 0x0, 0x0, 0x1f, 0xe0, 0x0, 0x0, + 0x0, 0x3f, 0x0, 0x0, 0x0, 0x0, 0xf, 0xe0, + 0x0, 0x0, 0x0, 0x1f, 0x80, 0x0, 0x0, 0x0, + 0xf, 0xf0, 0x0, 0x0, 0x0, 0xf, 0xc0, 0x0, + 0x0, 0x0, 0xf, 0xf0, 0x0, 0x0, 0x0, 0x7, + 0xe0, 0x0, 0x0, 0x0, 0x7, 0xf0, 0x0, 0x0, + 0x0, 0x3, 0xf0, 0x0, 0x0, 0x0, 0x7, 0xf8, + 0x0, 0x0, 0x0, 0x1, 0xf8, 0x0, 0x0, 0x0, + 0x7, 0xf8, 0x0, 0x0, 0x0, 0x0, 0xfc, 0x0, + 0x0, 0x0, 0x3, 0xf8, 0x0, 0x0, 0x0, 0x0, + 0x7e, 0x0, 0x0, 0x0, 0x3, 0xfc, 0x0, 0x0, + 0x0, 0x0, 0x3f, 0x0, 0x0, 0x0, 0x3, 0xfc, + 0x0, 0x0, 0x0, 0x0, 0x1f, 0x80, 0x0, 0x0, + 0x3, 0xfc, 0x0, 0x0, 0x0, 0x0, 0xf, 0xc0, + 0x0, 0x0, 0x1, 0xfc, 0x0, 0x0, 0x0, 0x0, + 0x7, 0xe0, 0x0, 0x0, 0x1, 0xfe, 0x0, 0x0, + 0x0, 0x0, 0x3, 0xf0, 0x0, 0x0, 0x1, 0xfe, + 0x0, 0x0, 0x0, 0x0, 0x1, 0xf8, 0x0, 0x0, + 0x0, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, 0xfc, + 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x7e, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x3f, 0x0, 0x0, 0x0, 0xff, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0x80, 0x0, + 0x0, 0x7f, 0x80, 0x0, 0x0, 0x0, 0x0, 0xf, + 0xc0, 0x0, 0x0, 0x7f, 0x80, 0x0, 0x0, 0x0, + 0x0, 0x7, 0xe0, 0x0, 0x0, 0x7f, 0x80, 0x0, + 0x0, 0x0, 0x0, 0x3, 0xf0, 0x0, 0x0, 0x3f, + 0x80, 0x0, 0x0, 0x0, 0x0, 0x1, 0xf8, 0x0, + 0x0, 0x3f, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0xfc, 0x0, 0x0, 0x3f, 0xc0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x7e, 0x0, 0x0, 0x1f, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0xfe, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, + 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1f, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0xf, 0xe0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xf0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, + 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0xfe, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x3f, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x1f, 0xc0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0xf, 0xe0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xf0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x3, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x1, 0xfc, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0xfe, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x3f, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1f, 0xc0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xe0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, + 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x3, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1, 0xfc, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xfe, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x7f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x3f, 0x80, 0x0, 0x0, + + /* U+0035 "5" */ + 0x1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, + 0x0, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, + 0x0, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, + 0x0, 0x7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x80, 0x1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xe0, 0x0, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xf8, 0x0, 0x1f, 0xc0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x7, 0xf0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x1, 0xfc, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x7f, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x3f, 0xc0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0xf, 0xf0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x3, 0xfc, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x3f, 0x80, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0xf, 0xe0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x3, 0xf8, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0xfe, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0x80, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xe0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xf8, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xfe, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0x80, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xe0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xf8, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xfe, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, + 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, + 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, + 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x7f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1f, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0xf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x3, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x3f, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x3, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x3f, 0x80, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0xf, 0xe0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x3, 0xf8, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0xfe, 0x0, 0x7f, 0xff, 0x80, + 0x0, 0x0, 0x0, 0x3f, 0x8f, 0xff, 0xff, 0xff, + 0x0, 0x0, 0x0, 0x1f, 0xff, 0xff, 0xff, 0xff, + 0xfc, 0x0, 0x0, 0x7, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xc0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xfc, 0x0, 0x0, 0x7f, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xc0, 0x0, 0xf, 0xff, 0xf0, 0x0, + 0x3f, 0xff, 0xfc, 0x0, 0x1, 0xfe, 0x0, 0x0, + 0x0, 0x7f, 0xff, 0x80, 0x0, 0x18, 0x0, 0x0, + 0x0, 0x3, 0xff, 0xf0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x3f, 0xfe, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x3, 0xff, 0xc0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x3f, 0xf8, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x7, 0xff, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0xff, 0xe0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1f, 0xfc, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xe0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf8, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xc0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xfe, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, + 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, + 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, + 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, + 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x3f, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0xf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x3, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x3f, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x3, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x3f, 0xc0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0xf, 0xf0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x3, 0xfc, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x7f, 0x80, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1f, 0xe0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x7, 0xf8, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1, 0xfe, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0xff, 0x80, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x3f, 0xc0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1f, 0xf0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x7, 0xfc, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x3, 0xfe, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x80, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xc0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xf0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xf8, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xfc, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xff, 0x3, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, 0x80, + 0xf0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xc0, + 0x3f, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xe0, + 0xf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xf0, + 0x3, 0xff, 0x80, 0x0, 0x0, 0x1, 0xff, 0xf8, + 0x0, 0xff, 0xfc, 0x0, 0x0, 0x3, 0xff, 0xfc, + 0x0, 0x3f, 0xff, 0xfc, 0x0, 0xf, 0xff, 0xfc, + 0x0, 0xf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, + 0x0, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, + 0x0, 0x0, 0x7, 0xff, 0xff, 0xff, 0xff, 0xfe, + 0x0, 0x0, 0x0, 0x3f, 0xff, 0xff, 0xff, 0xfc, + 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0xff, 0xf8, + 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0xc0, + 0x0, 0x0, 0x0, + + /* U+0036 "6" */ + 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xfe, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0xff, + 0x80, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xff, 0xff, + 0xfc, 0x0, 0x0, 0x0, 0x0, 0xf, 0xff, 0xff, + 0xff, 0xe0, 0x0, 0x0, 0x0, 0x3, 0xff, 0xff, + 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xff, + 0xff, 0xff, 0xf8, 0x0, 0x0, 0x0, 0x7, 0xff, + 0xfc, 0x0, 0xf, 0xc0, 0x0, 0x0, 0x0, 0xff, + 0xfe, 0x0, 0x0, 0x2, 0x0, 0x0, 0x0, 0xf, + 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0xff, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0xf, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xff, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xf, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0xf, 0xf8, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0xff, 0x80, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0xf, 0xf8, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x7f, 0x80, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x7, 0xfc, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xc0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xfc, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xc0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xfe, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, + 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0xf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x7f, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x7, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x3f, 0xc0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x1, 0xfc, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1f, 0xe0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0xfe, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x7, 0xf0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0x80, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xf8, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xc0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xfe, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, + 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x7f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x3, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x3f, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0xf, 0xe0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x7f, 0x0, 0x0, 0x3, 0xff, + 0xe0, 0x0, 0x0, 0x3, 0xf8, 0x0, 0x1, 0xff, + 0xff, 0xf0, 0x0, 0x0, 0x1f, 0xc0, 0x0, 0x7f, + 0xff, 0xff, 0xf0, 0x0, 0x0, 0xfe, 0x0, 0xf, + 0xff, 0xff, 0xff, 0xf0, 0x0, 0xf, 0xf0, 0x1, + 0xff, 0xff, 0xff, 0xff, 0xc0, 0x0, 0x7f, 0x0, + 0x3f, 0xff, 0xff, 0xff, 0xff, 0x80, 0x3, 0xf8, + 0x3, 0xff, 0xf0, 0x1, 0xff, 0xfe, 0x0, 0x1f, + 0xc0, 0x7f, 0xf8, 0x0, 0x0, 0xff, 0xf8, 0x0, + 0xfe, 0x7, 0xfe, 0x0, 0x0, 0x1, 0xff, 0xe0, + 0x7, 0xf0, 0x7f, 0xc0, 0x0, 0x0, 0x3, 0xff, + 0x80, 0x3f, 0x87, 0xf8, 0x0, 0x0, 0x0, 0x7, + 0xfe, 0x1, 0xfc, 0x7f, 0x80, 0x0, 0x0, 0x0, + 0x1f, 0xf8, 0xf, 0xe7, 0xf8, 0x0, 0x0, 0x0, + 0x0, 0x7f, 0xe0, 0x7f, 0x7f, 0x0, 0x0, 0x0, + 0x0, 0x1, 0xff, 0x3, 0xff, 0xf0, 0x0, 0x0, + 0x0, 0x0, 0x7, 0xfc, 0x1f, 0xff, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1f, 0xf0, 0xff, 0xf8, 0x0, + 0x0, 0x0, 0x0, 0x0, 0xff, 0x8f, 0xff, 0x80, + 0x0, 0x0, 0x0, 0x0, 0x3, 0xfc, 0x7f, 0xf8, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xf3, 0xff, + 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0x9f, + 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xfc, + 0xff, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, + 0xf3, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x7f, 0x9f, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x3, 0xfc, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1f, 0xe7, 0xf8, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0xff, 0xbf, 0xc0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x3, 0xfd, 0xfe, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1f, 0xef, 0xf0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0xff, 0x7f, 0x80, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x7, 0xfb, 0xfc, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xdf, 0xe0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xfe, 0xff, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf7, + 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, + 0x9f, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, + 0xfc, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1f, 0xe7, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xff, 0x3f, 0xc0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x7, 0xf8, 0xfe, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x3f, 0xc7, 0xf0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x3, 0xfc, 0x3f, 0x80, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1f, 0xe1, 0xfe, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0xff, 0x7, 0xf0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x7, 0xf8, 0x3f, 0xc0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xc1, 0xfe, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xfc, 0x7, + 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xe0, + 0x3f, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, + 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, + 0xf0, 0x7, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x7f, 0x80, 0x1f, 0xe0, 0x0, 0x0, 0x0, 0x0, + 0x7, 0xfc, 0x0, 0xff, 0x80, 0x0, 0x0, 0x0, + 0x0, 0x3f, 0xc0, 0x3, 0xfc, 0x0, 0x0, 0x0, + 0x0, 0x3, 0xfe, 0x0, 0x1f, 0xf0, 0x0, 0x0, + 0x0, 0x0, 0x3f, 0xe0, 0x0, 0x7f, 0xc0, 0x0, + 0x0, 0x0, 0x3, 0xfe, 0x0, 0x1, 0xff, 0x0, + 0x0, 0x0, 0x0, 0x3f, 0xf0, 0x0, 0x7, 0xfc, + 0x0, 0x0, 0x0, 0x3, 0xff, 0x0, 0x0, 0x3f, + 0xf8, 0x0, 0x0, 0x0, 0x3f, 0xf0, 0x0, 0x0, + 0xff, 0xe0, 0x0, 0x0, 0x3, 0xff, 0x0, 0x0, + 0x3, 0xff, 0xc0, 0x0, 0x0, 0x7f, 0xf0, 0x0, + 0x0, 0xf, 0xff, 0x80, 0x0, 0x1f, 0xff, 0x0, + 0x0, 0x0, 0x1f, 0xff, 0xc0, 0xf, 0xff, 0xf0, + 0x0, 0x0, 0x0, 0x7f, 0xff, 0xff, 0xff, 0xfe, + 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0xff, 0xff, + 0xe0, 0x0, 0x0, 0x0, 0x3, 0xff, 0xff, 0xff, + 0xfc, 0x0, 0x0, 0x0, 0x0, 0x7, 0xff, 0xff, + 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x7, 0xff, + 0xff, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, + 0xff, 0xe0, 0x0, 0x0, 0x0, + + /* U+0037 "7" */ + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xfc, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x3f, 0xc0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1, 0xfe, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1f, 0xe0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0x80, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xfc, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, + 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, + 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1f, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x7f, 0x80, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x7, 0xfc, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x3f, 0xc0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x3, 0xfe, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1f, 0xe0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0x80, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xf8, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, + 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, + 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1f, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x7f, 0x80, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x7, 0xf8, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x3f, 0xc0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x3, 0xfe, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1f, 0xe0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0x80, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xf8, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, + 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, + 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1f, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x7f, 0x80, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x7, 0xf8, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x3f, 0xc0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x3, 0xfc, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1f, 0xe0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x80, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xf8, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, + 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, + 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1f, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x7, 0xf8, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x7f, 0xc0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x3, 0xfc, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1f, 0xe0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x80, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xf8, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, + 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, + 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1f, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x7, 0xf8, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x7f, 0xc0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x3, 0xfc, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x3f, 0xe0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1, 0xfe, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x80, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xf8, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, + 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, + 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x3f, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x7, 0xf8, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x7f, 0xc0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x3, 0xfc, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x3f, 0xe0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1, 0xfe, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xf0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x80, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xf8, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, + 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, + 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x3f, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1f, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0xf, 0xf8, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x7f, 0xc0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x3, 0xfc, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, + + /* U+0038 "8" */ + 0x0, 0x0, 0x0, 0x1f, 0xff, 0x80, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x3f, 0xff, 0xff, 0x80, 0x0, + 0x0, 0x0, 0x0, 0x1f, 0xff, 0xff, 0xff, 0x0, + 0x0, 0x0, 0x0, 0x7, 0xff, 0xff, 0xff, 0xfc, + 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, + 0xf0, 0x0, 0x0, 0x0, 0x3f, 0xff, 0xff, 0xff, + 0xff, 0xc0, 0x0, 0x0, 0xf, 0xff, 0xf0, 0x1, + 0xff, 0xfe, 0x0, 0x0, 0x1, 0xff, 0xf0, 0x0, + 0x1, 0xff, 0xf0, 0x0, 0x0, 0x3f, 0xf8, 0x0, + 0x0, 0x3, 0xff, 0x80, 0x0, 0x7, 0xfe, 0x0, + 0x0, 0x0, 0xf, 0xfc, 0x0, 0x0, 0xff, 0xc0, + 0x0, 0x0, 0x0, 0x7f, 0xe0, 0x0, 0x1f, 0xf8, + 0x0, 0x0, 0x0, 0x3, 0xff, 0x0, 0x1, 0xff, + 0x0, 0x0, 0x0, 0x0, 0x1f, 0xf8, 0x0, 0x3f, + 0xe0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x80, 0x7, + 0xfc, 0x0, 0x0, 0x0, 0x0, 0x7, 0xfc, 0x0, + 0x7f, 0x80, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xc0, + 0x7, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x3, 0xfc, + 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, + 0xe0, 0xf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x1, + 0xfe, 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1f, 0xe0, 0x1f, 0xe0, 0x0, 0x0, 0x0, 0x0, + 0x1, 0xff, 0x1, 0xfe, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xf, 0xf0, 0x1f, 0xe0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0xff, 0x1, 0xfe, 0x0, 0x0, 0x0, + 0x0, 0x0, 0xf, 0xf0, 0x1f, 0xe0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0xff, 0x1, 0xfe, 0x0, 0x0, + 0x0, 0x0, 0x0, 0xf, 0xf0, 0x1f, 0xe0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0xff, 0x1, 0xfe, 0x0, + 0x0, 0x0, 0x0, 0x0, 0xf, 0xf0, 0x1f, 0xe0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x1, 0xfe, + 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf0, 0x1f, + 0xf0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xfe, 0x0, + 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xe0, + 0xf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xfe, + 0x0, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x3f, + 0xe0, 0x7, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x3, + 0xfc, 0x0, 0x7f, 0xc0, 0x0, 0x0, 0x0, 0x0, + 0x7f, 0xc0, 0x7, 0xfe, 0x0, 0x0, 0x0, 0x0, + 0x7, 0xf8, 0x0, 0x3f, 0xf0, 0x0, 0x0, 0x0, + 0x0, 0xff, 0x80, 0x1, 0xff, 0x0, 0x0, 0x0, + 0x0, 0x1f, 0xf0, 0x0, 0x1f, 0xf8, 0x0, 0x0, + 0x0, 0x3, 0xfe, 0x0, 0x0, 0xff, 0xe0, 0x0, + 0x0, 0x0, 0x7f, 0xc0, 0x0, 0x7, 0xff, 0x0, + 0x0, 0x0, 0xf, 0xf8, 0x0, 0x0, 0x3f, 0xf8, + 0x0, 0x0, 0x1, 0xff, 0x80, 0x0, 0x1, 0xff, + 0xe0, 0x0, 0x0, 0x7f, 0xe0, 0x0, 0x0, 0xf, + 0xff, 0x80, 0x0, 0x1f, 0xfc, 0x0, 0x0, 0x0, + 0x7f, 0xfe, 0x0, 0x3, 0xff, 0x80, 0x0, 0x0, + 0x1, 0xff, 0xf8, 0x0, 0xff, 0xe0, 0x0, 0x0, + 0x0, 0xf, 0xff, 0xe0, 0x3f, 0xfc, 0x0, 0x0, + 0x0, 0x0, 0x3f, 0xff, 0x9f, 0xff, 0x0, 0x0, + 0x0, 0x0, 0x0, 0xff, 0xff, 0xff, 0xc0, 0x0, + 0x0, 0x0, 0x0, 0x3, 0xff, 0xff, 0xf0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0xf, 0xff, 0xfc, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0xf0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xff, 0xff, + 0xc0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xff, 0xff, + 0xff, 0x0, 0x0, 0x0, 0x0, 0x7, 0xff, 0xe7, + 0xff, 0xfc, 0x0, 0x0, 0x0, 0x0, 0xff, 0xf8, + 0xf, 0xff, 0xf0, 0x0, 0x0, 0x0, 0x3f, 0xfe, + 0x0, 0x3f, 0xff, 0xc0, 0x0, 0x0, 0x7, 0xff, + 0x80, 0x0, 0xff, 0xfe, 0x0, 0x0, 0x1, 0xff, + 0xe0, 0x0, 0x3, 0xff, 0xf8, 0x0, 0x0, 0x3f, + 0xf8, 0x0, 0x0, 0x7, 0xff, 0xc0, 0x0, 0x7, + 0xfe, 0x0, 0x0, 0x0, 0x3f, 0xfe, 0x0, 0x0, + 0xff, 0xc0, 0x0, 0x0, 0x0, 0xff, 0xf0, 0x0, + 0x1f, 0xf8, 0x0, 0x0, 0x0, 0x3, 0xff, 0x80, + 0x3, 0xff, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xfc, + 0x0, 0x7f, 0xc0, 0x0, 0x0, 0x0, 0x0, 0xff, + 0xe0, 0xf, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x3, + 0xff, 0x0, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, + 0x1f, 0xf0, 0x1f, 0xf0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xff, 0x81, 0xfe, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xf, 0xf8, 0x3f, 0xe0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x7f, 0xc3, 0xfc, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x3, 0xfc, 0x7f, 0xc0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x3f, 0xe7, 0xf8, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x3, 0xfe, 0x7f, 0x80, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1f, 0xe7, 0xf8, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1, 0xfe, 0xff, 0x80, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xff, 0xf0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xff, + 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, + 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, + 0xff, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0xf, 0xff, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xf, 0xff, 0xf0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0xf, 0xff, 0xf0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x1, 0xfe, 0x7f, 0x80, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1f, 0xe7, 0xf8, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1, 0xfe, 0x7f, 0x80, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x3f, 0xe7, 0xfc, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x3, 0xfc, 0x3f, 0xc0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xc3, 0xfe, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xf8, 0x1f, + 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x81, + 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xf0, + 0xf, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, + 0x0, 0xff, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x7f, + 0xe0, 0x7, 0xfe, 0x0, 0x0, 0x0, 0x0, 0xf, + 0xfc, 0x0, 0x3f, 0xf0, 0x0, 0x0, 0x0, 0x1, + 0xff, 0x80, 0x3, 0xff, 0xc0, 0x0, 0x0, 0x0, + 0x7f, 0xf0, 0x0, 0x1f, 0xff, 0x0, 0x0, 0x0, + 0x1f, 0xfe, 0x0, 0x0, 0x7f, 0xfe, 0x0, 0x0, + 0xf, 0xff, 0xc0, 0x0, 0x3, 0xff, 0xfe, 0x0, + 0xf, 0xff, 0xf8, 0x0, 0x0, 0x1f, 0xff, 0xff, + 0xff, 0xff, 0xfe, 0x0, 0x0, 0x0, 0x7f, 0xff, + 0xff, 0xff, 0xff, 0xc0, 0x0, 0x0, 0x1, 0xff, + 0xff, 0xff, 0xff, 0xf0, 0x0, 0x0, 0x0, 0x7, + 0xff, 0xff, 0xff, 0xf8, 0x0, 0x0, 0x0, 0x0, + 0x7, 0xff, 0xff, 0xfc, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x7, 0xff, 0xf8, 0x0, 0x0, 0x0, + + /* U+0039 "9" */ + 0x0, 0x0, 0x0, 0x1f, 0xfe, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x3f, 0xff, 0xfe, 0x0, 0x0, + 0x0, 0x0, 0x0, 0xf, 0xff, 0xff, 0xfc, 0x0, + 0x0, 0x0, 0x0, 0x3, 0xff, 0xff, 0xff, 0xf0, + 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0xff, 0xff, + 0xc0, 0x0, 0x0, 0x0, 0x3f, 0xff, 0xff, 0xff, + 0xfe, 0x0, 0x0, 0x0, 0x7, 0xff, 0xf0, 0x3, + 0xff, 0xf8, 0x0, 0x0, 0x0, 0xff, 0xf0, 0x0, + 0x3, 0xff, 0xc0, 0x0, 0x0, 0x1f, 0xfc, 0x0, + 0x0, 0xf, 0xfe, 0x0, 0x0, 0x3, 0xff, 0x0, + 0x0, 0x0, 0x3f, 0xf0, 0x0, 0x0, 0x7f, 0xc0, + 0x0, 0x0, 0x0, 0xff, 0x80, 0x0, 0xf, 0xf8, + 0x0, 0x0, 0x0, 0x7, 0xfc, 0x0, 0x1, 0xff, + 0x0, 0x0, 0x0, 0x0, 0x3f, 0xe0, 0x0, 0x3f, + 0xe0, 0x0, 0x0, 0x0, 0x1, 0xfe, 0x0, 0x3, + 0xfc, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf0, 0x0, + 0x7f, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0x80, + 0xf, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x7, 0xf8, + 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, + 0xc0, 0x1f, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x1, + 0xfc, 0x1, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1f, 0xe0, 0x1f, 0xe0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xfe, 0x3, 0xfc, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xf, 0xf0, 0x3f, 0xc0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x7f, 0x3, 0xfc, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x7, 0xf0, 0x7f, 0x80, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x3f, 0x87, 0xf8, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x3, 0xf8, 0x7f, 0x80, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x3f, 0x87, 0xf8, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1, 0xfc, 0xff, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xcf, 0xf0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xfc, 0xff, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xcf, + 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xfe, + 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, + 0xef, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0xfe, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0xf, 0xef, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xfe, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xf, 0xef, 0xf0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0xfe, 0xff, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0xf, 0xff, 0xf0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0xff, 0xff, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0xf, 0xff, 0xf0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0x80, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1f, 0xf7, 0xf8, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0x7f, 0x80, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xf7, 0xf8, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, 0x7f, + 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xf3, + 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xff, + 0x3f, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, + 0xf3, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, + 0xff, 0x1f, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x1, + 0xff, 0xf1, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x3f, 0xff, 0xf, 0xf8, 0x0, 0x0, 0x0, 0x0, + 0x7, 0xf7, 0xf0, 0xff, 0x80, 0x0, 0x0, 0x0, + 0x0, 0xfe, 0x7f, 0x7, 0xfc, 0x0, 0x0, 0x0, + 0x0, 0x1f, 0xc7, 0xf0, 0x7f, 0xe0, 0x0, 0x0, + 0x0, 0x3, 0xf8, 0x7f, 0x3, 0xff, 0x80, 0x0, + 0x0, 0x0, 0xff, 0xf, 0xf0, 0x1f, 0xfc, 0x0, + 0x0, 0x0, 0x1f, 0xe0, 0xff, 0x0, 0xff, 0xf0, + 0x0, 0x0, 0x7, 0xfc, 0xf, 0xf0, 0x7, 0xff, + 0xc0, 0x0, 0x3, 0xff, 0x80, 0xfe, 0x0, 0x3f, + 0xff, 0xc0, 0x3, 0xff, 0xf0, 0xf, 0xe0, 0x1, + 0xff, 0xff, 0xff, 0xff, 0xfc, 0x0, 0xfe, 0x0, + 0x7, 0xff, 0xff, 0xff, 0xff, 0x0, 0xf, 0xe0, + 0x0, 0x1f, 0xff, 0xff, 0xff, 0xe0, 0x0, 0xfe, + 0x0, 0x0, 0x7f, 0xff, 0xff, 0xf0, 0x0, 0xf, + 0xe0, 0x0, 0x0, 0xff, 0xff, 0xf8, 0x0, 0x1, + 0xfe, 0x0, 0x0, 0x0, 0xff, 0xf8, 0x0, 0x0, + 0x1f, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1f, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x3f, 0xc0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x3, 0xfc, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x3f, 0x80, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x3, 0xf8, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x7f, 0x80, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x7, 0xf8, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xe0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xfe, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, + 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, + 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x3f, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x7, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x7f, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xf, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x1f, 0xf0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x3, 0xfe, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x3f, 0xc0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x7, 0xfc, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0xff, 0x80, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1f, 0xf0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xe0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xfc, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0x80, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xf0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xfe, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, + 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, + 0xf8, 0x0, 0x0, 0x1, 0x80, 0x0, 0x0, 0xff, + 0xff, 0x0, 0x0, 0x0, 0x1f, 0xe0, 0x0, 0xff, + 0xff, 0xc0, 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, + 0xff, 0xf0, 0x0, 0x0, 0x0, 0x1f, 0xff, 0xff, + 0xff, 0xfc, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, + 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xff, + 0xff, 0xff, 0xc0, 0x0, 0x0, 0x0, 0x0, 0xff, + 0xff, 0xff, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x7f, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0 +}; + + +/*--------------------- + * GLYPH DESCRIPTION + *--------------------*/ + +static const lv_font_fmt_txt_glyph_dsc_t glyph_dsc[] = { + {.bitmap_index = 0, .adv_w = 0, .box_w = 0, .box_h = 0, .ofs_x = 0, .ofs_y = 0} /* id = 0 reserved */, + {.bitmap_index = 0, .adv_w = 1370, .box_w = 69, .box_h = 110, .ofs_x = 8, .ofs_y = -1}, + {.bitmap_index = 949, .adv_w = 1370, .box_w = 35, .box_h = 107, .ofs_x = 15, .ofs_y = 0}, + {.bitmap_index = 1418, .adv_w = 1370, .box_w = 67, .box_h = 108, .ofs_x = 8, .ofs_y = 0}, + {.bitmap_index = 2323, .adv_w = 1370, .box_w = 68, .box_h = 110, .ofs_x = 7, .ofs_y = -1}, + {.bitmap_index = 3258, .adv_w = 1370, .box_w = 81, .box_h = 108, .ofs_x = 3, .ofs_y = -1}, + {.bitmap_index = 4352, .adv_w = 1370, .box_w = 66, .box_h = 108, .ofs_x = 10, .ofs_y = -1}, + {.bitmap_index = 5243, .adv_w = 1370, .box_w = 69, .box_h = 110, .ofs_x = 9, .ofs_y = -1}, + {.bitmap_index = 6192, .adv_w = 1370, .box_w = 69, .box_h = 106, .ofs_x = 8, .ofs_y = 0}, + {.bitmap_index = 7107, .adv_w = 1370, .box_w = 68, .box_h = 110, .ofs_x = 9, .ofs_y = -1}, + {.bitmap_index = 8042, .adv_w = 1370, .box_w = 68, .box_h = 110, .ofs_x = 8, .ofs_y = -1} +}; + +/*--------------------- + * CHARACTER MAPPING + *--------------------*/ + + + +/*Collect the unicode lists and glyph_id offsets*/ +static const lv_font_fmt_txt_cmap_t cmaps[] = +{ + { + .range_start = 48, .range_length = 10, .glyph_id_start = 1, + .unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY + } +}; + + + +/*-------------------- + * ALL CUSTOM DATA + *--------------------*/ + +#if LV_VERSION_CHECK(8, 0, 0) +/*Store all the custom data of the font*/ +static lv_font_fmt_txt_glyph_cache_t cache; +static const lv_font_fmt_txt_dsc_t font_dsc = { +#else +static lv_font_fmt_txt_dsc_t font_dsc = { +#endif + .glyph_bitmap = glyph_bitmap, + .glyph_dsc = glyph_dsc, + .cmaps = cmaps, + .kern_dsc = NULL, + .kern_scale = 0, + .cmap_num = 1, + .bpp = 1, + .kern_classes = 0, + .bitmap_format = 0, +#if LV_VERSION_CHECK(8, 0, 0) + .cache = &cache +#endif +}; + + +/*----------------- + * PUBLIC FONT + *----------------*/ + +/*Initialize a public general font descriptor*/ +#if LV_VERSION_CHECK(8, 0, 0) +const lv_font_t open_sans_light = { +#else +lv_font_t open_sans_light = { +#endif + .get_glyph_dsc = lv_font_get_glyph_dsc_fmt_txt, /*Function pointer to get glyph's data*/ + .get_glyph_bitmap = lv_font_get_bitmap_fmt_txt, /*Function pointer to get glyph's bitmap*/ + .line_height = 110, /*The maximum line height required by the font*/ + .base_line = 1, /*Baseline measured from the bottom of the line*/ +#if !(LVGL_VERSION_MAJOR == 6 && LVGL_VERSION_MINOR == 0) + .subpx = LV_FONT_SUBPX_NONE, +#endif +#if LV_VERSION_CHECK(7, 4, 0) + .underline_position = -11, + .underline_thickness = 7, +#endif + .dsc = &font_dsc /*The custom font data. Will be accessed by `get_glyph_bitmap/dsc` */ +}; + + + +#endif /*#if OPEN_SANS_LIGHT*/ + diff --git a/src/displayapp/screens/PineTimeStyle.cpp b/src/displayapp/screens/PineTimeStyle.cpp new file mode 100644 index 0000000000..b249416a80 --- /dev/null +++ b/src/displayapp/screens/PineTimeStyle.cpp @@ -0,0 +1,294 @@ +#include "PineTimeStyle.h" + +#include +#include +#include +#include "BatteryIcon.h" +#include "BleIcon.h" +#include "NotificationIcon.h" +#include "Symbols.h" +#include "components/battery/BatteryController.h" +#include "components/ble/BleController.h" +#include "components/ble/NotificationManager.h" +#include "components/heartrate/HeartRateController.h" +#include "components/settings/Settings.h" +#include "../DisplayApp.h" + +/* + * PineTimeStyle watchface for Infinitime created by Kieran Cawthray + * Based on WatchFaceDigital + * Style/layout copied from TimeStyle for Pebble by Dan Tilden (github.com/tilden) + */ + +using namespace Pinetime::Applications::Screens; + +PineTimeStyle::PineTimeStyle(DisplayApp* app, + Controllers::DateTime& dateTimeController, + Controllers::Battery& batteryController, + Controllers::Ble& bleController, + Controllers::NotificationManager& notificatioManager, + Controllers::Settings& settingsController, + Controllers::HeartRateController& heartRateController) + : Screen(app), + currentDateTime {{}}, + dateTimeController {dateTimeController}, + batteryController {batteryController}, + bleController {bleController}, + notificatioManager {notificatioManager}, + settingsController {settingsController}, + heartRateController {heartRateController} { + + /* This sets the watchface number to return to after leaving the menu*/ + settingsController.SetClockFace(2); + + displayedChar[0] = 0; + displayedChar[1] = 0; + displayedChar[2] = 0; + displayedChar[3] = 0; + displayedChar[4] = 0; + + /*Create a 200px wide background rectangle*/ + + timebar = lv_obj_create(lv_scr_act(), nullptr); + lv_obj_set_style_local_bg_color(timebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x000000)); + lv_obj_set_style_local_radius(timebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, 0); + lv_obj_set_size(timebar, 200, 240); + lv_obj_align(timebar, lv_scr_act(), LV_ALIGN_IN_TOP_LEFT, 5, 0); + + /*Display the time*/ + + timeDD1 = lv_label_create(lv_scr_act(), nullptr); + lv_obj_set_style_local_text_font(timeDD1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, &open_sans_light); + lv_obj_set_style_local_text_color(timeDD1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x008080)); + lv_label_set_text(timeDD1, "12"); + lv_obj_align(timeDD1, timebar, LV_ALIGN_IN_TOP_MID, 5, 5); + + timeDD2 = lv_label_create(lv_scr_act(), nullptr); + lv_obj_set_style_local_text_font(timeDD2, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, &open_sans_light); + lv_obj_set_style_local_text_color(timeDD2, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x008080)); + lv_label_set_text(timeDD2, "34"); + lv_obj_align(timeDD2, timebar, LV_ALIGN_IN_BOTTOM_MID, 5, -5); + + /*Create a 40px wide bar down the right side of the screen*/ + + sidebar = lv_obj_create(lv_scr_act(), nullptr); + lv_obj_set_style_local_bg_color(sidebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x008080)); + lv_obj_set_style_local_radius(sidebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, 0); + lv_obj_set_size(sidebar, 40, 240); + lv_obj_align(sidebar, lv_scr_act(), LV_ALIGN_IN_TOP_RIGHT, 0, 0); + + /*Display icons*/ + + batteryIcon = lv_label_create(lv_scr_act(), nullptr); + lv_obj_set_style_local_text_color(batteryIcon, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x000000)); + lv_label_set_text(batteryIcon, Symbols::batteryFull); + lv_obj_align(batteryIcon, sidebar, LV_ALIGN_IN_TOP_MID, 0, 2); + + batteryPlug = lv_label_create(lv_scr_act(), nullptr); + lv_obj_set_style_local_text_color(batteryPlug, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x000000)); + //lv_label_set_text(batteryPlug, Symbols::plug); + lv_obj_align(batteryPlug, sidebar, LV_ALIGN_IN_TOP_MID, 0, 2); + + bleIcon = lv_label_create(lv_scr_act(), nullptr); + lv_obj_set_style_local_text_color(bleIcon, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x000000)); + //lv_label_set_text(bleIcon, BleIcon::GetIcon(false)); + lv_obj_align(bleIcon, sidebar, LV_ALIGN_IN_TOP_MID, 0, 25); + + notificationIcon = lv_label_create(lv_scr_act(), nullptr); + lv_obj_set_style_local_text_color(notificationIcon, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x000000)); + //lv_label_set_text(notificationIcon, NotificationIcon::GetIcon(false)); + lv_obj_align(notificationIcon, sidebar, LV_ALIGN_IN_TOP_MID, 0, 40); + + /* Calendar icon */ + + calendarOuter = lv_obj_create(lv_scr_act(), nullptr); + lv_obj_set_style_local_bg_color(calendarOuter, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x000000)); + lv_obj_set_style_local_radius(calendarOuter, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, 0); + lv_obj_set_size(calendarOuter, 34, 34); + lv_obj_align(calendarOuter, sidebar, LV_ALIGN_CENTER, 0, 0); + + calendarInner = lv_obj_create(lv_scr_act(), nullptr); + lv_obj_set_style_local_bg_color(calendarInner, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0xffffff)); + lv_obj_set_style_local_radius(calendarInner, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, 0); + lv_obj_set_size(calendarInner, 27, 27); + lv_obj_align(calendarInner, calendarOuter, LV_ALIGN_CENTER, 0, 0); + + calendarBar1 = lv_obj_create(lv_scr_act(), nullptr); + lv_obj_set_style_local_bg_color(calendarBar1, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x000000)); + lv_obj_set_style_local_radius(calendarBar1, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, 0); + lv_obj_set_size(calendarBar1, 3, 12); + lv_obj_align(calendarBar1, calendarOuter, LV_ALIGN_IN_TOP_MID, -6, -3); + + calendarBar2 = lv_obj_create(lv_scr_act(), nullptr); + lv_obj_set_style_local_bg_color(calendarBar2, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x000000)); + lv_obj_set_style_local_radius(calendarBar2, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, 0); + lv_obj_set_size(calendarBar2, 3, 12); + lv_obj_align(calendarBar2, calendarOuter, LV_ALIGN_IN_TOP_MID, 6, -3); + + calendarCrossBar1 = lv_obj_create(lv_scr_act(), nullptr); + lv_obj_set_style_local_bg_color(calendarCrossBar1, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x000000)); + lv_obj_set_style_local_radius(calendarCrossBar1, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, 0); + lv_obj_set_size(calendarCrossBar1, 8, 3); + lv_obj_align(calendarCrossBar1, calendarBar1, LV_ALIGN_IN_BOTTOM_MID, 0, 0); + + calendarCrossBar2 = lv_obj_create(lv_scr_act(), nullptr); + lv_obj_set_style_local_bg_color(calendarCrossBar2, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x000000)); + lv_obj_set_style_local_radius(calendarCrossBar2, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, 0); + lv_obj_set_size(calendarCrossBar2, 8, 3); + lv_obj_align(calendarCrossBar2, calendarBar2, LV_ALIGN_IN_BOTTOM_MID, 0, 0); + + /*Display date*/ + + dateDayOfWeek = lv_label_create(lv_scr_act(), nullptr); + lv_obj_set_style_local_text_color(dateDayOfWeek, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x000000)); + lv_label_set_text(dateDayOfWeek, "THU"); + lv_obj_align(dateDayOfWeek, sidebar, LV_ALIGN_CENTER, 0, -34); + + dateDay = lv_label_create(lv_scr_act(), nullptr); + lv_obj_set_style_local_text_color(dateDay, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x000000)); + lv_label_set_text(dateDay, "25"); + lv_obj_align(dateDay, sidebar, LV_ALIGN_CENTER, 0, 3); + + dateMonth = lv_label_create(lv_scr_act(), nullptr); + lv_obj_set_style_local_text_color(dateMonth, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x000000)); + lv_label_set_text(dateMonth, "MAR"); + lv_obj_align(dateMonth, sidebar, LV_ALIGN_CENTER, 0, 32); + + /*Display heartrate info*/ + + heartbeatIcon = lv_label_create(lv_scr_act(), nullptr); + lv_obj_set_style_local_text_color(heartbeatIcon, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x000000)); + lv_label_set_text(heartbeatIcon, Symbols::heartBeat); + lv_obj_align(heartbeatIcon, sidebar, LV_ALIGN_IN_BOTTOM_MID, 0, -30); + + 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(0x000000)); + lv_label_set_text(heartbeatValue, "---"); + lv_obj_align(heartbeatValue, sidebar, LV_ALIGN_IN_BOTTOM_MID, 0, -10); + + backgroundLabel = lv_label_create(lv_scr_act(), nullptr); + lv_obj_set_click(backgroundLabel, true); + lv_label_set_long_mode(backgroundLabel, LV_LABEL_LONG_CROP); + lv_obj_set_size(backgroundLabel, 240, 240); + lv_obj_set_pos(backgroundLabel, 0, 0); + lv_label_set_text(backgroundLabel, ""); +} + +PineTimeStyle::~PineTimeStyle() { + lv_obj_clean(lv_scr_act()); +} + +bool PineTimeStyle::Refresh() { + batteryPercentRemaining = batteryController.PercentRemaining(); + if (batteryPercentRemaining.IsUpdated()) { + auto batteryPercent = batteryPercentRemaining.Get(); + if (batteryController.IsCharging()) { + auto isCharging = batteryController.IsCharging() || batteryController.IsPowerPresent(); + lv_label_set_text(batteryPlug, BatteryIcon::GetPlugIcon(isCharging)); + lv_obj_realign(batteryPlug); + lv_label_set_text(batteryIcon, ""); + } else { + lv_label_set_text(batteryIcon, BatteryIcon::GetBatteryIcon(batteryPercent)); + lv_label_set_text(batteryPlug, ""); + } + } + + bleState = bleController.IsConnected(); + if (bleState.IsUpdated()) { + if (bleState.Get() == true) { + lv_label_set_text(bleIcon, BleIcon::GetIcon(true)); + lv_obj_realign(bleIcon); + } else { + lv_label_set_text(bleIcon, BleIcon::GetIcon(false)); + } + } + + notificationState = notificatioManager.AreNewNotificationsAvailable(); + if (notificationState.IsUpdated()) { + if (notificationState.Get() == true) { + lv_label_set_text(notificationIcon, NotificationIcon::GetIcon(true)); + lv_obj_realign(notificationIcon); + //lv_obj_align(bleIcon, sidebar, LV_ALIGN_IN_TOP_MID, -8, 25); + } else { + lv_label_set_text(notificationIcon, NotificationIcon::GetIcon(false)); + //lv_obj_align(bleIcon, sidebar, LV_ALIGN_IN_TOP_MID, 0, 25); + } + } + + currentDateTime = dateTimeController.CurrentDateTime(); + + if (currentDateTime.IsUpdated()) { + auto newDateTime = currentDateTime.Get(); + + auto dp = date::floor(newDateTime); + auto time = date::make_time(newDateTime - dp); + auto yearMonthDay = date::year_month_day(dp); + + auto year = (int) yearMonthDay.year(); + auto month = static_cast((unsigned) yearMonthDay.month()); + auto day = (unsigned) yearMonthDay.day(); + auto dayOfWeek = static_cast(date::weekday(yearMonthDay).iso_encoding()); + + int hour = time.hours().count(); + auto minute = time.minutes().count(); + + char minutesChar[3]; + sprintf(minutesChar, "%02d", static_cast(minute)); + + char hoursChar[3]; + sprintf(hoursChar, "%02d", hour); + + if (hoursChar[0] != displayedChar[0] || hoursChar[1] != displayedChar[1] || minutesChar[0] != displayedChar[2] || + minutesChar[1] != displayedChar[3]) { + displayedChar[0] = hoursChar[0]; + displayedChar[1] = hoursChar[1]; + displayedChar[2] = minutesChar[0]; + displayedChar[3] = minutesChar[1]; + + char hourStr[3]; + char minStr[3]; + + /*Display the time as 2 pairs of digits*/ + sprintf(hourStr, "%c%c", hoursChar[0], hoursChar[1]); + lv_label_set_text(timeDD1, hourStr); + + sprintf(minStr, "%c%c", minutesChar[0], minutesChar[1]); + lv_label_set_text(timeDD2, minStr); + } + + if ((year != currentYear) || (month != currentMonth) || (dayOfWeek != currentDayOfWeek) || (day != currentDay)) { + char dayOfWeekStr[4]; + char dayStr[3]; + char monthStr[4]; + + sprintf(dayOfWeekStr, "%s", dateTimeController.DayOfWeekShortToString()); + sprintf(dayStr, "%d", day); + sprintf(monthStr, "%s", dateTimeController.MonthShortToString()); + + lv_label_set_text(dateDayOfWeek, dayOfWeekStr); + lv_label_set_text(dateDay, dayStr); + lv_obj_realign(dateDay); + lv_label_set_text(dateMonth, monthStr); + + currentYear = year; + currentMonth = month; + currentDayOfWeek = dayOfWeek; + currentDay = day; + } + } + + heartbeat = heartRateController.HeartRate(); + heartbeatRunning = heartRateController.State() != Controllers::HeartRateController::States::Stopped; + if (heartbeat.IsUpdated() || heartbeatRunning.IsUpdated()) { + char heartbeatBuffer[4]; + if (heartbeatRunning.Get()) + sprintf(heartbeatBuffer, "%d", heartbeat.Get()); + else + sprintf(heartbeatBuffer, "---"); + + lv_label_set_text(heartbeatValue, heartbeatBuffer); + lv_obj_realign(heartbeatValue); + } + + return running; +} diff --git a/src/displayapp/screens/PineTimeStyle.h b/src/displayapp/screens/PineTimeStyle.h new file mode 100644 index 0000000000..55752412a0 --- /dev/null +++ b/src/displayapp/screens/PineTimeStyle.h @@ -0,0 +1,83 @@ +#pragma once + +#include +#include +#include +#include +#include "Screen.h" +#include "ScreenList.h" +#include "components/datetime/DateTimeController.h" + +namespace Pinetime { + namespace Controllers { + class Settings; + class Battery; + class Ble; + class NotificationManager; + class HeartRateController; + } + + namespace Applications { + namespace Screens { + class PineTimeStyle : public Screen { + public: + PineTimeStyle(DisplayApp* app, + Controllers::DateTime& dateTimeController, + Controllers::Battery& batteryController, + Controllers::Ble& bleController, + Controllers::NotificationManager& notificatioManager, + Controllers::Settings& settingsController, + Controllers::HeartRateController& heartRateController); + ~PineTimeStyle() override; + + bool Refresh() override; + + void OnObjectEvent(lv_obj_t* pObj, lv_event_t i); + + private: + char displayedChar[5]; + + uint16_t currentYear = 1970; + Pinetime::Controllers::DateTime::Months currentMonth = Pinetime::Controllers::DateTime::Months::Unknown; + Pinetime::Controllers::DateTime::Days currentDayOfWeek = Pinetime::Controllers::DateTime::Days::Unknown; + uint8_t currentDay = 0; + + DirtyValue batteryPercentRemaining {}; + DirtyValue bleState {}; + DirtyValue> currentDateTime {}; + DirtyValue heartbeat {}; + DirtyValue heartbeatRunning {}; + DirtyValue notificationState {}; + + lv_obj_t* timebar; + lv_obj_t* sidebar; + lv_obj_t* timeDD1; + lv_obj_t* timeDD2; + lv_obj_t* dateDayOfWeek; + lv_obj_t* dateDay; + lv_obj_t* dateMonth; + lv_obj_t* backgroundLabel; + lv_obj_t* batteryIcon; + lv_obj_t* bleIcon; + lv_obj_t* batteryPlug; + lv_obj_t* calendarOuter; + lv_obj_t* calendarInner; + lv_obj_t* calendarBar1; + lv_obj_t* calendarBar2; + lv_obj_t* calendarCrossBar1; + lv_obj_t* calendarCrossBar2; + lv_obj_t* heartbeatIcon; + lv_obj_t* heartbeatValue; + lv_obj_t* heartbeatBpm; + lv_obj_t* notificationIcon; + + Controllers::DateTime& dateTimeController; + Controllers::Battery& batteryController; + Controllers::Ble& bleController; + Controllers::NotificationManager& notificatioManager; + Controllers::Settings& settingsController; + Controllers::HeartRateController& heartRateController; + }; + } + } +} From 6a925292722be365f4efc288c64b023639f0c201 Mon Sep 17 00:00:00 2001 From: Kieran Cawthray Date: Tue, 18 May 2021 17:45:16 +0200 Subject: [PATCH 007/173] Revert "Reset" This reverts commit 378fa6b4016b65e2d7b128fdc3ce89c4ca779a4d. --- .clang-tidy | 6 +- CMakeLists.txt | 12 + README.md | 3 +- doc/buildAndProgram.md | 3 +- doc/contribute.md | 24 +- doc/gettingStarted/appmenu-071.jpg | Bin 0 -> 109376 bytes doc/gettingStarted/appmenu.jpg | Bin 0 -> 120674 bytes doc/gettingStarted/bootloader-1.0.jpg | Bin 0 -> 160275 bytes doc/gettingStarted/gettingStarted-1.0.md | 112 ++++++++ doc/gettingStarted/oldbootloaderlogo.jpg | Bin 0 -> 116236 bytes .../ota-gadgetbridge-nrfconnect.md | 101 +++++++ doc/gettingStarted/quickactions.jpg | Bin 0 -> 114900 bytes doc/gettingStarted/settings.jpg | Bin 0 -> 130022 bytes doc/gettingStarted/version-071.jpg | Bin 0 -> 111556 bytes doc/gettingStarted/version-1.0.jpg | Bin 0 -> 116881 bytes docker/.gitpod.Dockerfile | 3 + docker/Dockerfile | 3 + src/CMakeLists.txt | 5 +- src/Version.h.in | 2 + src/components/motion/MotionController.h | 6 +- src/components/settings/Settings.h | 10 +- src/displayapp/Apps.h | 4 +- src/displayapp/DisplayApp.cpp | 53 ++-- src/displayapp/DisplayApp.h | 2 +- src/displayapp/DisplayAppRecovery.cpp | 7 +- src/displayapp/fonts/jetbrains_mono_42.c | 258 ++++++++++++++++++ src/displayapp/screens/ApplicationList.cpp | 4 +- src/displayapp/screens/Clock.cpp | 16 +- src/displayapp/screens/Clock.h | 3 +- src/displayapp/screens/FirmwareValidation.cpp | 11 + src/displayapp/screens/FirmwareValidation.h | 3 + src/displayapp/screens/Motion.cpp | 19 +- src/displayapp/screens/Motion.h | 2 +- src/displayapp/screens/Notifications.cpp | 10 + src/displayapp/screens/Steps.cpp | 72 +++++ src/displayapp/screens/Steps.h | 39 +++ src/displayapp/screens/StopWatch.cpp | 3 +- src/displayapp/screens/SystemInfo.cpp | 8 +- .../screens/settings/SettingSteps.cpp | 98 +++++++ .../screens/settings/SettingSteps.h | 32 +++ .../screens/settings/SettingWatchFace.cpp | 11 +- .../screens/settings/SettingWatchFace.h | 2 +- src/displayapp/screens/settings/Settings.cpp | 10 +- src/libs/lv_conf.h | 4 +- src/logging/NrfLogger.cpp | 5 +- 45 files changed, 865 insertions(+), 101 deletions(-) create mode 100644 doc/gettingStarted/appmenu-071.jpg create mode 100644 doc/gettingStarted/appmenu.jpg create mode 100644 doc/gettingStarted/bootloader-1.0.jpg create mode 100644 doc/gettingStarted/gettingStarted-1.0.md create mode 100644 doc/gettingStarted/oldbootloaderlogo.jpg create mode 100644 doc/gettingStarted/ota-gadgetbridge-nrfconnect.md create mode 100644 doc/gettingStarted/quickactions.jpg create mode 100644 doc/gettingStarted/settings.jpg create mode 100644 doc/gettingStarted/version-071.jpg create mode 100644 doc/gettingStarted/version-1.0.jpg create mode 100644 src/displayapp/fonts/jetbrains_mono_42.c create mode 100644 src/displayapp/screens/Steps.cpp create mode 100644 src/displayapp/screens/Steps.h create mode 100644 src/displayapp/screens/settings/SettingSteps.cpp create mode 100644 src/displayapp/screens/settings/SettingSteps.h diff --git a/.clang-tidy b/.clang-tidy index d6036802cc..8a7d38f0d7 100644 --- a/.clang-tidy +++ b/.clang-tidy @@ -22,5 +22,9 @@ Checks: '*, -hicpp-no-assembler, -hicpp-avoid-c-arrays, -hicpp-uppercase-literal-suffix, + -hicpp-no-array-decay, -cert-err58-cpp, - -cert-err60-cpp' \ No newline at end of file + -cert-err60-cpp' +CheckOptions: + - key: readability-function-cognitive-complexity.Threshold + value: 100 \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt index f777013695..6c529f39da 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -55,10 +55,22 @@ if(BUILD_DFU) set(BUILD_DFU true) endif() +set(PROJECT_GIT_COMMIT_HASH "") + +execute_process(COMMAND git rev-parse --short HEAD + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + OUTPUT_VARIABLE PROJECT_GIT_COMMIT_HASH + RESULT_VARIABLE PROJECT_GIT_COMMIT_HASH_SUCCESS) + +string(STRIP ${PROJECT_GIT_COMMIT_HASH} PROJECT_GIT_COMMIT_HASH) + +message("PROJECT_GIT_COMMIT_HASH_SUCCESS? " ${PROJECT_GIT_COMMIT_HASH_SUCCESS}) + message("BUILD CONFIGURATION") message("-------------------") message(" * Version : " ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}) message(" * Toolchain : " ${ARM_NONE_EABI_TOOLCHAIN_PATH}) +message(" * GitRef(S) : " ${PROJECT_GIT_COMMIT_HASH}) message(" * NRF52 SDK : " ${NRF5_SDK_PATH}) set(PROGRAMMER "???") if(USE_JLINK) diff --git a/README.md b/README.md index 34f6e84176..396d7462bc 100644 --- a/README.md +++ b/README.md @@ -72,7 +72,8 @@ As of now, here is the list of achievements of this project: ## Documentation ### Getting started - - [Flash, upgrade (OTA), time synchronization,...](doc/gettingStarted/gettingStarted.md) + - [Getting started with InfiniTime 1.0 (quick user guide, update bootloader and InfiniTime,...)](doc/gettingStarted/gettingStarted-1.0.md) + - [Flash, upgrade (OTA), time synchronization,...](doc/gettingStarted/ota-gadgetbridge-nrfconnect.md) ### Develop - [Generate the fonts and symbols](src/displayapp/fonts/README.md) diff --git a/doc/buildAndProgram.md b/doc/buildAndProgram.md index b70bdfc0ce..afd526e06e 100644 --- a/doc/buildAndProgram.md +++ b/doc/buildAndProgram.md @@ -3,6 +3,7 @@ To build this project, you'll need: - A cross-compiler : [ARM-GCC (9-2020-q2-update)](https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm/downloads/9-2020-q2-update) - The NRF52 SDK 15.3.0 : [nRF-SDK v15.3.0](https://developer.nordicsemi.com/nRF5_SDK/nRF5_SDK_v15.x.x/nRF5_SDK_15.3.0_59ac345.zip) + - The `cbor` and `intelhex` modules for Python 3 - A reasonably recent version of CMake (I use 3.16.5) ## Build steps @@ -221,4 +222,4 @@ Loading section .sec6, size 0x10000 lma 0x30000 Loading section .sec7, size 0xdf08 lma 0x40000 Start address 0x0, load size 314200 Transfer rate: 45 KB/sec, 969 bytes/write. -``` \ No newline at end of file +``` diff --git a/doc/contribute.md b/doc/contribute.md index 7958eea16b..09d20774d5 100644 --- a/doc/contribute.md +++ b/doc/contribute.md @@ -2,13 +2,13 @@ ## Report bugs You use your Pinetime and find a bug in the firmware? [Create an issue on Github](https://github.com/JF002/InfiniTime/issues) explaining the bug, how to reproduce it, the version of the firmware you use... ## Write and improve documentation -Documentation might be incomplete, or not clear enough, and it is always possible to improve it with better wording, pictures, photo, video,... +Documentation might be incomplete, or not clear enough, and it is always possible to improve it with better wording, pictures, photo, video,... As the documentation is part of the source code, you can submit your improvements to the documentation by submitting a pull request (see below). ## Fix bugs, add functionalities and improve the code You want to fix a bug, add a cool new functionality or improve the code? See *How to submit a pull request below*. ## Spread the word -Pinetime is a cool open source project that deserves to be know. Talk about it around you, on social networks, on your blog,... and let people know that we are working on an open-source firmware for a smartwatch! +The Pinetime is a cool open source project that deserves to be known. Talk about it around you, on social networks, on your blog,... and let people know that we are working on an open-source firmware for a smartwatch! # How to submit a pull request ? @@ -21,28 +21,28 @@ Pinetime is a cool open source project that deserves to be know. Talk about it a - Write documentation related to your new feature is applicable; - Create the pull-request and write a great description about it : what does your PR do, why, how,... Add pictures and video if possible; - Wait for someone to review your PR and take part in the review process; - - You PR will eventually be merged :) + - Your PR will eventually be merged :) -Your contribution is more than welcome! +Your contribution is more than welcome! If you want to fix a bug, add a functionality or improve the code, you'll first need to create a branch from the **develop** branch (see [this page about the branching model](./branches.md)). This branch is called a feature branch, and you should choose a name that explains what you are working on (ex: "add-doc-about-contributions"). In this branch, **focus on only one topic, bug or feature**. For example, if you created this branch to work on the UI of a specific application, do not commit modifications about the SPI driver. If you want to work on multiple topics, create one branch per topic. When your feature branch is ready, **make sure it actually works** and **do not forget to write documentation** about it if it's relevant. -I **strongly discourage to create a PR containing modifications that haven't been tested**. If, for any reason, you cannot test your modifications but want to publish them anyway, **please mention it in the description**. This way, other contributors might be willing to test it and provide feedbacks about your code. +I **strongly discourage to create a PR containing modifications that haven't been tested**. If, for any reason, you cannot test your modifications but want to publish them anyway, **please mention it in the description**. This way, other contributors might be willing to test it and provide feedback about your code. Also, before submitting your PR, check the coding style of your code against the **coding conventions** detailed below. This project also provides [clang-format](../.clang-format) and [clang-tidy](../.clang-tidy) configuration files. You can use them to ensure correct formatting of your code. Do not forget to check the files you are going to commit and remove those who are not necessary (config files from your IDE, for example). Remove old comments, commented code,... -Then, you can submit a pull-request for review. Try to **describe your pull request as much as possible**: what did you do in this branch, how does it work, how is it designed, are there any limitations,... This will help the contributors to understand and review your code easily. You can add pictures and video to the description so that contributors will have a quick overview of you work. +Then, you can submit a pull-request for review. Try to **describe your pull request as much as possible**: what did you do in this branch, how does it work, how is it designed, are there any limitations,... This will help the contributors to understand and review your code easily. You can add pictures and video to the description so that contributors will have a quick overview of your work. -Other contributors can post comments about the pull request, maybe ask for more info or adjustements in the code. +Other contributors can post comments about the pull request, maybe ask for more info or adjustments in the code. -Once the pull request is reviewed an accepted, it'll be merge in **develop** and will be released in the next release version of the firmware. +Once the pull request is reviewed and accepted, it'll be merge in **develop** and will be released in the next release version of the firmware. ## Why all these rules? -Reviewing pull-requests is a **very time consuming task** for the creator of this project ([JF002](https://github.com/JF002)) and for other contributors who take the time to review them. Every little thing you do to make their lifes easier will **increase the chances your PR will be merge quickly**. +Reviewing pull-requests is a **very time consuming task** for the creator of this project ([JF002](https://github.com/JF002)) and for other contributors who take the time to review them. Every little thing you do to make their lives easier will **increase the chances your PR will be merge quickly**. When reviewing PR, the author and contributors will first look at the **description**. If it's easy to understand what the PR does, why the modification is needed or interesting and how it's done, a good part of the work is already done : we understand the PR and its context. @@ -58,12 +58,12 @@ It's totally normal for a PR to need some more work even after it was created, t ## Language The language of this project is **C++**, and all new code must be written in C++. (Modern) C++ provides a lot of useful tools and functionalities that are beneficial for embedded software development like `constexpr`, `template` and anything that provides zero-cost abstraction. -It's OK to include C code if this code comes from another library like FreeRTOS, NimBLE, LVGL or the NRF-SDK. +It's OK to include C code if this code comes from another library like FreeRTOS, NimBLE, LVGL or the NRF-SDK. ## Coding style -The most important rule to follow is to try to keep the code as easy to read and maintain as possible. +The most important rule to follow is to try to keep the code as easy to read and maintain as possible. - - **Identation** : 2 spaces, no tabulation + - **Indentation** : 2 spaces, no tabulation - **Opening brace** at the end of the line - **Naming** : Choose self-describing variable name - **class** : PascalCase diff --git a/doc/gettingStarted/appmenu-071.jpg b/doc/gettingStarted/appmenu-071.jpg new file mode 100644 index 0000000000000000000000000000000000000000..dee7c8f643a911f7380d3f517f244868812566e7 GIT binary patch literal 109376 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 %Jmwi~ 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 VkBHY75E+<(3f+E0l(!*2|JhCS)Y$+4 literal 0 HcmV?d00001 diff --git a/doc/gettingStarted/appmenu.jpg b/doc/gettingStarted/appmenu.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1e52fe782660bead1a0c716b023917f56adcdad6 GIT binary patch literal 120674 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

    dni$!` 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 literal 0 HcmV?d00001 diff --git a/doc/gettingStarted/settings.jpg b/doc/gettingStarted/settings.jpg new file mode 100644 index 0000000000000000000000000000000000000000..510b29ebf4ab608e63ba6fc52039e3bc00872fe0 GIT binary patch literal 130022 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 YCP-kFN5C7&t= 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ⅈTaQ6vLYe9OutXC!$agv&ot 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∈#w^D-ia-h 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

      NROY;Mj8w`ILVUI~%OcP{cJjLX9M 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 YProA*ug2nSiOsV0bcHdqbo(d&*)(Rp2><{9 literal 0 HcmV?d00001 diff --git a/doc/gettingStarted/version-071.jpg b/doc/gettingStarted/version-071.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bc9bc5b589bd4191be73d5461534b19125598825 GIT binary patch literal 111556 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

      G7XeozNzPL3~9pW3(Dj8wX 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


      db_cmGgMG!o@1 z%*pNEI8&A@?wby(j#%a?An|g}JK|wNG*Z>b#DbhKl$;cqkzwbAr1@BpehAif6jaaJ z7}c1G8pBPwXu7Z|qkUuiX5q2qc{Nh9-$5;!r@%Chgw!35nCc57!s`x&KN8OBI1}_X zw4B!rHV=J6&2HP>&$l+~7LxZ60K74ahFsV?ZkM>4ifG2m@8SOl1&@%Rwaam)lliS^ z*1&KDSfsP@rAlE@vFMU?AF|6GFN+8g?aB~K$StOi+X(b;>dmA~(@pSga zjTn9K`@mZp)*7ugec#VJAG(Mlav(=4$cUgIJXzW;x3^KCS_o1|Y4jLhL&306f;ciV zCQoQso=r$oCc*fLibD`yCF9k6veY@5#3?ki%%94qiFry?82i>4C;L9cRVo&`S2YX7 zHF}arq1z*M(wy~5JQYX9w~kCWFKg5jsm&`mTuVwhpu%{m*|1_l8b*v~>%j=OK+KY8 zUo_>Slv!*D_{0pH7}vm$tB(w6O_P|D^_y-`E%T23MF%>85$rWJ%b&FB z5BfLgFlGD^M9ueL|J>#%S-*9NJDRgG+>p}oRd1c-X-!KG(FKJ731vkCQAXL^(iCOU zM&AVMwOM-4MRcidZS%@DI@+T)VVG9kA{U2BSc1E)4|KLTJH!ZN+maGOoo2QY)A1I2 ztfgz~vDeK#!!yeqS$sAA71&zx^(0M?H3CH0u=xnycs^WSWa}e%`Jekq4%tFt>< zFUnr>b%_-%w&ABNy<(ZxO$ZuwG0%lL9G6z;`t|4c^UY-(cN~tErNu=*0HX?jYUYNPAx8t~-F^iOT(- z9J}(0p|StS(*{DoQbp;yLiO0AoOxy=lI1=VetQ`|u2q~mEuMQQv7P+LKzIb(D5X@_ zuXY|&`6}5y4m)P+5$Mkyh2l)Em`dqSW-%0q*hGGN<8z2cy#CS|)2rmCm&ummAZK&F8>QGMlR5D=zLp;GeKDD49ahJun4B$$T?l+_Js&;TnUtB~UqWOL zFEEI*7;WA!Z;%jy*MNqT70n_ees3%VbG7rTF7;|Oj zJuw~uuTrx_utC>Nt&>rblUyUVnu%0vQM0_04(#_mxUz{lp|OtV^%YXSGNV5?{C{&9 zSGu@%X%sXSb1P8#ZQ(pNl4-k{TYFm65ZaZnoL{q;UiRUv)%&zBeko9(*(@br$=j#AH;>HM@_!Wi zj1M87F!Vu@tbKNbf3q5NDmL2r`f~V_*eq>ATa^kJ-Nph_)L#%$8y~F)h97aqX%3>wi z6^RKd1=TS)PJ_Q9oSZq&t5y=Wf(T9}?!XS&rCQb4@2vl9kgIlka(aV{e_D8A%I4w6 z61HtfyV)?D6NZsk015D}zgiPJ_MtWvDjw;}Qb*~=cr`J9_Gy1Ve4bvSYWosvOd^^0 zkWta8SC~20nNAr+n@zYJy+^w7nBBJ*gKiS2uYmg_*+HO; z%ZsHjo!!ueEx0)|s{|g-<4@DtiE->&*`AK07^<|(vC?_lf~6hhHrB)e_OC^IbR%lO ziCeBQqSunfrazVQj>c$9dLcu`k$i9}=@_o)(4K~}zCXP`74d5s$HSce^kM8jR0t2B z%&!3KCM~U4qSvxYuS%^)%&adP(%HJ_TKT|0;pRjYLAB+mY305Rtao?kJ5)N*E?d-` zj@6<*N*kCNvwEJk2Li;@zE>pKO67jZJPSP$BY`p&xiX3ZJeEs)+CP|jZfXGEk*4S= z|0Pohx@=&V?UzG#9^f(E&-q`GF@q>i3WL^Si0LdiLBkQBml63;alR{A2(R-Laq>Mbzn35>w;oBx#;pmf1okz1!^J{|W7Uu(v)RyXZ{8KrH4ZB=Daepf zq`;k~yPTb#+Z#M%=MT}Q%yBb7`6{ZoX2%prrhP>#iIg>szOZp{VGDSO&3H&DC@!*L z0|+LE*z`b==@4gMYFot7e!=Ml?mOujMh%JgK zWXIaEmaadJ^TNZC9l7+qn$%meUp5FankLsedxda3DXn@JJ%3T za1W=kg`^D6@!eNXwelVp)1_M@IxQRxVXZ848*p|;O~d3hyb2=8CM74#Xp_QWUXxQc zVm4v#Q&CGZ6$2E{C;jDVX;V`vt%%nIukvoH-n|27#dC8oa!Vy78B9mMM600J$?JtN z+5UN&$BT`^<>G70a>})I9q4Yz!0?l6L;2WN_v+0ZPEo)~P%V&!ule0G%4Pk)QljNB zmxd&|LbKzk%gjbsv;7!}uSK*U&>f(pJXV3fMy378%ZpT`;i0h~6YL8hZP3xG|Fp+4 z_+Z(Rl4F#XkrC|4k)+IOKI&6}6?v}X1NrJtRpQLkpahXL=&1q~43A{iBHym>R0v}Z zwF-ZYi_Z`EG3PSq@LWRIJW5*0P(^8}r=W9*gB};(p!=5^)rL4T<*OAu;Bg$x@Vdy0 z(0jd7SR_tEv5W&@8@#Gym_pG`6Y@2xuX(Yzp)ATs0H>T%t{IuEu(rCnNcfpTX6kKu zW+`w=NTS?59>dVv-XiX{)o^A%yxx&6xv=Cm*PZ;<_IqX4M)i=e7frrg>0PSv46Oxj ziK)CWh)btFOiwOpN#;?y8ZWzX?8XXdW;6SU94Qa5JK$B;D)zUh`B* z>2Dh3o&F?iI5zGT<9UU3iaoCbc0;u4v1M-|L-i&j_U(pQFwbSiAR@*pGwG=LFg6vI-BqPU>obxiyv){DW#sh-Zx$5Bi@z{k=GDb9)PYX(>wk|m@L-?iroU2&0onq~ZTE8!|jIPYk;oI>3az)|56 z&=Mg1llaMSYq>u80h8_Rtep{e<6`75cyNnU|sU{cfLg^{6kUG z_g1-$;(?!Wu=+;8k**Z~KjUiL?f(u|lkB9r*Z6EgrH1sxOy2eVoZi$lFQ(MumBM z+^8T*e1W)cpHxkTTJgqpG*|JaZaBvz%7yu_)sv*|l{k!gyCC}n2*tr%Hn&6&Z=X34 zJHV;8DAROwuHgp=mVO!=p?6NIVu)Lw6YlTI$c~@>LvY5%>7SvTdu01+Og>g+?^(+q zM?9h_CFfjFDFL%$*aaygL4E$m+?*uY*IV~SNOE5!*@LrYIQ9ZK{a@3KIrkpR z>HYR9G8yuvWb;YZ@^`7NJGrbI%~33`IC4^A={zs^uB*Ez9+6!BH$Hub2Ubif#`#}A zjl-YoP$S`V$3d^<;sn()d7LVm&DFA5O&QqiU0b&TA7>PjLe5gJv5JNXQ7-})sK>Ot zb&+3C>5o|~R;CPWRNEHYT0YnxXXz9Xx-l1`c8MzkF2xS2-78%j#Ob>bSZE}iB>Se{ zNCI~RR*AR$ZgE6gj`uo=15{7;7LxzB-K=xtz5QP!HR~2AlCUecSdrPm9}o){!f_FsK8RCf^VNR{BS;n-@cwV&C@gkEx|x_-b$8qp zmuiHKi4Lwk&IO#N{>A1Jh-?_EBHdbEzCc6A#6rWxz(D%7{Lih05Dh6GLG=EEq#F8b zPVP^}&ct+5s_H=rH75BzlNcoQ8m2D6iAl8^JiOAHuDzsupF;|!7|e{^&i~KH1w#V$ zIQIOYMhso#y|K_k&@&Y~>B~mmkS;xHKM|2fVSQg)KUJ}nj=r{EW#skyuD}wEve*Z) zj#VlKJ{wt|Yt3U?S>HC_c3}}%er2bDpyJ8t`F<&hF!^-d#KnH?apn1b6}6u?bkcYs z^6bBT)==doTUb+TmN5C@&S=CJAJ?tr@nErne<&umH(c?1{*cHU zNOCJ=c6P-VHRT(%Gpx zx%DKz1|~O_n0|8=aK;jJ4KLkVU!7D^^w%I@(OHu-N*3o?C7wIUh36I*QhfSoD(?Wx z5&S!g3E`d@GON{POVwXwYdOco8t)183_N9H(+I>W7ZRR)d{e#M20V`{6e6Ecd9W#r zx2I{Ytc%|*8~)fKK4cwxoY35GvhH4(`2{yLEUX>F=<)ul`V07!U1$6&NfXdFg|Uvn z+0dyahgNG`Fn3vFJF_|O{op0APyd{MAd5Eyl zPQS>$qRZJv$mpO;A+l?t@?n zSfFJ#U;9Tb7)XhsK$J*o@gRe>#HHgNwd}6&lNr_3Rj{t4-Tly&^0(ePUFZAdrc4!#D6|CdI?IHNQfN!+qc(~n6<1hv* zZ;Xt$rl-nTF?VzZ!&1{ZR={_NOv{mGXn7KYk8}o)=pCAQJe`omsH&}}Ma!4y`o4SF z1`^@-yRFG!GJ`$L`LbM~a`56N=@&zLW`RP_Ku!p)xlE+yI>{=7igaceu$i6IT&>Sz z2VBT33kIiQ+&#OQ)!4&)RxDD1EFYbJqUWJ6=paTI*NAS~=FrTk zpqX{lFGLfE!;vH)&5=3hTAT2ca@v#hF^NJFMob3#2IgO{Z2#aTK)gwESzkBZS~k!^ zMsUHK&mV-4|G8!P(4;%eXlW2D3w%^dJ_Sq9 z;@r!OKK8jUZ%nnq{d_bg^m6cbp@n>nF3chw+&vaWTQDbSpktauESlfje<%#rzH1M3 zZfL_q>=<8i0KLcOE0>?BS@8kiPSpjj17@2t@T>A-NzN1-TdHOxMQooxLQkq?_u_XTmfF5gPTx*KHHJHZgDAI7%*w}Xk_Il)Ot#9{&~UVA;}IF;KfdC&nF0YA>GU> z3KQtHy_mN?(DPb%Iv|jSV+Pq+xyv%EGB&_4whJ4%ewNKSzRugx6O|&Ze*1ZvPtMby z=w6FIK-q=@Z+8dfs`f(BmG+e>I{8QK00#d0aR7ko$m|0Q&zk1%&xKIw;3cxs^59`2 z-V&3?mF51|KT_B$UGHSkF$c;JB^C`|j(3748X4@4aD z{w2!U*#RPctfXVdXEBBa)$*LEUDk7Of#01Q(D`%qP|F2%cdDFp{s2Agh)-BceuGRq zSSY|NXlhAf9!&yAZ2vxJ<^BqyB0JwDe=MMSkjSu$G~NuMcKXDdclYWp?xx2189HcZ z@2BM`-_rHKc8Cha8F%^3Bypwoh*a$9H;vb2&bqMl{y~~VwxQ^(8IiE;lao?Nu%lGB z)b}BheBV^)E_+|#L~3LTvjZbB6KfiaMx>1$7&EFhTPANp{BQbf zYhmIjReqfDBA2ZEqoHN;lh~_yKQ)eU6aB;1%SlP&jQW8JFm{F{S?I!2=z9y2pld=NdJVVco=ArifKN@b-9%r7qkmewF)piaWGI|1(RhNbLJx zFu=g20nB7Q^;zkan(LR2^!BVNZd|r;;v-NkEiDsdBRC*xWZ{R52Z~Z4X+GOk{;6zy zoh+tK37FG<^NSRQ$sVnRof~a~vj{vjWLkpvgRRY>QKrS_LkmBtfX`&Li8j+R%9w4} zUAE`(gM_1WPK6+K^dEv(0qS}1z443+3A8DtFQaHC1IOQjQ5)nal<8Oc32ow2Q5{Jr z`6*T$<%m4TG5qDmV}}FZ?}EPUZ@6&`L!~MWdJhJ^Pph6NJq7K%(N^0R!1qSwGXaFm4jCBN$+$= zP|EvLuq*Qt8S801Cf69_kzQh#(&4PNRYmtp%r250d_iq8~puZAgrp z7|)W|RsHL@O&Xh)|qNXfS=&l{cRQvZCw>MLBlsK?)P z)EGHzk=%smG^)UQA&|fXVCUs=sw zl+_t4n1CC%5Xx_5;XeJ{K6~b#HKu0#G&G;AR+(IIAjmz@h2=O9uiLh>-T z#-OH6Q2()APpXA3Q9YW`T^qZ|B`dy z{t?lmggqvd?)&OCLNeROKs3c46ZGR*F)-#ym~iYUyr9|kG9@dv-tN96G84u8OkfY6 z7Bm{1g``p2HyLmwJqnO({6jf}^5EXo*Iz8U6h_$w>Ck~8Vuv@|DxA@jv+|>A<}Dy= zf*z3IEo9!Oy%J*+g!76Lg!&P|{Yiv?Gr(R}mQz34M-R>)Azszi4r%??0v1{A4G=!T zhhLU(?gMTCp8<{8ld&$r!i|e4S9+i#I+Py@HaLllzFs6I&PYAz=Xq9mjE8Qa=DIw$ zKycNNflFbWk6F;7NK_HGy12fZkpcF_{zKWVj596SFOSJV*0J?Uo~hMuo2oy2@{}Q+ z%CB&hB~Nh?-#2%NUU?L_2YP=$p>w(P0v-`dcaYdj;!(U~I-1AqAX=+xd|>~kU%HZj zfb3}(!Lov(6^>>mzxYaavneZnJFtvkqE^WrNW3W@zp;Oh6lB?vMZ19?s+ODa(voGJ zp_C!&K}$++gtLg~Ika`0C}zbOz!>q~-Ae>f8NM?4`IW0q>I$qusKB-r(2lAIn*%g# z0WUaaRvOrXyy-=f4o}Pa$#nYatzMD7+XOV z8ynv`D`n^dwxzqD3PRaSrf9`k4B|l?_8ePL{P1rB>s;Dtl4ut7YA1r*1wY8Y9Ja_> zA2=AQ;L5#xvu$`YADk*ReP*bN)R=H%MLQ-D$e~nz1jOWs>fflM)GK!jxY!0AhS?4@7?#%Vt)s=ugYinN8IjtN)=(z-K zb0Jq&hJ*H3#%ZU1tB>T`s|ATqoWB`c$CM=3>r*3|Pi0wl@c4#Kl_%j7^IhEObl&n5 zj})9zCzT)l^7S*5jqw~0dYy7p-lJSQwB8O;D3T6d9)Z*vx9BSogZcse`FM%f67crG z23*$n^#(|BLo+1t37fuFk5a&(R^mh{wSQ<1&f{Bt^?7J8EAP)f>0)Ao219vnh zLSmTy?<`xYH>GvVJ!0b;GCnlwTve~J;mPpHAxm`X%`;;iiotz&ULdiqb-NXLM52o( zo+qgkI_XLV&x*5HlT4pNMX`dSG4YvAJCDueO1tvT9>9v5xeL(XttrTBRAoq?pfCTH z%i|L}MGSaSa~@;E**gEQu3S5L@T5e58^qh&mZ@oyYD6t_h#ERG{suC)zWM^pl(I9< zWgM#$`)vgc|Jk%mw!z(cvwiCs*E~Bke8<4oFS!D|)<7XWfCe4uO>21f1*#u_1>>Q_ zI{hp|l#Qsr{H)}~+EZKt3AL}w;t@y=y3tSI_hq&6FDNiChA)kJ&E4YoA7N!`C>;Tv z^Be)PLzG^Q{Y1v!e>sw~4yy1h+2)KX04*D3Z#9iZv?9NVoU2TO30e$eCnLgbm8=>& z|J*Xk+Slq|T9DS>khI%gf-&^y3lbVLH4vXFr&ALe(;ZHiz}CCou4Q4{WAe7EurDjn z6Tw$|BuotbXtn%Q#}1~>%8Al?!4(YNpX|LpvedU$GBL;|sB@|>V!R?GFA%vt8r2Hx zvF}=kx*PEwOp4IRVAsdMCM#(Pi1(a@9}6j5o8kUe12>yvtkQvejfYVVpqS+vH9c>o zQKTu$ZLMNRQVy*1Niy1uWR&rxyP8==k=LorMVwEkaF4FjA?9Q7tAsmVvtO}_7{_WU zElfj}+j~oH6>l@C0~xIGY6tKdBgA?=u6+|GVHT&8i+>)bi*{sD)`tsXim?VKWs@zf z2MS##YjTK3#Ra;|Q^Ai^Px4LyU&cLOegn&HI=+I?n$^O)b(Ve#Q3xa(*eSj}jh15_ zq_PqBkC0VnXxB~@U#8ryw&$uZi86BB!vGwc%F?5>Rei~&3I-K^e|3KRUq+! zX=Ie=tUc*Y%R&W;HT{{E*A5Ai!@Q%tz~k_tbjj)b(~JEl>kFN7rOZ)#!^9IVt;QZx z)T`^nolFI%m3I~bYIc_fvYY$leUCfdDjd?tno{ZtiUvZ10-ei2QwqguF6P(GPu#u_ zMAO+T;9f-#-*xg}3aN z*Y++w?o}<$*>{tOT%lgjRT0+6iLcT+>4Md zX72lj_%c%49>rr{_~coejE71v zk51{w+R)cU4gEH$?5tH1Qk#=tHG*d?moL8$;DkbFzRiP|TNkWjr-)x>7%8XPxnR+W z6#U@amF%ypHj@qYFM0L1H2;c{ECmwJjd|#M5)ZLW8E|FPPYSQurZ!)Xa@~D+-e$Yl z=qLPG03c1}uMn+V5<-Wg1ZMxdA8TZ33gn`>ya^h0N2uB+Nh{;q`|;VIdXJX>1zF2i z(D}(ScXC#pK_)dwT)tKqMBp@7XGgNM^2`ny8&u^legM{klddM^8Vu)3E?_G>HRi$t-}u3c+6{&)&qu zi-!}X*Cgrs?P;pemuoX@Fczz$7do^>ajs-uhzB5a^NJ-l1o4Tpnl(YgNIv2Tq`Y^2 zo8hELNL@#b`OMO48PX5T_i{&Ql=#9l<3riTeJ(9C_*zQ%PP^H8jp`-LK>RrikjI?L zm#sfktlYnBwRrQYz7@?P>6Dm$$~Z(-b>ci6B zq>HlC_;Bw(${EIro$6Sphi1TJ0m3U*6f^u(%M^ft~*p# zVGSzV*nB?arDJgML}>QwMdXpXhmUeG$Z{Lg-w43qw9a-l#Wp)T2_q6h@|o=hgD&N8 z3cDZ{f#kGr3AZ?60=LC4TKh@;(XPPl@idQzYST#8g6d$#&>+T9w~%YcqmPcSD6;i1 zXWEPfn1!Kqg*lQowcf8%>r1`~vPAW!XgO{RO^7}@ro(p>=FZKo^y@rF3hpY)EWlk8 zLJE^^SL}Lu9 zgqN>8oJm&choyJrk|&sY+mp zhJ+L?Q@W+j+6jUqTxyJxN#L{|kU|MuZVXe|M^kc%@-sO<+Ej8xF=_a%BSE88X^CD; z#(1NCmG4i`Wa5}!d{y{&1*etuC1@jR(oE`xt3yY!56@g)+`;ngL-i1KuA*9xg%!gs z;k#Fqn(_I+wP-`C6&{=;a%E!kR){sZg|zIJh5NgZVK^wR<9bzmwt$q^ zx8AguHbOZe9|ZQlaauM%0&qh}Rrt3GRcWu{tmZ7k&R?ogk@8{|gfgn+!@wt)m^dvX zj%N^>BU*WK+_Y@WtGMC7C$^PZHoVZ{Zj}5pfK&IKtCuy;qTiQIpGd-eg%h1Vmi%lt zfXbq@SDO0j@{J!sdOH1UN#zVCxn4jzXz=<-iTOe{yLKx^?oooB??+F|5O;ax=>Gs5 zS<86o0@6>*c7NgoT^BFH(0@p(d2T%V!PP*smRnKWn=IV2{fAx`VL7bi~e;o!Be8&P?StLp_>u)<*V|q<-KjjeX0{!XcigPY`WA{{H}1J?_r; zXgtD8!wIQP`6hCYA=`@_#}lJ@CNgPELVw{EgOcCnJeeCAZ*$x(-8(JOf#FwG7@pb@ zpQ~%y4>Z-x7Lch-)w}Ro+XK9&c%7hlj_`TAK+>e1Kq}`GhyMVBICrBHg>SHd&5Mg_ zdfXA^2-*OYV|9U|y})F#^<6tv{wcC>DZ#l`t?*f=G;SOHR{LXNaf&hn`9tD;bn|6<+%Q5m z?&-2!UW~M=Dmx>AR0h5L)Kwm+4~fJPk!e@lHjiw+GCbE0xnt^_6;6GtE^`8c7;y3R_j%fsD4yMy<-&L^l;8qR_oY^dv zOD|WlCyKVXuk2g!=;+akzTu09Gr3EXSQ|cXX!QR8sxew&EhCPtRqafcOC^%aQ!i8- zWR2RBtKrfD=HS(bJDy?!YGD38D8?H?Jrb_T86CeR=Nf&>F3Uwi2xEH11~gzgFvgAO z3%JuATw`mTHy!@~aw5zGmrm3ZVBzmnwppKNJY3v9IV;wCQ(UlnQIh3p!ChTt)>*99 zeA%qlYc-n1b(U*2)?HYKQ`5~jT5Iv{h7LwR>ui?2| zji3Rzbb*ZCR$E6tmehWq*s#~AI;UV9H}=5ZDY80N3hrKZ*YFCjyyM37r)-XH4b27tmtdX8+jq~^QPAdT z(+Jwy;+qq5-c}tsBZ85~+C0_uLmyn6fd@WpdOs|4d^-!s_DXZR{ZtfB`YR1g_1e%A z8V2seDg7DwB6}7CR}LMJcNK=FI_zcKD~b(h>@z#`F8O-0NL}O6;Ed;R>{f?texZ#J9DP<9U30;!m0#fGIqv3tQ zPX{A)P>akn7AuCA8FLYWlcn?wS!@=2m%wFX7N03z1*OIE%Q$sDXL6-VW4>2!uU|=v z^MptqP&dM=FnvT(mUTL!2e?yEwWun8f9N#<0#_MuVJ%pfZIrx+m3o(#j0aL=!c)bH z6U#n-p}U!ilF?1XR;GPRW5Hx*BZ)}vF&Ww0h8q6>ffk9H?HmL8gF z2&5pzc$tEy`M6l%l?h(qQ@Cz!Q35miMmw=AmO&g``AnjEm5c>S;-wt398nGZ4!Bs< zT3T3^yNLIo(_Apu*R=ltB0-61mRYH5fwU$`XT8h!I)WljrcKwFHJBMa$N3=6p#>Zf zW}&!6e3%Z?*vIHIDm&oAg8qhI)KYx`D2PmPPu7lJAEe+eR~48+Np6zixr+xg3^U3X z+@XtX@lgQ;{i4X?W(S=6={jKzRrsd&+X-^?=H524gI zDdV_mQ!OxQnDu0_1u>N_GE}^%YEaZs)VGQ9i-p3S&z#CzEtWgw!Em<@r8ykJBOCqx zljsKl4)aZLyTrglCmcfzQiTr@%u07GWwMlCGa<%0faAo)kZL-FtAWYIH#Lqoj*K(V z;hv>Oz~PeWBgFJZDdT`c9dWi>4=GxVo^q1qJjD}mxqKOQ5=Py{Mf00|{*#@dou&m5 zEX!z7E|eqYIfig9*pcy?tVmr<)j9zigHQ8g_(i>+=o z;$Tks;4n#krOV>Z1efc8f;2=hmU*8j)%^e!z_fVymhemZ1^pQ9if~&#QRFjuyY!p| zwJ_MsLJ55C26)^}g5u_1YOxVZiZc(H*5eNn()hC4g2{-CCMU`n=H>8kBwaWeapaHW z-f1ph88Y}em+yw9_*yH4<@jH@No2a=v{G3;{SAP7`VDhdK&Dvk9jVDVJrv~7ZmEu{lVzTF`F5(?QfH-BBFSxmk%&&eTE@saN`HMEiDO2dL+#wNU$MjJNUXZLM z7lJA>@TpzUQ62#s%txkW+z&(x%E#hT>-RjR##p9MV|N40aT`Jz<`Ch6UpFpaAc`HV z6%-dl*9IiQVmRO*N}(Ncmnu9wRAt}LRcfER$VQ?DAn5>MF5`{Qly#mj+}eKGg%h}! zMkjLoz*WNq)6g! z8js)lIBozzdy7ZRDDF0+=P;HGc#f{1rA*7Ic;fC*?j&Nza>6EKeXa{jgjwcaxIW_h z(tB!Y+5g8oHHg4R;#tE?MRn-6dR-!e6-4Fh-)xrQdOUMNpnD zS#p(8PcqLkwT!Q<+7qqJdE*g>&`oiCkcD`+izAeEJ|iv5k-d}U%3shQLYzAKQeq9&a2JoBV5#qx$4#J^fUr2#cbNB{-1jGK&wMBDi*1)z zd!3OqQwC~R?FeC($BX1l?YO@63wTH#V~xu7D(+yUODPTCPiF@oLNcCjG2mN(H3gz{ zZ!L`Q1mcYh1DIz_QZmH85%J;-DJCmjx37tHI(xT+-1W1;fPV+*4HOoFiok6Zi!Bp^D`e{mA%hcId~@$ z*`G4sFt`j_GS4#4GubTjESD%s%F4>{9Dz@u&t$(Th>MBpB(WtULA199&KbBR+!Gy! zrlcY;hYO9GmO&4+74Z9UaOKZ7OiPQ#B;2nj!7NYhDrky#3uQCGhl7>3n0rDk!rw|- zU+5NR%2<~1E#h0mykgSQ^796G5R#GH77M5Fd6waqEtfkHk%}$m7*sLEyasAja?>tT zF8CvoUmfz)xoo*C3wxs2VBp+x%l9eZoPQ1!@hRd_F#F%9R6^FuLNu;4?q)R{&B>M9s^GSa&Cu751U_0^r$vV6CyO zG~Bb??w}hblF4zGg?&{LCl#4osEd{zZ!vA-Ex`@)r-h}VNm989UZ=uWucRx-4N7=a zsGmXk#+=ltZegi=>cY#cv$M(K1|lH>9l*sBS5-BV<*;J6aGZ?l91@9+qYl*pJtbFC zy??+Waip-V7?(U;z*eCuS|q<8gr~$GiGLH}#PmwKp1F1);{o+4G`MUW^-8zGc_{f} z&dU z10%iAena?6CEj51?KVlbegZX_dzZu>Xq97+u>DHsrdyVh>H*xb*Zcw0IAJ*GmlfR3 z8jF(-0@yy_!UF82iPPT>Kcnv%A9;lPjH0&Ss{AN2jFvy=GKh<@92Z5=C`2|IvFESu zTYO*bkWrn#@PiI;o9f~A+9*F!7>z^mv+zXax5xKQcL#R=01;c(^}q2cnmG>Nml1J% zQTkK$9^?)`?Ln6GkLKl%ta`2PWb*-6j8qnJvJbsXpn%;8Yb40SUjG2@6g}+1{Ypk6 ztk2pmoq9fquwX948q3TyK{to6e%;20>ScYVq*gDS!Pg1gp{Ey3Ywd6Qouqff)KH|< zKnPDNgoDbQC+|oOAu2BwpK@pa01;tZaT?_p-n={Zzvdno2JwslWi!;MG3yZX;eH+p#4yKjGrq_gfW~nx%t40WCzZj= zg_GG7^A`SwC31!G6-?Yk9@SvEsyFUS?AqLQH9lX=!hVrPz)?27jj#|P{kmNFvj6}p zXE+3JA@MQ|N$oFQ_?fx-AMHkLAzv{;cF%+S63NxJ$}B4H?H#97k2k0t;GrkEbTN%? zV`pmhG~~$f0VgeCkpBRGh$sg+cBe->ATn%+o8bjXF=l3z&_! z5uKJW{7i-gtQgE<;4e@3bqAzSqIJaP?F=6T>o5A6ZB#L;UH;&imC^@lp6y*nTOoq` zKXf$N%ExHTAVjSmquz)>nO$9&TPGRpfF%S8-Amke9u1;JJj;_dX(|RF7bu1hf(=Z! zNMN!Qs2BA*gs0K>mr~`+j(E43yr6I+CgRVL@h-^k z=Xm=|_dZd~74}T9-9gzBLTvyV!)uGEyqRkSSy|i+ceW$a9}&*<^KRv2jVUlFHn2TD_dPYArLbZZ-+kN+1v0&8nbN&NX7cbFTT1+ zK^m0Qxrbrq9nod^o30i4#8@Z{G0sFaSqyy5lMwc?lX9}GLUDCmaXS&7W4Iv+2yhN+ zMV-vTD*XP0xN&tU&67y)=~i*PqkBJp_Xn)|Wl3eh7(A|@hzblIu^o3%_k#-+x-3l7 zQjqR&!zydBtGK&i&#+4`$zG-i-Te`uTcDKUGusc5txCTHLS_3PwU3x6DN9CRk#Ok3 z_XWa}pdvw%o?uMDQjJ&v?*9O&w#ydJY~$TcF|ft4X`}PpMK!9s^=K}2B@tog8y_TN z*<1KS=!L%>MB4zw3IN}i?jtmI0$_uQnk!A%o4mlmptty zrhHbt%6WIn%<6{`!)B5Za@CXZoKaO?*uGbEPgo7=hBE_kryN13`rj;Y^EQX_8w4 ze_-{1{i+HDy2K$y$X#w(C8hLU32Q}(p%d^J?7B9h99LS9?9sXQb<~==-!EKp+;>up4Z`@9cx>lHl)m-@g-WTtI z=PI#+6;#OK5EMb?{lWyS!n&1zL5HO${4_Dt!C~CF^v5261bn~+ykqSc3cZ-HJ`&zC z_b_E*IQBe2LKSPf-8l5_KBP1}%-kB!s23)%x6~qZI=m+Ce^I9PuPOcryrT`+Lrl$!#brJ=E9gV6lHm_OAtBVAENV=~YfO^`}< zp$=b)*w_-s3TwPzeq+utTB61(V6qiKk24!@XtsDc7FsT6*sud1d1VUlRouWuc5ItD zD);JXPTiTB7W$%#Sw!f9RVsk;%Y1GqBY zrM#T&55QvdD=GSSFV`a)9~>KgvGL2k4h=`M^DouU0J6k%HT*%Q0MlAwegHyee{n94 z)UwtAW%%58!I0L;yZM;8VCFt^nbeGtkBN;`QO*8!Gt1RwKY*8J7J+QNj3;v?bX%Z2 zOqJVL%-LbnayzJ-;1ZII)DT$4tAFbPhqO;}&*;0&nAmA`DMM!=Zd|{((ZcMF!d40b5qYQ}9c=x8@AWW%(zOP8gL;Ihf42Nh z2h8^$a@iX6eiP$4$_+G-p}Nt~5=*DU$G&L_L1uXIo2= z{$+xw?yJPR3$fKx`i%`-tAl^sr&-GD#1VdR+`_25W*{rrM@mtZ;=obeoU_!t6eU<{ zVr~G{ua6KE4OlSMmo8_m?|*^_jNlQkjBVffztjs;(py=K&F?EKrN46fd$d%{fbaSi z71k8X_=wI>y0)WkB?{610A$`Vmle(}N^gezOfwgFYmys>7f^gbW5tQSf)d_smc_nr zjW3y#GcO!*RFBZ83}%NxMp%>z2y5kx8Sdqtz}b75u-XQ@iJ;fF6$`>Jr+sQGa2bhf zb&Nx(0k%A&hY8`Q-ZF5to1Ud#kJ-#dEbp;jc%r`9KbGPRqW4_70Q9q;H7jMo1Njp3 z)mpvG3*lp0&V^|ixHj&gv_ZA`g)OAgsy5X8!FCHJjRGEn6#teYxJ#oJ?}(s&`U%_xKBWir=axlYAe%vkob+` z&k)u=Y(#Xjc0g?A4>YOyrawBL2r`uHvmyf5&jH^jL7ht(ix~1>=Z<*3_zrGk%q0*H z5|G6~+u+0Ly5WHPmo&n9ScgxcBohzpKBD;%`;F+jtjf1d2ew!sX8~YQtcOz&wLl@b zi1^^8=}C3^AiY!{`GJ1rPfKv$L*>JK6HoTV&=po^-G2gF7$x#L&!iNwOFq zP(2kY{{X~qps7;CLG@R0h_~A;6`pUN6NWinCaB} zY->7n5|_+(FDdB2HQiq2#TsU9T_LJN%L|pv5;ZWZqk8UB9%=vzJfrqlV!MR{8Wj`C zX;TmJxC-f|u%o&e;A_BTWr-XE%u-AnU-aCuiyQq3fD}hT;uUL#gDgh7`%eD=$@B(b z+|@Uf12BA}TvvCAbq}LcNk}2?Y?I3|30@DN+JEbCZCZP++J3Ez&nrA&)+OLboxt~ujUj3O+qfvQnPtv zCgfQ(F%{Jks`1wmhN1U&~@f}2#ieBt4C9@`onH$OuLqm+!Rzf zhD59Lgj+SEAMPb3D_z-_^E7mo!*BVP*b#WLPt`yVqnZ5NC17p>8rquw0DMI8?9tpE za~fNA1})w4^rES1;1?7ybVLS+GRZbo+0nEh?I_sT85nkVY#M zd<@U-`k^5@dy0}OmD6+DSLi}8zFCFU6}0~VF#5H=g+whcZvb=R3d1gPz`1S{>-}i% zCllO4-txs&GFBY&+7Q3oZHFK4EU`7#lLQbN;XSmk!`z)YeG;jrosQD6y%YwTn1? zz$0OR7Eh`B`kTuIJ7u!_2Y(S1xTf0Nq%ftTVMu9XO_x+aZRf_6^Z<@x^r467h*O3tZ0A&)B!+N!JlsqT8uLSX}h ze4zbK$FE-HlvvM0`*{yELxFpW)(doX9FWqF&=71@nTPpf55gfe_x^yvi{d<%3spif z+6E2Z%mnB}kARS8UoK6df-9yxxV4&B#HrXoQdIoXe==W=?Fkugs#Yx{Xy`;dn9ME}jsTg96MU3>>3n+AqY+vI91HjbHM@ zR=BbR_;dD*seC)00`bC$A27bKxD_%*Z_w;$bi>$^7CRD!F0xEY#lM7c>y_FS;qmY0 z2ib{6rH$x8Sjjxez<+VPTj}5X{$;w}PVZCJrI1}(?+AGsQ0m+yYH*OnaLBV0jxZna z)EP?Us-vepc$=z4A1zBNs={n^6bRIQSZj;6jWNlE@VXItOps zS-4m)tHc7hg2fLKpRA*-Fi?LnzaT9|%2n0>0EkxPfxIT+JEo7~JuVBt@hE|fX<1{- z)0;xi;tsN*j`=q$d7YNS_#j+mb^&dD&>3bQ*!!AH_#xw+ISf?y`Qn*T=Aa^r3_7`L zyQP03VA1Rqo)MkCfwj;}e8Tk(a>w@twhF58HO<&}x!^QM#Q6fTj`LB)F;WkA2c&2A zETpA&>E;I0s&_4(3q8f;4$pto&a7MfBX#7y7EErYt|GhxQ&*Z6Gc(UJ?XO7x0E}Tz z<%BjK3_!hixa^Z(FzBT$ftNF);;r~)?vfa3-c|6$%)m{fISO)v>K{f&P0XYLe(g~yrK80!u2p~TBN*v( z33VYp2yfM_gCtoUta8N4#!0^9HtY5|e{ZdX@V*^3rc^3+{SC9Cm)$aMwV zsBCOuouA=`LA_+R$gQf_kzf`9VkUEO0N%)j>!IpntGfH~FmxMB{{H}^ z7Xy%vFB;z9u-tYS#L{Qg8rP-Hr!D$ItASis#9<{c8Bd59$-O zcDJ1W0PO657z{wk1i$t6_5T2@pa$!BE?>hznI1hoOMs(Ph_bEy@BPdyFv*^#VaBMC z`pRfV_Zhq>^hJp2Jva9iA+obF+_O!c%K6nMnVSdq8(WbVHrfa*V0Rt8%v?|uJb$cQ zF{yMtLJosbNKul1f4Gbt&&uD^B1aMb0AW2P%^@<7Dt);5i!y@}pk`nuJ<8?fj^<2D zX7ex)xnyqJ4S>CGKQY=03(-@`JUrA*Gl#fINMhTX+cI3sAQaWc5!G)Qn~Yp;1+oo_ zU_dwl?Vs&-+@y72xD^w{=34q;>;Aajn%KYh+*~cYFJPx;qK%Bam&Cx?y?C4S*x<9K zFH#yo8iy~CuHn}JFbhegyPHiX+L!p5WD@U~X|O71x&-qs9eo+uqdmR|?EpGu@BpPt z6!UT&q$@zpVf^kW^W_;qK&qpS&zB48!}Q6##jk7nO=bq+QxPR4Mg>cF1i8;UzFrvP zgtOes6$imm-5|j}aTUaIw795-7)M@lo^F%d{{SX(g`D09YX@VC{mki(A8`Vahq{bL zi}4VUOH9|PM!NjpGa5F+^YIit!QQ!2T2}dr3waHP)EfaOW~EIVF6s)UU61M+fD9S9 z6D1WyKrFL=@iIqc-#C|k6e=xYAA}(E0|2dsPk!b{3%ArAjrUW!{c4cC@Ft}vLzSeS6hXiu614i020iDYpIJdHun$3kP7STDYrXw`hx}l z8uR_d;VzmwV9*Ol4Y%K!bj(z%SZoyg;pOgRX!QV>y+!6ENOtL&uru1kq?&B6i~Mk9 z@K-TzCzGP|Qjf%?60NU*RHjK43tC*?)Z0V{sl2CfNS~k^Ls#WE4^{L@f`K z=y!xDw6_G;`qH{tFQJ%HJs#Pwt|{NSRbZ;vpxaivL%M!=7FdECJ%6_@0MTNyP+Jv# zAZ*zmbJhODN{2R&yuyaiJjNPOz|HuF zc0Rg}yijIz_eF$tlIJo_8J#4O~S8X#setko{iU+TAu;V^+ z59*hQKhj<2GYW*LeJp;8p}>(J5JytW!*DHLpTt zMZq?LcZkUAyO{z8T~ui%wbD?VR$Hi>5{f)VSNPsxP`6^C@!CBwLi0(67`GJ7$s7l= zD8e-p9I4N_M>Si0%Ey*2wn`jn129LqVGz(tLduu#1OzkW{{TZTHq9)kG`L^}@#&YK zF+<{i8bcDnOyHCYwj`p+dB(F9rl$lJJGb00UL$EP76jkKHu@M1{2n&2jcE2*A%Hwe zJa9^ZT+|c|aU2jOL}nO0K&?%)xrtj6*Bg;ka(W?gt3*1QF@qcsH3GUdSUNWZar>2S z@`51`lD`ug9$5%%H?Sedg@;O02n+*5h?&68=37K9PT#l@-pp(Up%w}=;+8*X05f&# z`%0y8U{v*3k3P?VhEr~m>C09B0CY&=^%C`Rg46BtmSVAtD9@TQY+*EF;go)+Vn=(v z$VM3gme>43!_GhMgPQbe{uoDq4w0b;#o-wfx_{{wr2GP-^CY1y%=y2>z_fT1`k&wt z3*1cE;9pt#NW8~{j`_+JZkO=mjHl>6fZ(cM1ULu;2Z$ZiGc{V{HtMJ5SVajm*uH-&PGg+J{3j==d7XZ~XD+3ueL4AUPZ5#JKh-e<~RkI#+#&z$*7 z`Qd+{T)tMN%lg%bXMqCYhUKwx$pDwa>{J-86`mVGZBLg3Aqnlo!;CJna4^RbmY$hhH!pfxf|4gK^nu38?MyQR54cfI)H8m#8>!)_b{8^6>usuGehYiOwX495~UzU zEDq#HWz#x)#{A%LJA{YqJ0fn_mHzf!WD zc$S{7OU*AAmXQ*xxsNbBxME^sqmKw6Jb8z5t#XN^5GoOCseYjo+$CZVlTmr(6T!*} zbq9d^;*yJ~Y6`fuD$01!ldTridmrlJ2kJu~Noi92rAYo@6gj^U%(a-8QBP1sBo47` zUM&~#FXDQj0Gvz9`1%U>Pjs)iw{qVy-!ndbkl^K{LAV`8Y95U6AqElfmT}ymJhN2`_+n3!*N>Qdg9Qu?_?w;^k%>f(v2>v-fzHrvvDfDJ1iw+<#Ct%tU$<19$}=?g7<6fJ+Q<#LpKE?q3$= zg7vjPIME<8FzPU=SJbM>9PtxXE4Y)@9;R<_SMVlDgb}HWjAq!`GiYMk;qaH{WR_@n zd-{8>aDo~?GV_^ayWxsK(+k3qrA_!K=Y>=u<{*yJnr8BG5?Oq4frP2Ydq26L;Pu2` z7IzUZ{*vbA7+{xqhpALaK{~Sk05eJjLDr_=Ok%yuC(cr!+!%p;MK2shoJDmDS5aT; zP*7}*)~0Po>US%Lhl=A#L+P6C6oh9`RXD;Ljz>)Y0A7L^IiZq#Vs)LuWiQmYseFr> zGd6`tKmZ9tiEv<&%8PN5o$x#%p{fYPIbN^KBAfYx8AZ&gQoKr(N)1gQrkQf!U{JY# zGVAEiPOfRf)!2Reb^l!*GNYw9J%I=ELre5qW_K$0f>7M-jda%b|po>NMaI zarT0a1Q}$bk`a)`1?Glgu)sp>tG+wN%yFKkd{0gd#5ja0Khj>zpuyV@ILiwu zP#TYfM@%#uR1`BD?jG@@EXWnP`Anj_irzNh@WS;P;p1V3Wk+*o7b@W4;}tGeWh6d_ zOf@_uLsFrYT=?h2DA_22*zsCgc_k(}0@!D`#O~!<3Zx7N7tYXPI>Z;a!=4B-xkNE{ zDh}%WrTbCe80nXL`Yxs1-9`(p4q#$eQRr~KW+LAV+}bAMt;;%<0-2ttkcOb9SufOB z;LE2Y-OYHid}Wu&%J80&9&*AnsKOEeJCx&wsdh7NQ7wo#gwhtWMQ&V6seKu_pDX4QGxU1l+&pj`eZH>#ohE90&ZbeLf(<~pD5z0~g8Ja7e9p1NNNuH# z=e9bD*%d8!#lSEFE@5t_BLhiBrNs$IHq1R^Q6)Yim7@13z}BTEa*q@FQo?&<&lB&% zs7KEi0@0T{h8c42g{Ty0#JNZ}FEZl$L-F*1GXWNhQZ1hd4-?RquHkI(zXG_yeZbr5 zg3LYPgYE;FZj$~c2xlqljgl?#AA(X43L&CB5~WQgR}SNFVsYF=tV+h^iB7b?yvoz4 zfx#1Kgv2GvmM6cX5t~Js6(|aRc+}c$%M9?x1wi6cgDc>sR z7aW}J#nis}VLF}(qXQa({(#_XT!AHBu-!s^$qFptVA#Z)xlBs9p$m(_vOke!P^Z7N zqcb}cfjwp0m?(u_V$gyk)O>QrU>pvhlf=*E%UDeQ6Rrs7aB>=g<#Cis%nuCnXnDI`X%;!;<#~34t)y?8m zV$cJg0L%cyxOWXlQ$AxE{>11#!oe7sGY0b=#@D&?5UO`Wk?k-**8v9OGh7Yv+-1!0 zbD4=vAq~yTB@6>>!WGoHK+LjG+X-b*>6VFCKT_NVol1r>P~0wmwa@?B01N{G00IC5 z0000GqEbo{C!!i?!2k)M7y>on?favUB$%?yKmi1Zh)O8vEFM9w5+D!)$R1W~TpuO) zn1~`2L!EYDIf2umt=%VZPJnggy3lHiHl(t(HM&H@ zpFoGq*$#FA8eV}~5i6Ks2DmI1Vg(FF376{AV2m;-6kEuVFrfiiO$#lgsAavIkTRZD z!bsQ%BPb#Sg{lS!C&ER51LvTMAVO70MV&}WafB7Hi6k&ek>rR1BU}W4%WKjlPD3Y< zn0_LA((TmTjqyQZKCqP67St$y94AclM2-F2&ASZ$lAQ77|u!tT;40I^% z#W`N-6I3KLm46Efff5l^AOIwfHUM``$cq!`wV&{U)lvdHiVAZe1^@{{ND33xzdr*?@!xcW?ypg|xAUMYG-Ae2FTNFa9?1)vo6gHmLicaaoH_+SCS z9TQE0E+G`DCm+EGgaQdKsHwaXU>H*KfIv~d06>&UPa#4yjztB6U@8(6&h$Fz&O@ z{G`}578-(V6F`gr4zPj=zyU$do7n`bVsQ^ucxs}BOfN>$&+S8U7zU6o@d82A-=^Sk z$6hRHS3-Oz;*B*Dff#lgMS}!rR6`NsA~uk{F^}UHb?*CyoE724rBrv(000r}K_E;U zMgGk6%_T8!CP$+fa0bKCeL`n|cz{96LOB40V2%KC3nZJUXeBG4xqQUD1w)YlLO_KC z2%*7j;C<04S6K%?x}fkTeOhgEQblN7#F!7JoULKiH7xa$~GV(Cw?eY3oRny^9yCh!^n$%&B>PCS(fLIdn?pO2zB z@EFPfh^}|&un!GjBpy}77(Ax6(xFb_xmeAfrV1befQoR6NwXkYiiO<(yMR&~2Z{v{ z%<27MOuK+M$FfT`WCYjp!uaBXC5Cfgklle#W+Y2NpnGSY7q!eIN$@KWD}49l>!D9HvtBQ zet~>xqixL%vH7eJ#(^fl&|pzY%)nGwj-U}uBtg2uNN&Ml06pTh>;x$iYOO%oFVRGD zns*OSSuts%4d`0VFoGi67A>+Apoa9IB2Y)-;|Vbjs{#N7vKK?_ng-X zphll!fdUC-fdD3k+B%xK6)+1xG#2d|LqiVcMu>m_NHUQE z01`|3K|e8YUIiQ zBai?PKqv$NC9;r%LW5&W3&TezF$F%kV*o$|0SFKh4X_XiqyPvHjX*&`t0WkDNQ5+{ z$N&HU00a_1kN^M>fFJ-8J9!60@L+%v28V?b5CT~M002Oc5+D)^2$Bc@_edO2qN|B_ zm`_L$3m`zbB$G*+3=)Gxut)~0Q=lynM+E{XtrK4fRnbU_zyJg-5u~=+8G>$nN^OV^ zR+A2>?=0hv)UrunB)eQDPy~QMBygVwmr{T?a|9)w z0$>^d%RX!v0!|LEi~yF)Xf~1okObh+0L1HOkimojkjN&{7;3H^LPAU}DF{+4Z72`q ziwta&W-OQrBJ_(Q==HeUr!oY?IGKP9fq=S!OX?#4tm91(Kmj@Q;V0AbZD~m?0L5MQ z;7Phm_e2gMtAGHwdLW`#-V{mn^R*8Ja!?y+zm5v@Bt;bqm=0p((sq7{xXNXSK5)Qx zsd~+>K>-sXi4g3wfJwf$G5 zXfc;Z+af?@7W!C(wJSrgNhAWGOEQfz2u7%grdh>-)`4UI6$ygU#RLdUoq`tyBme?a zNS3qAsTZ8?^hgNMYmgd9raYZxR9np(?Ss1)cW7Fi0L7trp}4zSixhWv_u^7qOK}Ml z2*I_`k|HG(2=4CEoA-a$z2{RtWSx~YnVECu*}uJ?7G9|qSO=&1^P&t2e%O|xA zF`;mXzwdA3N4ZT?#iJZs|IF5e*WX!L2Pc2Ihmx;i)Fw}dV;w7r+NL@^qne^DgGz}k zZ~ngZOjMes9V(Z$N6QjZkLryXVo|~$Rz$!Vh?`VX(7E1MmT-pw3=FYJ5)fj$wJ9P$M@@hM#LKo3=#B-! z#0FEGzqY-rt`!GlyljgF?)P3<1dWxh{%6}H`OmhA?BI)zG;JcU|7Y7|`p>udpKTKa z{dxNTZJWsNND+5N$LW@7;j0W8`+toehUw&(al$wa<0&jrhWrvN0;7e87F#suP6AONMSY zomLAWsdmXdB==1^2N4YlXzVE!<~u^Xw=RqeN*BUxp~ z6e;Rn_L#JBMWgu3jakl_um-2tPJ;>e_wuX{L;GY))Vc-HS#y#G;iXw4e$3iS1{^@; z85}o;NHABy>E#lQUmtCZVcr4E(Q2e@O%N?It!T@Gk~4yc-6Q_JCcOSkMG#*x+Wuzb z6(^Y$)hJ1nM6F(kz*6YnIQhHTQtm3|tIl>=!KcSOj)ZoTQ-gF9nenFBDw+B=-ov*sM)kk2 zn7{BQTAn*%+LuB-z+E2{U_GZ9dGcjIZ(2K3yUXt*T`rZdRT;c2v;_aDcUDZMHT(La ze;nTA%WQ6q(%%XboH~Vd)d&s}c-dP}sANx%kZODF{hD`WF!TCebjw24Gi0igFfk-H zN(>VwELW}m>;`ADKyH0`rraF5IPneA1L8RhG%0u9q+P$9gi^)ay*&7e)~OVuhK6OS z_o>&@(Mlr68`7XG&}<2FKSOY~92VhwT@~PIm#yjPNVz<1ygO?Oy_)^m*7}0nm+Y5E z92j)hdo~nI+cuF!vUItzfKx}`$RO$*`5t(+TyVKB%K8jBLu_oU7R+<7X2Xwl)&}fU zubgYHJo9ktD48Ea4z*5AOj^o#L_Qn4$;p;id{=i>^ah zXf{WgM;$sj>?Eo4_mwEQ$1Lsdi3lqz>&?9jrp4$_PhWzgr(|EQs@qMey19H}@PiRX zetwNv+Gkt<)Gaem0~;6c5aB^hdx^x{ZRcI-J*KCJ?D#8HRFswAwW@7xby;l460^3R`#(OOhpnHlBep$Y`>wx*~@oj^MPA(9fMAx=%%Wu{movCxtePJ#$h8c>_EC zJk_=;WDj)oGA*|4>L?J12PG3EfEH0=TH8igU^hI2Kkc!RX1FR@*^8HFtA+l;_A4#a z{!X-^&Q4NjU9}U}4kR*;!HxNjkO|6wS^{IB^-$(a>ZOd=>2VSE4;LTq3sfvf;K)?8 z!A<-U)qt#h0g=V<_wrr7e3)9e`{gAr*yPZGw9Gh!cntpm&>A?_I^Ctlgr{Lf zDzw1PiH$TKUYB}E|EXxg;u#>94~vf#&DNdAwQ_;g^q^Xu(}rtR?YxvLGm(ct!N|G8 z0%PiAV5v437n%)g>oDQw&W84tz-kkQ<5!bKU_b5y{{i@5E%d$Yh<(oa7Q~WsTbtI; zlNra|IPnqahXE(DeMQd`V(*F-u{cZyqqO2F9JgN{2eIxjC=YZ0>4Xc?Z#g|N1KF*5<@L(5yi6+VllWnC_On!9Kr-9`j~5$tcRcKh^8y`E5KI)xTK zn;6=Z+)f&#w5F_*eTvp^AxE!nH*8pTK)CVk=sv#o{jq>+UPFaVt?1v`DX2`DAa@S^ zM^mYf(S9cPlQ`K-$NMacILNs)B-={N(gw3#8Y0PzFFF7|Om1jr;{@NBw*ww9UvI3! z0;mpJ_R+c`Z{osTJZTHgc2l@3EZMp>TH#D@)cAL92%{p$paW}#Nt(=PwlvuajO(f% zY7=nH%(YJP27L0$6zs1Ftya9yma6ABE%O#}JeD1XSv9YK6VcW?MMZDZn-{$Pl83Ar zAeGj3Ue`Ec^zl%VCcR2f|MJ_{5U)6T-vE12MeH*K?XvwG+7YMI^vy;X`uE>A62u3c zek1jUV)sEZ3LE!l;=00A4TsC)Z$qq?oSSt+Ys458#6iVeqo}l!P z;QpcLsMWAi+cq@GS$dRTiK#rV)u=+`kFlUNN8?ax&tXj|OD^1q_dD8%nGXNb&$7%< za^0hvXSND%CNZHr!ahHUC>XVE-~>6E{NOMmfDV;&<(P7H*|uo2Yi%e!h^1`Q5C%1& zccWZKWYjHr@!@L;LpqoZ={BXnX1RYB<0B)C8>Z+S7j{5+VUYqJ<#k+Vm|I3NThjRs z0aM=9Y}JksNW7gY_iZ+oFOlO3FEGjaDpNp{<&7cMAo?qU34g!#pC!SQ<|fvL4ktIU za$_3-v56vP2mlx^QCaZ%7#87rCtS_*BF{wL8lA7=g#C^cKIp{}Bid9l)kF9~x(K z-|PCQI~Zc^r+F9N!2VEx$%=+);hr?;`VZjpfztA)VqNsEwD3hSUx(0Yex}s~yn63b zzb;}j^bS3-Z+4=vj$;tP;Pc{k_{ko`F@1Q3Yx?5>>tSDzIr#Phhcyft<14>J!4mcu z8F)lH3^@{79n%GG z#1L!b)I$#d+CK#F_O;d#%dyF# zM)@5ttyz_Zebc}RZ_-Mq(9S#u@U<0D-U*%&5E9&Eb&8bl<#J^@+^Bk&w1=>uwU$A~ z7L&j7GD>b0=%{pQOHE>yFEP?8Pp>*eu5~#bk#oG-kp8=DgQbQc;)Bzktc?o#71wt_ZEj}CF4`orQwH;5W8Wr66Eqc z=-ctyw~ybZD3J>$eVwWCPNFEjF6FajtK)5UyEy4hKXY$`dzy8YyHkH2COYQG90;TA zrLE1N{L72b{07IGF4~~l(@AXukbl}TK$*ZkR@S>VKc8amADxzA1Fd0U=Hg?f2|KW( zPRhyzo9KWxZ8dFIU8}a|d9C4nt$4FFS>LU!Tk077-*Rj;l`0l=E%nOLOy432z)BzD zDZ%~)ydhzzstA*TG?|vwn;iO*1umG0pK(h0$CKEgPb29{LZ*tPksJgs$EgfvX1ZK+ zmXg4kX?63GqoTohJ5&#YEnWG4SBb4=Pz5iIWa=?)r&WT22fg>Da;(^!PWGbp#y?q~ z(bouf&xUFjMEMvj#H&&}KA)vFQKk*6#DNl6P0nnA718gWT?lj0#fh6|4O(lc^c-~&x6=FcB_ z+eq8K2m8_N;(Kx2iU`wB>55pwCbalGi72(_B}_HzTe zxql-tk|6~*Mbe5CG^2h&@;RF$_Qw1v(-6|xoZ|pB>)f$7$b{ ziEl9mmEZhtZnNx~ZRU`qD>*jB{C;7uFBf%k>nn)my$@tcml&_^(1*65kl9CQb>2_A zsu$$-s=ha{)+P@v%Lb0IK#T=^XUdVMk}} z5;FZUZ!m*ICM&B7>er*r)W|XS(N=wn4gl0^4aB01_$ zTgUoMvo9+Sk3*QE#fFFTuc#D$(Jw{~0ip8IjiSFhrt@}OYC zeEaWGAf{RCb#_j6ZhH$)UwU6UWvQ0l;F6aZi^xH@TETOCcG)5%U1T*lLksh#b*cK8 z9PKoD8TUH6kar&u}H`* znlsQfq0vTkl$ZDXT^H5wF{n|@Q8!;qf|*3Xm=$h?Hf3kf92 zT3N&?iX}8D2uoEEvIyp`Y`?%u$y^Aq`I4so^A9e;SIH^TN;I=8+lQ7`!e~+Vf}Kdc%gnk)mY+1?{1kK)%JargXE=(>PMpw7=9gr zs(ktGHno4n_bi7vI^Edz6C@Si%pSCA$Nu!lJKHv7qx48POoQ5-e!-^70UEg06Dk-a zJT!YGI|2@j8_!X?EhZP{nWU0^^P>GG{sBH>CDOJ|5gOB>-KK0RyAlP!`z8q}3>qKW z#6ScV_JAV#r8#OQ z-4~66Q=)hb0?L3QiNS^n?*;^x`N9v08o>?IxKAvo(fULi?lQkk>ThA)VUX2aoEL2C z(@*N9x0oDjSc z)d11@1viMs)IjW8U+|0sG8)Of_r0}yg|6pxgR^PSIiwop&>U*mSgA2U?gX;nuiAI$ zcD3Nc{H<7*qJF*_sRxE4vn;&bEw9rdQ&W;0VAt4OvKMOaUSvE{nQZbH;2%N17^^Ri z>hzq9h|I-8^(M0j_0GGZG(6_r1)hMZZC*9y^vgpm4i_6e-H79MJRfP<ee3aii9!IPR zVn4h^ByfQI6F*W3r)qU`>z`;y!CWUE9m&Ree~kZOP^JC$WOFFgICN?N{QQGaA!~wB z0G+u^uY)j@9K8N*cG{>QSnekph=UmaK|(GSDivJ$^%rPz26L-rtJjvywtjh#gEpJQ zzDK?|AP2~p-7>h~I#CX6qH=f@if zlv2*hQHNPZjqq26E!1td(YRWNUAN3%HuTv$pHGMd>rrQB9Q=4X!_AM^ba8k3%vZ|a zs?AP@;Hck#HL4$IsGU+rB8ZmK|1tw8%FOkKGpqAropbo4=mB8rtOm{+9xc4VGMW#5 zP7=OF_ku|x_F`s37~948ebCywTxccSiI@3c%EuA^KIxC5WtWfAhSnVquyXxd&L1L@ z4iB4FR0r+VriEf}cA6Hey37R1M`L+Mn$%(vtZS9te}FW-15Ve4odZGsdY?R^Q&Id6 zzVw_Te5s%5x5SUlOXUC#Haj{Z(lAZ6C^XeRlErK2wW>)xeKdN@r|}R^Vmm?KZ|~@e z{)TqBZPpk!?95A*HwpDt4w!of2B(3z3+a#F;NEK*8}WTPX%*nDtrqtnERa2Q%a9J| zB<4&6)>qlBYtX3XbrR`-G3)2tEO`b^$yyMimZRAz!?^AWSz_ zz;L-DGCLz>CFc%9SBo=w5y@m@IV(5%%bF7pA*m!<*L+*G=19?C+wKJV)jZGtxn2+8 zd&Xhwjx{cB2VO4}1e=JTz=U2EQue4?e7#IIyu(iu;QF%`Q5W}(J18KYzU+@S(&o%B zl88IF1Fs18MS@&lh7#@&rWkzoo<~((!zU;sSSls0$u*6K5S3<4?1l1F?RyUPwFoTy zkM4uNE9j3n5tLxPTt;@P-=+X9Sret-#@U)-Cc4~y5v3$ooJbR~HG2Yo#FXy%NpYKy zGvz8DUqOEmT+qlm5WLX(4`4bpix(IbG3rx2hX!HGJ!K00=n1Nq$r4qHTDJj4PTDaAKmAfG>$#tDG8-&dzF{L#z~ zzH^DDOzn>j@sW}Hwhc*N*&8|+E{wkkMWlo&S7CTyqj8k>d9CqKZ8*3Gb?u?33dXTN z18Qx&r^IJ-z9TqLO^Kd7BG|0tNWOD9sS>>kUj4{luU#aujV+-zf}`i1D1ea>_1IEO zV}wNfK@%PJt8WL6W9zb-!zg=qodSZ#|F9Z-~C#;p=bz2cWKr zc}^u=jDd6Ub?#|lmaP8rW39gr`(`wJ!m|OxpydcGZ>n5r2PC=xSKb$=wgq>>v*S+s{>7H^2;7SD`FzPd>jeIGu4MErh*n#1<$BI znoEsq*Icbx((*Yu8Qm*?W|(sN`}HW!DT0JIdloiVSl;)Rb_BL4I&Lb7wQ)9>$bCLsH7HzvA zo8>2U0?j;gcxk=i0yyr|&tt9^cLg{5Y+UWP1$^GCM+AgK@KV(3KURKUPvVn0lm{B> z`^PU(QNu5&WiMde!Sm;e)M|oYtV;``Vox>?kvt9!ta*XZGdc^`L)SwYy04IB0yjaN zppG?1>TpxqHQvu|35gzK6{eT$^fGSls^psoiBwTe0Y`k9JG+w^FUVF*TW#dZjGHv} z1@)Z{v~Ly7VkCwljuK{;QZi?+tyko_NWX6fk;a^r_uO@$#n$RaQ;1{p=lT>ka$k;mqR4`SB`xVX2eZLN2CZTO*=n}>>n*8XE zrKUAKst20}JH0T}6`WO6F?Q~o`%X|CJduB(a@lZ|2&tFI`Un|ZqyF}n$FQB_DrF`s zk;JP$|6U$3vY1hD?|()U#_4+jZc2YY?4+j!M=dz-cbhh<7}+g>E6M=)Ug|(=bp5Mfv*@i6kBgc~`Dm05qW}MrFi$AnbxI$^RcPY1s|&kv87I=SZ2*VOB+VbMJL57q*txnY>Wyg!weXlG}#^w$yQ+?PvSU=MRl! zkfw;A4QfaQY*UcHy&B*}akhHPDNnulM(4dbgk}Lu5ik*soz>9 zlF4AI7>q0}$jn?z~&po(l)>sL{Y2P{%ynwzHAi&rFn{0I}{Fq(k1Mia)m8L3)v zmcakeMB#2OaMqNIPk_k>bf-@#ISk}Tw?A(DR)zJ&;J4m37W843Er^PCmatbZG75}c^{oNsRb0~q>G>Q9tjW-cw~33B9rJb?V#Ngo~6Wjc@<;e zZ>rf+n793dO@xy>2bo|T&M)6U+@*o0Jq8*5K$XK|N}i*EyY48yOK$I18E%GIVv5tL zv`UVV-GdpBQaM>8Oh!*0$3OO7r;9FUEsIoV&Wg%Wmq%=C$aFGiRuDZ~*@F(ht5dDA zYL>}>#=|u&Kz2(6>BT^ftK)WwGSx9~q(=b>_$nvM%=jJK#A?c#oie|(so??2k+@(? zG`JI7cA}!=M%Jui-p722!FL!YCl;Yr#D(LFLWnbp} zv0IOOX|gqiR)UTe76vAVxkiSLYnQ>ef!64J!}h3dZ~?LzTmyp2ox-y(4hO{Sa6s$-e|4X&U3Y< z>#t4PE?&5q4467EtiM4iY81m$9yVY~VcJ1$EvH>c_Y&u?#LI80=BNn8FK{zD1Nutq z9T&b?63$yPP2MmAZV^Hm%~b^pTv>LGZqi$zd^kG?SS44KH~Vv}&U*;DQ83O3Fnw~` zh_rH*3Nh9Ulthbf2yZ~@`h{_fBMo6pre%Ct)1bKPJQ44oDD2~UztGr3$ay2pMD}XT z-08vvQMU=rN*gdy9);wA!%U|2_Rd>Y3<-My%!pfUBl`X=SIW0`%3|h4vKI1kwSV;7 zu+;d-%Hj^vYWC?q@k&TRP4$IR#q+Zi(YT@wsB#g%OezlONlbMr4L4)JVBH~=S4xy@ ziFWm625>l`DfbULc^^kT-?y2ohatdNu|c{G?7J*vrh9`*7D`#DU0t1k+Aq<5NWV%M}y#|Y)v-}8RyBe^V}+LvY2qZ{F)`S#_}Ph&?HQ; zhM5Q7F#9ecO_e&x+C&OT^|1d(^`HSzQBbk|FVyp27&|dD-~Xr{(0^FZ|EQk-o5ha$ zAJoG))M1i!+F?R*8u#)hGFN1rVN*Kia~f~|2m4-Sq!d5F6F4f+Nr||?v2|dxW6`Id z0M#&p9I~g^f?flU&9{yzX`oXk2|e_u8$(GqBG9T9;={Ura<+It<`7gbc1N77rYTdA zlHxpDzFz;7;MQe(dwuL2ncV7wp{)N2+)`i2?_>JTn{X$|bd&lR!{7aLZZ#U6ezU4T zoUd3?CzOo)J~arHN&fUIs!O|YMZF)K$4EbqFeSJnl)}ta2Rfofw(4k4BnOsXg%#TW*XM%QFzZ?UX~g}m+4ju){rM}@n}VX$q_!7XMVz*c*c(eAh@VlR6D<}QdaDE%$RCIYsR?8+7g4J zdJml<4e+nA8wphP<~FS?0xv2*yHvHJd`Kd?z)lb)JZ0xC zGvRvdR0~)8#byh_;I+-Fq%)W=l@+rZ={Or!-PhqLt@Sv{A12`>PjK_>uRAN3RR3Uv zz)&yOg4Y^(dSU_bCR+_-nC6i5ISIt0SoyPC<^qLHfR+#I8=( z#bb~STp&a_JG;Qqv=jhML`E4u5|2v6sQ=gjjSFkSx;(~yk@)-H5`o$&wGnJXSELAo zm<{*A@u6crs*Jcqw2@*lPArLmC>>IB!D)~OI&loH?i{Wn5BS%Xdk^wzYqN4e3ClPK z4yS8X+_2}c4B6;ptn%S#km_@TJemDb!ku};dYE4R!Y5^a^FxJI5myD61ZzU}5&;5p zaZNmyoICUx5HY~`xMT|P%ygi9>IW(hzGGP}nwUx)HmHvF*slSE389}ijyx?Rz)t@o zNRcL)huUKf&#u*N+O(u7dGft8oOOny%L-sea%h}IKdfUfq7tv8>CHV}rbXKHH4C+v zi9?H|fLXTXE1>09<)p-)NJDc9HS4Jr{;^h%t3(wKK^o|i0q^Tc40$kBR^p5NLEnUF z)AC#w(yiMpnphTdekOzHb?4OYJIF=W(;P2?H z^Xm6s2C?N2t0PIU(GexvLyBQT5S1_S*lDrYfCHTtB@3K5DFKMS`s?%Ypko zf@=p1O?(FH-%s(v(o8VOQqjP8{UGN4HB4nDDmo`lP84>eKEp%sc51hJ^N08oRlMsi z|DeGdvxCYJO(U3CPVO>n38Hb$T_N@%%@y^OFYHTMdUZ`reJ&K%!p{8&09tke!WA>D zcpHCEF<-xwL4WHUO~zPI@S<8hxKzD!S3$5EhOD+GmhXl(7dW%``wjpqEee}>e;%{b zGFm*QzOSx(`O#U95&k_t9C+r2{5tNjY2-`JrEmOo@((>EV?Q%YggJY?=%f(@r8Mq_?s z`dc`4F>B}MH`a`s1B)TY7JUZG4<4OSRD#r&bc%RVxNA_NG+x};*=M_-`kxWYTsg9+ zb3_(hCpmb+$Bq?EQX-*pQFVnCc8qdYVRvpmTpwY?zXbvLq0U0fC6Ea;q(NFz&Y}u! znch0m29|0ay)d&w%4iwhSPTKX1yYy&14uD!q%OU98oW(RcO_y52cq&&!dRzXab*pu za&kZ7TIyrfNK6f`MFtPYE|K_UHk*{6pgO0t*~t2m<{BQ!8I;7HRs91vncQ5xwe;?@ zpd`Vo;kuetz)i`yN{~a8O-OdMO#~2=S4s9 z5iw@u&Rk%k!kdiz^dsb7V95c(tRxLeV)dw-JX26%wyF~SfPIxX+J+dshvO@~35cvk z2H@zHP_39F8gaB=zhZPFzke>**~iTO2RLa{9E%~n?BqCAy;}I`j zos*n2l_slRlwz9f3yOb;^lOmzvyB`NOJ(X)aj5&|wJvf_rH_zTl)!Wu#=cu*)(~4& z56^1~4sg3{B}+L=4gy8rfl(;piIe5kQDM8cpEk;D* z5}k$Fa7BA@&vM2vWN0z18)MB0DU10gQtlF4d=UP6#Xa>WOO{a{QqRlA*rOLBmC1KZ z*6&SZQ!_DgW+DrK0;~s#`T{f@6&P;;8o3gx4|LWOIboR zHy4;Ih&j8j4ZrnVw>NlF8V`eaW{1jQ+|NzEZRk9=QBDO*7R3DEa1j-d%%VlF6U>H-ZNOaqMtR|$NMyFsxChl%1}rBr2j z(*OZYX1(4Us_^qL~ipUOe}f`Pjx4;;O{tFv@edgpJ%UZ zo`Xhtw<`65Xlr6fS}x^dF-8X4Z?0j?sLPN07KTrj?(}chWPFpqq?^cc#qQpOtU?)%$igPxdf3dQkXrZNKY&u zk@6bMOUMZOE)vS#e7}EJ^uoUO?fDtB_;*$E}n-rN6}b98~ua}Soa!rDMS5G2Mm-Uu#@eGGop+d%H!Sg|~Mv@iJl!3Ep6 z(}=(j8=Bnv7ArK8g+W;teYv}Jr*m+T6I}lc>04G z2Thqj?Vbc57WQy8H&vr`=Vp3J{-_y^1PqRkSi1yE%z`gY?XjkoL}P>0C$Rl%nI(6h zX9ER750F#L#Fyr((M|VA_2(Ll9vhkd?Ss;~oAsV3557uLVcD18J3)GrQ^W96tlm8W z#rNvD?4ulsa39q6^>xfwY3PC;du_vjlGdH4PMAyTuV?#H zg-)UH2^-(F1Nzrw%L4EfP!hGg^00H@nK&T=y-=?2wVUf7qUMyJz0jYWzEA2ntN^og z%mkjw&%Z}3lFS1f-6WGZ-)K-pId0jyFtofLSrZ?(G){t6e*-OwVP7^8Inc(#bjp`2 zyqrD=g*IJ>g;bDx1dk1KEXGwfrI|=t+z~r=B5{`y@x9d(oqf~RjZ9jTTdALTYO&`- z7ZQH4xY^n9$fBU#09RAb+&1+P0+R+BgHP1-Y+c9n@YXoC+iv0A)q%${&)o`A67ZPkG;+ngC@vU zWxqv%i{_Bn^iaWc9-$qQVu8mlN6_E1PcERs&~u@h={E_wpT_Hic8|jB$eB$%zU+`< zlj`cOS>dvFEBKhE43%RTI}|uPDo8(%mZ3cWea1r4<=q+)^l=A6=P&oE;V(YBXF~a` z{tigjs=HM75xxIPXzNLDxy?JNki~1E2Zu0>&jG>@A}NhziE9mi;0^ImU|YW}iMPV) zAp{jWza)4UC%;5r&#<^sRw_CDhPAe|XoO3={dtx^EYje^>#q81hYQ}jq#%k%T)3s7 z745#!A{(KK^j+4bFQ9&uAGDFAA#-aES2YgLcH&_8yw_+E2li)s_@*q8v@o>Og@zXm$=S60^c$eNtH2e^@%K;;pVzmD(;2~ z*f94019&<~JJtoRRJ{@<7?pYVS`G7=_47Uwxj%`7yE7oel$IQvJ4~H8FG#d^Tj1oR zxx|@+BUC}ymS(?4L5pTOkVIsJ@lW<(riZZLe*oFnjT?ax--wW!l9fVTz>5b#D*eGV zDrE3UahBJY-iK+~xq{QXL&7@PutfW5S+bpCMV4^mfFyu_ zu_VMUN2QnvpC!AKjetPK?W@9#3q;9(9oPBEGw+V46K|)z64Cp_AF-!&<$cE99z6$UDlJoLAqy7H6&Pt7Z z$k~%@r8BPhnOJ*p@FjA9jUO8?5P>NyHS>b;Nfo9cTFYNp#~TS`jgpzwts+~~T?gaC zfUVb|tE9=pY5bL;n|~>u8a1cqqP-=bDsAPK1J5qFzm-w8J=+bpSw);Z%t+HbBc;3t z_lWLlrcq|rmT$;CP_)62BEbpXQi9yWu)AS7pN@#mjo*`hNjMrld1ltfZCv^XUlQ{SUCYOClcx2{yv>KkD0eCbNMn)*f6u%lx{Pa?r#L{5HHsc-h!0 zI`VVw=3d7B*GAo2rhKT=p5;YvFjK1gn@hzI$>-4%z{^k!4bWen+!N@bKld5GkLEVo zbV3+PZ5zUA;qOQ1CE7;CXKBS>ypTfmkjCXihi zLl7JU2J%!(_Y(|;76gvE#1)++a8|Xt>w}x@S<_yPQiom{GNrqpZlxhXDk*$_Bnqt# zEih_2Mn8MxIj9rxPtg}ChJj_v8*%%@)smStNy2*Purb1o9nt;7uD})bGG^RQWqVw| zRiv*)>@Ka9R|;?Ne~k#O;;vWti~pIh!5`+xHV02rbIyKHMJqBJ#tPa3oOcW?3=<>`AKrNE7xmJ zrRQ=SZ>Fiq5OA2YaoS3mM5YouJCLqmi5%8OqT>7R`Lpfsj7#kKPU=7@sUF*Dmrq!~ zwJ0K6PL0gc6cVa0yNqxJaq-mjF3w{GT#_wV3nE}AEV_gVyie7bW-)h>p#M|5*va*! z$^TkR9rX&2O`*n=z1<9bhtTn&xhH4r@0d)*fP1uz36q|B6S1_5$JL7z+D~C%e{5S= zJ$m!7k6Z~xO?AzO%N3vQiq%tB4{+H@OFr+6nUqtML|VcT2hT9G?uqzf`J3RtnRzs+ zB{r$;1c#lwOdYskC7$mESM&iz0u^OyYf(~XH`4_3v}qT?!_A|z*MUW0Mak~l87n;9 zo9T&%xo$6keA&(m8UvY;_G2c%N5nGuRS0>g_`?Y9TbHIlu~RcYiPRwVKCG~PV|Oyc zZcF(06;xd_KS~Rwv0caQwrtHtXGul}Yh_B4<*yHl&tu7y=!B8`?_SZcb>BvrMAbb# z|GF&?Aj+i>ek-=hD4m{FAPBA!N5l6+LRVVu?qg)`#k67C5VyK_q=*Yg3`MD zEHi0!_s%}jIHo^{$jI{J>Fv{+%cw$-N()x|F}2&f6_||YoKCB2!`5Dz5abljJK0e! z3mGyeavzb8H^*5!=Q+I@GQ}9+9x~lGKpU&2*wKm>-+f?qBMXJ`E;=C?T_y8BjQk=Q zb@=_jETuu5SPB$jbojvJ6WlxcF8XOlsJq(jAa?z0zE2Cp5PpQoc~9)U{}ELtt9Go~ z%Tbi~+sSP_H`!$-P-7|}GL%F=;Wn9Pq@D3A-mkoON{4=~N=|{n{R?vkjlY;om#zzV z@0h6wf=g4+7;Ys8#@aD^7%^OjIS4cispR_5*BtqHF>{HO%iAxmqBS{>6`_|ro!o#2 zPVLzONfng4c;3UeabecmTeK0&zU;&yXAKi?@k7$spW{DrvL+;4(?{SD{|&!?DSrZv zQ-SzkJ&-tBw1j$;*g0N_8ZUK8lM|x8mAV$K38}|TgIZNxk?UDs^6r!N7#u3dHntrO z@vJ;;ATqaZ+3aL$+YT27uGacEQ4vlkJOp<8j?SE+ep7h$CdBQk7_C=~*OEAQkVF2o z;6+!ws~n-0^WPZc(MY|#YSA3&jQrnal)Vmts(fjlGLp1@G`ty@!!Q@*iub7F-V~;_ zkh&(Avs=6P2N>-*bM6|eFC6CWzZlr);9uVa4+M~@ful)o26O6;f(S3 z@7>?qf-5Ifc-SdU&m{^ctUS8RCUX)L(^$KVt|9^y$vpjiwX&oltQSp$*>9rD2sR}$ z5U)YE7!xegU8?eD%JEcX!%kC!T8Y|usw_<&T;kZB`B@d({g4zzFj5^KSPiS9$Zmd7 z09^AOcO;ll#0$Zwc{8EVrNSwBYJO(3bZlOh5^`avlEo`F9;tg+k%CnHS?V30P@^4j~BHhW$? zJ=M~*qV7?pMLUFG-&{8!)wAn^4g6X>Qp>J5eB`5D6unILWYAuaKSGc@)>A%^ zj*Nyz$&sUb`f(T3Y7!0q_A{+|SN)r<=3+Pz(axR1-l2ZFb=bq5zKwe38vWze1hCnv zDZHjHdYiSblHWS!Xx>A0Gg{Lf?{;{AuJVYkkEhd;iskv`{g4|R3%Hi20p!m;*I^F_ zPjso$WKVzZhXvJUDrXYWvaq&kwdqeLuVx&)NfIB)Ijv9BG6XfUGOWwyzNCrtOwxb+ z#?7IX^9K`otjkmuFj6j*|4TEyl~)nMfST@0Q3>q<8z*V^a4@Lw4s6M?45?WTy@Y*@ z`le##yzisMmPK}o;(?*aO1NZ2rEBF9FbJ2-`9A>JKqkMJm|~$V!p+J&mV+GGDLacG zAtWB?46PmmOtM)k@D@9TO9|HjDDh^|)Jw>*YCXfub>g_X!NTy%acAJ%W87QfqK*=< zqzK>yf|BkFESHA?g(U>*8EmxgaH@>r38R(pZwrpaBMO$5xT(0`XK=8LF>V=c%VoX; zUw}BzQ`8pl%UQllVNfL!=A|Is80Mu!s6GcXyuJ@H?+I8deiyk(NVfzfpAwiAhqzW= z;>)Sr+ZIAGOsrMTr=oI&N@X(Zvd0%pvRM`kwpGL~9hOVnZc{6AqpUW-#&O`WeRw>> z+$m_)<+67dnwJh?$q19MHwcCXm_Q|x$z&(8aKOq%xk#6V5{X-mnQ-Tg!6oinHpVUB zE+pf{PY01|DV4AA+F(?1ac?TXUK4VnRCj@bm^;Ow$6{6s#e`N`TY$M$9!h~8%OQZM z^FFb87A%%}k8{_6Lgt!{-<=q6>Nru)QJcNTlhpNqhi6zgK)6D~csG%UYzo84?l=h5 z;J{>*U?*6-yp+$pd**6)#gxmIhVbe#nOP;rcxxKL^E$!74oh)$$TG;$fRswb%UN>I zJ7&hrY@z+a2w5HikB9n7CBAg<>K`&jxw`D8Nc1rvY+_ z%ogU{7`GQtY?_3oQea}vGLuv7JF<>nkD2$-fLDpgHK zajab15?P#QtQm1(a>7}Kp@*<)UCJZaGNKVv23AT&qp8&Ohh7JfDVk@Irz5F#HI=Z! z%VDxyTf@leZs2P-^Av${qUsug65_$U`ngO9b}{TKr6nX-=XEagaRya6tHP5G@^up8 zRxOJcd3!GpVU@UsR!XdT!jj{>TOG>@W8jb~RrWfSDJ~6|Z-nMWAt;=eU6*k#Cy7Ue z+u+67Dzf4$!$i}EvF00;pA00BP`4uUHvQyBY(IfHgOoN8`- zMO?*;N$=b*ke94PEG{EeFFKpe#2h3;RDv0G8diBmtNh)YjV0X17cc&)ugqmtGc_>E z-9Rj{+)Lb9FQ|7{yi2BPS1gqcN^uu6gL)+>RVxia7`bF7>zM8w)VtVCwS`j6Kg6^P zOT6wj;^svKqvjVCaZ>65vNwgs?36Sx;9OEE^`LN9G^201fo$c zEiHWW=(PsRukbBaGw5#~g39wWAY7r45UV+fRwfZ9f?e}*K)$2#_bb}?j^rvPwnrnO zbva`BrVycsXWV35bcUNi!&mwAyXA9<@rTKQ&bP`ZL`ydysn%F;fBx1BY|G=>DCn{rw*U2zTDii(@5b;L?(jVhU1#5FCZ?BB2>oFNEyuWLu3e)(H8uC#ceXblxnPRiELkah6?`x17@Wh zknjRI7qLMr0`BaVv8&WUhU=*7Y9jG&6oG0RJN{y)40)dCti;EUBno!AAX3-b6L&Bt zT#dvciMootYoIW}fZtFonJp^sJjOUA0}K(=VAISRY-Jo&EE$^ORj~{c{{XU!BxD6! zk~XYMUZCASQC@b%CM(_^5lMHJ7B1sHOR2oMp2O}P6MAWMOEBLrm@$)>)0f0@tDBk6 zxY*TJ(w;^epC&OhRJ|`2b(@G8kMH zSZ>ve%oxH9_>?dh@fr#$bZS-wu+HL3P`RiUoK#E60YoZ@0Yx#*c5AspE{9V^t_%hp zuoqAf$pyBrvmAUqAvK5z%vT9wGjLojqF4iWj6}N`hs>*=*;3G`Op2&ohKIHmKs4gm z)-s6AdAVF%VOx02{{Xo%Awx0nfqAbI^i<#G3}M7endFNs!PyyoMyAyhXa<^s7a2oL zqIrsRMW+`SO=n3SSL*om*!T6U&6F{Gbk0@M%3P- zMc>3y27>qq50?_YhBhI95jP6!3Y}0QWS8bE-v|TXg>VvshjCjfu;u4rbE+FRq-!lZ!+o@7xu&m zW&@%lf_%#?V`Q}qQ`0YQCis^B0Ez7s=2G3tS$Odq;&>rL6)n%)7$&WPo161lE zKA4K(fNht#W z7iuT8n#@9O<7)*9Q^`IfOr+ve9<)Q99w(YcW^Fc9~s z)g9le4#*Q@(SY*eJ={}u2^ujg)WVXk6C?M;vYR+AGYiPcbso)1nF*tBGJw?GIF`35 zqQ&VLA+vGWP3B&h#NTsT!0w@QM#5N23iih`z|{;#Y@|J)w{XtVQEtzKfPx~WD+p#&BD#T=11DGCUU&v_N$nUgS1Zgvn{ zdqF1SWgl~~n(V)LSAVJ8!L-2$_d5UFAo_XmU^!Sw~h`ve9Q z$Xk=+5Hx+n(GIf$hcQEMxC~M$&(s~OGXcx!7i>UPVTcqpJ|@#@SgFJt1%si6$@3^} zW4k{U4i7ThN8*3g&-%C_Y+B+QCZkw+!Zi2(f5Z7b7z&LVlmnS`7R5sD2fRj*VYoF7+BjTCkU|h)BdKaBClh`#rQDl^ z1+F1%zTi{yE(Nu4#>@qy-UVr9>3@(@TZecSh{Zn2j$rN>IR@)B#KHJW`5y7sZ{j6# zr{~7V><{{{ZPMyf8e&9DPjDRm?ILI*r{;a-JYeq%pkv{ z^EA|ARq9%>$CKR|!d%srxIu9L0H0AjKm{Gk7jTR#A~=*Dfke4#5I_S!rgON(1aZd^ zEfMNyUvL9;D8frYXEQf3#6h#-CpmKcMWAWS2@I0u`9N?mc5B*Rgs>tL4X<#=Z&JY_ zIho(os~4$|fn{7wy-RAyIZNK*=nUO3P&YfSQ^ewzO-hZQl8vM$j6mRpU8TfY5MC3& z`h}fDWZcUu_XlAXHHg{E>H5a|mbreTd}DEOhf}&N=}Vc6b3Wu=8b%pmTgGEWqxWk^}32bhN`GzB9M$N#&6Vp5DDO+=3ap_BEa0LQ3Tv=rYrLLeZ zt@SM*7VEjm9{87*<5N3|TXQ7@1$R3aHWFXY+`;NC=k`*rzhkNVeHz`Lli3lAV%){; zo=8J3;|w~23^7jFmM`{Oh`ER{%QHo+GRKhh6nY5lr%5bS-E}dS?pi9^g-ut8BGp`6 zpvwVc2!hRDEJ33aL26ZH%TQI+u>L7*#Wi@8yPRGi(^m#G@o^izdyM5wlB`E2f-WFl zCTDR9H2Pnm=3c8&?UfOHN}H%xTS;;CwD()WSfeWRLfP+_q(0J;h1|m-UlFNb+2SCk zAnsA;?l)>SH5IbLU6Uz-P}zv)ZK!rJ;!t-zsH?c4WKmZYb!-;yW;eLT*<$Z=NvMmX zjKJRZ_0WRaW-T=H0<$>GrkJ%X8#OUyvhLyH;}8WMM%6{I8NI>9L1W~Cl(Wp;<(5c~ zv8dh1E(G9+ytB-;*{C9#I+OvooJCql#ssj_FxU?FnXdn@QkN~`;_X~KN)Doh-yI=~+x_ex9J-sex8Hs29 zN*7-+z6D1+&BrQ%ZfA?r-_aA80jTjB7>$u}xZ&IuYG7DGyZVIL9KO*zASJ{K7!hnr z;i+LxY6Djl2Ax8X58A-_%lWyT;@2QZf zJVIn;-898YxatOnd$J&?<4~#1r~)7xcNzd?TDHJ_%o@e!2wD+1qB0lMtknZuHo~s#JAV^62JlBM zLl~)~a@?u?qou47g&YoiLi(ZNdA&Yn6N_cIdQmIPsFb2!y7`>MY|G&}xF+n>M9e^L zA)AU?tShFfRB1rBG))Orj27EcpGq|WW-LfFtPR@%a}<(I)m*++e99GZ7iY?Iml?61 z;+lxSKu0U{0WO!!7dx1RN~ndGd`Ddrtv=;Wk;;X$XeBhvEpZ52zcS1S0O=^`l}%<0 zGX#~H#3CybFga>$2`yg|mUD4cnW;=W55xx)hcHw+?CMgV(p|$6XL82sd{2At{00rK zAfXRLH23I52}5@=!vh1w{>Ku(>yAo|b$3$5+bA;t$j)rDZ*u9Rg9@3b+ladD?ixPV zFT|@+?-*roHyf+_mvEQ>KB6?fqFIl6iDus=QtyFSU2~N3>152wF<~ElBtB!^s zxJcb*`^8MSHP75ra4zWd!e}uFqrolwu*PDuv4MdXfl}QrC5d-4%PJKB`ZD(xpj2II zB}-)GOJSW%w7QC24-LUsvs@vdh)`|?RRU=V!A}A8HR)%6v7-;{_i+NM8xy#u*fv`*vtsSDgOY}8*BRkaQ!iC z2y@DCTvLNBWj*eAQnyXPFKNnIpm~g1kA@K|;tqJN)K#tHNLAm=Qm{uDI+wrdatUf* zEVsNH4q+z%0Kf*NqQ+o6Pc)%TPF^~Q?jEMti(8u|`%kei-|THx{>@K9d5<2`Vl8I% zD6VtdpkfO3xa6vWm32JK6(5<;R*QzPRC)E9MFz z9BwYqha&|y6~fF~oNysFyOm=0rz7x!G!N8PNAg4^MFmt7bq;v1D*Bf5GiUjN3MCG> zg5`yZyj&DKoHsITW2t5Damp@Z+yK)FE&ihb6&0#<`v@03|dR zUX*j{6{%goJbKxG_E6aBQf&3FPiU4@U0s{Tw^i)@d-*p+|Ov#C;*_9%fw9B`@vun+LqxZk(z8pbuFs(XEl97`6AVE zj^Ms%C42my(pK|R{wh+a{yipXZ4&0$UocF<&H`J+$?8|MDZwfr=2ZKjdC3$C?)LiA9B~g}g_LgMyrc$@nH}^2B^9IW%eIU!y9No)m zr!7Np&Im6u!5A*lWF;2Wuc$MHI=^#Ro`(EOV1H0Jc})9!5FD4)N>n{mKz#(ySL#x? zjbbT^{s2X*E8`hT4cPwx5g_UAe^5YYOMj?}d9@#sTS;p?jDo-7%y)i_uHy<8>z?QY zIRXvI&_jdK#pEd(MZW7F-@fB2-LNyf55k;%?1wk=hjotcTiEy``JqS30 zP_?L_6;|9!0 z9tG1u*&Ui=a|s7dH`+f^vE-w^Xj}HU2+l__^0~ykUADmB9!w+ObQ0CT7W|T?3|Vbm za0u%_Q3XKSWix^Im&{?3=Pgt*#s2_up=vAL7iJ4iZ1ETe7KQq$o>3c?Edf(S?hzn> z3lsQ(ZWRw7+FPU!@&8o6n!um&{05ZlnHy2c@9^kAkqWnjJiB6t1;WdsfD$o=(W29b+7SGx)(tfl+w5N)W&ps3Ram%`-?&%lstyL6a0A4yI;gGWq$F3_+c$iX+}alM^T*Gi@vVieoK}# zQ+r9jm|e&gwEZKPCYgk&4gyhIij>U%0O=@`eus#NU3zewZ`W*f981ES#v{#52w@;D zA>@UyH!S78ANJ;@j{>sl=2;SoMR=}d22^rY4Zm;HVjv;b&=qG-@e&-R6`@+syDWuO zgJQUOUocUFvBq0?@O(~*T#6dLuKpOxZ;l|6FR_w~5PLnzPwH&Xi1bzJN~KpWDf%Ki zHgYCEF^`B8*#$eAd2v!vc4yp_i&)mJMOI6vJrg>$8&{8w-a3l1L)YDTsk#CkY}8$C zMqA6;cV7_=KomO7i+S?sob_6@V|%N`q$YF=7`5E4^3iS8bMNs2lmf(7Mk__<#BlYL zduKe`{ln(rZkSUuXT415-*WA9aHV3o){z@XXYSZEq7*XZ}g8RdXW!YdHS2Dq=2J@R&$Mq}v za0p(vzP?D_HS_~8^Q`h_eSZ`-VNdRsA)A4`giEe zRg@DFm5GRY%vSDGPX)@y699tu49X*hJLX`-<6_n>(F2Pv&x;-wPO&WDH3v;d-;Rm#NPQW|2fAIw(1@>@I4aZaL*QSS6q zIl7<^q z%PdY*t*N72{K24dZHoT@zM+jF04CL2(q!%;;VLHYzK<{qKy@3z)@lGi0s@7Dui_5E zk<%^y2i!{o5CaB}b=v*KbTtzTm*1Jonp;IYJk6qb6Gm(O{Yvo_UE0;WbF283RB6Vn z&91lC9m;A`DxdV(E#L@e+vdLE*a#z#OZq>O9>pz-TYA?QbqNL$ZA`4|{_0hUuqFgg z6;m}_GbnsYTHpp9!7Ct^Dq&)%97149bpZ%Q0=b+O0kcs8u2$k0x`}jSHIccP(2hf7 zO(Ly6XO0eW>tr`e!SYM)qQWn5$eN-pu=kov<~fRGJNld#1q1~sLa%lo`zZuGk6_Dv ze84|EypH#bS62+62BSrxT5*y92smEQtNE##`bPx^uA>aLX7cv(=2mQhmUws=-cSNv ze7U>kRwAO9cmCj=Eu4eHqj^AvM3L50@e6sHUl9esG)LRq$6*UWQHCO2B}yYotufC;EA_DlO%-RbN-Tp@{ z$jxynT6i8N6$D;u9Z_|ekeQJklo=+ zT9QauZYxu-*lDc;_Xe8!WJ^T3S;@0Utt+Gzw=C0%|$3Kvl{sI zoBE(1>_vBhCMdol+MkY6J12?stA-^ z^MAcXlp9PIvK3$RGOR)?mHgxO63hdPQzmP~#LARBwNCCV7YSfkt36d`-de#%N-RJ3 z;^jvj7B1DN^5cTn-4SiZ{ket*cnZt5cWX0K3y5V8xU&BMxx%5XVkk0v!Y@jBvKToo zr9=%vG$aRKZ~_N)8-Xe%-AqBUFfnoEf3CfO7|$guRYTXg=Ys%WC$- zwIc)`AaHYcG@+dJ{L1Sccu?P1jYlg^o*<0GLv_z38}l!lumx>`*W~k=o{$?#oIqX# z)drbp40vI!u~lsy%%$071ezQ-NV$KhWmqGyXWyDT!hL#v&(@s*Y zEnjF%(#5Q?>ivv)gNo)lFER7<{T3=j>InlkFbSz*>I*PL(+hAYf*~%YE<@@ed-D$} zX7VnCuC)Q&Th@v5bEHQI$`Gr?e>(PFpmXAs+a>uZb zq<<8B#Wbn|Z-2+}EoU9LQaAiC9z^Bc1N|&c^a)J1=rhaIy_C+y6|ikiD_6L=ciOpm zTG0~i#bQ+r05O#C2Qb?EY4P@POO8l`ei(n#62L)KnoQ^9IGHe0rrZyHWsP?ds`E}( zzqkg`1x~-5dWIg(JMIyt2*?GTR{5r}%n&==?56-qU5{}num%vryp=PdFe7*X;JHQG z+avG-w$y*$%sN$~MQ;|na8wlB!PaUFW5+A+ESl*BKOxBXm>hYkWNRt;Dp2TFEZ13$ zal)dMEF1;{80VNX7b|j0YJjvL*L*dF7TVcbw8&@qs{)88nPVKoQu(pHtYr6ZNK2mb(71Oub0{{R)Z7SsUM&C3>% zHDm%fT*|n)LMheFpLka>%W!EI)^~Mkwm1Efm*CC0Fazc^-FPkrt>^8R(#g&W54>&@ z`iWQus2Qrzy~Q1TaX{k{wCd|7Dcumki_4_T)sNj-1hBPGR6~z2Rlzrcm4e@|FrFy1 z+ei9HJ^}VaYii;n$F#1(j0!9o)$wnh*g*i}AXgthUSU=PI*qPoLD>=1BCHF!E}b5T zD)r%H3Yud>Fo*RyvKojAY^TQO8XY4nsawwBSc_c&B1sHn7Psx`oG3Ff9KdC`LR#kF!x%NK_vGOEsv+*l#7#jTkkqfMr& z7X92Xi;FsGVvUG>KkSntY8G4V9Tp(eH_?$LzNRuB1yE`gcd9-(7A?pK(9dw;vD_l^ z!9Yv~g2NUDlo&v4j?V@^h)D{Xx&xn>ClqLbC|O3y*Xp7~) z1yal=l*Ojhjc=wGu+9Pp{?Ulwlha12?|+j9a?mI+YPrs19ic0gf7EvT#~*N6whr>Z zJ-CX#QrSE&am;86!lGy_Cix~MrkI zZsui%<|W3?fn&bc84BgC+eda zz^tP+)FuLy09k6YnwMmaJ?@EgA<&LouDjP#->kJz1hXr(zSbj!q-Bf6S5r$20t)`$ z$axY_I-z_N)7%`BLj}xG435=H3QCDWlA154e9NQA;3{tOMP26D8h&IA3N}|PyjTj< z?QfPZ8w&?wl)|fZyOxo>V%RIdY$-I@GC4o7BQxR32pK$6I!h)QciyF`x{EmktE{3f8 z2*GpAcHf^|(jho76>Xu>Zk{m10V?)FKchI8WT$LY$_V9yNXwO5A5Jcy3Iu8mAnF#C zu;QAYDP>*D9X^6F4Vi`_-Ai>i8AYt?1389@fmcHD`u+a^g>*~a4rMH}j^i|fAbi;B z04~||TNG8Hw>SR)s7P#9O`(4u#AC1vr!PMn^C}r>n9vr2@2d#Zn@zY-4bbO`h7spN z+Ng4H!HmHQ_MolUX4=Gc2vJ=-GR66oenHjRgCmvL{=<-J9!B%fLa~T{LVzOJt)$)V z05^{8NEU{b+_kQtvC4)xTJXaSp=&{cC@#Ld!?MHyn5C+6_nLs~>?sqR4=2(RL>l0u zVe@gqY!t1XoVe$R(4ZI;5mp~2>LrO=0wfeFo=DpbG}}v-eAvNMDzVIbYvVjwjRyXv zT`sU8!u$i6pjHYtM68(U{6w}CT8zHo;VHs{ILDAYeEdbe2BFBg>V%!m05NPH`BRQF zakeE@K=?ctcPYdJcQWCL zGgvN!W|%rB5Jm|PJwpTk05oO1`XtlSn3?b+m(d;ENLd_1oMHuK9hmF*5AnG}XhdIG z4i){0d78{R#s2_N2uMEe?<<%SX{O58ceg)K1@MHgD~9UP0Tzk71u@)kaFJ!oz9MZ~ z@qnnyRxJ0Pb4LK6@^b327r|!1Ag(qrqwfyuDt6VYoMe?llYo|ELomChg~6+;?h27p zd4r>bvGaanE;gKkwSD1_J{YOF4<+Q9_UkFYKZ#k0QO%X7ZzRozu;u~I#2;o8JwxX$2&O9Opknp4esxCA`CZ*PoH5EXKX;?FyV(J)m zf@YzRC<_()mq^v63gb14+yap0aB4oFa3eH-?ZCb$=?E5`Rp5L_sj-+Xs&TCU0C}9; z$b-{(_G)GY#EcjgXrYWu?dAfUMwL?C$^hFfxumL$mR)dvs46J!m1LM;K(2kJv_{m;h1v_#nSl3Bc~|E zZMbk=U&&BJsJ|k{A%zM+78Ev2UzxS{8wxD1zaJ1hl%=R@_Po{f5%eyVTQDxK_>9=# zQMBYsXMz}jqKq2kn}JMHz`!}vY}PEp7_E9oa+Ol@McFM12Mnxf=Z-lFhFjWZfxC1N zg8;p>-QF9^_ZrF#XI}ncLR~;u>Ag1^mr;uR7pZyYjBr+1YZ#b_le$u>@y*i#T@pxm zw7mXJJt>Y?`Iu(0MSHvPaivK(LzKbK#7+`aw!*K+{zrqgR^)A*Ro(cAeHz3=F7NRQ z5F8SKAM?a5G#9{5F)0Av8}UxJ`v{#NwOrxol8LJ70QN}ienOSh!G;mqI%Zgs*;K=D zRmDnBDGFLmz*zqPtAw!tadFY3p_rii&v))!H_QNU(#o-l8)3aa5uim?xOCf8wAAws zl+E=!nhd=id5bj)*yai=(|<}{HVRT&`w36tfVvC+0C8N}jL6&a{^u%9Y7j&-W>11q zw=gkL-~x)xz9t@3&@$cQ-f{n^~hwe#(Ath~q)d!W;)2KW0bdzF^JP-7|?r-KAr5GWsiw4fSkYcmeX& zbZQ}VtYch^9KzHkHG%C%#YJg;JuC|I5}JUg8kcwR3z&Bo@iB=_Zd@ZEih*2l26HHQ zln$a2gYpS%gJw^fmKvA6ldO!R@?JA~TeI#mqgK5ZhN9kIL}1SX9nRc%m0S?s3&{ur z3?EUDIn=yyF|p&*dzK)wsw`>K3x*Z6EvLc##NiZM<0Jh+4gzGN*v}hd!^j4@lJ;9- z&R~Fj0r6VLjcTAC!6K{08`E`wuNC2r3aJfBjjUe6!Yt?lqudYdE<9;g`&H)-~BPqxmxUet`fh#S6^7>@mP}IVb!*1e=rd{zG zWyC`aLsbHPQ3oUomaw~xRE2Ah(C5S|Ibxv8O->I?uM>=-F!hFUHguNzN9Z!K0stnj zE&DLDvsO6TwX=Q9EK)?NX!1xpWC*v3s#d`s^k0bc98z1ZWylr)WqkhtUl1A2N~(7d)ZAN(s&ahChjp4+&3r|;KmoOLDww=p<)z`ww`IU| zu;t@V+(Jk;*2uB-Xu)*!!VzU?Gf_-HyyetoutSpGX z3Pt3On;3yUMvHFW`IQe3QMBamwl`9k zJ7ee5Ci77WDWzJX>t8G%bT(iw{{SNnLcqFjKFEC#_A4eatzJGShf|R?^zem#)>XtP z?E=8--cm#i9bLh&4@vlsV10{{YFfpA@zG8`-;CHC4|Lugu1oU;h9x0M3O) zk7KqH0XKz|&tl`@bt-cTdLS`kOfD)zMX-mL8Hm?OxstsF4{vzP5#pIr6~Oyq3l@QN_hrvc zQv_RqAQ>s-kC^iFEqK(te9Bfyu^&VAxI|hu%hnfT5t|Dk@rj=FaZ}HY{>QuXJd=C< z^p=fj7ScKQKA;R?%XY&acg`X1aOKf;{{V?VYExQ}qTOCbn5@i`!$JJY*PGTWAMP`3 zUIj)5ZNK}N=^#o?jxLU@h7{6P1>e5@W-SA5Z=dxjRExoFz%+&lWnJBB@0d%O6>?Ll zR&8-=&cBHGIFDjb_m|{Yc9W~8ZusgTLbE}-6~)~?BR2|Zm+R+gi}DO9pf3n3{{Yxc z#VNC?$m13fH2m!{RlQ3RMkX6|I zFT|*Zi#lom;*<-37kIMZ{E)Z>e;Tp^Kwh$u^IdP^14`Ct*<-uEf(CTRG!19p26!SH zDnjjg@Mj%M6)23*DFqrsf>^)z1Y`(!TY<3TD8NoJa9qUQEn%$r(LCO7v6(4H!nmz-@p}3OxKmc*<(#J7NXDf z=#~>VKXYKPL6NLL1z$KlAR;pWfES&>8i|!53~{Kpn6(H6?30KK$Fxl+U*=+s(!|k& zbiZhV;2S3WI{1a5FKucx@GJH$M?~VikNks_4$3bdaN3UJMawAKHaQ+F@mC+=JrIuc zG~bpud~DmR0^Wa(b8^g5kg(SjQ{03%bzF>5Gey{RenGk1Qc)rnh0!IJIyT6Zi~$+{{Yw%HId%h zR@w#n-R2?TIuVhIHf}PrU}{r}Sa?I)UTf@<>VzxFdKhFi!o?7IG}oH*D8d5B09q|E zc*gD@wWNz%Y+jti$N~u2u!y*90JcEGNhslI$#GN0qd2M*rULJoox@7ug3T(5iE^Ce z+p?dR0!lft^$`gQD#G1hv1ygi@JJ=f9M|F~gx6}q8R!W@?l#S;YTWA{Si^Rbmo#pd zv}7vDwIBZg9(=``a~=IfZ9c3;;_^fWFtA()u;o-IbWFILVy!zUx`6rKqomX0Jh(@@A(@lAD$tJ zh#^uSRyA?(d8ShU5{E8*;fb^~)(XZvKqI2}d$FpzuA$|!1f^`e?5H@^c?aoN$8#5+ zw-?SV{y3TYHR`u)3KNHXseA!%f^0Ab2;}EZe9P9bz^Dq!@tj186%ClC?u6pzu{7LCSmFP^*`Q&LZA8mh1LcAqOC6AR@8$LWlSj`zsQmqTkpY z1jG^CU@qDJ09P}?6mArUSrCZM^&z|l%=l_@IV2SFqe;sU_RT!C70kh<^mYkO@HdcV1148SPG=+ezr;9Cj0RV>a3 zH%QQC#}n&7U52nVUopefRHFk&V-eHFn+qIA+Q%PoMSd~{0e8-hSQzDJr~ydUGPdc8 zDvzY!MH?EWV3r0@LbU_+_bB{wHr5wqpx0{*DDQK3mO~PNHVFolug`0b(wk(XTml~M z^A%$tuA`-V#cS2#J;I2hD=J=O0BTXiMJ^}0m|=eb1rmezTZaWXiU^A-624+4$(!^T ztJ?=9wF%*dqK-536d589uS6E=A>*DW8*vy40^Up!g;y=rSv7&YWz(p!D?!J+R7%1; zTNW_XIX4Be;!{&Lm@*G=r1t3P{Eo)qwr?CKM6s!MzLKYp$%yO&oNAu-S2VfiRa<3M zQY%c+w%yo^?UhhE*AtMR?PXAAzzbfeP@Di3GztafubS?2e5#u&t zYiTjBSX)(H@-XSLDxX>D`!cei0nF z#O7WhOa|JcFs5r&1A}FwHSE#6QpJiP4~6SY!VgH1lxH3N!!73NLWC;h6w@k}M$r2S z1>0j{vaaz02e7ipvTC8asZ0L=C1FZ2DN4v37_zk_0mz%Z89nlc2GX$>=J9R|tp_`b za9+%{g)Qu0hya4uBv+gJiZNK^3jCW*`kcj=JV6T6AG`kmaDsGP?U*et1$9!={3Q&t zd_ZV(Ifo#haNnhxXMu}F%I=t^lGyZ1-=*#}jcJZ7ViD7DP-JF?Y`;%*S&q>oOmh}* zD9+rvT~i$ZuoD{$ z7seTQ7%clAy<5fs7+sh%(bX%<~@Z69i7*euT7#*H@2YC(%h+BCeW%Pg3B(LcoBx4ai7_F z+39VZ_=iaHhyMT(*#R!;9T;!wuuZClTos(rtBy_tLjy6~LR;j7%RVjCZH<1@P4t zZa+uD_Zo3<=x{jB)}viUmS)y`FZqJ!BC5~uZax>JBET{xckeBct)#@@TE08D!&#!Z z3yniqLW*;oE*Jr*ORwB~dAsuxBDreY%{%_(rzTh$ zA+vVe5THDi>C7yG^U{pDENlCeez-!M>1N&dSU%Tg0y(m|^AtkPE&!p(;;Av*c@=5U zSp$F?g)=xcYd=?5gHkG>3#zVrrU3z9usqenjY5V()tD)9h=fM8D5j3PyKNVLu|?{f68EI3dr-r*H)7#XD= zFrO0m)Rl3j?f2u_F#!PO(dxK-ySU8_K@DCHoc+p7w5qaD>z`|d3afz?MZDdAOfWi{ ziqlK>i$Nu{2Lpb0&Li|O0*a*0wlD*Tn3Y()hkRT_9hfw#Q^S$(9c>V?t>uc0tpT$4 zeU%DXfFRpg6t|}Ysq$qm?4PxP@0syFJvPsz&b4*0&x!M2km6S|@N9aPDU>SZclIC_ zL>(d-CQBxeam?2{iGoDhYq?+jpbjIp{RKIB#Bu01owAq_Y+@AoWf)-xbXZBkuyd1K z73z|**HB~+cNW6%#5vS4C<0R~7XA;&*1O!v4TXNS^DL3PFvq^)K|r88xV-R#@-fH^mXffv>>oqFAaBR@bMTn}jJ8r2$l|aF5@-aj@fjFI3fj0dF0U z;`xfuP;@?ga{89iqk-DGj~;D10-k^(b@fwTOz-IvJ0koMXm=~C)$z~&ph|02< zF_r}=h&icFMZ5h^coW?W`fF1An=>^8Q=g1PaR}c{aZs`fACN!XNeKqjHF>w*1|ZHu zMhZTmq3DCK^hs|qusmQ+FWp3Bp=3FD5i3*Pa|d5Q6&Spk(?=!0l#^|k4Ea%BEU zwAh5I$Cm#9uHnHT4jOa0dMIh|kvcP;J)k)uMXlO94-&0xoCF%!ONvow6Q*>dqM`*D zSz{94I{A%Ms?z!ww*!{+5gIa}4Jx7Gue`<4P8OY|#X8`X*zD1g<-)iwmyn(j1+{Z}Sx*yaZ{`dDmC^c7 zm~?xBKj{=T6rAi;#oScS9m{>7=fK!WG?gZxj{27OTmM>BE=xC&-?h6L{f_*Xgtux zyw;QtBiV@OprRu6OuesKHljj&bM2vGGRIGoEhZnRF)8gvyy` z(IphPr;p)|(qP;$7+zj)d4;`F5kbw=N_Y$hQc4JzalEJdjz%bB*unWAZAcp$yxRql zU?2cstM2B0$En%mRTz~`H`6GWN4M-={{TxlIEtIOcFM7$W~DIQFZG`hG>qAWN~!FZ zGaYZZGK!Q=kiH5Z6J-K~0cuc}WFYs6MY)D>gLst`?Htn@_YfzNEP0mmDR)p=2D0W) zsHTi@xU74_?PUdwrr-KpQ|HPdT0e1?u8!yj{r*cFrgCkPnv0Rb1RYfmv`GcZ_jvziisZUWe z0*yUzy;Q4$Qph{@nE~ZzEiCX{4$zKP^)O(}yfz3}r5f><;wh+*qATAW{lJPo%Cf&T z4hj@#bAgoVMT;M$ue0&Hqsj-x$!nhlx|zM@+C9rRM+eW6%=iTEHxddQ*gp( zX_O5d#G5mg!AKhnjAI!QgMya8gMgbMvyOV6C_>o~1&m1%Y=b}8vz7xDn?GWxvVi*` z)inlHg!?b>h7@5u6TE%Qyg3m))Xa&376x&@sd=%V_`54^$LXAt(2nm=TLTv01nJ) z-?ScDCAbzLJg^t8X_!*zV$!$b?j{>3>A-$%KVveeig+~f1y!IyVcUQCFR7)fBU~Rc z=Z&n|X>F`%mcT%44KIhA`GZbVxlR7c7CnpxtKI}9M}v#b{l6pXL~D`)tMHLhi(svf z-lNq>rf}oN;lLeoi}t;44`5*4lh`nOUol-HwLMOmdo>Uu>fvgIFE92}9oFDfW07qF z(EFbAX4oaiQiY_fh4V8DZJQ=z#kuyB?F|<)@e5fvlvCm=qK!n#EmQ?CZm+ntXSkjB z1q!ONzlhqOQe1_#sZK=hXL)3_DPDDdF{hGj`^zoNvgw<*Fie4c#fP+GEji9nF2RNC zHs9o-a@~mS1HUsDQL914-}MCswT$;b{{TM`yGq-f@2?P2q%bN|i|YR26q~!{L8hJV z;z~X*tvV80d+W?t0j$Z^A?GNe8;0mAx{cb^)VIfUa_8Ct-^J+Qr4CWqg0~!KZ3G>K zhCF_<#_ox0;@n0Dt;0~U-tG>i!d%iHYmD)X6uS^sHHti3zby*Dd@z8*`El<2%rQnbZ51&7!qHX55$22CzcTzs{9=wG_n29w z@jQsWCxR{6J(Jlj+_!AEcKU_!72Ns%026e=&7)kxMsb=CMds5wNI^s)vS1I`7Zm{B z7_-N`5n@z4j!8~fyoQJ?70eY*B?No_0FWv;X%&L+68DKq!LJgDcN8f%q99tH7DCyl za{flA$o*LkTFOMr0B*tIEd=uzfZBx63wL-1jqYUTU|3uM#CFW;48*rn**%}L**%ll zHxP3YYcttBusurk7u3H~%{StMz>>8~mPW=89bUx&Hthpb|JJBqqYP40h)P zEL?uT#BaY!;(H9WY?E0pk*W#h!SW6v>Ai5xMgB%|VAsXYGxhHuc(HfKJM zcRl|A!9V=ZZ%ul0{y#C-gD+1AwKloAY7l_Atwi#BB)wILpx8_TE0ygmF><3YOt2QK z5nBj!Zd0;V?oq@`&ru>50>LEh?$3?tKMURO} zhf=M#Dw^{Q!3OFGSzeBkxtZwuie;meZUZ7;2z*2=O)d$ELEK@phNlp|!5QAP6tePt zKxlKD<~hjB08;E{B)d)}#A_Av7lk7T=W#3RW2gTB)#Ka$0K*#p0PwoY{#ty;ZB$!D zW5tq(4bpgwW+IyTWl0PGnuWe)tc9_06AYn@nqqbJEi%MdkJvU6=E-zx11tXk%rh_C zr);6RSO>H{2scp-E+N>|x3}&fm+=_6K(31|YnuN6@}ShOKDyWc0EJ3={{SWuwGInbAJ{TJ(FzW%`j39+wE34`OeNH1%qv@g zEMIdA=6H()ikIBM0a$}(SH#G%P)A;f4H1^cVn#`Jkp_nlV`(|B5C*N(XxsBS6EDIU z8{l&mi@IfAo>bf=Dov2Lbv1~Cxy@3?P}72Jm`_qBN#K;QtZRU8Vig+iAc&CaN zYAR(ff@0tNE70@n?dek*^;Wu1nMUDvw(eCx>0Pb+?3G z(khW6I~L`0Rf7z%2snUYT)?c5F;x;-pZaDb+4h(7^(t)pfkr(!iiMx$i-~1=Rb$i_ z1n4DK=q18)TSVSn>sMv%6 z&Ed%tbp@o&MbTt@k9cUU&Nnn%zL*CBqZQ_V#s2_un%-r{F(A=!ZMUgs54la^Eii5< z1x*oINNiEJh)zda7&ibX00|e|cDdJ4VXB-gB06BNELPt)QEiV9IAOd!lTXZ9)ds(2 zAykicpo@#tZFO%Ln_G2c!6)3Mcb;e57B6?qMWx@gMA}wbzNOlNtEr!Oj?@!JrnXhN zRz@MLsFyVwV#Z&PgE&vAqNJ%VTvHO4juh>)JT906StCnMX1qjrfAp^g3%j3!XOK-OlK!%G&%yCC5wy zOCDh>DaMd_!(rgYP)f^D?QSJ=WQD!lzO?y^T7KcRA8}k#z2;44g96Zp^IEX0_m?)1 zCg~J)Gwv_R@fF(i$gKR$w0ZvkFbu-2ueon*x4B-HV>A(Ds#>3WI1MsCOGkZ)NiW zCPvm8sO;A$IsFlWDQB|wxjfE- zt}#0wL=d7v?N^DLc!e~Vxn7?C0N|DX0OjUypGvt-sg&NQfr7Pc_@DfUMiS|RhBEOT zq#dNz6IBfpaEP zlj>=^%&41!Pt|a)E!z)~W-tLqr?kx8A%Y2#;j{>cbbd9#47-|*c|kaXAu0RZd4rHt*LZIJyDnl;pfG1NHp|Y+O-%-`(0Bj=6vLNJvWq}@M8?~3RNlb_bBJld8L89%PjXwt$alJY8C^NKug~rqQ-PYybdZ3#-)oJ?ILSLD%j2x zc9BYfAQx9zJT^pud%=$Y{g!)6?@R5MZ*p|$ODFLQlu!3{#0<7~$h$Cb#37RN6xBdA z3vx@=67p{43^1o6?inO$ACjF$?W{oJA(#fzSB7EF_m!r?gYfF!u3?;jj9zM#UVrwK&3Y?)+U|K#swpY9u6aJAflMb zqnOx*bP}s6ZI2-33!{Yt&R^?^gpBb~LaKOwW!C)|gF`F>%&36x#I^}(sNqb{P;)6R zpbcU>n@?##3&%5}_o#>l63auWRBP&0L#gW3n_|B)J2s&&@WIS?m6MaV!&vEEt`z6 zE}$(|Y%hsh)U{N32pWV=FA$vsFdNd4&LiR&;6l5?1u#R8nZtMQ4bN;@uQIG8D712t zWHNXnnIIK!s4#8tLxUDYXLjZI8DG027wx}u^#I9LKoewRh#H+lsgkG0CG3|))C&@T zUl1dgHw>0bVPlw*!23twjbO>*Vg>d=3M`OQP*(XRGRxvQ8hN5qBj%!52XSq|uOvdC zudEO1P%Q>$t7O8#9w_f5RN8X{poA{2`j1r_M^g~_xn$M15}BlFff!d13@3+^(vGIJ zA8AQLnT<>txCDs?Xl&sT{27U4U>ekBxQ5;C7`p^B7e$V0pzf*_&CF~Um}mV#0b(pb zD;75CVOkFmUxP8eav%>r=pu(1BMLF%01wNk+PaB%UvL|hG=zr1 z7?1$OHq6-@?lweKLmgL;uKH?RiKmHG!=DjLX{fj1GAZ)JC3@~&fkT)8C$w8XB^Gvx zpf>8D%00?D)Nz{hZ;ipv%tmI()ln6Km9%N<7eAx99u zxauOZjPWydDQOti$QINeDTx^VX-w%D#Arf1ARpLLADH`G@c_{Wuf#ZRo+S%{xJw!{ z#zj@sDE|O5jtFExZ^SH9GUMIR5$;;)M+B`105As-yNpSMU{(owt<0%5VrG{eYU&B0 ze8JCdvn`z-AV4+ZCPGl}51Z*uB#H2+6S+-wN;dcY7gmvu@mAQv&gb8-~6l|7K ziLoz)z>e*CmMkwYLfVPZ4)adn;_tD@Y<`)>A@KQyYV!&I0NAfBe9KCrr3Oh?xkG<* z&4H|+Fm*R75u+HW`GaL;3%KEc&BN4wlDoJn;S3L&h;&;Tp%lx9>Z{X?J0QL|;-@jG@9D(YU}bzy=Y;y2Ls*@Oj~t=mZ{7HM z6jWdqL19anrejnThOW=qO86rzxJSV-gmoUg~ z9TK<$xYbRQN0cxJ5pJ3P0L?Qs5E*GhH5?VwrU|rnDh!n3J%MY?WtImJ0-SF%2;l|Y zJ=u7UH<(P}4|a^Zn>QIJH!}ovj!xwr`c*11fQK<aBIxIhGB;h za#UK(EYSy*)KJ9V62?6f+`UBVv2fg|1WkhzU|$}FTIL5BMGx6!iI+m<34pluN45xJn9F6abS)aH-A@!y z+zv@`ecJrRSxsGBOZ%DfLLot3CO)OSkfRVOL=nP?Vb#hjH1QF^=3ela=2w_0reMAj z>>&M1mKBdhMfEXcK4!mYYKQDAWJ?kIz}4N{U`LoVNE8g5%D5kJ1-r~>f)yZK+F>kj zak}DzpsM~Nyt;>yU6i>~P_BEFFcY;vE=Z=w*Pva2%osiDA|m0kAhueF`mNqxL&Ve^ za>M{@8is6l0KqXv-M~4=O+XG;ihz5)qLMuG17L>c6Y&~3J>{apq8!I#2UUdnnMyZ& zsu>pTyvJGEw4nMX$qI84a|8{;<^iy(;#h$GMx|D`La}~jOtj z5#}U%_@YunND2*zn2k_s60wdDm4SMJHbp3hK!y}x8xr21a0oy`(2%mmD&XCq6HgZz zP`pKQYFdm$8q~3AEMdUHy6O$g#e!M?0N6h=<_4o&&SuJqrk5Eq*!w{;Ii;0q6tUD| zV~8}Ng>WUfAD94$jY=KLE}kWuhG1KXxQOJ#bzH<5ii)KedrUi)>(}BUsxR7ZE_3U8 z)T_CK!BqH!p(x^vOSb!&u*1lgDD(pY34ajmC4$0l;)xAYo-ZL%;1;-olUQ#gm5I>xx-w+K*<<^=-*Y3~C& zuQO@HTXcLx;TCEu*6Ik0YlCDm;y7*>XNc0cN+GY5ZPmb-DP2YE_mnhTDps$S4Bt^B z%xSfA0fH*`%rr+BU>i!0V1#pa^2UYK5UPU|!Ge?)M=KAa6=O4Y{{SACS^$Ar#8ATn zt&8R{bv&YrdP|L9^D3$F6j8aZj86nJGM)(SFb*N1(lO%%Qi}G8%DUX%Sn~&>W5mDx z5atnE27F3wQ_J_3xOAJ&NkgeG8rf#7gOg5ZwI*H8c)#pRmrV5wYB6hXrgv4hm1 z;xy8);w+$pad8$?C%6H!{v{r@9}!o~Qn%E^T-}5MgBO`j&f-;wypXZxQC8p`dqW`( zfATeOLADuUTv~<x`K=|xC+N|(9O!uB1%QPv1<^rLfh!d+iBS)ohMm!M`4A~S@veaw2KzFXx$QW_%#Cg(PI(~Q zywv{ypu&Zl%;&&UQr#>g#|XnLM*0vzo+3Dd(wDJLLKT7q!Sw-fd=i!trP$0@u@Qe^ zWh4NlNozmxkX5mH^O&z1+Nh5Xg%4gpbGx&=j~K|x9ciL>zb zexCch@B90G&hMN*&olcod%iPs%{A9`&CFsi)_2`5-hKw~-i40V-+C+_rUTCm^+XF zKvq*iTS^W9v?bIbiaJmU;LiBp(tnpSa!M-HoNQ1IHcoDE4h~MJAP0{il#3e5CCI@o z$i)XhIe4g{P|n|(19%L;gZ{F61T--F51s}wZTMd{-P!&44-UAi#H0O=3#gg{DgG}X zK7j4WfA9f_5fc8ALAdiP5%af&AOsK-|C$RE#7KYI@j;CI2a|#rE%C2;QNXFt|6s5g z!1#kf2w?uvLko8JB%%T4U>h@tLqUuM;#d&JC;qi&a1bZ_!37{r{DUh%4CMXs1^!&kh;z<8!M=ts+ z4h`U7lt1l!pbY9iwm_9#cx0FN=z{S05{|gXg3|0?&_q2T%g-`p8wy|-Cnu<|Cs*Pcy|W* z_>Rc!2*_-uZTy!BdOy*Q&h-YY2bvoneUJ3A|e+YGiN~{+vcsu#WlA6f@ zf-o?N9ukv~GCX?B$i&Re!^_7nAo%2|l(dYjoV>b*rk1vjuAZ4W%)-*j+Q!w*{e_38 zm-nmSkkGL3h{(jG&JSog1JMa26Y}fdV9;@?eJ3<^nZhKZ=U!ttx^wNfXaCO}3;KWM z*}ok7w_hIsY$OD5@sREVV!+PJvqHdowpcWItSc!tWhaY{H@2y5sFd*Y{R>ind=d$I zsKk8|eIzR_1@MtjFcsZbQ^OP53cT;fvu%twai#e6;uc7STcw3? z_s@Q$;lbZEP3l$jL5YQk3pH9JK;2m?07m>JTTUFO_?r|#sHFcwT=6q5m0Muczps>V zSl!j?tKCmiF|K#KW>e>WPk8p;Q5k4wctZI+L+PTwX^9nkJBp?>Q$$xBAo%VuGri>w z`_#-uD$U=IM7%4H`pjA8*(^efOzjR+u=niiwn7J|C)hayRY8z0wdbZKEJ-;zv%M&Q zOg|s;tA5!LXg`V+@YEW;9P`znjRQcuD}MjT$o>c~?pu^e+=a=tlD83mE!WSmTYzQ= z?OG`A8hsk}bbV*sv;Ps3AfIM2Qz_V==OSYyK_kB=^u5GmGLV|Ars8OU0&)X}};H@7Hi<&nUoi#!WQVa*_v)&Pl zYW{?1$mU2g4k`JF52k}qC`6#L5+cNY8Ud^3)Y#Z@HYVgpS#f&ljN@F3Gfv_Y!kT#8 zpPgPt#*x1$SLR2eQkNi;dBzlYkCPDz4LPn_Agub4d`^}MlCJlOBC{ZA{Hved>au9$ z(UVA+moIABe?|=Spx*+e&bL55=^6e#S;EcS`vOP!xC*daU=p6hj7HC4Wuioqmn1cc zYx8VnQn{KN4&XL3pwULg<0n4vAE4+f159$SqEs)kVkBW>H*6-W^aSkcYkI=^0 z#ApmHzp&(fR}|F_qjkL4`MO#oR_rF_{c8`D%2zhOwRAn4JVo z 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 z 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

      fXxpB-u)Ungdql8O|5#g3q zz*dQP5A_OrmZe8~$yX0s3B%0r4|fK@KHzDH5zJcr&k~N_@+tyq41<$_h`T}im*^PKRGMFwo2pnIFmk*<0kZW99k(MnhnBaE2z_I7tuqw`26z5nTDvIHG%hACd}7fo>L@KCe7+(Yx+NKv zETLt_a9l7M>X7VJD=uL+mu#~(xM4rdE>$NGq*3N904dDASU3fJP TmBq@zUkngMyly=}ekcFg+z$A& literal 0 HcmV?d00001 diff --git a/docker/.gitpod.Dockerfile b/docker/.gitpod.Dockerfile index 2f7099a565..4fbc7be001 100644 --- a/docker/.gitpod.Dockerfile +++ b/docker/.gitpod.Dockerfile @@ -19,8 +19,11 @@ RUN apt-get update -qq \ libffi-dev \ libssl-dev \ python3-dev \ + git \ && rm -rf /var/cache/apt/* /var/lib/apt/lists/*; +# Git needed for PROJECT_GIT_COMMIT_HASH variable setting + # Needs to be installed as root RUN pip3 install adafruit-nrfutil RUN pip3 install -Iv cryptography==3.3 diff --git a/docker/Dockerfile b/docker/Dockerfile index a6caa24e44..0a4f69f0cf 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -19,8 +19,11 @@ RUN apt-get update -qq \ libssl-dev \ python3-dev \ python \ + git \ && rm -rf /var/cache/apt/* /var/lib/apt/lists/*; +# Git needed for PROJECT_GIT_COMMIT_HASH variable setting + RUN pip3 install adafruit-nrfutil RUN pip3 install -Iv cryptography==3.3 diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 5c6af93bb9..acbfba18c8 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -406,6 +406,7 @@ list(APPEND SOURCE_FILES displayapp/screens/FlashLight.cpp displayapp/screens/List.cpp displayapp/screens/BatteryInfo.cpp + displayapp/screens/Steps.cpp ## Settings displayapp/screens/settings/QuickSettings.cpp @@ -414,12 +415,12 @@ list(APPEND SOURCE_FILES displayapp/screens/settings/SettingTimeFormat.cpp displayapp/screens/settings/SettingWakeUp.cpp displayapp/screens/settings/SettingDisplay.cpp + displayapp/screens/settings/SettingSteps.cpp ## Watch faces displayapp/icons/bg_clock.c displayapp/screens/WatchFaceAnalog.cpp displayapp/screens/WatchFaceDigital.cpp - displayapp/screens/PineTimeStyle.cpp ## @@ -467,7 +468,7 @@ list(APPEND SOURCE_FILES displayapp/fonts/jetbrains_mono_extrabold_compressed.c displayapp/fonts/jetbrains_mono_bold_20.c displayapp/fonts/jetbrains_mono_76.c - displayapp/fonts/open_sans_light.c + displayapp/fonts/jetbrains_mono_42.c displayapp/fonts/lv_font_sys_48.c displayapp/lv_pinetime_theme.c diff --git a/src/Version.h.in b/src/Version.h.in index 6ff5938e20..8cd39c96a0 100644 --- a/src/Version.h.in +++ b/src/Version.h.in @@ -8,11 +8,13 @@ namespace Pinetime { static constexpr uint32_t Major() {return major;} static constexpr uint32_t Minor() {return minor;} static constexpr uint32_t Patch() {return patch;} + static constexpr const char* GitCommitHash() {return commitHash;} static constexpr const char* VersionString() {return versionString;} private: static constexpr uint32_t major = @PROJECT_VERSION_MAJOR@; static constexpr uint32_t minor = @PROJECT_VERSION_MINOR@; static constexpr uint32_t patch = @PROJECT_VERSION_PATCH@; + static constexpr const char* commitHash = "@PROJECT_GIT_COMMIT_HASH@"; static constexpr const char* versionString = "@PROJECT_VERSION_MAJOR@.@PROJECT_VERSION_MINOR@.@PROJECT_VERSION_PATCH@"; }; } \ No newline at end of file diff --git a/src/components/motion/MotionController.h b/src/components/motion/MotionController.h index bf644812af..3a238262a7 100644 --- a/src/components/motion/MotionController.h +++ b/src/components/motion/MotionController.h @@ -8,13 +8,13 @@ namespace Pinetime { public: void Update(int16_t x, int16_t y, int16_t z, uint32_t nbSteps); - uint16_t X() const { + int16_t X() const { return x; } - uint16_t Y() const { + int16_t Y() const { return y; } - uint16_t Z() const { + int16_t Z() const { return z; } uint32_t NbSteps() const { diff --git a/src/components/settings/Settings.h b/src/components/settings/Settings.h index 18c87fd4f2..4409425be4 100644 --- a/src/components/settings/Settings.h +++ b/src/components/settings/Settings.h @@ -86,6 +86,14 @@ namespace Pinetime { return settings.brightLevel; }; + void SetStepsGoal( uint32_t goal ) { + if ( goal != settings.stepsGoal ) + settingsChanged = true; + settings.stepsGoal = goal; + }; + + uint32_t GetStepsGoal() const { return settings.stepsGoal; }; + private: Pinetime::Drivers::SpiNorFlash& spiNorFlash; struct SettingsData { @@ -95,7 +103,7 @@ namespace Pinetime { uint8_t clockFace = 0; - uint32_t stepsGoal = 1000; + uint32_t stepsGoal = 10000; uint32_t screenTimeOut = 15000; WakeUpMode wakeUpMode = WakeUpMode::None; diff --git a/src/displayapp/Apps.h b/src/displayapp/Apps.h index 936a3ae825..09a2018178 100644 --- a/src/displayapp/Apps.h +++ b/src/displayapp/Apps.h @@ -21,12 +21,14 @@ namespace Pinetime { Navigation, StopWatch, Motion, + Steps, QuickSettings, Settings, SettingWatchFace, SettingTimeFormat, SettingDisplay, - SettingWakeUp + SettingWakeUp, + SettingSteps }; } } diff --git a/src/displayapp/DisplayApp.cpp b/src/displayapp/DisplayApp.cpp index 3a20c76695..a6c4a3ec9e 100644 --- a/src/displayapp/DisplayApp.cpp +++ b/src/displayapp/DisplayApp.cpp @@ -25,6 +25,7 @@ #include "displayapp/screens/Twos.h" #include "displayapp/screens/FlashLight.h" #include "displayapp/screens/BatteryInfo.h" +#include "displayapp/screens/Steps.h" #include "drivers/Cst816s.h" #include "drivers/St7789.h" @@ -37,6 +38,7 @@ #include "displayapp/screens/settings/SettingTimeFormat.h" #include "displayapp/screens/settings/SettingWakeUp.h" #include "displayapp/screens/settings/SettingDisplay.h" +#include "displayapp/screens/settings/SettingSteps.h" using namespace Pinetime::Applications; using namespace Pinetime::Applications::Display; @@ -65,7 +67,7 @@ DisplayApp::DisplayApp(Drivers::St7789& lcd, notificationManager {notificationManager}, heartRateController {heartRateController}, settingsController {settingsController}, - motorController{motorController}, + motorController {motorController}, motionController {motionController} { msgQueue = xQueueCreate(queueSize, itemSize); // Start clock when smartwatch boots @@ -73,8 +75,9 @@ DisplayApp::DisplayApp(Drivers::St7789& lcd, } void DisplayApp::Start() { - if (pdPASS != xTaskCreate(DisplayApp::Process, "displayapp", 800, this, 0, &taskHandle)) + if (pdPASS != xTaskCreate(DisplayApp::Process, "displayapp", 800, this, 0, &taskHandle)) { APP_ERROR_HANDLER(NRF_ERROR_NO_MEM); + } } void DisplayApp::Process(void* instance) { @@ -85,7 +88,7 @@ void DisplayApp::Process(void* instance) { // Send a dummy notification to unlock the lvgl display driver for the first iteration xTaskNotifyGive(xTaskGetCurrentTaskHandle()); - while (1) { + while (true) { app->Refresh(); } } @@ -213,7 +216,7 @@ void DisplayApp::StartApp(Apps app, DisplayApp::FullRefreshDirections direction) LoadApp(app, direction); } -void DisplayApp::returnApp(Apps app, DisplayApp::FullRefreshDirections direction, TouchEvents touchEvent) { +void DisplayApp::ReturnApp(Apps app, DisplayApp::FullRefreshDirections direction, TouchEvents touchEvent) { returnToApp = app; returnDirection = direction; returnTouchEvent = touchEvent; @@ -224,12 +227,12 @@ void DisplayApp::LoadApp(Apps app, DisplayApp::FullRefreshDirections direction) SetFullRefresh(direction); // default return to launcher - returnApp(Apps::Launcher, FullRefreshDirections::Down, TouchEvents::SwipeDown); + ReturnApp(Apps::Launcher, FullRefreshDirections::Down, TouchEvents::SwipeDown); switch (app) { case Apps::Launcher: currentScreen = std::make_unique(this, settingsController, batteryController, dateTimeController); - returnApp(Apps::Clock, FullRefreshDirections::Down, TouchEvents::SwipeDown); + ReturnApp(Apps::Clock, FullRefreshDirections::Down, TouchEvents::SwipeDown); break; case Apps::None: case Apps::Clock: @@ -245,7 +248,7 @@ void DisplayApp::LoadApp(Apps app, DisplayApp::FullRefreshDirections direction) case Apps::FirmwareValidation: currentScreen = std::make_unique(this, validator); - returnApp(Apps::Settings, FullRefreshDirections::Down, TouchEvents::SwipeDown); + ReturnApp(Apps::Settings, FullRefreshDirections::Down, TouchEvents::SwipeDown); break; case Apps::FirmwareUpdate: currentScreen = std::make_unique(this, bleController); @@ -254,54 +257,58 @@ void DisplayApp::LoadApp(Apps app, DisplayApp::FullRefreshDirections direction) case Apps::Notifications: currentScreen = std::make_unique( this, notificationManager, systemTask.nimble().alertService(), Screens::Notifications::Modes::Normal); - returnApp(Apps::Clock, FullRefreshDirections::Up, TouchEvents::SwipeUp); + ReturnApp(Apps::Clock, FullRefreshDirections::Up, TouchEvents::SwipeUp); break; case Apps::NotificationsPreview: currentScreen = std::make_unique( this, notificationManager, systemTask.nimble().alertService(), Screens::Notifications::Modes::Preview); - returnApp(Apps::Clock, FullRefreshDirections::Up, TouchEvents::SwipeUp); + ReturnApp(Apps::Clock, FullRefreshDirections::Up, TouchEvents::SwipeUp); break; // Settings case Apps::QuickSettings: - currentScreen = - std::make_unique(this, batteryController, dateTimeController, brightnessController, motorController, settingsController); - returnApp(Apps::Clock, FullRefreshDirections::LeftAnim, TouchEvents::SwipeLeft); + currentScreen = std::make_unique( + this, batteryController, dateTimeController, brightnessController, motorController, settingsController); + ReturnApp(Apps::Clock, FullRefreshDirections::LeftAnim, TouchEvents::SwipeLeft); break; case Apps::Settings: currentScreen = std::make_unique(this, settingsController); - returnApp(Apps::QuickSettings, FullRefreshDirections::Down, TouchEvents::SwipeDown); + ReturnApp(Apps::QuickSettings, FullRefreshDirections::Down, TouchEvents::SwipeDown); break; case Apps::SettingWatchFace: currentScreen = std::make_unique(this, settingsController); - returnApp(Apps::Settings, FullRefreshDirections::Down, TouchEvents::SwipeDown); + ReturnApp(Apps::Settings, FullRefreshDirections::Down, TouchEvents::SwipeDown); break; case Apps::SettingTimeFormat: currentScreen = std::make_unique(this, settingsController); - returnApp(Apps::Settings, FullRefreshDirections::Down, TouchEvents::SwipeDown); + ReturnApp(Apps::Settings, FullRefreshDirections::Down, TouchEvents::SwipeDown); break; case Apps::SettingWakeUp: currentScreen = std::make_unique(this, settingsController); - returnApp(Apps::Settings, FullRefreshDirections::Down, TouchEvents::SwipeDown); + ReturnApp(Apps::Settings, FullRefreshDirections::Down, TouchEvents::SwipeDown); break; case Apps::SettingDisplay: currentScreen = std::make_unique(this, settingsController); - returnApp(Apps::Settings, FullRefreshDirections::Down, TouchEvents::SwipeDown); + ReturnApp(Apps::Settings, FullRefreshDirections::Down, TouchEvents::SwipeDown); + break; + case Apps::SettingSteps: + currentScreen = std::make_unique(this, settingsController); + ReturnApp(Apps::Settings, FullRefreshDirections::Down, TouchEvents::SwipeDown); break; case Apps::BatteryInfo: currentScreen = std::make_unique(this, batteryController); - returnApp(Apps::Settings, FullRefreshDirections::Down, TouchEvents::SwipeDown); + ReturnApp(Apps::Settings, FullRefreshDirections::Down, TouchEvents::SwipeDown); break; case Apps::SysInfo: currentScreen = std::make_unique(this, dateTimeController, batteryController, brightnessController, bleController, watchdog); - returnApp(Apps::Settings, FullRefreshDirections::Down, TouchEvents::SwipeDown); + ReturnApp(Apps::Settings, FullRefreshDirections::Down, TouchEvents::SwipeDown); break; // case Apps::FlashLight: currentScreen = std::make_unique(this, systemTask, brightnessController); - returnApp(Apps::Clock, FullRefreshDirections::Down, TouchEvents::None); + ReturnApp(Apps::Clock, FullRefreshDirections::Down, TouchEvents::None); break; case Apps::StopWatch: currentScreen = std::make_unique(this); @@ -327,6 +334,9 @@ void DisplayApp::LoadApp(Apps app, DisplayApp::FullRefreshDirections direction) case Apps::Motion: currentScreen = std::make_unique(this, motionController); break; + case Apps::Steps: + currentScreen = std::make_unique(this, motionController, settingsController); + break; } currentApp = app; } @@ -349,8 +359,9 @@ TouchEvents DisplayApp::OnTouchEvent() { if (info.isTouch) { switch (info.gesture) { case Pinetime::Drivers::Cst816S::Gestures::SingleTap: - if (touchMode == TouchModes::Gestures) + if (touchMode == TouchModes::Gestures) { lvgl.SetNewTapEvent(info.x, info.y); + } return TouchEvents::Tap; case Pinetime::Drivers::Cst816S::Gestures::LongPress: return TouchEvents::LongTap; diff --git a/src/displayapp/DisplayApp.h b/src/displayapp/DisplayApp.h index 75e5275518..ffe27cf1bc 100644 --- a/src/displayapp/DisplayApp.h +++ b/src/displayapp/DisplayApp.h @@ -103,7 +103,7 @@ namespace Pinetime { static void Process(void* instance); void InitHw(); void Refresh(); - void returnApp(Apps app, DisplayApp::FullRefreshDirections direction, TouchEvents touchEvent); + void ReturnApp(Apps app, DisplayApp::FullRefreshDirections direction, TouchEvents touchEvent); void LoadApp(Apps app, DisplayApp::FullRefreshDirections direction); }; } diff --git a/src/displayapp/DisplayAppRecovery.cpp b/src/displayapp/DisplayAppRecovery.cpp index 6db987fa0e..a132a47cac 100644 --- a/src/displayapp/DisplayAppRecovery.cpp +++ b/src/displayapp/DisplayAppRecovery.cpp @@ -37,7 +37,7 @@ void DisplayApp::Process(void* instance) { xTaskNotifyGive(xTaskGetCurrentTaskHandle()); app->InitHw(); - while (1) { + while (true) { app->Refresh(); } } @@ -51,10 +51,11 @@ void DisplayApp::Refresh() { if (xQueueReceive(msgQueue, &msg, 200)) { switch (msg) { case Display::Messages::UpdateBleConnection: - if (bleController.IsConnected()) + if (bleController.IsConnected()) { DisplayLogo(colorBlue); - else + } else { DisplayLogo(colorWhite); + } break; case Display::Messages::BleFirmwareUpdateStarted: DisplayLogo(colorGreen); diff --git a/src/displayapp/fonts/jetbrains_mono_42.c b/src/displayapp/fonts/jetbrains_mono_42.c new file mode 100644 index 0000000000..6f25f5abe6 --- /dev/null +++ b/src/displayapp/fonts/jetbrains_mono_42.c @@ -0,0 +1,258 @@ +/******************************************************************************* + * Size: 42 px + * Bpp: 1 + * Opts: + ******************************************************************************/ + +#ifdef LV_LVGL_H_INCLUDE_SIMPLE +#include "lvgl.h" +#else +#include "lvgl/lvgl.h" +#endif + +#ifndef JETBRAINS_MONO_42 +#define JETBRAINS_MONO_42 1 +#endif + +#if JETBRAINS_MONO_42 + +/*----------------- + * BITMAPS + *----------------*/ + +/*Store the image of the glyphs*/ +static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { + /* U+0025 "%" */ + 0x1f, 0x80, 0x7, 0x3f, 0xc0, 0xe, 0x7f, 0xe0, + 0x1c, 0xf0, 0xf0, 0x1c, 0xe0, 0x70, 0x38, 0xe0, + 0x70, 0x70, 0xe0, 0x70, 0x70, 0xe0, 0x70, 0xe0, + 0xe0, 0x71, 0xc0, 0xe0, 0x71, 0xc0, 0xf0, 0xf3, + 0x80, 0x7f, 0xe7, 0x0, 0x3f, 0xc7, 0x0, 0x1f, + 0x8e, 0x0, 0x0, 0x1c, 0x0, 0x0, 0x3c, 0x0, + 0x0, 0x38, 0x0, 0x0, 0x71, 0xf8, 0x0, 0xe3, + 0xfc, 0x0, 0xe7, 0xfe, 0x1, 0xcf, 0xf, 0x3, + 0x8e, 0x7, 0x3, 0x8e, 0x7, 0x7, 0xe, 0x7, + 0xe, 0xe, 0x7, 0xe, 0xe, 0x7, 0x1c, 0xe, + 0x7, 0x38, 0xf, 0xf, 0x38, 0x7, 0xfe, 0x70, + 0x3, 0xfc, 0xe0, 0x1, 0xf8, + + /* U+0030 "0" */ + 0x3, 0xf8, 0x1, 0xff, 0xc0, 0xff, 0xfe, 0x1f, + 0x7, 0xc7, 0xc0, 0x7c, 0xf0, 0x7, 0xbc, 0x0, + 0x7f, 0x80, 0xf, 0xf0, 0x1, 0xfe, 0x0, 0x3f, + 0xc0, 0x7, 0xf8, 0x0, 0xff, 0xe, 0x1f, 0xe3, + 0xe3, 0xfc, 0x7c, 0x7f, 0x8f, 0x8f, 0xf0, 0xe1, + 0xfe, 0x0, 0x3f, 0xc0, 0x7, 0xf8, 0x0, 0xff, + 0x0, 0x1f, 0xe0, 0x3, 0xfc, 0x0, 0x7f, 0x80, + 0xf, 0xf0, 0x1, 0xef, 0x0, 0x79, 0xf0, 0x1f, + 0x1f, 0x7, 0xc3, 0xff, 0xf8, 0x1f, 0xfc, 0x0, + 0xfe, 0x0, + + /* U+0031 "1" */ + 0x3, 0xf0, 0x0, 0xfe, 0x0, 0x3f, 0xc0, 0x1f, + 0xf8, 0x7, 0xcf, 0x1, 0xf1, 0xe0, 0x3c, 0x3c, + 0x7, 0x7, 0x80, 0x80, 0xf0, 0x0, 0x1e, 0x0, + 0x3, 0xc0, 0x0, 0x78, 0x0, 0xf, 0x0, 0x1, + 0xe0, 0x0, 0x3c, 0x0, 0x7, 0x80, 0x0, 0xf0, + 0x0, 0x1e, 0x0, 0x3, 0xc0, 0x0, 0x78, 0x0, + 0xf, 0x0, 0x1, 0xe0, 0x0, 0x3c, 0x0, 0x7, + 0x80, 0x0, 0xf0, 0x0, 0x1e, 0x0, 0x3, 0xc0, + 0x0, 0x78, 0xf, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xf8, + + /* U+0032 "2" */ + 0x3, 0xf8, 0x1, 0xff, 0xc0, 0x7f, 0xfe, 0x1f, + 0x7, 0xc7, 0xc0, 0x3c, 0xf0, 0x7, 0xbc, 0x0, + 0x7f, 0x80, 0xf, 0xf0, 0x1, 0xe0, 0x0, 0x3c, + 0x0, 0x7, 0x80, 0x1, 0xf0, 0x0, 0x3c, 0x0, + 0xf, 0x80, 0x1, 0xe0, 0x0, 0x7c, 0x0, 0x1f, + 0x0, 0x7, 0xc0, 0x1, 0xf0, 0x0, 0x7e, 0x0, + 0xf, 0x80, 0x3, 0xe0, 0x0, 0xf8, 0x0, 0x3e, + 0x0, 0xf, 0x80, 0x3, 0xe0, 0x0, 0xf8, 0x0, + 0x3e, 0x0, 0x7, 0xff, 0xfe, 0xff, 0xff, 0xdf, + 0xff, 0xf8, + + /* U+0033 "3" */ + 0x7f, 0xff, 0x8f, 0xff, 0xf1, 0xff, 0xfe, 0x0, + 0x3, 0xc0, 0x0, 0xf0, 0x0, 0x3c, 0x0, 0xf, + 0x0, 0x3, 0xc0, 0x0, 0xf0, 0x0, 0x3e, 0x0, + 0x7, 0x80, 0x1, 0xfe, 0x0, 0x3f, 0xf0, 0x7, + 0xff, 0x0, 0x3, 0xf0, 0x0, 0x1e, 0x0, 0x3, + 0xc0, 0x0, 0x3c, 0x0, 0x7, 0x80, 0x0, 0xf0, + 0x0, 0x1e, 0x0, 0x3, 0xfc, 0x0, 0x7f, 0x80, + 0xf, 0xf0, 0x1, 0xef, 0x0, 0x79, 0xf0, 0x1f, + 0x1f, 0x7, 0xc3, 0xff, 0xf0, 0x1f, 0xfc, 0x0, + 0xfe, 0x0, + + /* U+0034 "4" */ + 0x0, 0x1e, 0x0, 0xf, 0x80, 0x3, 0xc0, 0x1, + 0xe0, 0x0, 0x78, 0x0, 0x3c, 0x0, 0x1f, 0x0, + 0x7, 0x80, 0x3, 0xc0, 0x1, 0xf0, 0x0, 0x78, + 0x0, 0x3e, 0x0, 0xf, 0x0, 0x7, 0x80, 0xf3, + 0xe0, 0x3c, 0xf0, 0xf, 0x7c, 0x3, 0xde, 0x0, + 0xff, 0x0, 0x3f, 0xc0, 0xf, 0xf0, 0x3, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0, 0x3, + 0xc0, 0x0, 0xf0, 0x0, 0x3c, 0x0, 0xf, 0x0, + 0x3, 0xc0, 0x0, 0xf0, 0x0, 0x3c, + + /* U+0035 "5" */ + 0x7f, 0xff, 0x9f, 0xff, 0xe7, 0xff, 0xf9, 0xe0, + 0x0, 0x78, 0x0, 0x1e, 0x0, 0x7, 0x80, 0x1, + 0xe0, 0x0, 0x78, 0x0, 0x1e, 0x0, 0x7, 0x8f, + 0x81, 0xef, 0xf8, 0x7f, 0xff, 0x1f, 0x87, 0xe7, + 0xc0, 0x79, 0xe0, 0x1f, 0x0, 0x3, 0xc0, 0x0, + 0xf0, 0x0, 0x3c, 0x0, 0xf, 0x0, 0x3, 0xc0, + 0x0, 0xf0, 0x0, 0x3c, 0x0, 0xf, 0xf0, 0x3, + 0xde, 0x1, 0xe7, 0x80, 0x78, 0xf8, 0x7e, 0x3f, + 0xff, 0x3, 0xff, 0x80, 0x3f, 0x0, + + /* U+0036 "6" */ + 0x0, 0x3c, 0x0, 0x7, 0x80, 0x0, 0x78, 0x0, + 0xf, 0x0, 0x1, 0xe0, 0x0, 0x1e, 0x0, 0x3, + 0xc0, 0x0, 0x3c, 0x0, 0x7, 0x80, 0x0, 0x70, + 0x0, 0xf, 0x0, 0x1, 0xe7, 0xc0, 0x1f, 0xff, + 0x3, 0xff, 0xfc, 0x3f, 0xf, 0xc7, 0xc0, 0x3e, + 0x78, 0x1, 0xe7, 0x80, 0x1f, 0xf0, 0x0, 0xff, + 0x0, 0xf, 0xf0, 0x0, 0xff, 0x0, 0xf, 0xf0, + 0x0, 0xff, 0x0, 0xf, 0xf8, 0x1, 0xe7, 0x80, + 0x1e, 0x7c, 0x3, 0xe3, 0xf0, 0xfc, 0x1f, 0xff, + 0x80, 0xff, 0xf0, 0x1, 0xf8, 0x0, + + /* U+0037 "7" */ + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x0, 0x1e, 0xf0, 0x1, 0xef, 0x0, 0x1e, 0xf0, + 0x3, 0xcf, 0x0, 0x3c, 0x0, 0x3, 0x80, 0x0, + 0x78, 0x0, 0x7, 0x80, 0x0, 0xf0, 0x0, 0xf, + 0x0, 0x0, 0xf0, 0x0, 0x1e, 0x0, 0x1, 0xe0, + 0x0, 0x3c, 0x0, 0x3, 0xc0, 0x0, 0x3c, 0x0, + 0x7, 0x80, 0x0, 0x78, 0x0, 0x7, 0x80, 0x0, + 0xf0, 0x0, 0xf, 0x0, 0x1, 0xe0, 0x0, 0x1e, + 0x0, 0x1, 0xe0, 0x0, 0x3c, 0x0, 0x3, 0xc0, + 0x0, 0x7c, 0x0, 0x7, 0x80, 0x0, + + /* U+0038 "8" */ + 0x1, 0xf8, 0x0, 0xff, 0xf0, 0x1f, 0xff, 0x83, + 0xf0, 0xfc, 0x3c, 0x3, 0xc7, 0xc0, 0x3e, 0x78, + 0x1, 0xe7, 0x80, 0x1e, 0x78, 0x1, 0xe7, 0x80, + 0x1e, 0x3c, 0x3, 0xc3, 0xe0, 0x7c, 0x1f, 0xf, + 0x80, 0xff, 0xf0, 0x3, 0xfc, 0x0, 0x7f, 0xe0, + 0xf, 0xff, 0x3, 0xe0, 0x7c, 0x3c, 0x3, 0xc7, + 0x80, 0x1e, 0xf0, 0x0, 0xff, 0x0, 0xf, 0xf0, + 0x0, 0xff, 0x0, 0xf, 0xf0, 0x0, 0xff, 0x80, + 0x1f, 0x7c, 0x3, 0xe7, 0xe0, 0x7e, 0x3f, 0xff, + 0xc0, 0xff, 0xf0, 0x3, 0xfc, 0x0, + + /* U+0039 "9" */ + 0x3, 0xf8, 0x0, 0xff, 0xf0, 0x1f, 0xff, 0x83, + 0xe0, 0xfc, 0x7c, 0x3, 0xe7, 0x80, 0x1e, 0xf8, + 0x1, 0xff, 0x0, 0xf, 0xf0, 0x0, 0xff, 0x0, + 0xf, 0xf0, 0x0, 0xff, 0x0, 0xf, 0xf8, 0x1, + 0xf7, 0x80, 0x1e, 0x7c, 0x3, 0xe3, 0xe0, 0x7e, + 0x3f, 0xff, 0xc1, 0xff, 0xfc, 0x7, 0xe7, 0x80, + 0x0, 0xf8, 0x0, 0xf, 0x0, 0x1, 0xe0, 0x0, + 0x1e, 0x0, 0x3, 0xc0, 0x0, 0x3c, 0x0, 0x7, + 0x80, 0x0, 0xf8, 0x0, 0xf, 0x0, 0x1, 0xe0, + 0x0, 0x1e, 0x0, 0x3, 0xc0, 0x0, + + /* U+003A ":" */ + 0x7d, 0xff, 0xff, 0xff, 0xef, 0x80, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, + 0xf7, 0xff, 0xff, 0xff, 0xbe +}; + + +/*--------------------- + * GLYPH DESCRIPTION + *--------------------*/ + +static const lv_font_fmt_txt_glyph_dsc_t glyph_dsc[] = { + {.bitmap_index = 0, .adv_w = 0, .box_w = 0, .box_h = 0, .ofs_x = 0, .ofs_y = 0} /* id = 0 reserved */, + {.bitmap_index = 0, .adv_w = 403, .box_w = 24, .box_h = 31, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 93, .adv_w = 403, .box_w = 19, .box_h = 31, .ofs_x = 3, .ofs_y = 0}, + {.bitmap_index = 167, .adv_w = 403, .box_w = 19, .box_h = 31, .ofs_x = 4, .ofs_y = 0}, + {.bitmap_index = 241, .adv_w = 403, .box_w = 19, .box_h = 31, .ofs_x = 3, .ofs_y = 0}, + {.bitmap_index = 315, .adv_w = 403, .box_w = 19, .box_h = 31, .ofs_x = 3, .ofs_y = 0}, + {.bitmap_index = 389, .adv_w = 403, .box_w = 18, .box_h = 31, .ofs_x = 3, .ofs_y = 0}, + {.bitmap_index = 459, .adv_w = 403, .box_w = 18, .box_h = 31, .ofs_x = 3, .ofs_y = 0}, + {.bitmap_index = 529, .adv_w = 403, .box_w = 20, .box_h = 31, .ofs_x = 3, .ofs_y = 0}, + {.bitmap_index = 607, .adv_w = 403, .box_w = 20, .box_h = 31, .ofs_x = 3, .ofs_y = 0}, + {.bitmap_index = 685, .adv_w = 403, .box_w = 20, .box_h = 31, .ofs_x = 3, .ofs_y = 0}, + {.bitmap_index = 763, .adv_w = 403, .box_w = 20, .box_h = 31, .ofs_x = 3, .ofs_y = 0}, + {.bitmap_index = 841, .adv_w = 403, .box_w = 7, .box_h = 24, .ofs_x = 9, .ofs_y = 0} +}; + +/*--------------------- + * CHARACTER MAPPING + *--------------------*/ + + + +/*Collect the unicode lists and glyph_id offsets*/ +static const lv_font_fmt_txt_cmap_t cmaps[] = +{ + { + .range_start = 37, .range_length = 1, .glyph_id_start = 1, + .unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY + }, + { + .range_start = 48, .range_length = 11, .glyph_id_start = 2, + .unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY + } +}; + + + +/*-------------------- + * ALL CUSTOM DATA + *--------------------*/ + +#if LV_VERSION_CHECK(8, 0, 0) +/*Store all the custom data of the font*/ +static lv_font_fmt_txt_glyph_cache_t cache; +static const lv_font_fmt_txt_dsc_t font_dsc = { +#else +static lv_font_fmt_txt_dsc_t font_dsc = { +#endif + .glyph_bitmap = glyph_bitmap, + .glyph_dsc = glyph_dsc, + .cmaps = cmaps, + .kern_dsc = NULL, + .kern_scale = 0, + .cmap_num = 2, + .bpp = 1, + .kern_classes = 0, + .bitmap_format = 0, +#if LV_VERSION_CHECK(8, 0, 0) + .cache = &cache +#endif +}; + + +/*----------------- + * PUBLIC FONT + *----------------*/ + +/*Initialize a public general font descriptor*/ +#if LV_VERSION_CHECK(8, 0, 0) +const lv_font_t jetbrains_mono_42 = { +#else +lv_font_t jetbrains_mono_42 = { +#endif + .get_glyph_dsc = lv_font_get_glyph_dsc_fmt_txt, /*Function pointer to get glyph's data*/ + .get_glyph_bitmap = lv_font_get_bitmap_fmt_txt, /*Function pointer to get glyph's bitmap*/ + .line_height = 31, /*The maximum line height required by the font*/ + .base_line = 0, /*Baseline measured from the bottom of the line*/ +#if !(LVGL_VERSION_MAJOR == 6 && LVGL_VERSION_MINOR == 0) + .subpx = LV_FONT_SUBPX_NONE, +#endif +#if LV_VERSION_CHECK(7, 4, 0) + .underline_position = -7, + .underline_thickness = 2, +#endif + .dsc = &font_dsc /*The custom font data. Will be accessed by `get_glyph_bitmap/dsc` */ +}; + + + +#endif /*#if JETBRAINS_MONO_42*/ + diff --git a/src/displayapp/screens/ApplicationList.cpp b/src/displayapp/screens/ApplicationList.cpp index 7e38b3f453..1eb36999ef 100644 --- a/src/displayapp/screens/ApplicationList.cpp +++ b/src/displayapp/screens/ApplicationList.cpp @@ -49,7 +49,7 @@ std::unique_ptr ApplicationList::CreateScreen1() { {Symbols::stopWatch, Apps::StopWatch}, {Symbols::music, Apps::Music}, {Symbols::map, Apps::Navigation}, - {Symbols::shoe, Apps::Motion}, + {Symbols::shoe, Apps::Steps}, {Symbols::heartBeat, Apps::HeartRate}, {"", Apps::None}, }}; @@ -62,7 +62,7 @@ std::unique_ptr ApplicationList::CreateScreen2() { {Symbols::paintbrush, Apps::Paint}, {Symbols::paddle, Apps::Paddle}, {"2", Apps::Twos}, - {"", Apps::None}, + {"M", Apps::Motion}, {"", Apps::None}, {"", Apps::None}, }}; diff --git a/src/displayapp/screens/Clock.cpp b/src/displayapp/screens/Clock.cpp index e0c1f62bd8..142998408f 100644 --- a/src/displayapp/screens/Clock.cpp +++ b/src/displayapp/screens/Clock.cpp @@ -14,7 +14,6 @@ #include "../DisplayApp.h" #include "WatchFaceDigital.h" #include "WatchFaceAnalog.h" -#include "PineTimeStyle.h" using namespace Pinetime::Applications::Screens; @@ -43,9 +42,6 @@ Clock::Clock(DisplayApp* app, [this]() -> std::unique_ptr { return WatchFaceAnalogScreen(); }, - [this]() -> std::unique_ptr { - return PineTimeStyleScreen(); - }, // Examples for more watch faces //[this]() -> std::unique_ptr { return WatchFaceMinimalScreen(); }, //[this]() -> std::unique_ptr { return WatchFaceCustomScreen(); } @@ -84,16 +80,6 @@ std::unique_ptr Clock::WatchFaceAnalogScreen() { app, dateTimeController, batteryController, bleController, notificatioManager, settingsController); } -std::unique_ptr Clock::PineTimeStyleScreen() { - return std::make_unique(app, - dateTimeController, - batteryController, - bleController, - notificatioManager, - settingsController, - heartRateController); -} - /* // Examples for more watch faces std::unique_ptr Clock::WatchFaceMinimalScreen() { @@ -105,4 +91,4 @@ std::unique_ptr Clock::WatchFaceCustomScreen() { return std::make_unique(app, dateTimeController, batteryController, bleController, notificatioManager, settingsController); } -*/ +*/ \ No newline at end of file diff --git a/src/displayapp/screens/Clock.h b/src/displayapp/screens/Clock.h index 920d58bb2f..9879985f27 100644 --- a/src/displayapp/screens/Clock.h +++ b/src/displayapp/screens/Clock.h @@ -47,10 +47,9 @@ namespace Pinetime { Controllers::HeartRateController& heartRateController; Controllers::MotionController& motionController; - ScreenList<3> screens; + ScreenList<2> screens; std::unique_ptr WatchFaceDigitalScreen(); std::unique_ptr WatchFaceAnalogScreen(); - std::unique_ptr PineTimeStyleScreen(); // Examples for more watch faces // std::unique_ptr WatchFaceMinimalScreen(); diff --git a/src/displayapp/screens/FirmwareValidation.cpp b/src/displayapp/screens/FirmwareValidation.cpp index 873a22f567..ad37a3df4b 100644 --- a/src/displayapp/screens/FirmwareValidation.cpp +++ b/src/displayapp/screens/FirmwareValidation.cpp @@ -27,6 +27,17 @@ FirmwareValidation::FirmwareValidation(Pinetime::Applications::DisplayApp* app, sprintf(version, "%ld.%ld.%ld", Version::Major(), Version::Minor(), Version::Patch()); lv_label_set_text(labelVersionValue, version); + labelShortRefInfo = lv_label_create(lv_scr_act(), nullptr); + lv_obj_align(labelShortRefInfo, nullptr, LV_ALIGN_IN_TOP_LEFT, 0, 25); + lv_label_set_text(labelShortRefInfo, "ShortRef : "); + lv_label_set_align(labelShortRefInfo, LV_LABEL_ALIGN_LEFT); + + labelShortRefValue = lv_label_create(lv_scr_act(), nullptr); + lv_obj_align(labelShortRefValue, labelShortRefInfo, LV_ALIGN_OUT_RIGHT_MID, 0, 0); + lv_label_set_recolor(labelShortRefValue, true); + sprintf(shortref, "%s", Version::GitCommitHash()); + lv_label_set_text(labelShortRefValue, shortref); + labelIsValidated = lv_label_create(lv_scr_act(), nullptr); lv_obj_align(labelIsValidated, nullptr, LV_ALIGN_IN_TOP_LEFT, 0, 50); lv_label_set_recolor(labelIsValidated, true); diff --git a/src/displayapp/screens/FirmwareValidation.h b/src/displayapp/screens/FirmwareValidation.h index 67662fd9ec..303c215463 100644 --- a/src/displayapp/screens/FirmwareValidation.h +++ b/src/displayapp/screens/FirmwareValidation.h @@ -25,7 +25,10 @@ namespace Pinetime { lv_obj_t* labelVersionInfo; lv_obj_t* labelVersionValue; + lv_obj_t* labelShortRefInfo; + lv_obj_t* labelShortRefValue; char version[9]; + char shortref[9]; lv_obj_t* labelIsValidated; lv_obj_t* buttonValidate; lv_obj_t* labelButtonValidate; diff --git a/src/displayapp/screens/Motion.cpp b/src/displayapp/screens/Motion.cpp index e7196267bd..a8bb3c1879 100644 --- a/src/displayapp/screens/Motion.cpp +++ b/src/displayapp/screens/Motion.cpp @@ -3,8 +3,6 @@ #include "../DisplayApp.h" using namespace Pinetime::Applications::Screens; -extern lv_font_t jetbrains_mono_extrabold_compressed; -extern lv_font_t jetbrains_mono_bold_20; Motion::Motion(Pinetime::Applications::DisplayApp* app, Controllers::MotionController& motionController) : Screen(app), motionController {motionController} { @@ -29,13 +27,16 @@ Motion::Motion(Pinetime::Applications::DisplayApp* app, Controllers::MotionContr lv_chart_init_points(chart, ser3, 0); lv_chart_refresh(chart); /*Required after direct set*/ + label = lv_label_create(lv_scr_act(), NULL); + lv_label_set_text_fmt(label, "X #FF0000 %d# Y #008000 %d# Z #FFFF00 %d#", 0, 0, 0); + lv_label_set_align(label, LV_LABEL_ALIGN_CENTER); + lv_obj_align(label, NULL, LV_ALIGN_IN_TOP_MID, 0, 10); + lv_label_set_recolor(label, true); + labelStep = lv_label_create(lv_scr_act(), NULL); lv_obj_align(labelStep, chart, LV_ALIGN_IN_BOTTOM_LEFT, 0, 0); - lv_label_set_text(labelStep, "Steps: "); + lv_label_set_text(labelStep, "Steps ---"); - labelStepValue = lv_label_create(lv_scr_act(), NULL); - lv_obj_align(labelStepValue, labelStep, LV_ALIGN_OUT_RIGHT_MID, 0, 0); - lv_label_set_text(labelStepValue, "-"); } Motion::~Motion() { @@ -47,8 +48,10 @@ bool Motion::Refresh() { lv_chart_set_next(chart, ser2, motionController.Y()); lv_chart_set_next(chart, ser3, motionController.Z()); - snprintf(nbStepsBuffer, nbStepsBufferSize, "%lu", motionController.NbSteps()); - lv_label_set_text(labelStepValue, nbStepsBuffer); + lv_label_set_text_fmt(labelStep, "Steps %lu", motionController.NbSteps()); + + lv_label_set_text_fmt(label, "X #FF0000 %d# Y #008000 %d# Z #FFFF00 %d#", motionController.X() / 0x10, motionController.Y() / 0x10, motionController.Z() / 0x10); + lv_obj_align(label, NULL, LV_ALIGN_IN_TOP_MID, 0, 10); return running; } diff --git a/src/displayapp/screens/Motion.h b/src/displayapp/screens/Motion.h index 1100786641..132b20ec5c 100644 --- a/src/displayapp/screens/Motion.h +++ b/src/displayapp/screens/Motion.h @@ -26,9 +26,9 @@ namespace Pinetime { lv_chart_series_t* ser1; lv_chart_series_t* ser2; lv_chart_series_t* ser3; + lv_obj_t* label; lv_obj_t* labelStep; - lv_obj_t* labelStepValue; static constexpr uint8_t nbStepsBufferSize = 9; char nbStepsBuffer[nbStepsBufferSize + 1]; bool running = true; diff --git a/src/displayapp/screens/Notifications.cpp b/src/displayapp/screens/Notifications.cpp index f0fd2f6636..1f1137503a 100644 --- a/src/displayapp/screens/Notifications.cpp +++ b/src/displayapp/screens/Notifications.cpp @@ -176,7 +176,17 @@ Notifications::NotificationItem::NotificationItem(const char* title, lv_obj_set_style_local_text_color(alert_type, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x888888)); if (title == nullptr) title = "Notification"; + char* pchar; + pchar = strchr(title, '\n'); + while (pchar != nullptr) { + *pchar = ' '; + pchar = + pchar = strchr(pchar + 1, '\n'); + } lv_label_set_text(alert_type, title); + lv_label_set_long_mode(alert_type, LV_LABEL_LONG_SROLL_CIRC); + lv_label_set_anim_speed(alert_type, 3); + lv_obj_set_width(alert_type, 180); lv_obj_align(alert_type, NULL, LV_ALIGN_IN_TOP_LEFT, 0, 16); ///////// diff --git a/src/displayapp/screens/Steps.cpp b/src/displayapp/screens/Steps.cpp new file mode 100644 index 0000000000..b485c9756d --- /dev/null +++ b/src/displayapp/screens/Steps.cpp @@ -0,0 +1,72 @@ +#include "Steps.h" +#include +#include "../DisplayApp.h" +#include "Symbols.h" + +using namespace Pinetime::Applications::Screens; + +Steps::Steps( + Pinetime::Applications::DisplayApp *app, + Controllers::MotionController& motionController, + Controllers::Settings &settingsController) + : Screen(app), + motionController{motionController}, + settingsController{settingsController} { + + stepsArc = lv_arc_create(lv_scr_act(), nullptr); + + lv_obj_set_style_local_bg_opa(stepsArc, LV_ARC_PART_BG, LV_STATE_DEFAULT, LV_OPA_0); + lv_obj_set_style_local_border_width(stepsArc, LV_ARC_PART_BG, LV_STATE_DEFAULT, 2); + lv_obj_set_style_local_radius(stepsArc, LV_ARC_PART_BG, LV_STATE_DEFAULT, 0); + lv_obj_set_style_local_line_color(stepsArc, LV_ARC_PART_INDIC, LV_STATE_DEFAULT, lv_color_hex(0x0000FF)); + lv_arc_set_end_angle(stepsArc, 200); + lv_obj_set_size(stepsArc, 220, 220); + lv_arc_set_range(stepsArc, 0, 500); + lv_obj_align(stepsArc, nullptr, LV_ALIGN_CENTER, 0, 0); + + stepsCount = motionController.NbSteps(); + + lv_arc_set_value(stepsArc, int16_t(500 * stepsCount / settingsController.GetStepsGoal())); + + lSteps = lv_label_create(lv_scr_act(), nullptr); + lv_obj_set_style_local_text_color(lSteps, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x00FF00)); + lv_obj_set_style_local_text_font(lSteps, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, &jetbrains_mono_42); + lv_label_set_text_fmt(lSteps, "%li", stepsCount); + lv_obj_align(lSteps, nullptr, LV_ALIGN_CENTER, 0, -20); + + lv_obj_t * lstepsL = lv_label_create(lv_scr_act(), nullptr); + lv_obj_set_style_local_text_color(lstepsL, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x111111)); + lv_label_set_text_static(lstepsL, "Steps"); + lv_obj_align(lstepsL, lSteps, LV_ALIGN_OUT_BOTTOM_MID, 0, 10); + + lv_obj_t * lstepsGoal = lv_label_create(lv_scr_act(), nullptr); + lv_obj_set_style_local_text_color(lstepsGoal, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_CYAN); + lv_label_set_text_fmt(lstepsGoal,"Goal\n%i", settingsController.GetStepsGoal()); + lv_label_set_align(lstepsGoal, LV_LABEL_ALIGN_CENTER); + lv_obj_align(lstepsGoal, lSteps, LV_ALIGN_OUT_BOTTOM_MID, 0, 60); + + lv_obj_t * backgroundLabel = lv_label_create(lv_scr_act(), nullptr); + lv_label_set_long_mode(backgroundLabel, LV_LABEL_LONG_CROP); + lv_obj_set_size(backgroundLabel, 240, 240); + lv_obj_set_pos(backgroundLabel, 0, 0); + lv_label_set_text_static(backgroundLabel, ""); + +} + +Steps::~Steps() { + lv_obj_clean(lv_scr_act()); +} + +bool Steps::Refresh() { + + stepsCount = motionController.NbSteps(); + + lv_label_set_text_fmt(lSteps,"%li", stepsCount); + lv_obj_align(lSteps, nullptr, LV_ALIGN_CENTER, 0, -20); + + lv_arc_set_value(stepsArc, int16_t(500 * stepsCount / settingsController.GetStepsGoal())); + + return running; +} + + diff --git a/src/displayapp/screens/Steps.h b/src/displayapp/screens/Steps.h new file mode 100644 index 0000000000..9c135e260a --- /dev/null +++ b/src/displayapp/screens/Steps.h @@ -0,0 +1,39 @@ +#pragma once + +#include +#include +#include "Screen.h" +#include + +namespace Pinetime { + + namespace Controllers { + class Settings; + } + + namespace Applications { + namespace Screens { + + class Steps : public Screen { + public: + Steps(DisplayApp* app, Controllers::MotionController& motionController, Controllers::Settings &settingsController); + ~Steps() override; + + bool Refresh() override; + + + private: + + Controllers::MotionController& motionController; + Controllers::Settings& settingsController; + + lv_obj_t * lSteps; + lv_obj_t * lStepsIcon; + lv_obj_t * stepsArc; + + uint32_t stepsCount; + + }; + } + } +} diff --git a/src/displayapp/screens/StopWatch.cpp b/src/displayapp/screens/StopWatch.cpp index e06981af8a..d7cd20c38b 100644 --- a/src/displayapp/screens/StopWatch.cpp +++ b/src/displayapp/screens/StopWatch.cpp @@ -115,8 +115,9 @@ bool StopWatch::Refresh() { // Init state when an user first opens the app // and when a stop/reset button is pressed case States::Init: { - if (btnStopLap) { + if (btnStopLap != nullptr) { lv_obj_del(btnStopLap); + btnStopLap = nullptr; } // The initial default value lv_label_set_text(time, "00:00"); diff --git a/src/displayapp/screens/SystemInfo.cpp b/src/displayapp/screens/SystemInfo.cpp index f6e8d61a92..e4ef691146 100644 --- a/src/displayapp/screens/SystemInfo.cpp +++ b/src/displayapp/screens/SystemInfo.cpp @@ -69,12 +69,14 @@ std::unique_ptr SystemInfo::CreateScreen1() { lv_label_set_text_fmt(label, "#FFFF00 InfiniTime#\n\n" "#444444 Version# %ld.%ld.%ld\n\n" + "#444444 Short Ref# %s\n\n" "#444444 Build date#\n" - "\t%s\n" - "\t%s\n", + "%s\n" + "%s\n", Version::Major(), Version::Minor(), Version::Patch(), + Version::GitCommitHash(), __DATE__, __TIME__); lv_label_set_align(label, LV_LABEL_ALIGN_CENTER); @@ -242,4 +244,4 @@ std::unique_ptr SystemInfo::CreateScreen5() { lv_label_set_align(label, LV_LABEL_ALIGN_CENTER); lv_obj_align(label, lv_scr_act(), LV_ALIGN_CENTER, 0, 0); return std::unique_ptr(new Screens::Label(4, 5, app, label)); -} \ No newline at end of file +} diff --git a/src/displayapp/screens/settings/SettingSteps.cpp b/src/displayapp/screens/settings/SettingSteps.cpp new file mode 100644 index 0000000000..b7c024f1fa --- /dev/null +++ b/src/displayapp/screens/settings/SettingSteps.cpp @@ -0,0 +1,98 @@ +#include "SettingSteps.h" +#include +#include "displayapp/DisplayApp.h" +#include "displayapp/screens/Symbols.h" + +using namespace Pinetime::Applications::Screens; + +namespace { + static void event_handler(lv_obj_t * obj, lv_event_t event) { + SettingSteps* screen = static_cast(obj->user_data); + screen->UpdateSelected(obj, event); + } +} + +SettingSteps::SettingSteps( + Pinetime::Applications::DisplayApp *app, Pinetime::Controllers::Settings &settingsController) : + Screen(app), + settingsController{settingsController} +{ + + lv_obj_t * container1 = lv_cont_create(lv_scr_act(), nullptr); + + //lv_obj_set_style_local_bg_color(container1, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x111111)); + lv_obj_set_style_local_bg_opa(container1, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, LV_OPA_TRANSP); + lv_obj_set_style_local_pad_all(container1, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, 10); + lv_obj_set_style_local_pad_inner(container1, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, 5); + lv_obj_set_style_local_border_width(container1, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, 0); + lv_obj_set_pos(container1, 30, 60); + lv_obj_set_width(container1, LV_HOR_RES - 50); + lv_obj_set_height(container1, LV_VER_RES - 60); + lv_cont_set_layout(container1, LV_LAYOUT_COLUMN_LEFT); + + lv_obj_t * title = lv_label_create(lv_scr_act(), NULL); + lv_label_set_text_static(title,"Daily steps goal"); + lv_label_set_align(title, LV_LABEL_ALIGN_CENTER); + lv_obj_align(title, lv_scr_act(), LV_ALIGN_IN_TOP_MID, 15, 15); + + lv_obj_t * icon = lv_label_create(lv_scr_act(), NULL); + lv_obj_set_style_local_text_color(icon, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_ORANGE); + + lv_label_set_text_static(icon, Symbols::shoe); + lv_label_set_align(icon, LV_LABEL_ALIGN_CENTER); + lv_obj_align(icon, title, LV_ALIGN_OUT_LEFT_MID, -10, 0); + + + stepValue = lv_label_create(lv_scr_act(), NULL); + lv_obj_set_style_local_text_font(stepValue, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, &jetbrains_mono_42); + lv_label_set_text_fmt(stepValue,"%i", settingsController.GetStepsGoal()); + lv_label_set_align(stepValue, LV_LABEL_ALIGN_CENTER); + lv_obj_align(stepValue, lv_scr_act(), LV_ALIGN_CENTER, 0, -10); + + btnPlus = lv_btn_create(lv_scr_act(), NULL); + btnPlus->user_data = this; + lv_obj_set_size(btnPlus, 80, 50); + lv_obj_align(btnPlus, lv_scr_act(), LV_ALIGN_CENTER, 55, 80); + lv_obj_set_style_local_value_str(btnPlus, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, "+"); + lv_obj_set_event_cb(btnPlus, event_handler); + + btnMinus = lv_btn_create(lv_scr_act(), NULL); + btnMinus->user_data = this; + lv_obj_set_size(btnMinus, 80, 50); + lv_obj_set_event_cb(btnMinus, event_handler); + lv_obj_align(btnMinus, lv_scr_act(), LV_ALIGN_CENTER, -55, 80); + lv_obj_set_style_local_value_str(btnMinus, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, "-"); + +} + +SettingSteps::~SettingSteps() { + lv_obj_clean(lv_scr_act()); + settingsController.SaveSettings(); +} + +bool SettingSteps::Refresh() { + return running; +} + + +void SettingSteps::UpdateSelected(lv_obj_t *object, lv_event_t event) { + uint32_t value = settingsController.GetStepsGoal(); + if(object == btnPlus && (event == LV_EVENT_PRESSED)) { + value += 1000; + if ( value <= 500000 ) { + settingsController.SetStepsGoal(value); + lv_label_set_text_fmt(stepValue,"%i", settingsController.GetStepsGoal()); + lv_obj_align(stepValue, lv_scr_act(), LV_ALIGN_CENTER, 0, -10); + } + } + + if(object == btnMinus && (event == LV_EVENT_PRESSED)) { + value -= 1000; + if ( value >= 1000 ) { + settingsController.SetStepsGoal(value); + lv_label_set_text_fmt(stepValue,"%i", settingsController.GetStepsGoal()); + lv_obj_align(stepValue, lv_scr_act(), LV_ALIGN_CENTER, 0, -10); + } + } + +} \ No newline at end of file diff --git a/src/displayapp/screens/settings/SettingSteps.h b/src/displayapp/screens/settings/SettingSteps.h new file mode 100644 index 0000000000..0a4c2056b2 --- /dev/null +++ b/src/displayapp/screens/settings/SettingSteps.h @@ -0,0 +1,32 @@ +#pragma once + +#include +#include +#include "components/settings/Settings.h" +#include "displayapp/screens/Screen.h" + +namespace Pinetime { + + namespace Applications { + namespace Screens { + + class SettingSteps : public Screen{ + public: + SettingSteps(DisplayApp* app, Pinetime::Controllers::Settings &settingsController); + ~SettingSteps() override; + + bool Refresh() override; + void UpdateSelected(lv_obj_t *object, lv_event_t event); + + private: + + Controllers::Settings& settingsController; + + lv_obj_t * stepValue; + lv_obj_t * btnPlus; + lv_obj_t * btnMinus; + + }; + } + } +} diff --git a/src/displayapp/screens/settings/SettingWatchFace.cpp b/src/displayapp/screens/settings/SettingWatchFace.cpp index 3914a04801..457cebf664 100644 --- a/src/displayapp/screens/settings/SettingWatchFace.cpp +++ b/src/displayapp/screens/settings/SettingWatchFace.cpp @@ -58,15 +58,6 @@ SettingWatchFace::SettingWatchFace(Pinetime::Applications::DisplayApp* app, Pine lv_checkbox_set_checked(cbOption[optionsTotal], true); } - optionsTotal++; - cbOption[optionsTotal] = lv_checkbox_create(container1, nullptr); - lv_checkbox_set_text_static(cbOption[optionsTotal], " PineTimeStyle"); - cbOption[optionsTotal]->user_data = this; - lv_obj_set_event_cb(cbOption[optionsTotal], event_handler); - if (settingsController.GetClockFace() == 2) { - lv_checkbox_set_checked(cbOption[optionsTotal], true); - } - optionsTotal++; } @@ -90,4 +81,4 @@ void SettingWatchFace::UpdateSelected(lv_obj_t* object, lv_event_t event) { } } } -} +} \ No newline at end of file diff --git a/src/displayapp/screens/settings/SettingWatchFace.h b/src/displayapp/screens/settings/SettingWatchFace.h index 6f65d69298..1930a22853 100644 --- a/src/displayapp/screens/settings/SettingWatchFace.h +++ b/src/displayapp/screens/settings/SettingWatchFace.h @@ -21,7 +21,7 @@ namespace Pinetime { private: Controllers::Settings& settingsController; uint8_t optionsTotal; - lv_obj_t* cbOption[3]; + lv_obj_t* cbOption[2]; }; } } diff --git a/src/displayapp/screens/settings/Settings.cpp b/src/displayapp/screens/settings/Settings.cpp index e24be3d7fc..2c72c832ca 100644 --- a/src/displayapp/screens/settings/Settings.cpp +++ b/src/displayapp/screens/settings/Settings.cpp @@ -44,9 +44,7 @@ std::unique_ptr Settings::CreateScreen1() { {Symbols::clock, "Wake Up", Apps::SettingWakeUp}, {Symbols::clock, "Time format", Apps::SettingTimeFormat}, {Symbols::clock, "Watch face", Apps::SettingWatchFace}, - } - - }; + }}; return std::unique_ptr(new Screens::List(0, 2, app, settingsController, applications)); } @@ -54,13 +52,11 @@ std::unique_ptr Settings::CreateScreen1() { std::unique_ptr Settings::CreateScreen2() { std::array applications {{ + {Symbols::shoe, "Steps", Apps::SettingSteps}, {Symbols::batteryHalf, "Battery", Apps::BatteryInfo}, {Symbols::check, "Firmware", Apps::FirmwareValidation}, {Symbols::list, "About", Apps::SysInfo}, - {"", "", Apps::None}, - } - - }; + }}; return std::unique_ptr(new Screens::List(1, 2, app, settingsController, applications)); } diff --git a/src/libs/lv_conf.h b/src/libs/lv_conf.h index e774091bc4..761baba249 100644 --- a/src/libs/lv_conf.h +++ b/src/libs/lv_conf.h @@ -415,8 +415,8 @@ typedef void* lv_indev_drv_user_data_t; /*Type of user data in the in #define LV_FONT_CUSTOM_DECLARE LV_FONT_DECLARE(jetbrains_mono_bold_20) \ LV_FONT_DECLARE(jetbrains_mono_extrabold_compressed) \ + LV_FONT_DECLARE(jetbrains_mono_42) \ LV_FONT_DECLARE(jetbrains_mono_76) \ - LV_FONT_DECLARE(open_sans_light) \ LV_FONT_DECLARE(lv_font_sys_48) /* Enable it if you have fonts with a lot of characters. @@ -758,4 +758,4 @@ typedef void* lv_obj_user_data_t; /*--END OF LV_CONF_H--*/ -#endif /*LV_CONF_H*/ +#endif /*LV_CONF_H*/ \ No newline at end of file diff --git a/src/logging/NrfLogger.cpp b/src/logging/NrfLogger.cpp index 70a00e61df..1c048f2c20 100644 --- a/src/logging/NrfLogger.cpp +++ b/src/logging/NrfLogger.cpp @@ -12,8 +12,9 @@ void NrfLogger::Init() { NRF_LOG_DEFAULT_BACKENDS_INIT(); - if (pdPASS != xTaskCreate(NrfLogger::Process, "LOGGER", 200, this, 0, &m_logger_thread)) + if (pdPASS != xTaskCreate(NrfLogger::Process, "LOGGER", 200, this, 0, &m_logger_thread)) { APP_ERROR_HANDLER(NRF_ERROR_NO_MEM); + } } void NrfLogger::Process(void*) { @@ -21,7 +22,7 @@ void NrfLogger::Process(void*) { // Suppress endless loop diagnostic #pragma clang diagnostic push #pragma ide diagnostic ignored "EndlessLoop" - while (1) { + while (true) { NRF_LOG_FLUSH(); vTaskDelay(100); // Not good for power consumption, it will wake up every 100ms... } From 108bbc3642f9e6ca614ab4b470eb8ae34e739ffe Mon Sep 17 00:00:00 2001 From: Kieran Cawthray Date: Tue, 18 May 2021 18:03:26 +0200 Subject: [PATCH 008/173] Fix it again.. --- src/CMakeLists.txt | 2 ++ src/displayapp/screens/Clock.cpp | 16 +++++++++++++++- src/displayapp/screens/Clock.h | 3 ++- .../screens/settings/SettingWatchFace.cpp | 11 ++++++++++- src/libs/lv_conf.h | 3 ++- 5 files changed, 31 insertions(+), 4 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index acbfba18c8..5b83812d41 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -421,6 +421,7 @@ list(APPEND SOURCE_FILES displayapp/icons/bg_clock.c displayapp/screens/WatchFaceAnalog.cpp displayapp/screens/WatchFaceDigital.cpp + displayapp/screens/PineTimeStyle.cpp ## @@ -470,6 +471,7 @@ list(APPEND SOURCE_FILES displayapp/fonts/jetbrains_mono_76.c displayapp/fonts/jetbrains_mono_42.c displayapp/fonts/lv_font_sys_48.c + displayapp/fonts/open_sans_light.c displayapp/lv_pinetime_theme.c systemtask/SystemTask.cpp diff --git a/src/displayapp/screens/Clock.cpp b/src/displayapp/screens/Clock.cpp index 142998408f..e0c1f62bd8 100644 --- a/src/displayapp/screens/Clock.cpp +++ b/src/displayapp/screens/Clock.cpp @@ -14,6 +14,7 @@ #include "../DisplayApp.h" #include "WatchFaceDigital.h" #include "WatchFaceAnalog.h" +#include "PineTimeStyle.h" using namespace Pinetime::Applications::Screens; @@ -42,6 +43,9 @@ Clock::Clock(DisplayApp* app, [this]() -> std::unique_ptr { return WatchFaceAnalogScreen(); }, + [this]() -> std::unique_ptr { + return PineTimeStyleScreen(); + }, // Examples for more watch faces //[this]() -> std::unique_ptr { return WatchFaceMinimalScreen(); }, //[this]() -> std::unique_ptr { return WatchFaceCustomScreen(); } @@ -80,6 +84,16 @@ std::unique_ptr Clock::WatchFaceAnalogScreen() { app, dateTimeController, batteryController, bleController, notificatioManager, settingsController); } +std::unique_ptr Clock::PineTimeStyleScreen() { + return std::make_unique(app, + dateTimeController, + batteryController, + bleController, + notificatioManager, + settingsController, + heartRateController); +} + /* // Examples for more watch faces std::unique_ptr Clock::WatchFaceMinimalScreen() { @@ -91,4 +105,4 @@ std::unique_ptr Clock::WatchFaceCustomScreen() { return std::make_unique(app, dateTimeController, batteryController, bleController, notificatioManager, settingsController); } -*/ \ No newline at end of file +*/ diff --git a/src/displayapp/screens/Clock.h b/src/displayapp/screens/Clock.h index 9879985f27..920d58bb2f 100644 --- a/src/displayapp/screens/Clock.h +++ b/src/displayapp/screens/Clock.h @@ -47,9 +47,10 @@ namespace Pinetime { Controllers::HeartRateController& heartRateController; Controllers::MotionController& motionController; - ScreenList<2> screens; + ScreenList<3> screens; std::unique_ptr WatchFaceDigitalScreen(); std::unique_ptr WatchFaceAnalogScreen(); + std::unique_ptr PineTimeStyleScreen(); // Examples for more watch faces // std::unique_ptr WatchFaceMinimalScreen(); diff --git a/src/displayapp/screens/settings/SettingWatchFace.cpp b/src/displayapp/screens/settings/SettingWatchFace.cpp index 457cebf664..33d41416d9 100644 --- a/src/displayapp/screens/settings/SettingWatchFace.cpp +++ b/src/displayapp/screens/settings/SettingWatchFace.cpp @@ -58,6 +58,15 @@ SettingWatchFace::SettingWatchFace(Pinetime::Applications::DisplayApp* app, Pine lv_checkbox_set_checked(cbOption[optionsTotal], true); } + optionsTotal++; + cbOption[optionsTotal] = lv_checkbox_create(container1, nullptr); + lv_checkbox_set_text_static(cbOption[optionsTotal], " PineTimeStyle"); + cbOption[optionsTotal]->user_data = this; + lv_obj_set_event_cb(cbOption[optionsTotal], event_handler); + if (settingsController.GetClockFace() == 2) { + lv_checkbox_set_checked(cbOption[optionsTotal], true); + } + optionsTotal++; } @@ -81,4 +90,4 @@ void SettingWatchFace::UpdateSelected(lv_obj_t* object, lv_event_t event) { } } } -} \ No newline at end of file +} diff --git a/src/libs/lv_conf.h b/src/libs/lv_conf.h index 761baba249..cabc1859b1 100644 --- a/src/libs/lv_conf.h +++ b/src/libs/lv_conf.h @@ -417,6 +417,7 @@ typedef void* lv_indev_drv_user_data_t; /*Type of user data in the in LV_FONT_DECLARE(jetbrains_mono_extrabold_compressed) \ LV_FONT_DECLARE(jetbrains_mono_42) \ LV_FONT_DECLARE(jetbrains_mono_76) \ + LV_FONT_DECLARE(open_sans_light) \ LV_FONT_DECLARE(lv_font_sys_48) /* Enable it if you have fonts with a lot of characters. @@ -758,4 +759,4 @@ typedef void* lv_obj_user_data_t; /*--END OF LV_CONF_H--*/ -#endif /*LV_CONF_H*/ \ No newline at end of file +#endif /*LV_CONF_H*/ From 5daaa5cf75b23e80776614af263c23e6433365e3 Mon Sep 17 00:00:00 2001 From: Kieran Cawthray Date: Wed, 19 May 2021 11:03:33 +0200 Subject: [PATCH 009/173] Tidying/formatting fixes --- src/displayapp/screens/PineTimeStyle.cpp | 36 +++++++++++++++--------- 1 file changed, 23 insertions(+), 13 deletions(-) diff --git a/src/displayapp/screens/PineTimeStyle.cpp b/src/displayapp/screens/PineTimeStyle.cpp index b249416a80..10f2da66e1 100644 --- a/src/displayapp/screens/PineTimeStyle.cpp +++ b/src/displayapp/screens/PineTimeStyle.cpp @@ -15,6 +15,21 @@ #include "../DisplayApp.h" /* + * This file is part of the Infinitime distribution (https://github.com/JF002/Infinitime). + * Copyright (c) 2021 Kieran Cawthray. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, version 3. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * * PineTimeStyle watchface for Infinitime created by Kieran Cawthray * Based on WatchFaceDigital * Style/layout copied from TimeStyle for Pebble by Dan Tilden (github.com/tilden) @@ -38,7 +53,7 @@ PineTimeStyle::PineTimeStyle(DisplayApp* app, settingsController {settingsController}, heartRateController {heartRateController} { - /* This sets the watchface number to return to after leaving the menu*/ + /* This sets the watchface number to return to after leaving the menu */ settingsController.SetClockFace(2); displayedChar[0] = 0; @@ -47,7 +62,7 @@ PineTimeStyle::PineTimeStyle(DisplayApp* app, displayedChar[3] = 0; displayedChar[4] = 0; - /*Create a 200px wide background rectangle*/ + /* Create a 200px wide background rectangle */ timebar = lv_obj_create(lv_scr_act(), nullptr); lv_obj_set_style_local_bg_color(timebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x000000)); @@ -55,7 +70,7 @@ PineTimeStyle::PineTimeStyle(DisplayApp* app, lv_obj_set_size(timebar, 200, 240); lv_obj_align(timebar, lv_scr_act(), LV_ALIGN_IN_TOP_LEFT, 5, 0); - /*Display the time*/ + /* Display the time */ timeDD1 = lv_label_create(lv_scr_act(), nullptr); lv_obj_set_style_local_text_font(timeDD1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, &open_sans_light); @@ -69,7 +84,7 @@ PineTimeStyle::PineTimeStyle(DisplayApp* app, lv_label_set_text(timeDD2, "34"); lv_obj_align(timeDD2, timebar, LV_ALIGN_IN_BOTTOM_MID, 5, -5); - /*Create a 40px wide bar down the right side of the screen*/ + /* Create a 40px wide bar down the right side of the screen */ sidebar = lv_obj_create(lv_scr_act(), nullptr); lv_obj_set_style_local_bg_color(sidebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x008080)); @@ -77,7 +92,7 @@ PineTimeStyle::PineTimeStyle(DisplayApp* app, lv_obj_set_size(sidebar, 40, 240); lv_obj_align(sidebar, lv_scr_act(), LV_ALIGN_IN_TOP_RIGHT, 0, 0); - /*Display icons*/ + /* Display icons */ batteryIcon = lv_label_create(lv_scr_act(), nullptr); lv_obj_set_style_local_text_color(batteryIcon, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x000000)); @@ -86,17 +101,14 @@ PineTimeStyle::PineTimeStyle(DisplayApp* app, batteryPlug = lv_label_create(lv_scr_act(), nullptr); lv_obj_set_style_local_text_color(batteryPlug, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x000000)); - //lv_label_set_text(batteryPlug, Symbols::plug); lv_obj_align(batteryPlug, sidebar, LV_ALIGN_IN_TOP_MID, 0, 2); bleIcon = lv_label_create(lv_scr_act(), nullptr); lv_obj_set_style_local_text_color(bleIcon, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x000000)); - //lv_label_set_text(bleIcon, BleIcon::GetIcon(false)); lv_obj_align(bleIcon, sidebar, LV_ALIGN_IN_TOP_MID, 0, 25); notificationIcon = lv_label_create(lv_scr_act(), nullptr); lv_obj_set_style_local_text_color(notificationIcon, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x000000)); - //lv_label_set_text(notificationIcon, NotificationIcon::GetIcon(false)); lv_obj_align(notificationIcon, sidebar, LV_ALIGN_IN_TOP_MID, 0, 40); /* Calendar icon */ @@ -137,7 +149,7 @@ PineTimeStyle::PineTimeStyle(DisplayApp* app, lv_obj_set_size(calendarCrossBar2, 8, 3); lv_obj_align(calendarCrossBar2, calendarBar2, LV_ALIGN_IN_BOTTOM_MID, 0, 0); - /*Display date*/ + /* Display date */ dateDayOfWeek = lv_label_create(lv_scr_act(), nullptr); lv_obj_set_style_local_text_color(dateDayOfWeek, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x000000)); @@ -154,7 +166,7 @@ PineTimeStyle::PineTimeStyle(DisplayApp* app, lv_label_set_text(dateMonth, "MAR"); lv_obj_align(dateMonth, sidebar, LV_ALIGN_CENTER, 0, 32); - /*Display heartrate info*/ + /* Display heartrate info */ heartbeatIcon = lv_label_create(lv_scr_act(), nullptr); lv_obj_set_style_local_text_color(heartbeatIcon, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x000000)); @@ -208,10 +220,8 @@ bool PineTimeStyle::Refresh() { if (notificationState.Get() == true) { lv_label_set_text(notificationIcon, NotificationIcon::GetIcon(true)); lv_obj_realign(notificationIcon); - //lv_obj_align(bleIcon, sidebar, LV_ALIGN_IN_TOP_MID, -8, 25); } else { lv_label_set_text(notificationIcon, NotificationIcon::GetIcon(false)); - //lv_obj_align(bleIcon, sidebar, LV_ALIGN_IN_TOP_MID, 0, 25); } } @@ -248,7 +258,7 @@ bool PineTimeStyle::Refresh() { char hourStr[3]; char minStr[3]; - /*Display the time as 2 pairs of digits*/ + /* Display the time as 2 pairs of digits */ sprintf(hourStr, "%c%c", hoursChar[0], hoursChar[1]); lv_label_set_text(timeDD1, hourStr); From 249b6db6f5a5a7ac6cfaf96b1d8e59306ffe1333 Mon Sep 17 00:00:00 2001 From: Kieran Cawthray Date: Wed, 19 May 2021 17:05:33 +0200 Subject: [PATCH 010/173] Remove newline modifications --- src/displayapp/screens/Clock.cpp | 2 +- src/displayapp/screens/PineTimeStyle.cpp | 2 +- src/displayapp/screens/settings/SettingWatchFace.cpp | 2 +- src/libs/lv_conf.h | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/displayapp/screens/Clock.cpp b/src/displayapp/screens/Clock.cpp index e0c1f62bd8..4f0efd9219 100644 --- a/src/displayapp/screens/Clock.cpp +++ b/src/displayapp/screens/Clock.cpp @@ -105,4 +105,4 @@ std::unique_ptr Clock::WatchFaceCustomScreen() { return std::make_unique(app, dateTimeController, batteryController, bleController, notificatioManager, settingsController); } -*/ +*/ \ No newline at end of file diff --git a/src/displayapp/screens/PineTimeStyle.cpp b/src/displayapp/screens/PineTimeStyle.cpp index 10f2da66e1..f6597ca952 100644 --- a/src/displayapp/screens/PineTimeStyle.cpp +++ b/src/displayapp/screens/PineTimeStyle.cpp @@ -301,4 +301,4 @@ bool PineTimeStyle::Refresh() { } return running; -} +} \ No newline at end of file diff --git a/src/displayapp/screens/settings/SettingWatchFace.cpp b/src/displayapp/screens/settings/SettingWatchFace.cpp index 33d41416d9..3e73489d6f 100644 --- a/src/displayapp/screens/settings/SettingWatchFace.cpp +++ b/src/displayapp/screens/settings/SettingWatchFace.cpp @@ -90,4 +90,4 @@ void SettingWatchFace::UpdateSelected(lv_obj_t* object, lv_event_t event) { } } } -} +} \ No newline at end of file diff --git a/src/libs/lv_conf.h b/src/libs/lv_conf.h index cabc1859b1..a03a483303 100644 --- a/src/libs/lv_conf.h +++ b/src/libs/lv_conf.h @@ -759,4 +759,4 @@ typedef void* lv_obj_user_data_t; /*--END OF LV_CONF_H--*/ -#endif /*LV_CONF_H*/ +#endif /*LV_CONF_H*/ \ No newline at end of file From 5c413016a7b9e78040fb8e5b48cd37b7963362df Mon Sep 17 00:00:00 2001 From: Kieran Cawthray Date: Wed, 19 May 2021 17:27:42 +0200 Subject: [PATCH 011/173] Move GPL license header --- src/displayapp/screens/PineTimeStyle.cpp | 31 ++++++++++++------------ 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/src/displayapp/screens/PineTimeStyle.cpp b/src/displayapp/screens/PineTimeStyle.cpp index f6597ca952..787bb40a02 100644 --- a/src/displayapp/screens/PineTimeStyle.cpp +++ b/src/displayapp/screens/PineTimeStyle.cpp @@ -1,19 +1,3 @@ -#include "PineTimeStyle.h" - -#include -#include -#include -#include "BatteryIcon.h" -#include "BleIcon.h" -#include "NotificationIcon.h" -#include "Symbols.h" -#include "components/battery/BatteryController.h" -#include "components/ble/BleController.h" -#include "components/ble/NotificationManager.h" -#include "components/heartrate/HeartRateController.h" -#include "components/settings/Settings.h" -#include "../DisplayApp.h" - /* * This file is part of the Infinitime distribution (https://github.com/JF002/Infinitime). * Copyright (c) 2021 Kieran Cawthray. @@ -35,6 +19,21 @@ * Style/layout copied from TimeStyle for Pebble by Dan Tilden (github.com/tilden) */ +#include "PineTimeStyle.h" +#include +#include +#include +#include "BatteryIcon.h" +#include "BleIcon.h" +#include "NotificationIcon.h" +#include "Symbols.h" +#include "components/battery/BatteryController.h" +#include "components/ble/BleController.h" +#include "components/ble/NotificationManager.h" +#include "components/heartrate/HeartRateController.h" +#include "components/settings/Settings.h" +#include "../DisplayApp.h" + using namespace Pinetime::Applications::Screens; PineTimeStyle::PineTimeStyle(DisplayApp* app, From d0df278b0be2aae0493d901569a094dba221ce99 Mon Sep 17 00:00:00 2001 From: hassless <85612141+hassless@users.noreply.github.com> Date: Wed, 9 Jun 2021 13:47:22 +0200 Subject: [PATCH 012/173] Update BatteryIcon.cpp Improvement to the mapping of battery percentage to the battery icon to be displayed. --- src/displayapp/screens/BatteryIcon.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/displayapp/screens/BatteryIcon.cpp b/src/displayapp/screens/BatteryIcon.cpp index 6b54a30523..ff8a138113 100644 --- a/src/displayapp/screens/BatteryIcon.cpp +++ b/src/displayapp/screens/BatteryIcon.cpp @@ -4,13 +4,13 @@ using namespace Pinetime::Applications::Screens; const char* BatteryIcon::GetBatteryIcon(int batteryPercent) { - if (batteryPercent > 90) + if (batteryPercent > 87) return Symbols::batteryFull; - if (batteryPercent > 75) + if (batteryPercent > 62) return Symbols::batteryThreeQuarter; - if (batteryPercent > 50) + if (batteryPercent > 37) return Symbols::batteryHalf; - if (batteryPercent > 25) + if (batteryPercent > 12) return Symbols::batteryOneQuarter; return Symbols::batteryEmpty; } From 123c6f19176c5e86ff040eb4b059cbe1b4876ba5 Mon Sep 17 00:00:00 2001 From: Riku Isokoski Date: Fri, 11 Jun 2021 13:26:28 +0300 Subject: [PATCH 013/173] Fix touchevent tap --- src/displayapp/DisplayApp.cpp | 11 +++++------ src/displayapp/DisplayApp.h | 2 +- src/displayapp/screens/settings/QuickSettings.cpp | 9 +-------- 3 files changed, 7 insertions(+), 15 deletions(-) diff --git a/src/displayapp/DisplayApp.cpp b/src/displayapp/DisplayApp.cpp index 7b03d569c4..c8e5d2e8b8 100644 --- a/src/displayapp/DisplayApp.cpp +++ b/src/displayapp/DisplayApp.cpp @@ -162,7 +162,8 @@ void DisplayApp::Refresh() { case Messages::TouchEvent: { if (state != States::Running) break; - auto gesture = OnTouchEvent(); + auto info = touchPanel.GetTouchInfo(); + auto gesture = OnTouchEvent(info); if (!currentScreen->OnTouchEvent(gesture)) { if (currentApp == Apps::Clock) { switch (gesture) { @@ -183,6 +184,8 @@ void DisplayApp::Refresh() { } } else if (returnTouchEvent == gesture) { LoadApp(returnToApp, returnDirection); + } else if (touchMode == TouchModes::Gestures) { + lvgl.SetNewTapEvent(info.x, info.y); } } } break; @@ -368,14 +371,10 @@ void DisplayApp::PushMessage(Messages msg) { } } -TouchEvents DisplayApp::OnTouchEvent() { - auto info = touchPanel.GetTouchInfo(); +TouchEvents DisplayApp::OnTouchEvent(Pinetime::Drivers::Cst816S::TouchInfos info) { if (info.isTouch) { switch (info.gesture) { case Pinetime::Drivers::Cst816S::Gestures::SingleTap: - if (touchMode == TouchModes::Gestures) { - lvgl.SetNewTapEvent(info.x, info.y); - } return TouchEvents::Tap; case Pinetime::Drivers::Cst816S::Gestures::LongPress: return TouchEvents::LongTap; diff --git a/src/displayapp/DisplayApp.h b/src/displayapp/DisplayApp.h index 0c7bd21622..14cd7ad5ce 100644 --- a/src/displayapp/DisplayApp.h +++ b/src/displayapp/DisplayApp.h @@ -100,7 +100,7 @@ namespace Pinetime { TouchModes touchMode = TouchModes::Gestures; - TouchEvents OnTouchEvent(); + TouchEvents OnTouchEvent(Pinetime::Drivers::Cst816S::TouchInfos); void RunningState(); void IdleState(); static void Process(void* instance); diff --git a/src/displayapp/screens/settings/QuickSettings.cpp b/src/displayapp/screens/settings/QuickSettings.cpp index 3994794dd3..20d2cd2209 100644 --- a/src/displayapp/screens/settings/QuickSettings.cpp +++ b/src/displayapp/screens/settings/QuickSettings.cpp @@ -155,14 +155,7 @@ void QuickSettings::OnButtonEvent(lv_obj_t* object, lv_event_t event) { } bool QuickSettings::OnTouchEvent(Pinetime::Applications::TouchEvents event) { - switch (event) { - case Pinetime::Applications::TouchEvents::SwipeLeft: - running = false; - return false; - - default: - return true; - } + return false; } bool QuickSettings::Refresh() { From 21b6f85140f0424b9e6c8371db7e190dd0303182 Mon Sep 17 00:00:00 2001 From: Riku Isokoski Date: Fri, 11 Jun 2021 14:46:03 +0300 Subject: [PATCH 014/173] Fix regression --- src/displayapp/DisplayApp.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/displayapp/DisplayApp.cpp b/src/displayapp/DisplayApp.cpp index c8e5d2e8b8..b45822deda 100644 --- a/src/displayapp/DisplayApp.cpp +++ b/src/displayapp/DisplayApp.cpp @@ -185,7 +185,9 @@ void DisplayApp::Refresh() { } else if (returnTouchEvent == gesture) { LoadApp(returnToApp, returnDirection); } else if (touchMode == TouchModes::Gestures) { - lvgl.SetNewTapEvent(info.x, info.y); + if (gesture == TouchEvents::Tap) { + lvgl.SetNewTapEvent(info.x, info.y); + } } } } break; From 239b5547eae64d05f5d7544f0e11bfb877a75a02 Mon Sep 17 00:00:00 2001 From: Riku Isokoski Date: Fri, 11 Jun 2021 14:55:37 +0300 Subject: [PATCH 015/173] Fix another regression --- src/displayapp/screens/FlashLight.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/displayapp/screens/FlashLight.cpp b/src/displayapp/screens/FlashLight.cpp index 4568db4032..8d647a3663 100644 --- a/src/displayapp/screens/FlashLight.cpp +++ b/src/displayapp/screens/FlashLight.cpp @@ -70,5 +70,5 @@ bool FlashLight::Refresh() { } bool FlashLight::OnTouchEvent(Pinetime::Applications::TouchEvents event) { - return true; + return false; } From 607af27ba8790f68d06d7cc855ef3058558defd7 Mon Sep 17 00:00:00 2001 From: Kieran Cawthray Date: Sun, 20 Jun 2021 21:53:09 +0200 Subject: [PATCH 016/173] Add step count gauge - replaces heartrate in sidebar --- src/CMakeLists.txt | 2 + src/displayapp/screens/Clock.cpp | 2 +- src/displayapp/screens/PineTimeStyle.cpp | 56 +++++++++++++----------- src/displayapp/screens/PineTimeStyle.h | 9 ++-- 4 files changed, 39 insertions(+), 30 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 83f24394f1..aca865439e 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -235,6 +235,7 @@ set(LVGL_SRC libs/lvgl/src/lv_widgets/lv_cont.h libs/lvgl/src/lv_widgets/lv_cpicker.h libs/lvgl/src/lv_widgets/lv_dropdown.h + libs/lvgl/src/lv_widgets/lv_gauge.h libs/lvgl/src/lv_widgets/lv_img.h libs/lvgl/src/lv_widgets/lv_imgbtn.h libs/lvgl/src/lv_widgets/lv_keyboard.h @@ -321,6 +322,7 @@ set(LVGL_SRC libs/lvgl/src/lv_widgets/lv_cont.c libs/lvgl/src/lv_widgets/lv_cpicker.c libs/lvgl/src/lv_widgets/lv_dropdown.c + libs/lvgl/src/lv_widgets/lv_gauge.c libs/lvgl/src/lv_widgets/lv_img.c libs/lvgl/src/lv_widgets/lv_imgbtn.c libs/lvgl/src/lv_widgets/lv_keyboard.c diff --git a/src/displayapp/screens/Clock.cpp b/src/displayapp/screens/Clock.cpp index 3b288d9492..e0684976f3 100644 --- a/src/displayapp/screens/Clock.cpp +++ b/src/displayapp/screens/Clock.cpp @@ -87,7 +87,7 @@ std::unique_ptr Clock::PineTimeStyleScreen() { bleController, notificatioManager, settingsController, - heartRateController); + motionController); } /* diff --git a/src/displayapp/screens/PineTimeStyle.cpp b/src/displayapp/screens/PineTimeStyle.cpp index 787bb40a02..ab6e2a74de 100644 --- a/src/displayapp/screens/PineTimeStyle.cpp +++ b/src/displayapp/screens/PineTimeStyle.cpp @@ -30,7 +30,7 @@ #include "components/battery/BatteryController.h" #include "components/ble/BleController.h" #include "components/ble/NotificationManager.h" -#include "components/heartrate/HeartRateController.h" +#include "components/motion/MotionController.h" #include "components/settings/Settings.h" #include "../DisplayApp.h" @@ -42,7 +42,7 @@ PineTimeStyle::PineTimeStyle(DisplayApp* app, Controllers::Ble& bleController, Controllers::NotificationManager& notificatioManager, Controllers::Settings& settingsController, - Controllers::HeartRateController& heartRateController) + Controllers::MotionController& motionController) : Screen(app), currentDateTime {{}}, dateTimeController {dateTimeController}, @@ -50,7 +50,7 @@ PineTimeStyle::PineTimeStyle(DisplayApp* app, bleController {bleController}, notificatioManager {notificatioManager}, settingsController {settingsController}, - heartRateController {heartRateController} { + motionController {motionController} { /* This sets the watchface number to return to after leaving the menu */ settingsController.SetClockFace(2); @@ -165,17 +165,29 @@ PineTimeStyle::PineTimeStyle(DisplayApp* app, lv_label_set_text(dateMonth, "MAR"); lv_obj_align(dateMonth, sidebar, LV_ALIGN_CENTER, 0, 32); - /* Display heartrate info */ - - heartbeatIcon = lv_label_create(lv_scr_act(), nullptr); - lv_obj_set_style_local_text_color(heartbeatIcon, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x000000)); - lv_label_set_text(heartbeatIcon, Symbols::heartBeat); - lv_obj_align(heartbeatIcon, sidebar, LV_ALIGN_IN_BOTTOM_MID, 0, -30); - - 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(0x000000)); - lv_label_set_text(heartbeatValue, "---"); - lv_obj_align(heartbeatValue, sidebar, LV_ALIGN_IN_BOTTOM_MID, 0, -10); + // Step count gauge + static lv_color_t needle_colors[1]; + needle_colors[0] = LV_COLOR_WHITE; + stepGauge = lv_gauge_create(lv_scr_act(), nullptr); + lv_gauge_set_needle_count(stepGauge, 1, needle_colors); + lv_obj_set_size(stepGauge, 40, 40); + lv_obj_align(stepGauge, sidebar, LV_ALIGN_IN_BOTTOM_MID, 0, 0); + lv_gauge_set_scale(stepGauge, 360, 11, 0); + lv_gauge_set_angle_offset(stepGauge, 180); + lv_gauge_set_critical_value(stepGauge, (settingsController.GetStepsGoal() / 100)); + lv_gauge_set_range(stepGauge, 0, (settingsController.GetStepsGoal() / 100)); + lv_gauge_set_value(stepGauge, 0, 0); + + lv_obj_set_style_local_pad_right(stepGauge, LV_GAUGE_PART_MAIN, LV_STATE_DEFAULT, 3); + lv_obj_set_style_local_pad_left(stepGauge, LV_GAUGE_PART_MAIN, LV_STATE_DEFAULT, 3); + lv_obj_set_style_local_pad_bottom(stepGauge, LV_GAUGE_PART_MAIN, LV_STATE_DEFAULT, 3); + lv_obj_set_style_local_line_opa(stepGauge, LV_GAUGE_PART_MAIN, LV_STATE_DEFAULT, LV_OPA_COVER); + lv_obj_set_style_local_scale_width(stepGauge, LV_GAUGE_PART_MAIN, LV_STATE_DEFAULT, 4); + lv_obj_set_style_local_line_width(stepGauge, LV_GAUGE_PART_MAIN, LV_STATE_DEFAULT, 4); + lv_obj_set_style_local_line_color(stepGauge, LV_GAUGE_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_BLACK); + lv_obj_set_style_local_line_opa(stepGauge, LV_GAUGE_PART_NEEDLE, LV_STATE_DEFAULT, LV_OPA_COVER); + lv_obj_set_style_local_line_width(stepGauge, LV_GAUGE_PART_NEEDLE, LV_STATE_DEFAULT, 4); + lv_obj_set_style_local_pad_inner(stepGauge, LV_GAUGE_PART_NEEDLE, LV_STATE_DEFAULT, 4); backgroundLabel = lv_label_create(lv_scr_act(), nullptr); lv_obj_set_click(backgroundLabel, true); @@ -286,17 +298,11 @@ bool PineTimeStyle::Refresh() { } } - heartbeat = heartRateController.HeartRate(); - heartbeatRunning = heartRateController.State() != Controllers::HeartRateController::States::Stopped; - if (heartbeat.IsUpdated() || heartbeatRunning.IsUpdated()) { - char heartbeatBuffer[4]; - if (heartbeatRunning.Get()) - sprintf(heartbeatBuffer, "%d", heartbeat.Get()); - else - sprintf(heartbeatBuffer, "---"); - - lv_label_set_text(heartbeatValue, heartbeatBuffer); - lv_obj_realign(heartbeatValue); + stepCount = motionController.NbSteps(); + motionSensorOk = motionController.IsSensorOk(); + if (stepCount.IsUpdated() || motionSensorOk.IsUpdated()) { + lv_gauge_set_value(stepGauge, 0, (stepCount.Get() / 100)); + lv_obj_realign(stepGauge); } return running; diff --git a/src/displayapp/screens/PineTimeStyle.h b/src/displayapp/screens/PineTimeStyle.h index 55752412a0..4530bb5f1f 100644 --- a/src/displayapp/screens/PineTimeStyle.h +++ b/src/displayapp/screens/PineTimeStyle.h @@ -27,7 +27,7 @@ namespace Pinetime { Controllers::Ble& bleController, Controllers::NotificationManager& notificatioManager, Controllers::Settings& settingsController, - Controllers::HeartRateController& heartRateController); + Controllers::MotionController& motionController); ~PineTimeStyle() override; bool Refresh() override; @@ -45,8 +45,8 @@ namespace Pinetime { DirtyValue batteryPercentRemaining {}; DirtyValue bleState {}; DirtyValue> currentDateTime {}; - DirtyValue heartbeat {}; - DirtyValue heartbeatRunning {}; + DirtyValue motionSensorOk {}; + DirtyValue stepCount {}; DirtyValue notificationState {}; lv_obj_t* timebar; @@ -70,13 +70,14 @@ namespace Pinetime { lv_obj_t* heartbeatValue; lv_obj_t* heartbeatBpm; lv_obj_t* notificationIcon; + lv_obj_t* stepGauge; Controllers::DateTime& dateTimeController; Controllers::Battery& batteryController; Controllers::Ble& bleController; Controllers::NotificationManager& notificatioManager; Controllers::Settings& settingsController; - Controllers::HeartRateController& heartRateController; + Controllers::MotionController& motionController; }; } } From 266573deff61b25e924738bc046c03edfeeb0ef8 Mon Sep 17 00:00:00 2001 From: Kieran Cawthray Date: Sun, 20 Jun 2021 21:57:28 +0200 Subject: [PATCH 017/173] Enable 12/24h functionality --- src/displayapp/screens/PineTimeStyle.cpp | 30 +++++++++++++++++++++++- src/displayapp/screens/PineTimeStyle.h | 1 + 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/src/displayapp/screens/PineTimeStyle.cpp b/src/displayapp/screens/PineTimeStyle.cpp index ab6e2a74de..6f7ec3a07c 100644 --- a/src/displayapp/screens/PineTimeStyle.cpp +++ b/src/displayapp/screens/PineTimeStyle.cpp @@ -83,6 +83,12 @@ PineTimeStyle::PineTimeStyle(DisplayApp* app, lv_label_set_text(timeDD2, "34"); lv_obj_align(timeDD2, timebar, LV_ALIGN_IN_BOTTOM_MID, 5, -5); + timeAMPM = lv_label_create(lv_scr_act(), nullptr); + lv_obj_set_style_local_text_color(timeAMPM, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x008080)); + lv_obj_set_style_local_text_line_space(timeAMPM, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, -3); + lv_label_set_text(timeAMPM, ""); + lv_obj_align(timeAMPM, timebar, LV_ALIGN_IN_BOTTOM_LEFT, 2, -20); + /* Create a 40px wide bar down the right side of the screen */ sidebar = lv_obj_create(lv_scr_act(), nullptr); @@ -257,7 +263,25 @@ bool PineTimeStyle::Refresh() { sprintf(minutesChar, "%02d", static_cast(minute)); char hoursChar[3]; - sprintf(hoursChar, "%02d", hour); + char ampmChar[5]; + + if (settingsController.GetClockType() == Controllers::Settings::ClockType::H24) { + sprintf(hoursChar, "%02d", hour); + } else { + if (hour == 0 && hour != 12) { + hour = 12; + sprintf(ampmChar, "A\nM"); + } else if (hour == 12 && hour != 0) { + hour = 12; + sprintf(ampmChar, "P\nM"); + } else if (hour < 12 && hour != 0) { + sprintf(ampmChar, "A\nM"); + } else if (hour > 12 && hour != 0) { + hour = hour - 12; + sprintf(ampmChar, "P\nM"); + } + sprintf(hoursChar, "%02d", hour); + } if (hoursChar[0] != displayedChar[0] || hoursChar[1] != displayedChar[1] || minutesChar[0] != displayedChar[2] || minutesChar[1] != displayedChar[3]) { @@ -269,6 +293,10 @@ bool PineTimeStyle::Refresh() { char hourStr[3]; char minStr[3]; + if (settingsController.GetClockType() == Controllers::Settings::ClockType::H12) { + lv_label_set_text(timeAMPM, ampmChar); + } + /* Display the time as 2 pairs of digits */ sprintf(hourStr, "%c%c", hoursChar[0], hoursChar[1]); lv_label_set_text(timeDD1, hourStr); diff --git a/src/displayapp/screens/PineTimeStyle.h b/src/displayapp/screens/PineTimeStyle.h index 4530bb5f1f..7c99c6a71f 100644 --- a/src/displayapp/screens/PineTimeStyle.h +++ b/src/displayapp/screens/PineTimeStyle.h @@ -53,6 +53,7 @@ namespace Pinetime { lv_obj_t* sidebar; lv_obj_t* timeDD1; lv_obj_t* timeDD2; + lv_obj_t* timeAMPM; lv_obj_t* dateDayOfWeek; lv_obj_t* dateDay; lv_obj_t* dateMonth; From be505fc15fef5d87c311a442f291dd1cbd86fd40 Mon Sep 17 00:00:00 2001 From: Kieran Cawthray Date: Mon, 21 Jun 2021 20:06:47 +0200 Subject: [PATCH 018/173] Set step gauge outer to be white when step goal is reached --- src/displayapp/screens/PineTimeStyle.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/displayapp/screens/PineTimeStyle.cpp b/src/displayapp/screens/PineTimeStyle.cpp index 6f7ec3a07c..0dc4117c61 100644 --- a/src/displayapp/screens/PineTimeStyle.cpp +++ b/src/displayapp/screens/PineTimeStyle.cpp @@ -329,8 +329,12 @@ bool PineTimeStyle::Refresh() { stepCount = motionController.NbSteps(); motionSensorOk = motionController.IsSensorOk(); if (stepCount.IsUpdated() || motionSensorOk.IsUpdated()) { - lv_gauge_set_value(stepGauge, 0, (stepCount.Get() / 100)); - lv_obj_realign(stepGauge); + lv_gauge_set_value(stepGauge, 0, (stepCount.Get() / 100)); + lv_obj_realign(stepGauge); + if (stepCount.Get() > settingsController.GetStepsGoal()) { + lv_obj_set_style_local_line_color(stepGauge, LV_GAUGE_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_WHITE); + lv_obj_set_style_local_scale_grad_color(stepGauge, LV_GAUGE_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_WHITE); + } } return running; From c3f854ba65967631282a719743f68943f4c6c86f Mon Sep 17 00:00:00 2001 From: Kieran Cawthray Date: Tue, 22 Jun 2021 21:32:27 +0200 Subject: [PATCH 019/173] Add font source file --- src/displayapp/fonts/open_sans_light.ttf | Bin 0 -> 222412 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 src/displayapp/fonts/open_sans_light.ttf diff --git a/src/displayapp/fonts/open_sans_light.ttf b/src/displayapp/fonts/open_sans_light.ttf new file mode 100644 index 0000000000000000000000000000000000000000..0d381897da20345fa63112f19042561f44ee3aa0 GIT binary patch literal 222412 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%0AG%b#%#Weyp=oz<}IGPqm z)8c4aT%)1Wt!Z(MiMFk2@iJ>#98HU(X>l|yj;6)Yv^bg;N7LeHS{zM_Yxd#ySkvN~ zeHg82+}v^bg;*NE&CYg!yli=%0AG%cHosL)|1w>IGPqm)8c4a98HU( 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 Date: Wed, 23 Jun 2021 22:14:34 +0200 Subject: [PATCH 020/173] Move static needle_colors array to member variable --- src/displayapp/screens/PineTimeStyle.cpp | 1 - src/displayapp/screens/PineTimeStyle.h | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/src/displayapp/screens/PineTimeStyle.cpp b/src/displayapp/screens/PineTimeStyle.cpp index 0dc4117c61..678099c0c0 100644 --- a/src/displayapp/screens/PineTimeStyle.cpp +++ b/src/displayapp/screens/PineTimeStyle.cpp @@ -172,7 +172,6 @@ PineTimeStyle::PineTimeStyle(DisplayApp* app, lv_obj_align(dateMonth, sidebar, LV_ALIGN_CENTER, 0, 32); // Step count gauge - static lv_color_t needle_colors[1]; needle_colors[0] = LV_COLOR_WHITE; stepGauge = lv_gauge_create(lv_scr_act(), nullptr); lv_gauge_set_needle_count(stepGauge, 1, needle_colors); diff --git a/src/displayapp/screens/PineTimeStyle.h b/src/displayapp/screens/PineTimeStyle.h index 7c99c6a71f..70794cc522 100644 --- a/src/displayapp/screens/PineTimeStyle.h +++ b/src/displayapp/screens/PineTimeStyle.h @@ -72,6 +72,7 @@ namespace Pinetime { lv_obj_t* heartbeatBpm; lv_obj_t* notificationIcon; lv_obj_t* stepGauge; + lv_color_t needle_colors[1]; Controllers::DateTime& dateTimeController; Controllers::Battery& batteryController; From 38ab0add487183c2f7e0a1e545de49a8ad7b17e1 Mon Sep 17 00:00:00 2001 From: Kieran Cawthray Date: Thu, 24 Jun 2021 19:15:23 +0200 Subject: [PATCH 021/173] PineTimeStyle color picker initial commit --- src/CMakeLists.txt | 1 + src/displayapp/Apps.h | 3 +- src/displayapp/DisplayApp.cpp | 5 + .../screens/settings/SettingPineTimeStyle.cpp | 302 ++++++++++++++++++ .../screens/settings/SettingPineTimeStyle.h | 58 ++++ src/displayapp/screens/settings/Settings.cpp | 15 + src/displayapp/screens/settings/Settings.h | 3 +- 7 files changed, 385 insertions(+), 2 deletions(-) create mode 100644 src/displayapp/screens/settings/SettingPineTimeStyle.cpp create mode 100644 src/displayapp/screens/settings/SettingPineTimeStyle.h diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index aca865439e..caf015b035 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -420,6 +420,7 @@ list(APPEND SOURCE_FILES displayapp/screens/settings/SettingWakeUp.cpp displayapp/screens/settings/SettingDisplay.cpp displayapp/screens/settings/SettingSteps.cpp + displayapp/screens/settings/SettingPineTimeStyle.cpp ## Watch faces displayapp/icons/bg_clock.c diff --git a/src/displayapp/Apps.h b/src/displayapp/Apps.h index 684e3a46b5..dd51fdb4a0 100644 --- a/src/displayapp/Apps.h +++ b/src/displayapp/Apps.h @@ -30,7 +30,8 @@ namespace Pinetime { SettingTimeFormat, SettingDisplay, SettingWakeUp, - SettingSteps + SettingSteps, + SettingPineTimeStyle }; } } diff --git a/src/displayapp/DisplayApp.cpp b/src/displayapp/DisplayApp.cpp index de93428c97..48a012a88f 100644 --- a/src/displayapp/DisplayApp.cpp +++ b/src/displayapp/DisplayApp.cpp @@ -42,6 +42,7 @@ #include "displayapp/screens/settings/SettingWakeUp.h" #include "displayapp/screens/settings/SettingDisplay.h" #include "displayapp/screens/settings/SettingSteps.h" +#include "displayapp/screens/settings/SettingPineTimeStyle.h" using namespace Pinetime::Applications; using namespace Pinetime::Applications::Display; @@ -323,6 +324,10 @@ void DisplayApp::LoadApp(Apps app, DisplayApp::FullRefreshDirections direction) currentScreen = std::make_unique(this, settingsController); ReturnApp(Apps::Settings, FullRefreshDirections::Down, TouchEvents::SwipeDown); break; + case Apps::SettingPineTimeStyle: + currentScreen = std::make_unique(this, settingsController); + ReturnApp(Apps::Settings, FullRefreshDirections::Down, TouchEvents::SwipeDown); + break; case Apps::BatteryInfo: currentScreen = std::make_unique(this, batteryController); ReturnApp(Apps::Settings, FullRefreshDirections::Down, TouchEvents::SwipeDown); diff --git a/src/displayapp/screens/settings/SettingPineTimeStyle.cpp b/src/displayapp/screens/settings/SettingPineTimeStyle.cpp new file mode 100644 index 0000000000..3aceeb7140 --- /dev/null +++ b/src/displayapp/screens/settings/SettingPineTimeStyle.cpp @@ -0,0 +1,302 @@ +#include "SettingPineTimeStyle.h" +#include +#include "displayapp/DisplayApp.h" +#include "displayapp/screens/Symbols.h" + +using namespace Pinetime::Applications::Screens; + +namespace { + static void event_handler(lv_obj_t * obj, lv_event_t event) { + SettingPineTimeStyle* screen = static_cast(obj->user_data); + screen->UpdateSelected(obj, event); + } +} + +SettingPineTimeStyle::SettingPineTimeStyle( + Pinetime::Applications::DisplayApp *app, Pinetime::Controllers::Settings &settingsController) : + Screen(app), + settingsController{settingsController} +{ + + timebar = lv_obj_create(lv_scr_act(), nullptr); + lv_obj_set_style_local_bg_color(timebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x000000)); + lv_obj_set_style_local_radius(timebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, 0); + lv_obj_set_size(timebar, 200, 240); + lv_obj_align(timebar, lv_scr_act(), LV_ALIGN_IN_TOP_LEFT, 5, 0); + + /* Display the time */ + + timeDD1 = lv_label_create(lv_scr_act(), nullptr); + lv_obj_set_style_local_text_font(timeDD1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, &open_sans_light); + lv_obj_set_style_local_text_color(timeDD1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x008080)); + lv_label_set_text(timeDD1, "12"); + lv_obj_align(timeDD1, timebar, LV_ALIGN_IN_TOP_MID, 5, 5); + + timeDD2 = lv_label_create(lv_scr_act(), nullptr); + lv_obj_set_style_local_text_font(timeDD2, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, &open_sans_light); + lv_obj_set_style_local_text_color(timeDD2, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x008080)); + lv_label_set_text(timeDD2, "34"); + lv_obj_align(timeDD2, timebar, LV_ALIGN_IN_BOTTOM_MID, 5, -5); + + timeAMPM = lv_label_create(lv_scr_act(), nullptr); + lv_obj_set_style_local_text_color(timeAMPM, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x008080)); + lv_obj_set_style_local_text_line_space(timeAMPM, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, -3); + lv_label_set_text(timeAMPM, "A\nM"); + lv_obj_align(timeAMPM, timebar, LV_ALIGN_IN_BOTTOM_LEFT, 2, -20); + + /* Create a 40px wide bar down the right side of the screen */ + + sidebar = lv_obj_create(lv_scr_act(), nullptr); + lv_obj_set_style_local_bg_color(sidebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x008080)); + lv_obj_set_style_local_radius(sidebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, 0); + lv_obj_set_size(sidebar, 40, 240); + lv_obj_align(sidebar, lv_scr_act(), LV_ALIGN_IN_TOP_RIGHT, 0, 0); + + /* Display icons */ + + batteryIcon = lv_label_create(lv_scr_act(), nullptr); + lv_obj_set_style_local_text_color(batteryIcon, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x000000)); + lv_label_set_text(batteryIcon, Symbols::batteryFull); + lv_obj_align(batteryIcon, sidebar, LV_ALIGN_IN_TOP_MID, 0, 2); + + bleIcon = lv_label_create(lv_scr_act(), nullptr); + lv_obj_set_style_local_text_color(bleIcon, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x000000)); + lv_label_set_text(bleIcon, Symbols::bluetooth); + lv_obj_align(bleIcon, sidebar, LV_ALIGN_IN_TOP_MID, 0, 25); + + /* Calendar icon */ + + calendarOuter = lv_obj_create(lv_scr_act(), nullptr); + lv_obj_set_style_local_bg_color(calendarOuter, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x000000)); + lv_obj_set_style_local_radius(calendarOuter, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, 0); + lv_obj_set_size(calendarOuter, 34, 34); + lv_obj_align(calendarOuter, sidebar, LV_ALIGN_CENTER, 0, 0); + + calendarInner = lv_obj_create(lv_scr_act(), nullptr); + lv_obj_set_style_local_bg_color(calendarInner, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0xffffff)); + lv_obj_set_style_local_radius(calendarInner, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, 0); + lv_obj_set_size(calendarInner, 27, 27); + lv_obj_align(calendarInner, calendarOuter, LV_ALIGN_CENTER, 0, 0); + + calendarBar1 = lv_obj_create(lv_scr_act(), nullptr); + lv_obj_set_style_local_bg_color(calendarBar1, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x000000)); + lv_obj_set_style_local_radius(calendarBar1, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, 0); + lv_obj_set_size(calendarBar1, 3, 12); + lv_obj_align(calendarBar1, calendarOuter, LV_ALIGN_IN_TOP_MID, -6, -3); + + calendarBar2 = lv_obj_create(lv_scr_act(), nullptr); + lv_obj_set_style_local_bg_color(calendarBar2, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x000000)); + lv_obj_set_style_local_radius(calendarBar2, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, 0); + lv_obj_set_size(calendarBar2, 3, 12); + lv_obj_align(calendarBar2, calendarOuter, LV_ALIGN_IN_TOP_MID, 6, -3); + + calendarCrossBar1 = lv_obj_create(lv_scr_act(), nullptr); + lv_obj_set_style_local_bg_color(calendarCrossBar1, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x000000)); + lv_obj_set_style_local_radius(calendarCrossBar1, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, 0); + lv_obj_set_size(calendarCrossBar1, 8, 3); + lv_obj_align(calendarCrossBar1, calendarBar1, LV_ALIGN_IN_BOTTOM_MID, 0, 0); + + calendarCrossBar2 = lv_obj_create(lv_scr_act(), nullptr); + lv_obj_set_style_local_bg_color(calendarCrossBar2, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x000000)); + lv_obj_set_style_local_radius(calendarCrossBar2, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, 0); + lv_obj_set_size(calendarCrossBar2, 8, 3); + lv_obj_align(calendarCrossBar2, calendarBar2, LV_ALIGN_IN_BOTTOM_MID, 0, 0); + + /* Display date */ + + dateDayOfWeek = lv_label_create(lv_scr_act(), nullptr); + lv_obj_set_style_local_text_color(dateDayOfWeek, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x000000)); + lv_label_set_text(dateDayOfWeek, "THU"); + lv_obj_align(dateDayOfWeek, sidebar, LV_ALIGN_CENTER, 0, -34); + + dateDay = lv_label_create(lv_scr_act(), nullptr); + lv_obj_set_style_local_text_color(dateDay, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x000000)); + lv_label_set_text(dateDay, "25"); + lv_obj_align(dateDay, sidebar, LV_ALIGN_CENTER, 0, 3); + + dateMonth = lv_label_create(lv_scr_act(), nullptr); + lv_obj_set_style_local_text_color(dateMonth, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x000000)); + lv_label_set_text(dateMonth, "MAR"); + lv_obj_align(dateMonth, sidebar, LV_ALIGN_CENTER, 0, 32); + + // Step count gauge + needle_colors[0] = LV_COLOR_WHITE; + stepGauge = lv_gauge_create(lv_scr_act(), nullptr); + lv_gauge_set_needle_count(stepGauge, 1, needle_colors); + lv_obj_set_size(stepGauge, 40, 40); + lv_obj_align(stepGauge, sidebar, LV_ALIGN_IN_BOTTOM_MID, 0, 0); + lv_gauge_set_scale(stepGauge, 360, 11, 0); + lv_gauge_set_angle_offset(stepGauge, 180); + lv_gauge_set_critical_value(stepGauge, (100)); + lv_gauge_set_range(stepGauge, 0, (100)); + lv_gauge_set_value(stepGauge, 0, 0); + + lv_obj_set_style_local_pad_right(stepGauge, LV_GAUGE_PART_MAIN, LV_STATE_DEFAULT, 3); + lv_obj_set_style_local_pad_left(stepGauge, LV_GAUGE_PART_MAIN, LV_STATE_DEFAULT, 3); + lv_obj_set_style_local_pad_bottom(stepGauge, LV_GAUGE_PART_MAIN, LV_STATE_DEFAULT, 3); + lv_obj_set_style_local_line_opa(stepGauge, LV_GAUGE_PART_MAIN, LV_STATE_DEFAULT, LV_OPA_COVER); + lv_obj_set_style_local_scale_width(stepGauge, LV_GAUGE_PART_MAIN, LV_STATE_DEFAULT, 4); + lv_obj_set_style_local_line_width(stepGauge, LV_GAUGE_PART_MAIN, LV_STATE_DEFAULT, 4); + lv_obj_set_style_local_line_color(stepGauge, LV_GAUGE_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_BLACK); + lv_obj_set_style_local_line_opa(stepGauge, LV_GAUGE_PART_NEEDLE, LV_STATE_DEFAULT, LV_OPA_COVER); + lv_obj_set_style_local_line_width(stepGauge, LV_GAUGE_PART_NEEDLE, LV_STATE_DEFAULT, 4); + lv_obj_set_style_local_pad_inner(stepGauge, LV_GAUGE_PART_NEEDLE, LV_STATE_DEFAULT, 4); + +// lv_style_copy(&style_button, &lv_style_plain_color); +// style_button.body.opa = LV_OPA_50; + btnNextTime = lv_btn_create(lv_scr_act(), nullptr); + btnNextTime->user_data = this; + lv_obj_set_size(btnNextTime, 50, 50); + lv_obj_align(btnNextTime, lv_scr_act(), LV_ALIGN_CENTER, 55, -80); + lv_obj_set_style_local_value_str(btnNextTime, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, ">"); + lv_obj_set_event_cb(btnNextTime, event_handler); + + btnPrevTime = lv_btn_create(lv_scr_act(), nullptr); + btnPrevTime->user_data = this; + lv_obj_set_size(btnPrevTime, 50, 50); + lv_obj_align(btnPrevTime, lv_scr_act(), LV_ALIGN_CENTER, -55, -80); + lv_obj_set_style_local_value_str(btnPrevTime, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, "<"); + lv_obj_set_event_cb(btnPrevTime, event_handler); + + btnNextBar = lv_btn_create(lv_scr_act(), nullptr); + btnNextBar->user_data = this; + lv_obj_set_size(btnNextBar, 50, 50); + lv_obj_align(btnNextBar, lv_scr_act(), LV_ALIGN_CENTER, 55, 0); + lv_obj_set_style_local_value_str(btnNextBar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, ">"); + lv_obj_set_event_cb(btnNextBar, event_handler); + + btnPrevBar = lv_btn_create(lv_scr_act(), nullptr); + btnPrevBar->user_data = this; + lv_obj_set_size(btnPrevBar, 50, 50); + lv_obj_align(btnPrevBar, lv_scr_act(), LV_ALIGN_CENTER, -55, 0); + lv_obj_set_style_local_value_str(btnPrevBar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, "<"); + lv_obj_set_event_cb(btnPrevBar, event_handler); + + btnNextBG = lv_btn_create(lv_scr_act(), nullptr); + btnNextBG->user_data = this; + lv_obj_set_size(btnNextBG, 50, 50); + lv_obj_align(btnNextBG, lv_scr_act(), LV_ALIGN_CENTER, 55, 80); + lv_obj_set_style_local_value_str(btnNextBG, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, ">"); + lv_obj_set_event_cb(btnNextBG, event_handler); + + btnPrevBG = lv_btn_create(lv_scr_act(), nullptr); + btnPrevBG->user_data = this; + lv_obj_set_size(btnPrevBG, 50, 50); + lv_obj_align(btnPrevBG, lv_scr_act(), LV_ALIGN_CENTER, -55, 80); + lv_obj_set_style_local_value_str(btnPrevBG, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, "<"); + lv_obj_set_event_cb(btnPrevBG, event_handler); + + backgroundLabel = lv_label_create(lv_scr_act(), nullptr); + lv_obj_set_click(backgroundLabel, true); + lv_label_set_long_mode(backgroundLabel, LV_LABEL_LONG_CROP); + lv_obj_set_size(backgroundLabel, 240, 240); + lv_obj_set_pos(backgroundLabel, 0, 0); + lv_label_set_text(backgroundLabel, ""); + + +/* + + stepValue = lv_label_create(lv_scr_act(), nullptr); + lv_obj_set_style_local_text_font(stepValue, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, &jetbrains_mono_42); + lv_label_set_text_fmt(stepValue,"%i", settingsController.GetStepsGoal()); + lv_label_set_align(stepValue, LV_LABEL_ALIGN_CENTER); + lv_obj_align(stepValue, lv_scr_act(), LV_ALIGN_CENTER, 0, -10); + + btnPlus = lv_btn_create(lv_scr_act(), nullptr); + btnPlus->user_data = this; + lv_obj_set_size(btnPlus, 80, 50); + lv_obj_align(btnPlus, lv_scr_act(), LV_ALIGN_CENTER, 55, 80); + lv_obj_set_style_local_value_str(btnPlus, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, "+"); + lv_obj_set_event_cb(btnPlus, event_handler); + + btnMinus = lv_btn_create(lv_scr_act(), nullptr); + btnMinus->user_data = this; + lv_obj_set_size(btnMinus, 80, 50); + lv_obj_set_event_cb(btnMinus, event_handler); + lv_obj_align(btnMinus, lv_scr_act(), LV_ALIGN_CENTER, -55, 80); + lv_obj_set_style_local_value_str(btnMinus, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, "-"); +*/ +} + +SettingPineTimeStyle::~SettingPineTimeStyle() { + lv_obj_clean(lv_scr_act()); + settingsController.SaveSettings(); +} + +bool SettingPineTimeStyle::Refresh() { + return running; +} + +void SettingPineTimeStyle::UpdateSelected(lv_obj_t *object, lv_event_t event) { + uint8_t value = 0; + lv_color_t pts_colors[17] = {LV_COLOR_WHITE, LV_COLOR_SILVER, LV_COLOR_GRAY, LV_COLOR_BLACK, + LV_COLOR_RED, LV_COLOR_MAROON, LV_COLOR_YELLOW, LV_COLOR_OLIVE, + LV_COLOR_LIME, LV_COLOR_GREEN, LV_COLOR_CYAN, LV_COLOR_TEAL, + LV_COLOR_BLUE, LV_COLOR_NAVY, LV_COLOR_MAGENTA, LV_COLOR_PURPLE, + LV_COLOR_ORANGE}; + + if((object == btnNextBar) && (event == LV_EVENT_PRESSED)) { + if ( value < 16 ) { + value += 1; + lv_obj_set_style_local_bg_color(sidebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, pts_colors[value]); + } + } + if((object == btnPrevBar) && (event == LV_EVENT_PRESSED)) { + if ( value > 0 ) { + value -= 1; + lv_obj_set_style_local_bg_color(sidebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, pts_colors[value]); + } + } + if((object == btnNextTime) && (event == LV_EVENT_PRESSED)) { + if ( value < 16 ) { + value += 1; + lv_obj_set_style_local_text_color(timeDD1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, pts_colors[value]); + lv_obj_set_style_local_text_color(timeDD2, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, pts_colors[value]); + lv_obj_set_style_local_text_color(timeAMPM, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, pts_colors[value]); + } + } + if((object == btnPrevTime) && (event == LV_EVENT_PRESSED)) { + if ( value > 0 ) { + value -= 1; + lv_obj_set_style_local_text_color(timeDD1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, pts_colors[value]); + lv_obj_set_style_local_text_color(timeDD2, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, pts_colors[value]); + lv_obj_set_style_local_text_color(timeAMPM, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, pts_colors[value]); + } + } + if((object == btnNextBG) && (event == LV_EVENT_PRESSED)) { + if ( value < 16 ) { + value += 1; + lv_obj_set_style_local_bg_color(timebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, pts_colors[value]); + } + } + + if((object == btnPrevBG) && (event == LV_EVENT_PRESSED)) { + if ( value > 0 ) { + value -= 1; + lv_obj_set_style_local_bg_color(timebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, pts_colors[value]); + } + } + + + +/* + uint32_t value = settingsController.GetStepsGoal(); + if(object == btnPlus && (event == LV_EVENT_PRESSED)) { + value += 1000; + if ( value <= 500000 ) { + settingsController.SetStepsGoal(value); + lv_label_set_text_fmt(stepValue,"%i", settingsController.GetStepsGoal()); + lv_obj_align(stepValue, lv_scr_act(), LV_ALIGN_CENTER, 0, -10); + } + } + + if(object == btnMinus && (event == LV_EVENT_PRESSED)) { + value -= 1000; + if ( value >= 1000 ) { + settingsController.SetStepsGoal(value); + lv_label_set_text_fmt(stepValue,"%i", settingsController.GetStepsGoal()); + lv_obj_align(stepValue, lv_scr_act(), LV_ALIGN_CENTER, 0, -10); + } + } +*/ +} \ No newline at end of file diff --git a/src/displayapp/screens/settings/SettingPineTimeStyle.h b/src/displayapp/screens/settings/SettingPineTimeStyle.h new file mode 100644 index 0000000000..5b5e61bf1b --- /dev/null +++ b/src/displayapp/screens/settings/SettingPineTimeStyle.h @@ -0,0 +1,58 @@ +#pragma once + +#include +#include +#include "components/settings/Settings.h" +#include "displayapp/screens/Screen.h" + +namespace Pinetime { + + namespace Applications { + namespace Screens { + + class SettingPineTimeStyle : public Screen{ + public: + SettingPineTimeStyle(DisplayApp* app, Pinetime::Controllers::Settings &settingsController); + ~SettingPineTimeStyle() override; + + bool Refresh() override; + void UpdateSelected(lv_obj_t *object, lv_event_t event); + + private: + + Controllers::Settings& settingsController; + + lv_obj_t * btnNextTime; + lv_obj_t * btnPrevTime; + lv_obj_t * btnNextBar; + lv_obj_t * btnPrevBar; + lv_obj_t * btnNextBG; + lv_obj_t * btnPrevBG; + lv_obj_t * timeColor; + lv_obj_t * barColor; + lv_obj_t * bgColor; + lv_obj_t * timebar; + lv_obj_t * sidebar; + lv_obj_t * timeDD1; + lv_obj_t * timeDD2; + lv_obj_t * timeAMPM; + lv_obj_t * dateDayOfWeek; + lv_obj_t * dateDay; + lv_obj_t * dateMonth; + lv_obj_t * backgroundLabel; + lv_obj_t * batteryIcon; + lv_obj_t * bleIcon; + lv_obj_t * calendarOuter; + lv_obj_t * calendarInner; + lv_obj_t * calendarBar1; + lv_obj_t * calendarBar2; + lv_obj_t * calendarCrossBar1; + lv_obj_t * calendarCrossBar2; + lv_obj_t * stepGauge; + lv_color_t needle_colors[1]; + lv_color_t pts_colors[17]; + + }; + } + } +} diff --git a/src/displayapp/screens/settings/Settings.cpp b/src/displayapp/screens/settings/Settings.cpp index e63a35846e..733478048d 100644 --- a/src/displayapp/screens/settings/Settings.cpp +++ b/src/displayapp/screens/settings/Settings.cpp @@ -18,6 +18,9 @@ Settings::Settings(Pinetime::Applications::DisplayApp* app, Pinetime::Controller }, [this]() -> std::unique_ptr { return CreateScreen2(); + }, + [this]() -> std::unique_ptr { + return CreateScreen3(); }}, Screens::ScreenListModes::UpDown} { } @@ -60,3 +63,15 @@ std::unique_ptr Settings::CreateScreen2() { return std::make_unique(1, 2, app, settingsController, applications); } + +std::unique_ptr Settings::CreateScreen3() { + + std::array applications {{ + {Symbols::paintbrush, "PTS Colors", Apps::SettingPineTimeStyle}, + {Symbols::none, "None", Apps::None}, + {Symbols::none, "None", Apps::None}, + {Symbols::none, "None", Apps::None}, + }}; + + return std::make_unique(2, 2, app, settingsController, applications); +} diff --git a/src/displayapp/screens/settings/Settings.h b/src/displayapp/screens/settings/Settings.h index 711a6be6d0..12dd051460 100644 --- a/src/displayapp/screens/settings/Settings.h +++ b/src/displayapp/screens/settings/Settings.h @@ -21,10 +21,11 @@ namespace Pinetime { private: Controllers::Settings& settingsController; - ScreenList<2> screens; + ScreenList<3> screens; std::unique_ptr CreateScreen1(); std::unique_ptr CreateScreen2(); + std::unique_ptr CreateScreen3(); }; } } From 7edfc534819ba7b9a14523d84df62952852a0fe3 Mon Sep 17 00:00:00 2001 From: Kieran Cawthray Date: Thu, 24 Jun 2021 21:49:04 +0200 Subject: [PATCH 022/173] PineTimeStyle color picker add settings integration --- src/components/settings/Settings.h | 31 ++++++ .../screens/settings/SettingPineTimeStyle.cpp | 98 ++++++++++--------- 2 files changed, 84 insertions(+), 45 deletions(-) diff --git a/src/components/settings/Settings.h b/src/components/settings/Settings.h index 4409425be4..69e28e5b2d 100644 --- a/src/components/settings/Settings.h +++ b/src/components/settings/Settings.h @@ -27,6 +27,33 @@ namespace Pinetime { return settings.clockFace; }; + void SetPTSColorTime(uint8_t colorTime) { + if (colorTime != settings.PTSColorTime) + settingsChanged = true; + settings.PTSColorTime = colorTime; + }; + uint8_t GetPTSColorTime() const { + return settings.PTSColorTime; + }; + + void SetPTSColorBar(uint8_t colorBar) { + if (colorBar != settings.PTSColorBar) + settingsChanged = true; + settings.PTSColorBar = colorBar; + }; + uint8_t GetPTSColorBar() const { + return settings.PTSColorBar; + }; + + void SetPTSColorBG(uint8_t colorBG) { + if (colorBG != settings.PTSColorBG) + settingsChanged = true; + settings.PTSColorBG = colorBG; + }; + uint8_t GetPTSColorBG() const { + return settings.PTSColorBG; + }; + void SetAppMenu(uint8_t menu) { appMenu = menu; }; @@ -103,6 +130,10 @@ namespace Pinetime { uint8_t clockFace = 0; + uint8_t PTSColorTime = 11; + uint8_t PTSColorBar = 11; + uint8_t PTSColorBG = 3; + uint32_t stepsGoal = 10000; uint32_t screenTimeOut = 15000; diff --git a/src/displayapp/screens/settings/SettingPineTimeStyle.cpp b/src/displayapp/screens/settings/SettingPineTimeStyle.cpp index 3aceeb7140..3673e79cf6 100644 --- a/src/displayapp/screens/settings/SettingPineTimeStyle.cpp +++ b/src/displayapp/screens/settings/SettingPineTimeStyle.cpp @@ -12,6 +12,12 @@ namespace { } } +lv_color_t pts_colors[17] = {LV_COLOR_WHITE, LV_COLOR_SILVER, LV_COLOR_GRAY, LV_COLOR_BLACK, + LV_COLOR_RED, LV_COLOR_MAROON, LV_COLOR_YELLOW, LV_COLOR_OLIVE, + LV_COLOR_LIME, LV_COLOR_GREEN, LV_COLOR_CYAN, LV_COLOR_TEAL, + LV_COLOR_BLUE, LV_COLOR_NAVY, LV_COLOR_MAGENTA, LV_COLOR_PURPLE, + LV_COLOR_ORANGE}; + SettingPineTimeStyle::SettingPineTimeStyle( Pinetime::Applications::DisplayApp *app, Pinetime::Controllers::Settings &settingsController) : Screen(app), @@ -19,7 +25,7 @@ SettingPineTimeStyle::SettingPineTimeStyle( { timebar = lv_obj_create(lv_scr_act(), nullptr); - lv_obj_set_style_local_bg_color(timebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x000000)); + lv_obj_set_style_local_bg_color(timebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_BLACK); lv_obj_set_style_local_radius(timebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, 0); lv_obj_set_size(timebar, 200, 240); lv_obj_align(timebar, lv_scr_act(), LV_ALIGN_IN_TOP_LEFT, 5, 0); @@ -28,18 +34,18 @@ SettingPineTimeStyle::SettingPineTimeStyle( timeDD1 = lv_label_create(lv_scr_act(), nullptr); lv_obj_set_style_local_text_font(timeDD1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, &open_sans_light); - lv_obj_set_style_local_text_color(timeDD1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x008080)); + lv_obj_set_style_local_text_color(timeDD1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_TEAL); lv_label_set_text(timeDD1, "12"); lv_obj_align(timeDD1, timebar, LV_ALIGN_IN_TOP_MID, 5, 5); timeDD2 = lv_label_create(lv_scr_act(), nullptr); lv_obj_set_style_local_text_font(timeDD2, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, &open_sans_light); - lv_obj_set_style_local_text_color(timeDD2, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x008080)); + lv_obj_set_style_local_text_color(timeDD2, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_TEAL); lv_label_set_text(timeDD2, "34"); lv_obj_align(timeDD2, timebar, LV_ALIGN_IN_BOTTOM_MID, 5, -5); timeAMPM = lv_label_create(lv_scr_act(), nullptr); - lv_obj_set_style_local_text_color(timeAMPM, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x008080)); + lv_obj_set_style_local_text_color(timeAMPM, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_TEAL); lv_obj_set_style_local_text_line_space(timeAMPM, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, -3); lv_label_set_text(timeAMPM, "A\nM"); lv_obj_align(timeAMPM, timebar, LV_ALIGN_IN_BOTTOM_LEFT, 2, -20); @@ -47,7 +53,7 @@ SettingPineTimeStyle::SettingPineTimeStyle( /* Create a 40px wide bar down the right side of the screen */ sidebar = lv_obj_create(lv_scr_act(), nullptr); - lv_obj_set_style_local_bg_color(sidebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x008080)); + lv_obj_set_style_local_bg_color(sidebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_TEAL); lv_obj_set_style_local_radius(sidebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, 0); lv_obj_set_size(sidebar, 40, 240); lv_obj_align(sidebar, lv_scr_act(), LV_ALIGN_IN_TOP_RIGHT, 0, 0); @@ -142,6 +148,13 @@ SettingPineTimeStyle::SettingPineTimeStyle( lv_obj_set_style_local_line_width(stepGauge, LV_GAUGE_PART_NEEDLE, LV_STATE_DEFAULT, 4); lv_obj_set_style_local_pad_inner(stepGauge, LV_GAUGE_PART_NEEDLE, LV_STATE_DEFAULT, 4); + backgroundLabel = lv_label_create(lv_scr_act(), nullptr); + lv_obj_set_click(backgroundLabel, true); + lv_label_set_long_mode(backgroundLabel, LV_LABEL_LONG_CROP); + lv_obj_set_size(backgroundLabel, 240, 240); + lv_obj_set_pos(backgroundLabel, 0, 0); + lv_label_set_text(backgroundLabel, ""); + // lv_style_copy(&style_button, &lv_style_plain_color); // style_button.body.opa = LV_OPA_50; btnNextTime = lv_btn_create(lv_scr_act(), nullptr); @@ -186,14 +199,6 @@ SettingPineTimeStyle::SettingPineTimeStyle( lv_obj_set_style_local_value_str(btnPrevBG, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, "<"); lv_obj_set_event_cb(btnPrevBG, event_handler); - backgroundLabel = lv_label_create(lv_scr_act(), nullptr); - lv_obj_set_click(backgroundLabel, true); - lv_label_set_long_mode(backgroundLabel, LV_LABEL_LONG_CROP); - lv_obj_set_size(backgroundLabel, 240, 240); - lv_obj_set_pos(backgroundLabel, 0, 0); - lv_label_set_text(backgroundLabel, ""); - - /* stepValue = lv_label_create(lv_scr_act(), nullptr); @@ -228,52 +233,55 @@ bool SettingPineTimeStyle::Refresh() { } void SettingPineTimeStyle::UpdateSelected(lv_obj_t *object, lv_event_t event) { - uint8_t value = 0; - lv_color_t pts_colors[17] = {LV_COLOR_WHITE, LV_COLOR_SILVER, LV_COLOR_GRAY, LV_COLOR_BLACK, - LV_COLOR_RED, LV_COLOR_MAROON, LV_COLOR_YELLOW, LV_COLOR_OLIVE, - LV_COLOR_LIME, LV_COLOR_GREEN, LV_COLOR_CYAN, LV_COLOR_TEAL, - LV_COLOR_BLUE, LV_COLOR_NAVY, LV_COLOR_MAGENTA, LV_COLOR_PURPLE, - LV_COLOR_ORANGE}; + uint8_t valueTime = settingsController.GetPTSColorTime(); + uint8_t valueBar = settingsController.GetPTSColorBar(); + uint8_t valueBG = settingsController.GetPTSColorBG(); - if((object == btnNextBar) && (event == LV_EVENT_PRESSED)) { - if ( value < 16 ) { - value += 1; - lv_obj_set_style_local_bg_color(sidebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, pts_colors[value]); + if((object == btnNextTime) && (event == LV_EVENT_PRESSED)) { + if ( valueTime < 17 ) { + valueTime += 1; + settingsController.SetPTSColorTime(valueTime); + lv_obj_set_style_local_text_color(timeDD1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, pts_colors[valueTime]); + lv_obj_set_style_local_text_color(timeDD2, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, pts_colors[valueTime]); + lv_obj_set_style_local_text_color(timeAMPM, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, pts_colors[valueTime]); } } - if((object == btnPrevBar) && (event == LV_EVENT_PRESSED)) { - if ( value > 0 ) { - value -= 1; - lv_obj_set_style_local_bg_color(sidebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, pts_colors[value]); + if((object == btnPrevTime) && (event == LV_EVENT_PRESSED)) { + if ( valueTime > 0 ) { + valueTime -= 1; + settingsController.SetPTSColorTime(valueTime); + lv_obj_set_style_local_text_color(timeDD1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, pts_colors[valueTime]); + lv_obj_set_style_local_text_color(timeDD2, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, pts_colors[valueTime]); + lv_obj_set_style_local_text_color(timeAMPM, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, pts_colors[valueTime]); } } - if((object == btnNextTime) && (event == LV_EVENT_PRESSED)) { - if ( value < 16 ) { - value += 1; - lv_obj_set_style_local_text_color(timeDD1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, pts_colors[value]); - lv_obj_set_style_local_text_color(timeDD2, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, pts_colors[value]); - lv_obj_set_style_local_text_color(timeAMPM, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, pts_colors[value]); + if((object == btnNextBar) && (event == LV_EVENT_PRESSED)) { + if ( valueBar < 17 ) { + valueBar += 1; + settingsController.SetPTSColorBar(valueBar); + lv_obj_set_style_local_bg_color(sidebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, pts_colors[valueBar]); } } - if((object == btnPrevTime) && (event == LV_EVENT_PRESSED)) { - if ( value > 0 ) { - value -= 1; - lv_obj_set_style_local_text_color(timeDD1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, pts_colors[value]); - lv_obj_set_style_local_text_color(timeDD2, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, pts_colors[value]); - lv_obj_set_style_local_text_color(timeAMPM, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, pts_colors[value]); + if((object == btnPrevBar) && (event == LV_EVENT_PRESSED)) { + if ( valueBar > 0 ) { + valueBar -= 1; + settingsController.SetPTSColorBar(valueBar); + lv_obj_set_style_local_bg_color(sidebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, pts_colors[valueBar]); } } if((object == btnNextBG) && (event == LV_EVENT_PRESSED)) { - if ( value < 16 ) { - value += 1; - lv_obj_set_style_local_bg_color(timebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, pts_colors[value]); + if ( valueBG < 17 ) { + valueBG += 1; + settingsController.SetPTSColorBG(valueBG); + lv_obj_set_style_local_bg_color(timebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, pts_colors[valueBG]); } } if((object == btnPrevBG) && (event == LV_EVENT_PRESSED)) { - if ( value > 0 ) { - value -= 1; - lv_obj_set_style_local_bg_color(timebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, pts_colors[value]); + if ( valueBG > 0 ) { + valueBG -= 1; + settingsController.SetPTSColorBG(valueBG); + lv_obj_set_style_local_bg_color(timebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, pts_colors[valueBG]); } } From 8f16574992b1bb0f49b884f95cf9b7f5d709c6b6 Mon Sep 17 00:00:00 2001 From: Kieran Cawthray Date: Thu, 24 Jun 2021 21:51:23 +0200 Subject: [PATCH 023/173] PineTimeStyle color picker tidying --- .../screens/settings/SettingPineTimeStyle.cpp | 59 ++----------------- .../screens/settings/SettingPineTimeStyle.h | 2 - 2 files changed, 5 insertions(+), 56 deletions(-) diff --git a/src/displayapp/screens/settings/SettingPineTimeStyle.cpp b/src/displayapp/screens/settings/SettingPineTimeStyle.cpp index 3673e79cf6..dcdd6700cc 100644 --- a/src/displayapp/screens/settings/SettingPineTimeStyle.cpp +++ b/src/displayapp/screens/settings/SettingPineTimeStyle.cpp @@ -30,7 +30,7 @@ SettingPineTimeStyle::SettingPineTimeStyle( lv_obj_set_size(timebar, 200, 240); lv_obj_align(timebar, lv_scr_act(), LV_ALIGN_IN_TOP_LEFT, 5, 0); - /* Display the time */ + // Display the time timeDD1 = lv_label_create(lv_scr_act(), nullptr); lv_obj_set_style_local_text_font(timeDD1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, &open_sans_light); @@ -50,7 +50,7 @@ SettingPineTimeStyle::SettingPineTimeStyle( lv_label_set_text(timeAMPM, "A\nM"); lv_obj_align(timeAMPM, timebar, LV_ALIGN_IN_BOTTOM_LEFT, 2, -20); - /* Create a 40px wide bar down the right side of the screen */ + // Create a 40px wide bar down the right side of the screen sidebar = lv_obj_create(lv_scr_act(), nullptr); lv_obj_set_style_local_bg_color(sidebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_TEAL); @@ -58,7 +58,7 @@ SettingPineTimeStyle::SettingPineTimeStyle( lv_obj_set_size(sidebar, 40, 240); lv_obj_align(sidebar, lv_scr_act(), LV_ALIGN_IN_TOP_RIGHT, 0, 0); - /* Display icons */ + // Display icons batteryIcon = lv_label_create(lv_scr_act(), nullptr); lv_obj_set_style_local_text_color(batteryIcon, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x000000)); @@ -70,7 +70,7 @@ SettingPineTimeStyle::SettingPineTimeStyle( lv_label_set_text(bleIcon, Symbols::bluetooth); lv_obj_align(bleIcon, sidebar, LV_ALIGN_IN_TOP_MID, 0, 25); - /* Calendar icon */ + // Calendar icon calendarOuter = lv_obj_create(lv_scr_act(), nullptr); lv_obj_set_style_local_bg_color(calendarOuter, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x000000)); @@ -108,7 +108,7 @@ SettingPineTimeStyle::SettingPineTimeStyle( lv_obj_set_size(calendarCrossBar2, 8, 3); lv_obj_align(calendarCrossBar2, calendarBar2, LV_ALIGN_IN_BOTTOM_MID, 0, 0); - /* Display date */ + // Display date dateDayOfWeek = lv_label_create(lv_scr_act(), nullptr); lv_obj_set_style_local_text_color(dateDayOfWeek, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x000000)); @@ -155,8 +155,6 @@ SettingPineTimeStyle::SettingPineTimeStyle( lv_obj_set_pos(backgroundLabel, 0, 0); lv_label_set_text(backgroundLabel, ""); -// lv_style_copy(&style_button, &lv_style_plain_color); -// style_button.body.opa = LV_OPA_50; btnNextTime = lv_btn_create(lv_scr_act(), nullptr); btnNextTime->user_data = this; lv_obj_set_size(btnNextTime, 50, 50); @@ -198,29 +196,6 @@ SettingPineTimeStyle::SettingPineTimeStyle( lv_obj_align(btnPrevBG, lv_scr_act(), LV_ALIGN_CENTER, -55, 80); lv_obj_set_style_local_value_str(btnPrevBG, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, "<"); lv_obj_set_event_cb(btnPrevBG, event_handler); - -/* - - stepValue = lv_label_create(lv_scr_act(), nullptr); - lv_obj_set_style_local_text_font(stepValue, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, &jetbrains_mono_42); - lv_label_set_text_fmt(stepValue,"%i", settingsController.GetStepsGoal()); - lv_label_set_align(stepValue, LV_LABEL_ALIGN_CENTER); - lv_obj_align(stepValue, lv_scr_act(), LV_ALIGN_CENTER, 0, -10); - - btnPlus = lv_btn_create(lv_scr_act(), nullptr); - btnPlus->user_data = this; - lv_obj_set_size(btnPlus, 80, 50); - lv_obj_align(btnPlus, lv_scr_act(), LV_ALIGN_CENTER, 55, 80); - lv_obj_set_style_local_value_str(btnPlus, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, "+"); - lv_obj_set_event_cb(btnPlus, event_handler); - - btnMinus = lv_btn_create(lv_scr_act(), nullptr); - btnMinus->user_data = this; - lv_obj_set_size(btnMinus, 80, 50); - lv_obj_set_event_cb(btnMinus, event_handler); - lv_obj_align(btnMinus, lv_scr_act(), LV_ALIGN_CENTER, -55, 80); - lv_obj_set_style_local_value_str(btnMinus, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, "-"); -*/ } SettingPineTimeStyle::~SettingPineTimeStyle() { @@ -276,7 +251,6 @@ void SettingPineTimeStyle::UpdateSelected(lv_obj_t *object, lv_event_t event) { lv_obj_set_style_local_bg_color(timebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, pts_colors[valueBG]); } } - if((object == btnPrevBG) && (event == LV_EVENT_PRESSED)) { if ( valueBG > 0 ) { valueBG -= 1; @@ -284,27 +258,4 @@ void SettingPineTimeStyle::UpdateSelected(lv_obj_t *object, lv_event_t event) { lv_obj_set_style_local_bg_color(timebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, pts_colors[valueBG]); } } - - - -/* - uint32_t value = settingsController.GetStepsGoal(); - if(object == btnPlus && (event == LV_EVENT_PRESSED)) { - value += 1000; - if ( value <= 500000 ) { - settingsController.SetStepsGoal(value); - lv_label_set_text_fmt(stepValue,"%i", settingsController.GetStepsGoal()); - lv_obj_align(stepValue, lv_scr_act(), LV_ALIGN_CENTER, 0, -10); - } - } - - if(object == btnMinus && (event == LV_EVENT_PRESSED)) { - value -= 1000; - if ( value >= 1000 ) { - settingsController.SetStepsGoal(value); - lv_label_set_text_fmt(stepValue,"%i", settingsController.GetStepsGoal()); - lv_obj_align(stepValue, lv_scr_act(), LV_ALIGN_CENTER, 0, -10); - } - } -*/ } \ No newline at end of file diff --git a/src/displayapp/screens/settings/SettingPineTimeStyle.h b/src/displayapp/screens/settings/SettingPineTimeStyle.h index 5b5e61bf1b..b8ec9e9ec9 100644 --- a/src/displayapp/screens/settings/SettingPineTimeStyle.h +++ b/src/displayapp/screens/settings/SettingPineTimeStyle.h @@ -19,7 +19,6 @@ namespace Pinetime { void UpdateSelected(lv_obj_t *object, lv_event_t event); private: - Controllers::Settings& settingsController; lv_obj_t * btnNextTime; @@ -51,7 +50,6 @@ namespace Pinetime { lv_obj_t * stepGauge; lv_color_t needle_colors[1]; lv_color_t pts_colors[17]; - }; } } From 50b92e5dd6bd879b61e5038d3f064d486db864f6 Mon Sep 17 00:00:00 2001 From: Kieran Cawthray Date: Fri, 25 Jun 2021 14:47:56 +0200 Subject: [PATCH 024/173] Move array to member variable, retrieve colors from settings for display --- .../screens/settings/SettingPineTimeStyle.cpp | 17 +++++------------ .../screens/settings/SettingPineTimeStyle.h | 6 +++++- 2 files changed, 10 insertions(+), 13 deletions(-) diff --git a/src/displayapp/screens/settings/SettingPineTimeStyle.cpp b/src/displayapp/screens/settings/SettingPineTimeStyle.cpp index dcdd6700cc..bad0fec252 100644 --- a/src/displayapp/screens/settings/SettingPineTimeStyle.cpp +++ b/src/displayapp/screens/settings/SettingPineTimeStyle.cpp @@ -12,20 +12,13 @@ namespace { } } -lv_color_t pts_colors[17] = {LV_COLOR_WHITE, LV_COLOR_SILVER, LV_COLOR_GRAY, LV_COLOR_BLACK, - LV_COLOR_RED, LV_COLOR_MAROON, LV_COLOR_YELLOW, LV_COLOR_OLIVE, - LV_COLOR_LIME, LV_COLOR_GREEN, LV_COLOR_CYAN, LV_COLOR_TEAL, - LV_COLOR_BLUE, LV_COLOR_NAVY, LV_COLOR_MAGENTA, LV_COLOR_PURPLE, - LV_COLOR_ORANGE}; - SettingPineTimeStyle::SettingPineTimeStyle( Pinetime::Applications::DisplayApp *app, Pinetime::Controllers::Settings &settingsController) : Screen(app), settingsController{settingsController} { - timebar = lv_obj_create(lv_scr_act(), nullptr); - lv_obj_set_style_local_bg_color(timebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_BLACK); + lv_obj_set_style_local_bg_color(timebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, pts_colors[settingsController.GetPTSColorBG()]); lv_obj_set_style_local_radius(timebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, 0); lv_obj_set_size(timebar, 200, 240); lv_obj_align(timebar, lv_scr_act(), LV_ALIGN_IN_TOP_LEFT, 5, 0); @@ -34,18 +27,18 @@ SettingPineTimeStyle::SettingPineTimeStyle( timeDD1 = lv_label_create(lv_scr_act(), nullptr); lv_obj_set_style_local_text_font(timeDD1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, &open_sans_light); - lv_obj_set_style_local_text_color(timeDD1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_TEAL); + lv_obj_set_style_local_text_color(timeDD1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, pts_colors[settingsController.GetPTSColorTime()]); lv_label_set_text(timeDD1, "12"); lv_obj_align(timeDD1, timebar, LV_ALIGN_IN_TOP_MID, 5, 5); timeDD2 = lv_label_create(lv_scr_act(), nullptr); lv_obj_set_style_local_text_font(timeDD2, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, &open_sans_light); - lv_obj_set_style_local_text_color(timeDD2, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_TEAL); + lv_obj_set_style_local_text_color(timeDD2, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, pts_colors[settingsController.GetPTSColorTime()]); lv_label_set_text(timeDD2, "34"); lv_obj_align(timeDD2, timebar, LV_ALIGN_IN_BOTTOM_MID, 5, -5); timeAMPM = lv_label_create(lv_scr_act(), nullptr); - lv_obj_set_style_local_text_color(timeAMPM, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_TEAL); + lv_obj_set_style_local_text_color(timeAMPM, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, pts_colors[settingsController.GetPTSColorTime()]); lv_obj_set_style_local_text_line_space(timeAMPM, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, -3); lv_label_set_text(timeAMPM, "A\nM"); lv_obj_align(timeAMPM, timebar, LV_ALIGN_IN_BOTTOM_LEFT, 2, -20); @@ -53,7 +46,7 @@ SettingPineTimeStyle::SettingPineTimeStyle( // Create a 40px wide bar down the right side of the screen sidebar = lv_obj_create(lv_scr_act(), nullptr); - lv_obj_set_style_local_bg_color(sidebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_TEAL); + lv_obj_set_style_local_bg_color(sidebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, pts_colors[settingsController.GetPTSColorBar()]); lv_obj_set_style_local_radius(sidebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, 0); lv_obj_set_size(sidebar, 40, 240); lv_obj_align(sidebar, lv_scr_act(), LV_ALIGN_IN_TOP_RIGHT, 0, 0); diff --git a/src/displayapp/screens/settings/SettingPineTimeStyle.h b/src/displayapp/screens/settings/SettingPineTimeStyle.h index b8ec9e9ec9..9b20f9fb04 100644 --- a/src/displayapp/screens/settings/SettingPineTimeStyle.h +++ b/src/displayapp/screens/settings/SettingPineTimeStyle.h @@ -49,7 +49,11 @@ namespace Pinetime { lv_obj_t * calendarCrossBar2; lv_obj_t * stepGauge; lv_color_t needle_colors[1]; - lv_color_t pts_colors[17]; + lv_color_t pts_colors[17] = {LV_COLOR_WHITE, LV_COLOR_SILVER, LV_COLOR_GRAY, LV_COLOR_BLACK, + LV_COLOR_RED, LV_COLOR_MAROON, LV_COLOR_YELLOW, LV_COLOR_OLIVE, + LV_COLOR_LIME, LV_COLOR_GREEN, LV_COLOR_CYAN, LV_COLOR_TEAL, + LV_COLOR_BLUE, LV_COLOR_NAVY, LV_COLOR_MAGENTA, LV_COLOR_PURPLE, + LV_COLOR_ORANGE}; }; } } From 878dd1a7767bb4677ea629aef9d6fb98e2b2bc1a Mon Sep 17 00:00:00 2001 From: Kieran Cawthray Date: Fri, 25 Jun 2021 14:58:45 +0200 Subject: [PATCH 025/173] Use colors from settings for PineTimeStyle watchface --- src/displayapp/screens/PineTimeStyle.cpp | 10 +++++----- src/displayapp/screens/PineTimeStyle.h | 5 +++++ 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/displayapp/screens/PineTimeStyle.cpp b/src/displayapp/screens/PineTimeStyle.cpp index 678099c0c0..c75931c41b 100644 --- a/src/displayapp/screens/PineTimeStyle.cpp +++ b/src/displayapp/screens/PineTimeStyle.cpp @@ -64,7 +64,7 @@ PineTimeStyle::PineTimeStyle(DisplayApp* app, /* Create a 200px wide background rectangle */ timebar = lv_obj_create(lv_scr_act(), nullptr); - lv_obj_set_style_local_bg_color(timebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x000000)); + lv_obj_set_style_local_bg_color(timebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, pts_colors[settingsController.GetPTSColorBG()]); lv_obj_set_style_local_radius(timebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, 0); lv_obj_set_size(timebar, 200, 240); lv_obj_align(timebar, lv_scr_act(), LV_ALIGN_IN_TOP_LEFT, 5, 0); @@ -73,18 +73,18 @@ PineTimeStyle::PineTimeStyle(DisplayApp* app, timeDD1 = lv_label_create(lv_scr_act(), nullptr); lv_obj_set_style_local_text_font(timeDD1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, &open_sans_light); - lv_obj_set_style_local_text_color(timeDD1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x008080)); + lv_obj_set_style_local_text_color(timeDD1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, pts_colors[settingsController.GetPTSColorTime()]); lv_label_set_text(timeDD1, "12"); lv_obj_align(timeDD1, timebar, LV_ALIGN_IN_TOP_MID, 5, 5); timeDD2 = lv_label_create(lv_scr_act(), nullptr); lv_obj_set_style_local_text_font(timeDD2, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, &open_sans_light); - lv_obj_set_style_local_text_color(timeDD2, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x008080)); + lv_obj_set_style_local_text_color(timeDD2, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, pts_colors[settingsController.GetPTSColorTime()]); lv_label_set_text(timeDD2, "34"); lv_obj_align(timeDD2, timebar, LV_ALIGN_IN_BOTTOM_MID, 5, -5); timeAMPM = lv_label_create(lv_scr_act(), nullptr); - lv_obj_set_style_local_text_color(timeAMPM, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x008080)); + lv_obj_set_style_local_text_color(timeAMPM, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, pts_colors[settingsController.GetPTSColorTime()]); lv_obj_set_style_local_text_line_space(timeAMPM, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, -3); lv_label_set_text(timeAMPM, ""); lv_obj_align(timeAMPM, timebar, LV_ALIGN_IN_BOTTOM_LEFT, 2, -20); @@ -92,7 +92,7 @@ PineTimeStyle::PineTimeStyle(DisplayApp* app, /* Create a 40px wide bar down the right side of the screen */ sidebar = lv_obj_create(lv_scr_act(), nullptr); - lv_obj_set_style_local_bg_color(sidebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x008080)); + lv_obj_set_style_local_bg_color(sidebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, pts_colors[settingsController.GetPTSColorBar()]); lv_obj_set_style_local_radius(sidebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, 0); lv_obj_set_size(sidebar, 40, 240); lv_obj_align(sidebar, lv_scr_act(), LV_ALIGN_IN_TOP_RIGHT, 0, 0); diff --git a/src/displayapp/screens/PineTimeStyle.h b/src/displayapp/screens/PineTimeStyle.h index 70794cc522..97b39a012d 100644 --- a/src/displayapp/screens/PineTimeStyle.h +++ b/src/displayapp/screens/PineTimeStyle.h @@ -73,6 +73,11 @@ namespace Pinetime { lv_obj_t* notificationIcon; lv_obj_t* stepGauge; lv_color_t needle_colors[1]; + lv_color_t pts_colors[17] = {LV_COLOR_WHITE, LV_COLOR_SILVER, LV_COLOR_GRAY, LV_COLOR_BLACK, + LV_COLOR_RED, LV_COLOR_MAROON, LV_COLOR_YELLOW, LV_COLOR_OLIVE, + LV_COLOR_LIME, LV_COLOR_GREEN, LV_COLOR_CYAN, LV_COLOR_TEAL, + LV_COLOR_BLUE, LV_COLOR_NAVY, LV_COLOR_MAGENTA, LV_COLOR_PURPLE, + LV_COLOR_ORANGE}; Controllers::DateTime& dateTimeController; Controllers::Battery& batteryController; From be22a9b1b8a3ca43cbf9e79d0a4f722d88d87ded Mon Sep 17 00:00:00 2001 From: Kieran Cawthray Date: Fri, 25 Jun 2021 15:09:18 +0200 Subject: [PATCH 026/173] Fix off-by-one error, reduce step gauge needle width --- src/displayapp/screens/PineTimeStyle.cpp | 2 +- src/displayapp/screens/settings/SettingPineTimeStyle.cpp | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/displayapp/screens/PineTimeStyle.cpp b/src/displayapp/screens/PineTimeStyle.cpp index c75931c41b..cbabca6f62 100644 --- a/src/displayapp/screens/PineTimeStyle.cpp +++ b/src/displayapp/screens/PineTimeStyle.cpp @@ -191,7 +191,7 @@ PineTimeStyle::PineTimeStyle(DisplayApp* app, lv_obj_set_style_local_line_width(stepGauge, LV_GAUGE_PART_MAIN, LV_STATE_DEFAULT, 4); lv_obj_set_style_local_line_color(stepGauge, LV_GAUGE_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_BLACK); lv_obj_set_style_local_line_opa(stepGauge, LV_GAUGE_PART_NEEDLE, LV_STATE_DEFAULT, LV_OPA_COVER); - lv_obj_set_style_local_line_width(stepGauge, LV_GAUGE_PART_NEEDLE, LV_STATE_DEFAULT, 4); + lv_obj_set_style_local_line_width(stepGauge, LV_GAUGE_PART_NEEDLE, LV_STATE_DEFAULT, 3); lv_obj_set_style_local_pad_inner(stepGauge, LV_GAUGE_PART_NEEDLE, LV_STATE_DEFAULT, 4); backgroundLabel = lv_label_create(lv_scr_act(), nullptr); diff --git a/src/displayapp/screens/settings/SettingPineTimeStyle.cpp b/src/displayapp/screens/settings/SettingPineTimeStyle.cpp index bad0fec252..876d2b40bd 100644 --- a/src/displayapp/screens/settings/SettingPineTimeStyle.cpp +++ b/src/displayapp/screens/settings/SettingPineTimeStyle.cpp @@ -138,7 +138,7 @@ SettingPineTimeStyle::SettingPineTimeStyle( lv_obj_set_style_local_line_width(stepGauge, LV_GAUGE_PART_MAIN, LV_STATE_DEFAULT, 4); lv_obj_set_style_local_line_color(stepGauge, LV_GAUGE_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_BLACK); lv_obj_set_style_local_line_opa(stepGauge, LV_GAUGE_PART_NEEDLE, LV_STATE_DEFAULT, LV_OPA_COVER); - lv_obj_set_style_local_line_width(stepGauge, LV_GAUGE_PART_NEEDLE, LV_STATE_DEFAULT, 4); + lv_obj_set_style_local_line_width(stepGauge, LV_GAUGE_PART_NEEDLE, LV_STATE_DEFAULT, 3); lv_obj_set_style_local_pad_inner(stepGauge, LV_GAUGE_PART_NEEDLE, LV_STATE_DEFAULT, 4); backgroundLabel = lv_label_create(lv_scr_act(), nullptr); @@ -206,7 +206,7 @@ void SettingPineTimeStyle::UpdateSelected(lv_obj_t *object, lv_event_t event) { uint8_t valueBG = settingsController.GetPTSColorBG(); if((object == btnNextTime) && (event == LV_EVENT_PRESSED)) { - if ( valueTime < 17 ) { + if ( valueTime < 16 ) { valueTime += 1; settingsController.SetPTSColorTime(valueTime); lv_obj_set_style_local_text_color(timeDD1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, pts_colors[valueTime]); @@ -224,7 +224,7 @@ void SettingPineTimeStyle::UpdateSelected(lv_obj_t *object, lv_event_t event) { } } if((object == btnNextBar) && (event == LV_EVENT_PRESSED)) { - if ( valueBar < 17 ) { + if ( valueBar < 16 ) { valueBar += 1; settingsController.SetPTSColorBar(valueBar); lv_obj_set_style_local_bg_color(sidebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, pts_colors[valueBar]); @@ -238,7 +238,7 @@ void SettingPineTimeStyle::UpdateSelected(lv_obj_t *object, lv_event_t event) { } } if((object == btnNextBG) && (event == LV_EVENT_PRESSED)) { - if ( valueBG < 17 ) { + if ( valueBG < 16 ) { valueBG += 1; settingsController.SetPTSColorBG(valueBG); lv_obj_set_style_local_bg_color(timebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, pts_colors[valueBG]); From f3b40cb7a62c4927fb9fe921fdaa3b38809163f5 Mon Sep 17 00:00:00 2001 From: Kieran Cawthray Date: Fri, 25 Jun 2021 19:04:29 +0200 Subject: [PATCH 027/173] Make it loop around when you get to the end of the list of colors --- .../screens/settings/SettingPineTimeStyle.cpp | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/src/displayapp/screens/settings/SettingPineTimeStyle.cpp b/src/displayapp/screens/settings/SettingPineTimeStyle.cpp index 876d2b40bd..5e1396ad47 100644 --- a/src/displayapp/screens/settings/SettingPineTimeStyle.cpp +++ b/src/displayapp/screens/settings/SettingPineTimeStyle.cpp @@ -212,6 +212,12 @@ void SettingPineTimeStyle::UpdateSelected(lv_obj_t *object, lv_event_t event) { lv_obj_set_style_local_text_color(timeDD1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, pts_colors[valueTime]); lv_obj_set_style_local_text_color(timeDD2, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, pts_colors[valueTime]); lv_obj_set_style_local_text_color(timeAMPM, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, pts_colors[valueTime]); + } else { + valueTime = 0; + settingsController.SetPTSColorTime(valueTime); + lv_obj_set_style_local_text_color(timeDD1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, pts_colors[valueTime]); + lv_obj_set_style_local_text_color(timeDD2, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, pts_colors[valueTime]); + lv_obj_set_style_local_text_color(timeAMPM, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, pts_colors[valueTime]); } } if((object == btnPrevTime) && (event == LV_EVENT_PRESSED)) { @@ -221,6 +227,12 @@ void SettingPineTimeStyle::UpdateSelected(lv_obj_t *object, lv_event_t event) { lv_obj_set_style_local_text_color(timeDD1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, pts_colors[valueTime]); lv_obj_set_style_local_text_color(timeDD2, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, pts_colors[valueTime]); lv_obj_set_style_local_text_color(timeAMPM, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, pts_colors[valueTime]); + } else { + valueTime = 16; + settingsController.SetPTSColorTime(valueTime); + lv_obj_set_style_local_text_color(timeDD1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, pts_colors[valueTime]); + lv_obj_set_style_local_text_color(timeDD2, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, pts_colors[valueTime]); + lv_obj_set_style_local_text_color(timeAMPM, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, pts_colors[valueTime]); } } if((object == btnNextBar) && (event == LV_EVENT_PRESSED)) { @@ -228,6 +240,10 @@ void SettingPineTimeStyle::UpdateSelected(lv_obj_t *object, lv_event_t event) { valueBar += 1; settingsController.SetPTSColorBar(valueBar); lv_obj_set_style_local_bg_color(sidebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, pts_colors[valueBar]); + } else { + valueBar = 0; + settingsController.SetPTSColorBar(valueBar); + lv_obj_set_style_local_bg_color(sidebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, pts_colors[valueBar]); } } if((object == btnPrevBar) && (event == LV_EVENT_PRESSED)) { @@ -235,6 +251,10 @@ void SettingPineTimeStyle::UpdateSelected(lv_obj_t *object, lv_event_t event) { valueBar -= 1; settingsController.SetPTSColorBar(valueBar); lv_obj_set_style_local_bg_color(sidebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, pts_colors[valueBar]); + } else { + valueBar = 16; + settingsController.SetPTSColorBar(valueBar); + lv_obj_set_style_local_bg_color(sidebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, pts_colors[valueBar]); } } if((object == btnNextBG) && (event == LV_EVENT_PRESSED)) { @@ -242,6 +262,10 @@ void SettingPineTimeStyle::UpdateSelected(lv_obj_t *object, lv_event_t event) { valueBG += 1; settingsController.SetPTSColorBG(valueBG); lv_obj_set_style_local_bg_color(timebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, pts_colors[valueBG]); + } else { + valueBG = 0; + settingsController.SetPTSColorBG(valueBG); + lv_obj_set_style_local_bg_color(timebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, pts_colors[valueBG]); } } if((object == btnPrevBG) && (event == LV_EVENT_PRESSED)) { @@ -249,6 +273,10 @@ void SettingPineTimeStyle::UpdateSelected(lv_obj_t *object, lv_event_t event) { valueBG -= 1; settingsController.SetPTSColorBG(valueBG); lv_obj_set_style_local_bg_color(timebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, pts_colors[valueBG]); + } else { + valueBG = 16; + settingsController.SetPTSColorBG(valueBG); + lv_obj_set_style_local_bg_color(timebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, pts_colors[valueBG]); } } } \ No newline at end of file From 800daecf9038dc495327da71aff5dcf3cee82e40 Mon Sep 17 00:00:00 2001 From: Kieran Cawthray Date: Fri, 25 Jun 2021 21:36:55 +0200 Subject: [PATCH 028/173] Add a check to set default colors if all colors are white --- src/displayapp/screens/PineTimeStyle.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/displayapp/screens/PineTimeStyle.cpp b/src/displayapp/screens/PineTimeStyle.cpp index cbabca6f62..ad1d2db066 100644 --- a/src/displayapp/screens/PineTimeStyle.cpp +++ b/src/displayapp/screens/PineTimeStyle.cpp @@ -207,6 +207,13 @@ PineTimeStyle::~PineTimeStyle() { } bool PineTimeStyle::Refresh() { + //Feels like a hack, but if all the colors are white, this is probably not what the user wants + if (settingsController.GetPTSColorTime() + settingsController.GetPTSColorBar() + settingsController.GetPTSColorBG() == 0) { + settingsController.SetPTSColorTime(11); + settingsController.SetPTSColorBar(11); + settingsController.SetPTSColorBG(3); + } + batteryPercentRemaining = batteryController.PercentRemaining(); if (batteryPercentRemaining.IsUpdated()) { auto batteryPercent = batteryPercentRemaining.Get(); From 6889cf1ed86f72f85a208961956ef6dff5972210 Mon Sep 17 00:00:00 2001 From: Kieran Cawthray Date: Fri, 25 Jun 2021 21:55:51 +0200 Subject: [PATCH 029/173] Fix the fix, whoops --- src/displayapp/screens/PineTimeStyle.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/displayapp/screens/PineTimeStyle.cpp b/src/displayapp/screens/PineTimeStyle.cpp index ad1d2db066..76db86e314 100644 --- a/src/displayapp/screens/PineTimeStyle.cpp +++ b/src/displayapp/screens/PineTimeStyle.cpp @@ -61,6 +61,13 @@ PineTimeStyle::PineTimeStyle(DisplayApp* app, displayedChar[3] = 0; displayedChar[4] = 0; + //Feels like a hack, but if all the colors are white, this is probably not what the user wants + if (settingsController.GetPTSColorTime() + settingsController.GetPTSColorBar() + settingsController.GetPTSColorBG() == 0) { + settingsController.SetPTSColorTime(11); + settingsController.SetPTSColorBar(11); + settingsController.SetPTSColorBG(3); + } + /* Create a 200px wide background rectangle */ timebar = lv_obj_create(lv_scr_act(), nullptr); @@ -207,13 +214,6 @@ PineTimeStyle::~PineTimeStyle() { } bool PineTimeStyle::Refresh() { - //Feels like a hack, but if all the colors are white, this is probably not what the user wants - if (settingsController.GetPTSColorTime() + settingsController.GetPTSColorBar() + settingsController.GetPTSColorBG() == 0) { - settingsController.SetPTSColorTime(11); - settingsController.SetPTSColorBar(11); - settingsController.SetPTSColorBG(3); - } - batteryPercentRemaining = batteryController.PercentRemaining(); if (batteryPercentRemaining.IsUpdated()) { auto batteryPercent = batteryPercentRemaining.Get(); From 660a8597f6edc66deec94782817613e1a4f84a6d Mon Sep 17 00:00:00 2001 From: Kieran Cawthray Date: Sun, 27 Jun 2021 15:24:17 +0200 Subject: [PATCH 030/173] Add reset button, reduce button opacity --- .../screens/settings/SettingPineTimeStyle.cpp | 48 ++++++++++++++----- .../screens/settings/SettingPineTimeStyle.h | 1 + 2 files changed, 37 insertions(+), 12 deletions(-) diff --git a/src/displayapp/screens/settings/SettingPineTimeStyle.cpp b/src/displayapp/screens/settings/SettingPineTimeStyle.cpp index 5e1396ad47..ae66546418 100644 --- a/src/displayapp/screens/settings/SettingPineTimeStyle.cpp +++ b/src/displayapp/screens/settings/SettingPineTimeStyle.cpp @@ -150,45 +150,59 @@ SettingPineTimeStyle::SettingPineTimeStyle( btnNextTime = lv_btn_create(lv_scr_act(), nullptr); btnNextTime->user_data = this; - lv_obj_set_size(btnNextTime, 50, 50); - lv_obj_align(btnNextTime, lv_scr_act(), LV_ALIGN_CENTER, 55, -80); + lv_obj_set_size(btnNextTime, 60, 60); + lv_obj_align(btnNextTime, lv_scr_act(), LV_ALIGN_IN_RIGHT_MID, -15, -80); + lv_obj_set_style_local_bg_opa(btnNextTime, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, LV_OPA_30); lv_obj_set_style_local_value_str(btnNextTime, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, ">"); lv_obj_set_event_cb(btnNextTime, event_handler); btnPrevTime = lv_btn_create(lv_scr_act(), nullptr); btnPrevTime->user_data = this; - lv_obj_set_size(btnPrevTime, 50, 50); - lv_obj_align(btnPrevTime, lv_scr_act(), LV_ALIGN_CENTER, -55, -80); + lv_obj_set_size(btnPrevTime, 60, 60); + lv_obj_align(btnPrevTime, lv_scr_act(), LV_ALIGN_IN_LEFT_MID, 15, -80); + lv_obj_set_style_local_bg_opa(btnPrevTime, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, LV_OPA_30); lv_obj_set_style_local_value_str(btnPrevTime, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, "<"); lv_obj_set_event_cb(btnPrevTime, event_handler); btnNextBar = lv_btn_create(lv_scr_act(), nullptr); btnNextBar->user_data = this; - lv_obj_set_size(btnNextBar, 50, 50); - lv_obj_align(btnNextBar, lv_scr_act(), LV_ALIGN_CENTER, 55, 0); + lv_obj_set_size(btnNextBar, 60, 60); + lv_obj_align(btnNextBar, lv_scr_act(), LV_ALIGN_IN_RIGHT_MID, -15, 0); + lv_obj_set_style_local_bg_opa(btnNextBar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, LV_OPA_30); lv_obj_set_style_local_value_str(btnNextBar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, ">"); lv_obj_set_event_cb(btnNextBar, event_handler); btnPrevBar = lv_btn_create(lv_scr_act(), nullptr); btnPrevBar->user_data = this; - lv_obj_set_size(btnPrevBar, 50, 50); - lv_obj_align(btnPrevBar, lv_scr_act(), LV_ALIGN_CENTER, -55, 0); + lv_obj_set_size(btnPrevBar, 60, 60); + lv_obj_align(btnPrevBar, lv_scr_act(), LV_ALIGN_IN_LEFT_MID, 15, 0); + lv_obj_set_style_local_bg_opa(btnPrevBar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, LV_OPA_30); lv_obj_set_style_local_value_str(btnPrevBar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, "<"); lv_obj_set_event_cb(btnPrevBar, event_handler); btnNextBG = lv_btn_create(lv_scr_act(), nullptr); btnNextBG->user_data = this; - lv_obj_set_size(btnNextBG, 50, 50); - lv_obj_align(btnNextBG, lv_scr_act(), LV_ALIGN_CENTER, 55, 80); + lv_obj_set_size(btnNextBG, 60, 60); + lv_obj_align(btnNextBG, lv_scr_act(), LV_ALIGN_IN_RIGHT_MID, -15, 80); + lv_obj_set_style_local_bg_opa(btnNextBG, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, LV_OPA_30); lv_obj_set_style_local_value_str(btnNextBG, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, ">"); lv_obj_set_event_cb(btnNextBG, event_handler); btnPrevBG = lv_btn_create(lv_scr_act(), nullptr); btnPrevBG->user_data = this; - lv_obj_set_size(btnPrevBG, 50, 50); - lv_obj_align(btnPrevBG, lv_scr_act(), LV_ALIGN_CENTER, -55, 80); + lv_obj_set_size(btnPrevBG, 60, 60); + lv_obj_align(btnPrevBG, lv_scr_act(), LV_ALIGN_IN_LEFT_MID, 15, 80); + lv_obj_set_style_local_bg_opa(btnPrevBG, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, LV_OPA_30); lv_obj_set_style_local_value_str(btnPrevBG, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, "<"); lv_obj_set_event_cb(btnPrevBG, event_handler); + + btnReset = lv_btn_create(lv_scr_act(), nullptr); + btnReset->user_data = this; + lv_obj_set_size(btnReset, 60, 60); + lv_obj_align(btnReset, lv_scr_act(), LV_ALIGN_CENTER, 0, 80); + lv_obj_set_style_local_bg_opa(btnReset, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, LV_OPA_30); + lv_obj_set_style_local_value_str(btnReset, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, "Rst"); + lv_obj_set_event_cb(btnReset, event_handler); } SettingPineTimeStyle::~SettingPineTimeStyle() { @@ -279,4 +293,14 @@ void SettingPineTimeStyle::UpdateSelected(lv_obj_t *object, lv_event_t event) { lv_obj_set_style_local_bg_color(timebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, pts_colors[valueBG]); } } + if((object == btnReset) && (event == LV_EVENT_PRESSED)) { + settingsController.SetPTSColorTime(11); + lv_obj_set_style_local_text_color(timeDD1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, pts_colors[11]); + lv_obj_set_style_local_text_color(timeDD2, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, pts_colors[11]); + lv_obj_set_style_local_text_color(timeAMPM, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, pts_colors[11]); + settingsController.SetPTSColorBar(11); + lv_obj_set_style_local_bg_color(sidebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, pts_colors[11]); + settingsController.SetPTSColorBG(3); + lv_obj_set_style_local_bg_color(timebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, pts_colors[3]); + } } \ No newline at end of file diff --git a/src/displayapp/screens/settings/SettingPineTimeStyle.h b/src/displayapp/screens/settings/SettingPineTimeStyle.h index 9b20f9fb04..fe449b2ec0 100644 --- a/src/displayapp/screens/settings/SettingPineTimeStyle.h +++ b/src/displayapp/screens/settings/SettingPineTimeStyle.h @@ -27,6 +27,7 @@ namespace Pinetime { lv_obj_t * btnPrevBar; lv_obj_t * btnNextBG; lv_obj_t * btnPrevBG; + lv_obj_t * btnReset; lv_obj_t * timeColor; lv_obj_t * barColor; lv_obj_t * bgColor; From 9bd180896e16bf7451bf7063a646ce1d4b9e44f4 Mon Sep 17 00:00:00 2001 From: Kieran Cawthray Date: Tue, 29 Jun 2021 21:12:39 +0200 Subject: [PATCH 031/173] Replace font file --- src/displayapp/fonts/open_sans_light.ttf | Bin 222412 -> 101696 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/src/displayapp/fonts/open_sans_light.ttf b/src/displayapp/fonts/open_sans_light.ttf index 0d381897da20345fa63112f19042561f44ee3aa0..6580d3a169e895d914f159c060b947e36746f275 100644 GIT binary patch delta 2970 zcmZ`*dtB627XO}melsu#$U_ZZBM@k=Pf!#UU*sdP6+tVX=?DW@1A{zFO&iS~rsZp_ zpOP>?vP83OZEdA>OI>vJIxyBHKXq6%G$3r1!-V*%;{${bYWbmS|~xFevfcSSy^NEi{1*%HO! zCZUsxiYpckn?7+rXrhpj8(r=^N7eDHPM|w0#6fPcV^OK4h<*@yswl*lIEtP3*FAL| zRG1+FUMO|j%PTItT2={qFbS}qEiH4Fo?H9EY>-nX(9o4flIxEoQ(byJ&!OX1TBkQU zshbR62ZpEuN)RfwfF{r;eW^)p(rW_4!N732kmB?o3#g4qtc8AsI|4(N3_0dHtdyhB z+KNNs^3ITMsyhppLMR(il#9?k6mIE`UTLDy(6Ww)SoXrNfe`dj8f0ecN20&R8fNnK zH^pqU7!Y-f>=K2vHx23%$L;@zoep?<$dGuxdtku$xHpZV!b^T)Psq4NOm0~EF`PDOg-qn`CvQevB0u=XVNHgn)T zL}@h2`vb-I_M2t@p$~_~OND+L%VEVh+=U5v1n;4NdQd7kD9?K?DtY)*yqcfp&Af$c zc_+WjC;1eAs6}Ym+GK5(Hb;9xTc>T%4rm9plUjo%)=u`3_Q&n-*pJz-+Q0SojxMBp z@5bol;ii?fVx@|=iIrXazF2`4DOPf{+1gxfm9}2nC|3TWHE4}?*hkox+YS4>_V?`H z*uV3B7M&Zz6I;)>9#ThJ<(SCWtM!mKGbV9Vb0gX}H#DC_Nb||&6Rp>qPqaMR;sKhg zS~@jv0b0Ua+B6rn*jk$8|FFf@G_5J_{F0_+K-04GkxdVK*T?iEmv>)G&#q=x1K+-z z$S>o5Z?wISZF7)*#XCB-BW)I54_au#nYjT8Z^1>b!X_Z@;3Vy%EQl*aVto*2^hZq)*KX0VAPy&kd@H)(UqL(sFOmx4p}2##2k|yY zC%=BWI1a}wWeo}<1fLhgBQaI&58_dX;g}#EjWABq8xq(Tn}WVbk(h=F9E~Zs6T|cq ziQKh*Zz7LTdS)WW*zU%B6ru+CyPO7}`i25wg^_h(a`C z5Q}zbj}Ev^mevuS&{>w%RhHZh@kl_Tbk`&#qdR)w4)nxt(2E#-B%FQ{P6|>n00WVR zK^Tm548c$dF$2Rf!h?|*C9!5otYa`%3S_*$M6xgucjLF1gltSk4svBRQ*jUO#eJBD z>6n3;n1$K6A9FAl4!nYGcuac9TX+r^@C4Rk4XUwI@~vStS+Ejbe1mWC40No*VVuKN z*}0eDxrXoXJzl`?a1`(0Rm?-4Y;V3)s1xtv7+Ix5hLR2cK>pD2k#fhGNl5pmx-rIuOxq6h|GY6LqF8)RpXVN5o63Ps9)S zuRb@K6BYjEZH(<|$;3Z#UN@529*^C4jdE!UO{IJ2Ub>H_(R7+YGw~B{pb1~-r;@q% zK>V4?sGKUOQqJnXX(6`LL$rt%(-L}^meMkM1RvpZ{2gcU3I2i4@G(BsWii`Vf-{1uPNb@L>4;ceAV^~Zi3P$_s*rQ*68;4i#EYOqSj z)9|SwYN#5fGSqNv#tu|r3$EZLY{XX7VI4N%S^TN~xgLB_jYV%X;5bg;B-gNy4X(wH zW}Wkk{E}359q;h>&|O+drORcR(AVLr2&pWY-@pIpF*f%?XIXikyUeLy?#Bc59Vy&b zZ%X0Y+m6X|l(|c+`GH}K-Yb>e`i@kt)pG~%YW>RryizY8$g}h-1Nm+JKpH1mEiQLS zVY%Lt#?$Jn2k`-_pOemcn%|!g9$f8h-`L`=MT9c3z;8kmH?w1vwRe!tvQ!StaXF@!Nl{;#9Mla(vXXXY;dQ*8 zH}FRGiok*_d@5)AJifT8riV}B0iI2g(VJdEMP%g?@j=oFyWGN8(hI|Q1+V1C_;G%M zpX60+-sX>rE{m?bGNo_IJ5zROxvVM>b-ZOquO^M3;k6V`3BuLP+t9of{W&9q>YcJVnbzo|vN`T&bRgpw delta 124726 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 Date: Tue, 29 Jun 2021 21:15:39 +0200 Subject: [PATCH 032/173] Fix bad merge --- src/displayapp/screens/PineTimeStyle.cpp | 27 ------------------------ 1 file changed, 27 deletions(-) diff --git a/src/displayapp/screens/PineTimeStyle.cpp b/src/displayapp/screens/PineTimeStyle.cpp index 57c0f3ba92..76db86e314 100644 --- a/src/displayapp/screens/PineTimeStyle.cpp +++ b/src/displayapp/screens/PineTimeStyle.cpp @@ -61,7 +61,6 @@ PineTimeStyle::PineTimeStyle(DisplayApp* app, displayedChar[3] = 0; displayedChar[4] = 0; -<<<<<<< HEAD //Feels like a hack, but if all the colors are white, this is probably not what the user wants if (settingsController.GetPTSColorTime() + settingsController.GetPTSColorBar() + settingsController.GetPTSColorBG() == 0) { settingsController.SetPTSColorTime(11); @@ -73,12 +72,6 @@ PineTimeStyle::PineTimeStyle(DisplayApp* app, timebar = lv_obj_create(lv_scr_act(), nullptr); lv_obj_set_style_local_bg_color(timebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, pts_colors[settingsController.GetPTSColorBG()]); -======= - /* Create a 200px wide background rectangle */ - - timebar = lv_obj_create(lv_scr_act(), nullptr); - lv_obj_set_style_local_bg_color(timebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x000000)); ->>>>>>> upstream/develop lv_obj_set_style_local_radius(timebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, 0); lv_obj_set_size(timebar, 200, 240); lv_obj_align(timebar, lv_scr_act(), LV_ALIGN_IN_TOP_LEFT, 5, 0); @@ -87,30 +80,18 @@ PineTimeStyle::PineTimeStyle(DisplayApp* app, timeDD1 = lv_label_create(lv_scr_act(), nullptr); lv_obj_set_style_local_text_font(timeDD1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, &open_sans_light); -<<<<<<< HEAD lv_obj_set_style_local_text_color(timeDD1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, pts_colors[settingsController.GetPTSColorTime()]); -======= - lv_obj_set_style_local_text_color(timeDD1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x008080)); ->>>>>>> upstream/develop lv_label_set_text(timeDD1, "12"); lv_obj_align(timeDD1, timebar, LV_ALIGN_IN_TOP_MID, 5, 5); timeDD2 = lv_label_create(lv_scr_act(), nullptr); lv_obj_set_style_local_text_font(timeDD2, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, &open_sans_light); -<<<<<<< HEAD lv_obj_set_style_local_text_color(timeDD2, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, pts_colors[settingsController.GetPTSColorTime()]); -======= - lv_obj_set_style_local_text_color(timeDD2, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x008080)); ->>>>>>> upstream/develop lv_label_set_text(timeDD2, "34"); lv_obj_align(timeDD2, timebar, LV_ALIGN_IN_BOTTOM_MID, 5, -5); timeAMPM = lv_label_create(lv_scr_act(), nullptr); -<<<<<<< HEAD lv_obj_set_style_local_text_color(timeAMPM, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, pts_colors[settingsController.GetPTSColorTime()]); -======= - lv_obj_set_style_local_text_color(timeAMPM, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x008080)); ->>>>>>> upstream/develop lv_obj_set_style_local_text_line_space(timeAMPM, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, -3); lv_label_set_text(timeAMPM, ""); lv_obj_align(timeAMPM, timebar, LV_ALIGN_IN_BOTTOM_LEFT, 2, -20); @@ -118,11 +99,7 @@ PineTimeStyle::PineTimeStyle(DisplayApp* app, /* Create a 40px wide bar down the right side of the screen */ sidebar = lv_obj_create(lv_scr_act(), nullptr); -<<<<<<< HEAD lv_obj_set_style_local_bg_color(sidebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, pts_colors[settingsController.GetPTSColorBar()]); -======= - lv_obj_set_style_local_bg_color(sidebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x008080)); ->>>>>>> upstream/develop lv_obj_set_style_local_radius(sidebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, 0); lv_obj_set_size(sidebar, 40, 240); lv_obj_align(sidebar, lv_scr_act(), LV_ALIGN_IN_TOP_RIGHT, 0, 0); @@ -221,11 +198,7 @@ PineTimeStyle::PineTimeStyle(DisplayApp* app, lv_obj_set_style_local_line_width(stepGauge, LV_GAUGE_PART_MAIN, LV_STATE_DEFAULT, 4); lv_obj_set_style_local_line_color(stepGauge, LV_GAUGE_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_BLACK); lv_obj_set_style_local_line_opa(stepGauge, LV_GAUGE_PART_NEEDLE, LV_STATE_DEFAULT, LV_OPA_COVER); -<<<<<<< HEAD lv_obj_set_style_local_line_width(stepGauge, LV_GAUGE_PART_NEEDLE, LV_STATE_DEFAULT, 3); -======= - lv_obj_set_style_local_line_width(stepGauge, LV_GAUGE_PART_NEEDLE, LV_STATE_DEFAULT, 4); ->>>>>>> upstream/develop lv_obj_set_style_local_pad_inner(stepGauge, LV_GAUGE_PART_NEEDLE, LV_STATE_DEFAULT, 4); backgroundLabel = lv_label_create(lv_scr_act(), nullptr); From f5639db8ed48a332eeeed48a359a3323b0537d39 Mon Sep 17 00:00:00 2001 From: Kieran Cawthray Date: Tue, 6 Jul 2021 22:53:00 +0200 Subject: [PATCH 033/173] Change step gauge to use percentage of goal for progress --- src/displayapp/screens/PineTimeStyle.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/displayapp/screens/PineTimeStyle.cpp b/src/displayapp/screens/PineTimeStyle.cpp index 76db86e314..b27bd9c7b5 100644 --- a/src/displayapp/screens/PineTimeStyle.cpp +++ b/src/displayapp/screens/PineTimeStyle.cpp @@ -186,8 +186,8 @@ PineTimeStyle::PineTimeStyle(DisplayApp* app, lv_obj_align(stepGauge, sidebar, LV_ALIGN_IN_BOTTOM_MID, 0, 0); lv_gauge_set_scale(stepGauge, 360, 11, 0); lv_gauge_set_angle_offset(stepGauge, 180); - lv_gauge_set_critical_value(stepGauge, (settingsController.GetStepsGoal() / 100)); - lv_gauge_set_range(stepGauge, 0, (settingsController.GetStepsGoal() / 100)); + lv_gauge_set_critical_value(stepGauge, 100); + lv_gauge_set_range(stepGauge, 0, 100); lv_gauge_set_value(stepGauge, 0, 0); lv_obj_set_style_local_pad_right(stepGauge, LV_GAUGE_PART_MAIN, LV_STATE_DEFAULT, 3); @@ -335,7 +335,7 @@ bool PineTimeStyle::Refresh() { stepCount = motionController.NbSteps(); motionSensorOk = motionController.IsSensorOk(); if (stepCount.IsUpdated() || motionSensorOk.IsUpdated()) { - lv_gauge_set_value(stepGauge, 0, (stepCount.Get() / 100)); + lv_gauge_set_value(stepGauge, 0, (stepCount.Get() / (settingsController.GetStepsGoal() / 100))); lv_obj_realign(stepGauge); if (stepCount.Get() > settingsController.GetStepsGoal()) { lv_obj_set_style_local_line_color(stepGauge, LV_GAUGE_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_WHITE); From 7efe2b7c51e1d21305154edad6ddf1b608784451 Mon Sep 17 00:00:00 2001 From: Riku Isokoski Date: Mon, 12 Jul 2021 23:07:05 +0300 Subject: [PATCH 034/173] Fix misconfigured ADC and remove now unnecessary filtering --- src/components/battery/BatteryController.cpp | 14 ++------ src/components/battery/BatteryController.h | 38 +------------------- 2 files changed, 4 insertions(+), 48 deletions(-) diff --git a/src/components/battery/BatteryController.cpp b/src/components/battery/BatteryController.cpp index 76ad8cb3d7..41b4c483a2 100644 --- a/src/components/battery/BatteryController.cpp +++ b/src/components/battery/BatteryController.cpp @@ -26,7 +26,6 @@ void Battery::Update() { return; } // Non blocking read - samples = 0; isReading = true; SaadcInit(); @@ -45,7 +44,7 @@ void Battery::SaadcInit() { .resistor_n = NRF_SAADC_RESISTOR_DISABLED, .gain = NRF_SAADC_GAIN1_5, .reference = NRF_SAADC_REFERENCE_INTERNAL, - .acq_time = NRF_SAADC_ACQTIME_3US, + .acq_time = NRF_SAADC_ACQTIME_40US, .mode = NRF_SAADC_MODE_SINGLE_ENDED, .burst = NRF_SAADC_BURST_ENABLED, .pin_p = batteryVoltageAdcInput, @@ -75,14 +74,7 @@ void Battery::SaadcEventHandler(nrfx_saadc_evt_t const* p_event) { percentRemaining = std::max(percentRemaining, 0); percentRemaining = std::min(percentRemaining, 100); - percentRemainingBuffer.insert(percentRemaining); - - samples++; - if (samples > percentRemainingSamples) { - nrfx_saadc_uninit(); - isReading = false; - } else { - nrfx_saadc_sample(); - } + nrfx_saadc_uninit(); + isReading = false; } } diff --git a/src/components/battery/BatteryController.h b/src/components/battery/BatteryController.h index 26e24938bc..84d488ed9d 100644 --- a/src/components/battery/BatteryController.h +++ b/src/components/battery/BatteryController.h @@ -7,38 +7,6 @@ namespace Pinetime { namespace Controllers { - /** A simple circular buffer that can be used to average - out the sensor values. The total capacity of the CircBuffer - is given as the template parameter N. - */ - template class CircBuffer { - public: - CircBuffer() : arr {}, sz {}, cap {N}, head {} { - } - /** - insert member function overwrites the next data to the current - HEAD and moves the HEAD to the newly inserted value. - */ - void insert(const int num) { - head %= cap; - arr[head++] = num; - if (sz != cap) { - sz++; - } - } - - int GetAverage() const { - int sum = std::accumulate(arr.begin(), arr.end(), 0); - return (sum / sz); - } - - private: - std::array arr; /**< internal array used to store the values*/ - uint8_t sz; /**< The current size of the array.*/ - uint8_t cap; /**< Total capacity of the CircBuffer.*/ - uint8_t head; /**< The current head of the CircBuffer*/ - }; - class Battery { public: Battery(); @@ -47,7 +15,7 @@ namespace Pinetime { void Update(); int PercentRemaining() const { - return percentRemainingBuffer.GetAverage(); + return percentRemaining; } uint16_t Voltage() const { @@ -65,9 +33,6 @@ namespace Pinetime { static Battery* instance; nrf_saadc_value_t saadc_value; - static constexpr uint8_t percentRemainingSamples = 5; - CircBuffer percentRemainingBuffer {}; - static constexpr uint32_t chargingPin = 12; static constexpr uint32_t powerPresentPin = 19; static constexpr nrf_saadc_input_t batteryVoltageAdcInput = NRF_SAADC_INPUT_AIN7; @@ -83,7 +48,6 @@ namespace Pinetime { static void adcCallbackStatic(nrfx_saadc_evt_t const* event); bool isReading = false; - uint8_t samples = 0; }; } } From 3e0974eacdad15a47c2f359cf7f02304806f5513 Mon Sep 17 00:00:00 2001 From: coxtor Date: Tue, 13 Jul 2021 22:29:23 +0200 Subject: [PATCH 035/173] Update App order --- src/CMakeLists.txt | 1 + src/components/settings/Settings.h | 14 ++++ src/displayapp/Apps.h | 3 +- src/displayapp/DisplayApp.cpp | 12 +++ src/displayapp/DisplayApp.h | 1 + .../screens/settings/SettingFavoriteApp.cpp | 74 +++++++++++++++++++ .../screens/settings/SettingFavoriteApp.h | 31 ++++++++ src/displayapp/screens/settings/Settings.cpp | 23 +++++- src/displayapp/screens/settings/Settings.h | 3 +- 9 files changed, 157 insertions(+), 5 deletions(-) create mode 100644 src/displayapp/screens/settings/SettingFavoriteApp.cpp create mode 100644 src/displayapp/screens/settings/SettingFavoriteApp.h diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 40e1f2a554..721e54598c 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -427,6 +427,7 @@ list(APPEND SOURCE_FILES displayapp/screens/settings/SettingWakeUp.cpp displayapp/screens/settings/SettingDisplay.cpp displayapp/screens/settings/SettingSteps.cpp + displayapp/screens/settings/SettingFavoriteApp.cpp ## Watch faces displayapp/icons/bg_clock.c diff --git a/src/components/settings/Settings.h b/src/components/settings/Settings.h index 577455ebd3..1faabee02c 100644 --- a/src/components/settings/Settings.h +++ b/src/components/settings/Settings.h @@ -4,6 +4,7 @@ #include "components/brightness/BrightnessController.h" #include "components/fs/FS.h" #include "drivers/Cst816s.h" +#include "displayapp/Apps.h" namespace Pinetime { namespace Controllers { @@ -18,6 +19,17 @@ namespace Pinetime { void Init(); void SaveSettings(); + void SetFavoriteApp(Applications::Apps app){ + if (app != settings.favoriteApp) { + settingsChanged = true; + } + settings.favoriteApp = app; + } + + Applications::Apps GetFavoriteApp(){ + return settings.favoriteApp; + } + void SetClockFace(uint8_t face) { if (face != settings.clockFace) { settingsChanged = true; @@ -119,6 +131,8 @@ namespace Pinetime { WakeUpMode wakeUpMode = WakeUpMode::None; Controllers::BrightnessController::Levels brightLevel = Controllers::BrightnessController::Levels::Medium; + + Applications::Apps favoriteApp = Applications::Apps::None; }; SettingsData settings; diff --git a/src/displayapp/Apps.h b/src/displayapp/Apps.h index 684e3a46b5..666de84892 100644 --- a/src/displayapp/Apps.h +++ b/src/displayapp/Apps.h @@ -30,7 +30,8 @@ namespace Pinetime { SettingTimeFormat, SettingDisplay, SettingWakeUp, - SettingSteps + SettingSteps, + SettingFavoriteApp }; } } diff --git a/src/displayapp/DisplayApp.cpp b/src/displayapp/DisplayApp.cpp index 04ebd2d328..dd9b54a571 100644 --- a/src/displayapp/DisplayApp.cpp +++ b/src/displayapp/DisplayApp.cpp @@ -42,6 +42,7 @@ #include "displayapp/screens/settings/SettingWakeUp.h" #include "displayapp/screens/settings/SettingDisplay.h" #include "displayapp/screens/settings/SettingSteps.h" +#include "displayapp/screens/settings/SettingFavoriteApp.h" using namespace Pinetime::Applications; using namespace Pinetime::Applications::Display; @@ -183,6 +184,13 @@ void DisplayApp::Refresh() { case TouchEvents::SwipeRight: LoadApp(Apps::QuickSettings, DisplayApp::FullRefreshDirections::RightAnim); break; + case TouchEvents::SwipeLeft: + favoriteApp = settingsController.GetFavoriteApp(); + if (favoriteApp == Apps::None) + LoadApp(Apps::SettingFavoriteApp, DisplayApp::FullRefreshDirections::LeftAnim); + else + LoadApp(favoriteApp, DisplayApp::FullRefreshDirections::LeftAnim); + break; case TouchEvents::DoubleTap: PushMessageToSystemTask(System::Messages::GoToSleep); break; @@ -323,6 +331,10 @@ void DisplayApp::LoadApp(Apps app, DisplayApp::FullRefreshDirections direction) currentScreen = std::make_unique(this, settingsController); ReturnApp(Apps::Settings, FullRefreshDirections::Down, TouchEvents::SwipeDown); break; + case Apps::SettingFavoriteApp: + currentScreen = std::make_unique(this, settingsController); + ReturnApp(Apps::Settings, FullRefreshDirections::Down, TouchEvents::SwipeDown); + break; case Apps::BatteryInfo: currentScreen = std::make_unique(this, batteryController); ReturnApp(Apps::Settings, FullRefreshDirections::Down, TouchEvents::SwipeDown); diff --git a/src/displayapp/DisplayApp.h b/src/displayapp/DisplayApp.h index 73a7cc36a4..eb1925c103 100644 --- a/src/displayapp/DisplayApp.h +++ b/src/displayapp/DisplayApp.h @@ -97,6 +97,7 @@ namespace Pinetime { Apps currentApp = Apps::None; Apps returnToApp = Apps::None; + Apps favoriteApp = Apps::None; FullRefreshDirections returnDirection = FullRefreshDirections::None; TouchEvents returnTouchEvent = TouchEvents::None; diff --git a/src/displayapp/screens/settings/SettingFavoriteApp.cpp b/src/displayapp/screens/settings/SettingFavoriteApp.cpp new file mode 100644 index 0000000000..d0c8dfa11f --- /dev/null +++ b/src/displayapp/screens/settings/SettingFavoriteApp.cpp @@ -0,0 +1,74 @@ +#include "SettingFavoriteApp.h" +#include +#include "displayapp/DisplayApp.h" +#include "displayapp/screens/Screen.h" +#include "displayapp/screens/Symbols.h" +#include "displayapp/Apps.h" + +using namespace Pinetime::Applications::Screens; + +namespace { + static void event_handler(lv_obj_t* obj, lv_event_t event) { + SettingFavoriteApp* screen = static_cast(obj->user_data); + screen->UpdateSelected(obj, event); + } +} + +SettingFavoriteApp::SettingFavoriteApp(Pinetime::Applications::DisplayApp* app, Pinetime::Controllers::Settings& settingsController) + : Screen(app), settingsController {settingsController} { + + lv_obj_t* container1 = lv_cont_create(lv_scr_act(), nullptr); + + // lv_obj_set_style_local_bg_color(container1, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x111111)); + lv_obj_set_style_local_bg_opa(container1, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, LV_OPA_TRANSP); + lv_obj_set_style_local_pad_all(container1, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, 10); + lv_obj_set_style_local_pad_inner(container1, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, 5); + lv_obj_set_style_local_border_width(container1, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, 0); + + lv_obj_set_pos(container1, 10, 60); + lv_obj_set_width(container1, LV_HOR_RES - 20); + lv_obj_set_height(container1, LV_VER_RES - 50); + lv_cont_set_layout(container1, LV_LAYOUT_COLUMN_LEFT); + + lv_obj_t* title = lv_label_create(lv_scr_act(), nullptr); + lv_label_set_text_static(title, "Favorite app"); + lv_label_set_align(title, LV_LABEL_ALIGN_CENTER); + lv_obj_align(title, lv_scr_act(), LV_ALIGN_IN_TOP_MID, 10, 15); + + lv_obj_t* icon = lv_label_create(lv_scr_act(), nullptr); + lv_obj_set_style_local_text_color(icon, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_ORANGE); + lv_label_set_text_static(icon, Symbols::clock); + lv_label_set_align(icon, LV_LABEL_ALIGN_CENTER); + lv_obj_align(icon, title, LV_ALIGN_OUT_LEFT_MID, -10, 0); + + for(optionsTotal = 0; optionsTotal < 12; optionsTotal++){ + cbOption[optionsTotal] = lv_checkbox_create(container1, nullptr); + lv_checkbox_set_text_static(cbOption[optionsTotal], favoriteNames[optionsTotal]); + cbOption[optionsTotal]->user_data = this; + lv_obj_set_event_cb(cbOption[optionsTotal], event_handler); + if (settingsController.GetFavoriteApp() == favoriteOptions[optionsTotal]) { + lv_checkbox_set_checked(cbOption[optionsTotal], true); + } + } +} + +SettingFavoriteApp::~SettingFavoriteApp() { + lv_obj_clean(lv_scr_act()); + settingsController.SaveSettings(); +} + +bool SettingFavoriteApp::Refresh() { + return running; +} + +void SettingFavoriteApp::UpdateSelected(lv_obj_t* object, lv_event_t event) { + if (event == LV_EVENT_VALUE_CHANGED) { + for (int i = 0; i < optionsTotal; i++) { + lv_checkbox_set_checked(cbOption[i], false); + if (object == cbOption[i]) { + lv_checkbox_set_checked(cbOption[i], true); + settingsController.SetFavoriteApp(favoriteOptions[i]); + } + } + } +} diff --git a/src/displayapp/screens/settings/SettingFavoriteApp.h b/src/displayapp/screens/settings/SettingFavoriteApp.h new file mode 100644 index 0000000000..b6c070c927 --- /dev/null +++ b/src/displayapp/screens/settings/SettingFavoriteApp.h @@ -0,0 +1,31 @@ +#pragma once + +#include +#include +#include "components/settings/Settings.h" +#include "displayapp/screens/Screen.h" +#include "displayapp/Apps.h" + +namespace Pinetime { + + namespace Applications { + namespace Screens { + + class SettingFavoriteApp : public Screen { + public: + SettingFavoriteApp(DisplayApp* app, Pinetime::Controllers::Settings& settingsController); + ~SettingFavoriteApp() override; + + bool Refresh() override; + void UpdateSelected(lv_obj_t* object, lv_event_t event); + + private: + Controllers::Settings& settingsController; + uint8_t optionsTotal; + lv_obj_t* cbOption[13]; + Apps favoriteOptions[13] = {Apps::Music,Apps::Navigation,Apps::StopWatch,Apps::Timer,Apps::None,Apps::FlashLight,Apps::Paint,Apps::Paddle,Apps::Twos,Apps::HeartRate,Apps::Metronome,Apps::Motion,Apps::Steps}; + char favoriteNames[13][12] = { "Music","Navigation","Stop Watch","Timer","None","Flash Light","Paint","Paddle","Twos","Heart Rate","Metronome","Motion","Steps"}; + }; + } + } +} diff --git a/src/displayapp/screens/settings/Settings.cpp b/src/displayapp/screens/settings/Settings.cpp index e63a35846e..98f5058f5e 100644 --- a/src/displayapp/screens/settings/Settings.cpp +++ b/src/displayapp/screens/settings/Settings.cpp @@ -18,7 +18,11 @@ Settings::Settings(Pinetime::Applications::DisplayApp* app, Pinetime::Controller }, [this]() -> std::unique_ptr { return CreateScreen2(); - }}, + }, + [this]() -> std::unique_ptr { + return CreateScreen3(); + } + }, Screens::ScreenListModes::UpDown} { } @@ -46,7 +50,7 @@ std::unique_ptr Settings::CreateScreen1() { {Symbols::clock, "Watch face", Apps::SettingWatchFace}, }}; - return std::make_unique(0, 2, app, settingsController, applications); + return std::make_unique(0, 3, app, settingsController, applications); } std::unique_ptr Settings::CreateScreen2() { @@ -58,5 +62,18 @@ std::unique_ptr Settings::CreateScreen2() { {Symbols::list, "About", Apps::SysInfo}, }}; - return std::make_unique(1, 2, app, settingsController, applications); + return std::make_unique(1, 3, app, settingsController, applications); } + +std::unique_ptr Settings::CreateScreen3() { + + std::array applications {{ + {Symbols::shoe, "Favorite app", Apps::SettingFavoriteApp}, + {Symbols::batteryHalf, "", Apps::None}, + {Symbols::batteryHalf, "", Apps::None}, + {Symbols::batteryHalf, "", Apps::None}, + + }}; + + return std::make_unique(2, 3, app, settingsController, applications); +} \ No newline at end of file diff --git a/src/displayapp/screens/settings/Settings.h b/src/displayapp/screens/settings/Settings.h index 711a6be6d0..12dd051460 100644 --- a/src/displayapp/screens/settings/Settings.h +++ b/src/displayapp/screens/settings/Settings.h @@ -21,10 +21,11 @@ namespace Pinetime { private: Controllers::Settings& settingsController; - ScreenList<2> screens; + ScreenList<3> screens; std::unique_ptr CreateScreen1(); std::unique_ptr CreateScreen2(); + std::unique_ptr CreateScreen3(); }; } } From 7133287b76dae9d97a88bed5c5ca1976e507826d Mon Sep 17 00:00:00 2001 From: Riku Isokoski Date: Wed, 14 Jul 2021 21:35:21 +0300 Subject: [PATCH 036/173] Set correct refresh times for lvgl (#488) --- src/displayapp/DisplayApp.cpp | 8 +++++--- src/libs/lv_conf.h | 5 ++--- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/displayapp/DisplayApp.cpp b/src/displayapp/DisplayApp.cpp index 6d66afe580..071af0c859 100644 --- a/src/displayapp/DisplayApp.cpp +++ b/src/displayapp/DisplayApp.cpp @@ -43,6 +43,8 @@ #include "displayapp/screens/settings/SettingDisplay.h" #include "displayapp/screens/settings/SettingSteps.h" +#include "libs/lv_conf.h" + using namespace Pinetime::Applications; using namespace Pinetime::Applications::Display; @@ -123,10 +125,10 @@ void DisplayApp::Refresh() { case States::Running: RunningState(); delta = xTaskGetTickCount() - lastWakeTime; - if (delta > 20) { - delta = 20; + if (delta > LV_DISP_DEF_REFR_PERIOD) { + delta = LV_DISP_DEF_REFR_PERIOD; } - queueTimeout = 20 - delta; + queueTimeout = LV_DISP_DEF_REFR_PERIOD - delta; break; default: queueTimeout = portMAX_DELAY; diff --git a/src/libs/lv_conf.h b/src/libs/lv_conf.h index 65263daa63..18fc3fa252 100644 --- a/src/libs/lv_conf.h +++ b/src/libs/lv_conf.h @@ -42,7 +42,7 @@ /* Default display refresh period. * Can be changed in the display driver (`lv_disp_drv_t`).*/ -#define LV_DISP_DEF_REFR_PERIOD 30 /*[ms]*/ +#define LV_DISP_DEF_REFR_PERIOD 20 /*[ms]*/ /* Dot Per Inch: used to initialize default sizes. * E.g. a button with width = LV_DPI / 2 -> half inch wide @@ -112,7 +112,7 @@ typedef int16_t lv_coord_t; * Can be changed in the Input device driver (`lv_indev_drv_t`)*/ /* Input device read period in milliseconds */ -#define LV_INDEV_DEF_READ_PERIOD 30 +#define LV_INDEV_DEF_READ_PERIOD 20 /* Drag threshold in pixels */ #define LV_INDEV_DEF_DRAG_LIMIT 10 @@ -128,7 +128,6 @@ typedef int16_t lv_coord_t; * Time between `LV_EVENT_LONG_PRESSED_REPEAT */ #define LV_INDEV_DEF_LONG_PRESS_REP_TIME 100 - /* Gesture threshold in pixels */ #define LV_INDEV_DEF_GESTURE_LIMIT 50 From 57b339707861c5688f5d432f1506a99df6bb0fce Mon Sep 17 00:00:00 2001 From: Kozova1 <30871100+Kozova1@users.noreply.github.com> Date: Wed, 14 Jul 2021 21:51:51 +0300 Subject: [PATCH 037/173] Multiple wakeup sources (#290) * Allow multiple wakeup modes at the same time. This commit adds multiple wakeup modes support. It does so by storing them as a uint8_t bitfield enum. It changes the following functions: Since multiple modes can be on now, older version would not cut it: WakeUpMode getWakeupMode() -> std::bitset<3> getWakeUpModes() Where each bit corresponds to a WakeUpMode We still need a way to check whether a specific wakeup mode is on, so: bool isWakeUpModeOn(const WakeUpMode mode) This function was changed to work correctly with the new implementation. setWakeUpMode(WakeupMode mode, bool enable) Previously, systemtask would exit SystemTask::OnTouchEvent() if the wake up mode was None or RaiseWrist, to prevent waking up when a touch was received. However, after enabling using multiple WakeUpModes, this caused a bug where when RaiseWrist was checked with SingleTap or DoubleTap, the tap detection wouldn't work. This commit fixes that bug. Next commit will update the settings WakeUpMode select UI to reflect these changes. Signed-off-by: Kozova1 * Updated UI to reflect multiple WakeUp sources being available. Signed-off-by: Kozova1 --- src/components/settings/Settings.h | 39 +++++++++--- .../screens/settings/SettingWakeUp.cpp | 60 +++++++++---------- .../screens/settings/SettingWakeUp.h | 5 ++ src/systemtask/SystemTask.cpp | 18 +++--- 4 files changed, 73 insertions(+), 49 deletions(-) diff --git a/src/components/settings/Settings.h b/src/components/settings/Settings.h index 577455ebd3..93d6d21760 100644 --- a/src/components/settings/Settings.h +++ b/src/components/settings/Settings.h @@ -1,5 +1,6 @@ #pragma once #include +#include #include "components/datetime/DateTimeController.h" #include "components/brightness/BrightnessController.h" #include "components/fs/FS.h" @@ -11,7 +12,11 @@ namespace Pinetime { public: enum class ClockType : uint8_t { H24, H12 }; enum class Vibration : uint8_t { ON, OFF }; - enum class WakeUpMode : uint8_t { None, SingleTap, DoubleTap, RaiseWrist }; + enum class WakeUpMode : uint8_t { + SingleTap = 0, + DoubleTap = 1, + RaiseWrist = 2, + }; Settings(Pinetime::Controllers::FS& fs); @@ -72,15 +77,33 @@ namespace Pinetime { return settings.screenTimeOut; }; - void setWakeUpMode(WakeUpMode wakeUp) { - if (wakeUp != settings.wakeUpMode) { + void setWakeUpMode(WakeUpMode wakeUp, bool enabled) { + if (!isWakeUpModeOn(wakeUp)) { settingsChanged = true; } - settings.wakeUpMode = wakeUp; + settings.wakeUpMode.set(static_cast(wakeUp), enabled); + // Handle special behavior + if (enabled) { + switch (wakeUp) { + case WakeUpMode::SingleTap: + settings.wakeUpMode.set(static_cast(WakeUpMode::DoubleTap), false); + break; + case WakeUpMode::DoubleTap: + settings.wakeUpMode.set(static_cast(WakeUpMode::SingleTap), false); + break; + case WakeUpMode::RaiseWrist: + break; + } + } }; - WakeUpMode getWakeUpMode() const { + + std::bitset<3> getWakeUpModes() const { return settings.wakeUpMode; - }; + } + + bool isWakeUpModeOn(const WakeUpMode mode) const { + return getWakeUpModes()[static_cast(mode)]; + } void SetBrightness(Controllers::BrightnessController::Levels level) { if (level != settings.brightLevel) { @@ -116,7 +139,7 @@ namespace Pinetime { uint8_t clockFace = 0; - WakeUpMode wakeUpMode = WakeUpMode::None; + std::bitset<3> wakeUpMode {0}; Controllers::BrightnessController::Levels brightLevel = Controllers::BrightnessController::Levels::Medium; }; @@ -131,4 +154,4 @@ namespace Pinetime { void SaveSettingsToFile(); }; } -} \ No newline at end of file +} diff --git a/src/displayapp/screens/settings/SettingWakeUp.cpp b/src/displayapp/screens/settings/SettingWakeUp.cpp index 89f0c09832..0e0803537f 100644 --- a/src/displayapp/screens/settings/SettingWakeUp.cpp +++ b/src/displayapp/screens/settings/SettingWakeUp.cpp @@ -16,7 +16,7 @@ namespace { SettingWakeUp::SettingWakeUp(Pinetime::Applications::DisplayApp* app, Pinetime::Controllers::Settings& settingsController) : Screen(app), settingsController {settingsController} { - + ignoringEvents = false; lv_obj_t* container1 = lv_cont_create(lv_scr_act(), nullptr); lv_obj_set_style_local_bg_opa(container1, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, LV_OPA_TRANSP); @@ -42,18 +42,10 @@ SettingWakeUp::SettingWakeUp(Pinetime::Applications::DisplayApp* app, Pinetime:: optionsTotal = 0; cbOption[optionsTotal] = lv_checkbox_create(container1, nullptr); - lv_checkbox_set_text_static(cbOption[optionsTotal], " None"); - cbOption[optionsTotal]->user_data = this; - lv_obj_set_event_cb(cbOption[optionsTotal], event_handler); - if (settingsController.getWakeUpMode() == Pinetime::Controllers::Settings::WakeUpMode::None) { - lv_checkbox_set_checked(cbOption[optionsTotal], true); - } - optionsTotal++; - cbOption[optionsTotal] = lv_checkbox_create(container1, nullptr); lv_checkbox_set_text_static(cbOption[optionsTotal], " Single Tap"); cbOption[optionsTotal]->user_data = this; lv_obj_set_event_cb(cbOption[optionsTotal], event_handler); - if (settingsController.getWakeUpMode() == Pinetime::Controllers::Settings::WakeUpMode::SingleTap) { + if (settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::SingleTap)) { lv_checkbox_set_checked(cbOption[optionsTotal], true); } optionsTotal++; @@ -61,7 +53,7 @@ SettingWakeUp::SettingWakeUp(Pinetime::Applications::DisplayApp* app, Pinetime:: lv_checkbox_set_text_static(cbOption[optionsTotal], " Double Tap"); cbOption[optionsTotal]->user_data = this; lv_obj_set_event_cb(cbOption[optionsTotal], event_handler); - if (settingsController.getWakeUpMode() == Pinetime::Controllers::Settings::WakeUpMode::DoubleTap) { + if (settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::DoubleTap)) { lv_checkbox_set_checked(cbOption[optionsTotal], true); } optionsTotal++; @@ -69,7 +61,7 @@ SettingWakeUp::SettingWakeUp(Pinetime::Applications::DisplayApp* app, Pinetime:: lv_checkbox_set_text_static(cbOption[optionsTotal], " Raise Wrist"); cbOption[optionsTotal]->user_data = this; lv_obj_set_event_cb(cbOption[optionsTotal], event_handler); - if (settingsController.getWakeUpMode() == Pinetime::Controllers::Settings::WakeUpMode::RaiseWrist) { + if (settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::RaiseWrist)) { lv_checkbox_set_checked(cbOption[optionsTotal], true); } optionsTotal++; @@ -85,27 +77,31 @@ bool SettingWakeUp::Refresh() { } void SettingWakeUp::UpdateSelected(lv_obj_t* object, lv_event_t event) { - if (event == LV_EVENT_VALUE_CHANGED) { - for (int i = 0; i < optionsTotal; i++) { - if (object == cbOption[i]) { - lv_checkbox_set_checked(cbOption[i], true); + using WakeUpMode = Pinetime::Controllers::Settings::WakeUpMode; + if (event == LV_EVENT_VALUE_CHANGED && !ignoringEvents) { + ignoringEvents = true; - if (i == 0) { - settingsController.setWakeUpMode(Pinetime::Controllers::Settings::WakeUpMode::None); - }; - if (i == 1) { - settingsController.setWakeUpMode(Pinetime::Controllers::Settings::WakeUpMode::SingleTap); - }; - if (i == 2) { - settingsController.setWakeUpMode(Pinetime::Controllers::Settings::WakeUpMode::DoubleTap); - }; - if (i == 3) { - settingsController.setWakeUpMode(Pinetime::Controllers::Settings::WakeUpMode::RaiseWrist); - }; - - } else { - lv_checkbox_set_checked(cbOption[i], false); + // Find the index of the checkbox that triggered the event + int index = 0; + for (; index < optionsTotal; ++index) { + if (cbOption[index] == object) { + break; } } + + // Toggle needed wakeup mode + auto mode = static_cast(index); + auto currentState = settingsController.isWakeUpModeOn(mode); + settingsController.setWakeUpMode(mode, !currentState); + + // Update checkbox according to current wakeup modes. + // This is needed because we can have extra logic when setting or unsetting wakeup modes, + // for example, when setting SingleTap, DoubleTap is unset and vice versa. + auto modes = settingsController.getWakeUpModes(); + for (int i = 0; i < optionsTotal; ++i) { + lv_checkbox_set_checked(cbOption[i], modes[i]); + } + + ignoringEvents = false; } -} \ No newline at end of file +} diff --git a/src/displayapp/screens/settings/SettingWakeUp.h b/src/displayapp/screens/settings/SettingWakeUp.h index 8b33eb069d..248dd9acfd 100644 --- a/src/displayapp/screens/settings/SettingWakeUp.h +++ b/src/displayapp/screens/settings/SettingWakeUp.h @@ -22,6 +22,11 @@ namespace Pinetime { Controllers::Settings& settingsController; uint8_t optionsTotal; lv_obj_t* cbOption[4]; + // When UpdateSelected is called, it uses lv_checkbox_set_checked, + // which can cause extra events to be fired, + // which might trigger UpdateSelected again, causing a loop. + // This variable is used as a mutex to prevent that. + bool ignoringEvents; }; } } diff --git a/src/systemtask/SystemTask.cpp b/src/systemtask/SystemTask.cpp index eb29638a37..d8b965b118 100644 --- a/src/systemtask/SystemTask.cpp +++ b/src/systemtask/SystemTask.cpp @@ -211,7 +211,7 @@ void SystemTask::Work() { twiMaster.Wakeup(); // Double Tap needs the touch screen to be in normal mode - if (settingsController.getWakeUpMode() != Pinetime::Controllers::Settings::WakeUpMode::DoubleTap) { + if (!settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::DoubleTap)) { touchPanel.Wakeup(); } @@ -232,9 +232,9 @@ void SystemTask::Work() { auto touchInfo = touchPanel.GetTouchInfo(); twiMaster.Sleep(); if (touchInfo.isTouch and ((touchInfo.gesture == Pinetime::Drivers::Cst816S::Gestures::DoubleTap and - settingsController.getWakeUpMode() == Pinetime::Controllers::Settings::WakeUpMode::DoubleTap) or + settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::DoubleTap)) or (touchInfo.gesture == Pinetime::Drivers::Cst816S::Gestures::SingleTap and - settingsController.getWakeUpMode() == Pinetime::Controllers::Settings::WakeUpMode::SingleTap))) { + settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::SingleTap)))) { GoToRunning(); } } break; @@ -296,7 +296,7 @@ void SystemTask::Work() { spi.Sleep(); // Double Tap needs the touch screen to be in normal mode - if (settingsController.getWakeUpMode() != Pinetime::Controllers::Settings::WakeUpMode::DoubleTap) { + if (!settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::DoubleTap)) { touchPanel.Sleep(); } twiMaster.Sleep(); @@ -348,7 +348,7 @@ void SystemTask::UpdateMotion() { if (isGoingToSleep or isWakingUp) return; - if (isSleeping && settingsController.getWakeUpMode() != Pinetime::Controllers::Settings::WakeUpMode::RaiseWrist) + if (isSleeping && !settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::RaiseWrist)) return; if (isSleeping) @@ -399,10 +399,10 @@ void SystemTask::OnTouchEvent() { PushMessage(Messages::OnTouchEvent); displayApp.PushMessage(Pinetime::Applications::Display::Messages::TouchEvent); } else if (!isWakingUp) { - if (settingsController.getWakeUpMode() == Pinetime::Controllers::Settings::WakeUpMode::None or - settingsController.getWakeUpMode() == Pinetime::Controllers::Settings::WakeUpMode::RaiseWrist) - return; - PushMessage(Messages::TouchWakeUp); + if (settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::SingleTap) or + settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::DoubleTap)) { + PushMessage(Messages::TouchWakeUp); + } } } From fe64176e7b8a0a7a9df733701d08762b60c2511f Mon Sep 17 00:00:00 2001 From: Riku Isokoski Date: Thu, 15 Jul 2021 14:11:27 +0300 Subject: [PATCH 038/173] New touch handler, with issues --- src/CMakeLists.txt | 4 + src/displayapp/DisplayApp.cpp | 124 +++++++++--------- src/displayapp/DisplayApp.h | 8 +- src/displayapp/LittleVgl.cpp | 9 +- src/displayapp/LittleVgl.h | 2 +- src/displayapp/Messages.h | 3 +- src/displayapp/screens/FirmwareValidation.cpp | 4 +- src/displayapp/screens/List.cpp | 2 +- src/displayapp/screens/Metronome.cpp | 3 - src/displayapp/screens/ScreenList.h | 2 +- src/displayapp/screens/StopWatch.cpp | 4 +- src/displayapp/screens/SystemInfo.cpp | 6 +- src/displayapp/screens/Tile.cpp | 10 +- src/displayapp/screens/Tile.h | 2 +- .../screens/settings/QuickSettings.cpp | 6 +- .../screens/settings/SettingDisplay.cpp | 4 +- src/drivers/Cst816s.cpp | 12 +- src/main.cpp | 11 +- src/systemtask/SystemTask.cpp | 1 - src/touchhandler/TouchHandler.cpp | 70 ++++++++++ src/touchhandler/TouchHandler.h | 45 +++++++ 21 files changed, 230 insertions(+), 102 deletions(-) create mode 100644 src/touchhandler/TouchHandler.cpp create mode 100644 src/touchhandler/TouchHandler.h diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 40e1f2a554..cbc8cadcfb 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -495,6 +495,8 @@ list(APPEND SOURCE_FILES components/heartrate/Biquad.cpp components/heartrate/Ptagc.cpp components/heartrate/HeartRateController.cpp + + touchhandler/TouchHandler.cpp ) list(APPEND RECOVERY_SOURCE_FILES @@ -552,6 +554,7 @@ list(APPEND RECOVERY_SOURCE_FILES components/heartrate/Ptagc.cpp components/motor/MotorController.cpp components/fs/FS.cpp + touchhandler/TouchHandler.cpp ) list(APPEND RECOVERYLOADER_SOURCE_FILES @@ -660,6 +663,7 @@ set(INCLUDE_FILES components/heartrate/Ptagc.h components/heartrate/HeartRateController.h components/motor/MotorController.h + touchhandler/TouchHandler.h ) include_directories( diff --git a/src/displayapp/DisplayApp.cpp b/src/displayapp/DisplayApp.cpp index 071af0c859..ca7e390f02 100644 --- a/src/displayapp/DisplayApp.cpp +++ b/src/displayapp/DisplayApp.cpp @@ -66,7 +66,8 @@ DisplayApp::DisplayApp(Drivers::St7789& lcd, Controllers::Settings& settingsController, Pinetime::Controllers::MotorController& motorController, Pinetime::Controllers::MotionController& motionController, - Pinetime::Controllers::TimerController& timerController) + Pinetime::Controllers::TimerController& timerController, + Pinetime::Controllers::TouchHandler& touchHandler) : lcd {lcd}, lvgl {lvgl}, touchPanel {touchPanel}, @@ -79,7 +80,8 @@ DisplayApp::DisplayApp(Drivers::St7789& lcd, settingsController {settingsController}, motorController {motorController}, motionController {motionController}, - timerController {timerController} { + timerController {timerController}, + touchHandler {touchHandler} { } void DisplayApp::Start() { @@ -176,33 +178,6 @@ void DisplayApp::Refresh() { LoadApp(Apps::Timer, DisplayApp::FullRefreshDirections::Down); } break; - case Messages::TouchEvent: { - if (state != States::Running) - break; - auto gesture = OnTouchEvent(); - if (!currentScreen->OnTouchEvent(gesture)) { - if (currentApp == Apps::Clock) { - switch (gesture) { - case TouchEvents::SwipeUp: - LoadApp(Apps::Launcher, DisplayApp::FullRefreshDirections::Up); - break; - case TouchEvents::SwipeDown: - LoadApp(Apps::Notifications, DisplayApp::FullRefreshDirections::Down); - break; - case TouchEvents::SwipeRight: - LoadApp(Apps::QuickSettings, DisplayApp::FullRefreshDirections::RightAnim); - break; - case TouchEvents::DoubleTap: - PushMessageToSystemTask(System::Messages::GoToSleep); - break; - default: - break; - } - } else if (returnTouchEvent == gesture) { - LoadApp(returnToApp, returnDirection); - } - } - } break; case Messages::ButtonPushed: if (currentApp == Apps::Clock) { PushMessageToSystemTask(System::Messages::GoToSleep); @@ -223,19 +198,42 @@ void DisplayApp::Refresh() { } } - if(nextApp != Apps::None) { - LoadApp(nextApp, nextDirection); - nextApp = Apps::None; - } - - if (state != States::Idle && touchMode == TouchModes::Polling) { - auto info = touchPanel.GetTouchInfo(); - if (info.action == 2) { // 2 = contact - if (!currentScreen->OnTouchEvent(info.x, info.y)) { - lvgl.SetNewTapEvent(info.x, info.y); + auto gesture = GetGesture(); + if (gesture != TouchEvents::None) { + if (!currentScreen->OnTouchEvent(gesture)) { + if (currentApp == Apps::Clock) { + switch (gesture) { + case TouchEvents::SwipeUp: + LoadApp(Apps::Launcher, DisplayApp::FullRefreshDirections::Up); + break; + case TouchEvents::SwipeDown: + LoadApp(Apps::Notifications, DisplayApp::FullRefreshDirections::Down); + break; + case TouchEvents::SwipeRight: + LoadApp(Apps::QuickSettings, DisplayApp::FullRefreshDirections::RightAnim); + break; + case TouchEvents::DoubleTap: + PushMessageToSystemTask(System::Messages::GoToSleep); + break; + default: + break; + } + } else if (returnTouchEvent == gesture) { + LoadApp(returnToApp, returnDirection); } + } else { + touchHandler.CancelTap(); } } + + if (touchMode == TouchModes::Polling) { + currentScreen->OnTouchEvent(touchHandler.GetX(), touchHandler.GetY()); + } + + if (nextApp != Apps::None) { + LoadApp(nextApp, nextDirection); + nextApp = Apps::None; + } } void DisplayApp::RunningState() { @@ -257,6 +255,7 @@ void DisplayApp::ReturnApp(Apps app, DisplayApp::FullRefreshDirections direction } void DisplayApp::LoadApp(Apps app, DisplayApp::FullRefreshDirections direction) { + touchHandler.CancelTap(); currentScreen.reset(nullptr); SetFullRefresh(direction); @@ -395,31 +394,28 @@ void DisplayApp::PushMessage(Messages msg) { } } -TouchEvents DisplayApp::OnTouchEvent() { - auto info = touchPanel.GetTouchInfo(); - if (info.isTouch) { - switch (info.gesture) { - case Pinetime::Drivers::Cst816S::Gestures::SingleTap: - if (touchMode == TouchModes::Gestures) { - lvgl.SetNewTapEvent(info.x, info.y); - } - return TouchEvents::Tap; - case Pinetime::Drivers::Cst816S::Gestures::LongPress: - return TouchEvents::LongTap; - case Pinetime::Drivers::Cst816S::Gestures::DoubleTap: - return TouchEvents::DoubleTap; - case Pinetime::Drivers::Cst816S::Gestures::SlideRight: - return TouchEvents::SwipeRight; - case Pinetime::Drivers::Cst816S::Gestures::SlideLeft: - return TouchEvents::SwipeLeft; - case Pinetime::Drivers::Cst816S::Gestures::SlideDown: - return TouchEvents::SwipeDown; - case Pinetime::Drivers::Cst816S::Gestures::SlideUp: - return TouchEvents::SwipeUp; - case Pinetime::Drivers::Cst816S::Gestures::None: - default: - return TouchEvents::None; - } +TouchEvents DisplayApp::GetGesture() { + auto gesture = touchHandler.GestureGet(); + switch (gesture) { + /* + case Pinetime::Drivers::Cst816S::Gestures::SingleTap: + return TouchEvents::Tap; + */ + case Pinetime::Drivers::Cst816S::Gestures::LongPress: + return TouchEvents::LongTap; + case Pinetime::Drivers::Cst816S::Gestures::DoubleTap: + return TouchEvents::DoubleTap; + case Pinetime::Drivers::Cst816S::Gestures::SlideRight: + return TouchEvents::SwipeRight; + case Pinetime::Drivers::Cst816S::Gestures::SlideLeft: + return TouchEvents::SwipeLeft; + case Pinetime::Drivers::Cst816S::Gestures::SlideDown: + return TouchEvents::SwipeDown; + case Pinetime::Drivers::Cst816S::Gestures::SlideUp: + return TouchEvents::SwipeUp; + case Pinetime::Drivers::Cst816S::Gestures::None: + default: + return TouchEvents::None; } return TouchEvents::None; } diff --git a/src/displayapp/DisplayApp.h b/src/displayapp/DisplayApp.h index f4573ab7c7..74fc4456b7 100644 --- a/src/displayapp/DisplayApp.h +++ b/src/displayapp/DisplayApp.h @@ -14,6 +14,7 @@ #include "components/settings/Settings.h" #include "displayapp/screens/Screen.h" #include "components/timer/TimerController.h" +#include "touchhandler/TouchHandler.h" #include "Messages.h" namespace Pinetime { @@ -31,6 +32,7 @@ namespace Pinetime { class NotificationManager; class HeartRateController; class MotionController; + class TouchHandler; } namespace System { @@ -55,7 +57,8 @@ namespace Pinetime { Controllers::Settings& settingsController, Pinetime::Controllers::MotorController& motorController, Pinetime::Controllers::MotionController& motionController, - Pinetime::Controllers::TimerController& timerController); + Pinetime::Controllers::TimerController& timerController, + Pinetime::Controllers::TouchHandler& touchHandler); void Start(); void PushMessage(Display::Messages msg); @@ -81,6 +84,7 @@ namespace Pinetime { Pinetime::Controllers::MotorController& motorController; Pinetime::Controllers::MotionController& motionController; Pinetime::Controllers::TimerController& timerController; + Pinetime::Controllers::TouchHandler& touchHandler; Pinetime::Controllers::FirmwareValidator validator; Controllers::BrightnessController brightnessController; @@ -102,7 +106,7 @@ namespace Pinetime { TouchModes touchMode = TouchModes::Gestures; - TouchEvents OnTouchEvent(); + TouchEvents GetGesture(); void RunningState(); void IdleState(); static void Process(void* instance); diff --git a/src/displayapp/LittleVgl.cpp b/src/displayapp/LittleVgl.cpp index c069afa2fd..d0c6161e15 100644 --- a/src/displayapp/LittleVgl.cpp +++ b/src/displayapp/LittleVgl.cpp @@ -166,18 +166,17 @@ void LittleVgl::FlushDisplay(const lv_area_t* area, lv_color_t* color_p) { lv_disp_flush_ready(&disp_drv); } -void LittleVgl::SetNewTapEvent(uint16_t x, uint16_t y) { +void LittleVgl::SetNewTapEvent(uint16_t x, uint16_t y, bool contact) { tap_x = x; tap_y = y; - tapped = true; + tapped = contact; } bool LittleVgl::GetTouchPadInfo(lv_indev_data_t* ptr) { + ptr->point.x = tap_x; + ptr->point.y = tap_y; if (tapped) { - ptr->point.x = tap_x; - ptr->point.y = tap_y; ptr->state = LV_INDEV_STATE_PR; - tapped = false; } else { ptr->state = LV_INDEV_STATE_REL; } diff --git a/src/displayapp/LittleVgl.h b/src/displayapp/LittleVgl.h index 41f934a751..8d1ed56f7b 100644 --- a/src/displayapp/LittleVgl.h +++ b/src/displayapp/LittleVgl.h @@ -24,7 +24,7 @@ namespace Pinetime { void FlushDisplay(const lv_area_t* area, lv_color_t* color_p); bool GetTouchPadInfo(lv_indev_data_t* ptr); void SetFullRefresh(FullRefreshDirections direction); - void SetNewTapEvent(uint16_t x, uint16_t y); + void SetNewTapEvent(uint16_t x, uint16_t y, bool contact); private: void InitDisplay(); diff --git a/src/displayapp/Messages.h b/src/displayapp/Messages.h index ce65f84645..3b8bad2707 100644 --- a/src/displayapp/Messages.h +++ b/src/displayapp/Messages.h @@ -8,7 +8,6 @@ namespace Pinetime { UpdateDateTime, UpdateBleConnection, UpdateBatteryLevel, - TouchEvent, ButtonPushed, NewNotification, TimerDone, @@ -17,4 +16,4 @@ namespace Pinetime { }; } } -} \ No newline at end of file +} diff --git a/src/displayapp/screens/FirmwareValidation.cpp b/src/displayapp/screens/FirmwareValidation.cpp index 1d05be8d39..5bacb4e81d 100644 --- a/src/displayapp/screens/FirmwareValidation.cpp +++ b/src/displayapp/screens/FirmwareValidation.cpp @@ -66,10 +66,10 @@ bool FirmwareValidation::Refresh() { } void FirmwareValidation::OnButtonEvent(lv_obj_t* object, lv_event_t event) { - if (object == buttonValidate && event == LV_EVENT_PRESSED) { + if (object == buttonValidate && event == LV_EVENT_CLICKED) { validator.Validate(); running = false; - } else if (object == buttonReset && event == LV_EVENT_PRESSED) { + } else if (object == buttonReset && event == LV_EVENT_CLICKED) { validator.Reset(); } } diff --git a/src/displayapp/screens/List.cpp b/src/displayapp/screens/List.cpp index b4f4d2cfff..1f92634a08 100644 --- a/src/displayapp/screens/List.cpp +++ b/src/displayapp/screens/List.cpp @@ -108,7 +108,7 @@ bool List::Refresh() { } void List::OnButtonEvent(lv_obj_t* object, lv_event_t event) { - if (event == LV_EVENT_RELEASED) { + if (event == LV_EVENT_CLICKED) { for (int i = 0; i < MAXLISTITEMS; i++) { if (apps[i] != Apps::None && object == itemApps[i]) { app->StartApp(apps[i], DisplayApp::FullRefreshDirections::Up); diff --git a/src/displayapp/screens/Metronome.cpp b/src/displayapp/screens/Metronome.cpp index 7bfbccb761..15916b620d 100644 --- a/src/displayapp/screens/Metronome.cpp +++ b/src/displayapp/screens/Metronome.cpp @@ -83,12 +83,9 @@ Metronome::Metronome(DisplayApp* app, Controllers::MotorController& motorControl lv_obj_set_height(playPause, 39); playPauseLabel = lv_label_create(playPause, nullptr); lv_label_set_text(playPauseLabel, Symbols::play); - - app->SetTouchMode(DisplayApp::TouchModes::Polling); } Metronome::~Metronome() { - app->SetTouchMode(DisplayApp::TouchModes::Gestures); systemTask.PushMessage(System::Messages::EnableSleeping); lv_obj_clean(lv_scr_act()); } diff --git a/src/displayapp/screens/ScreenList.h b/src/displayapp/screens/ScreenList.h index ea66bfb237..50d6632830 100644 --- a/src/displayapp/screens/ScreenList.h +++ b/src/displayapp/screens/ScreenList.h @@ -110,4 +110,4 @@ namespace Pinetime { }; } } -} \ No newline at end of file +} diff --git a/src/displayapp/screens/StopWatch.cpp b/src/displayapp/screens/StopWatch.cpp index f4db5d6ef4..e3db62992c 100644 --- a/src/displayapp/screens/StopWatch.cpp +++ b/src/displayapp/screens/StopWatch.cpp @@ -161,7 +161,7 @@ bool StopWatch::Refresh() { } void StopWatch::playPauseBtnEventHandler(lv_event_t event) { - if (event != LV_EVENT_PRESSED) { + if (event != LV_EVENT_CLICKED) { return; } if (currentState == States::Init) { @@ -174,7 +174,7 @@ void StopWatch::playPauseBtnEventHandler(lv_event_t event) { } void StopWatch::stopLapBtnEventHandler(lv_event_t event) { - if (event != LV_EVENT_PRESSED) { + if (event != LV_EVENT_CLICKED) { return; } // If running, then this button is used to save laps diff --git a/src/displayapp/screens/SystemInfo.cpp b/src/displayapp/screens/SystemInfo.cpp index f5bf0cc9e5..47a4918088 100644 --- a/src/displayapp/screens/SystemInfo.cpp +++ b/src/displayapp/screens/SystemInfo.cpp @@ -210,7 +210,7 @@ bool SystemInfo::sortById(const TaskStatus_t& lhs, const TaskStatus_t& rhs) { } std::unique_ptr SystemInfo::CreateScreen4() { - TaskStatus_t tasksStatus[7]; + TaskStatus_t tasksStatus[10]; lv_obj_t* infoTask = lv_table_create(lv_scr_act(), NULL); lv_table_set_col_cnt(infoTask, 3); lv_table_set_row_cnt(infoTask, 8); @@ -223,9 +223,9 @@ std::unique_ptr SystemInfo::CreateScreen4() { lv_table_set_cell_value(infoTask, 0, 2, "Free"); lv_table_set_col_width(infoTask, 2, 90); - auto nb = uxTaskGetSystemState(tasksStatus, 7, nullptr); + auto nb = uxTaskGetSystemState(tasksStatus, sizeof(tasksStatus) / sizeof(tasksStatus[0]), nullptr); std::sort(tasksStatus, tasksStatus + nb, sortById); - for (uint8_t i = 0; i < nb; i++) { + for (uint8_t i = 0; i < nb && i < 7; i++) { lv_table_set_cell_value(infoTask, i + 1, 0, std::to_string(tasksStatus[i].xTaskNumber).c_str()); lv_table_set_cell_value(infoTask, i + 1, 1, tasksStatus[i].pcTaskName); diff --git a/src/displayapp/screens/Tile.cpp b/src/displayapp/screens/Tile.cpp index 3eb127cc43..5a40e915fe 100644 --- a/src/displayapp/screens/Tile.cpp +++ b/src/displayapp/screens/Tile.cpp @@ -12,9 +12,7 @@ namespace { static void event_handler(lv_obj_t* obj, lv_event_t event) { Tile* screen = static_cast(obj->user_data); - uint32_t* eventDataPtr = (uint32_t*) lv_event_get_data(); - uint32_t eventData = *eventDataPtr; - screen->OnObjectEvent(obj, event, eventData); + screen->OnObjectEvent(obj, event); } } @@ -124,9 +122,9 @@ bool Tile::Refresh() { return running; } -void Tile::OnObjectEvent(lv_obj_t* obj, lv_event_t event, uint32_t buttonId) { - if (event == LV_EVENT_VALUE_CHANGED) { - app->StartApp(apps[buttonId], DisplayApp::FullRefreshDirections::Up); +void Tile::OnObjectEvent(lv_obj_t* obj, lv_event_t event) { + if (event == LV_EVENT_CLICKED) { + app->StartApp(apps[lv_btnmatrix_get_active_btn(obj)], DisplayApp::FullRefreshDirections::Up); running = false; } } diff --git a/src/displayapp/screens/Tile.h b/src/displayapp/screens/Tile.h index 4ebd81cd9b..91ce9d01db 100644 --- a/src/displayapp/screens/Tile.h +++ b/src/displayapp/screens/Tile.h @@ -32,7 +32,7 @@ namespace Pinetime { bool Refresh() override; void UpdateScreen(); - void OnObjectEvent(lv_obj_t* obj, lv_event_t event, uint32_t buttonId); + void OnObjectEvent(lv_obj_t* obj, lv_event_t event); private: Pinetime::Controllers::Battery& batteryController; diff --git a/src/displayapp/screens/settings/QuickSettings.cpp b/src/displayapp/screens/settings/QuickSettings.cpp index acc2a27a3f..2da5ca276b 100644 --- a/src/displayapp/screens/settings/QuickSettings.cpp +++ b/src/displayapp/screens/settings/QuickSettings.cpp @@ -125,12 +125,12 @@ void QuickSettings::UpdateScreen() { } void QuickSettings::OnButtonEvent(lv_obj_t* object, lv_event_t event) { - if (object == btn2 && event == LV_EVENT_PRESSED) { + if (object == btn2 && event == LV_EVENT_CLICKED) { running = false; app->StartApp(Apps::FlashLight, DisplayApp::FullRefreshDirections::None); - } else if (object == btn1 && event == LV_EVENT_PRESSED) { + } else if (object == btn1 && event == LV_EVENT_CLICKED) { brightness.Step(); lv_label_set_text_static(btn1_lvl, brightness.GetIcon()); @@ -147,7 +147,7 @@ void QuickSettings::OnButtonEvent(lv_obj_t* object, lv_event_t event) { lv_label_set_text_static(btn3_lvl, Symbols::notificationsOff); } - } else if (object == btn4 && event == LV_EVENT_PRESSED) { + } else if (object == btn4 && event == LV_EVENT_CLICKED) { running = false; settingsController.SetSettingsMenu(0); app->StartApp(Apps::Settings, DisplayApp::FullRefreshDirections::Up); diff --git a/src/displayapp/screens/settings/SettingDisplay.cpp b/src/displayapp/screens/settings/SettingDisplay.cpp index 4954185df3..aaf6a9f0e7 100644 --- a/src/displayapp/screens/settings/SettingDisplay.cpp +++ b/src/displayapp/screens/settings/SettingDisplay.cpp @@ -85,7 +85,7 @@ bool SettingDisplay::Refresh() { } void SettingDisplay::UpdateSelected(lv_obj_t* object, lv_event_t event) { - if (event == LV_EVENT_VALUE_CHANGED) { + if (event == LV_EVENT_CLICKED) { for (int i = 0; i < optionsTotal; i++) { if (object == cbOption[i]) { lv_checkbox_set_checked(cbOption[i], true); @@ -110,4 +110,4 @@ void SettingDisplay::UpdateSelected(lv_obj_t* object, lv_event_t event) { } } } -} \ No newline at end of file +} diff --git a/src/drivers/Cst816s.cpp b/src/drivers/Cst816s.cpp index fd9792b3f4..adb984e00c 100644 --- a/src/drivers/Cst816s.cpp +++ b/src/drivers/Cst816s.cpp @@ -40,6 +40,16 @@ void Cst816S::Init() { */ static constexpr uint8_t motionMask = 0b00000101; twiMaster.Write(twiAddress, 0xEC, &motionMask, 1); + + /* + [7] EnTest - Interrupt pin to test, enable automatic periodic issued after a low pulse. + [6] EnTouch - When a touch is detected, a periodic pulsed Low. + [5] EnChange - Upon detecting a touch state changes, pulsed Low. + [4] EnMotion - When the detected gesture is pulsed Low. + [0] OnceWLP - Press gesture only issue a pulse signal is low. + */ + static constexpr uint8_t irqCtl = 0b01110000; + twiMaster.Write(twiAddress, 0xFA, &irqCtl, 1); } Cst816S::TouchInfos Cst816S::GetTouchInfo() { @@ -90,4 +100,4 @@ void Cst816S::Sleep() { void Cst816S::Wakeup() { Init(); NRF_LOG_INFO("[TOUCHPANEL] Wakeup"); -} \ No newline at end of file +} diff --git a/src/main.cpp b/src/main.cpp index ffbba5e765..f427db40a9 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -43,6 +43,7 @@ #include "drivers/TwiMaster.h" #include "drivers/Cst816s.h" #include "systemtask/SystemTask.h" +#include "touchhandler/TouchHandler.h" #if NRF_LOG_ENABLED #include "logging/NrfLogger.h" @@ -118,6 +119,7 @@ Pinetime::Drivers::WatchdogView watchdogView(watchdog); Pinetime::Controllers::NotificationManager notificationManager; Pinetime::Controllers::MotionController motionController; Pinetime::Controllers::TimerController timerController; +Pinetime::Controllers::TouchHandler touchHandler(touchPanel, lvgl); Pinetime::Controllers::FS fs {spiNorFlash}; Pinetime::Controllers::Settings settingsController {fs}; @@ -136,7 +138,8 @@ Pinetime::Applications::DisplayApp displayApp(lcd, settingsController, motorController, motionController, - timerController); + timerController, + touchHandler); Pinetime::System::SystemTask systemTask(spi, lcd, @@ -162,7 +165,7 @@ Pinetime::System::SystemTask systemTask(spi, void nrfx_gpiote_evt_handler(nrfx_gpiote_pin_t pin, nrf_gpiote_polarity_t action) { if (pin == pinTouchIrq) { - systemTask.OnTouchEvent(); + touchHandler.WakeUp(); return; } @@ -309,6 +312,10 @@ int main(void) { lvgl.Init(); systemTask.Start(); + + touchHandler.Register(&systemTask); + touchHandler.Start(); + nimble_port_init(); vTaskStartScheduler(); diff --git a/src/systemtask/SystemTask.cpp b/src/systemtask/SystemTask.cpp index d8b965b118..f6aee78516 100644 --- a/src/systemtask/SystemTask.cpp +++ b/src/systemtask/SystemTask.cpp @@ -397,7 +397,6 @@ void SystemTask::OnTouchEvent() { return; if (!isSleeping) { PushMessage(Messages::OnTouchEvent); - displayApp.PushMessage(Pinetime::Applications::Display::Messages::TouchEvent); } else if (!isWakingUp) { if (settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::SingleTap) or settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::DoubleTap)) { diff --git a/src/touchhandler/TouchHandler.cpp b/src/touchhandler/TouchHandler.cpp new file mode 100644 index 0000000000..a13d1af397 --- /dev/null +++ b/src/touchhandler/TouchHandler.cpp @@ -0,0 +1,70 @@ +#include "TouchHandler.h" + +using namespace Pinetime::Controllers; + +TouchHandler::TouchHandler(Drivers::Cst816S& touchPanel, Components::LittleVgl& lvgl) + : touchPanel {touchPanel}, + lvgl {lvgl} { +} + +void TouchHandler::CancelTap() { + isCancelled = true; + lvgl.SetNewTapEvent(-1, -1, false); +} + +Pinetime::Drivers::Cst816S::Gestures TouchHandler::GestureGet() { + auto returnGesture = gesture; + gesture = Drivers::Cst816S::Gestures::None; + return returnGesture; +} + +void TouchHandler::Start() { + if (pdPASS != xTaskCreate(TouchHandler::Process, "Touch", 80, this, 0, &taskHandle)) { + APP_ERROR_HANDLER(NRF_ERROR_NO_MEM); + } +} + +void TouchHandler::Process(void* instance) { + auto* app = static_cast(instance); + app->Work(); +} + +void TouchHandler::Work() { + Pinetime::Drivers::Cst816S::TouchInfos info; + while (true) { + vTaskSuspend(taskHandle); + info = touchPanel.GetTouchInfo(); + if (systemTask->IsSleeping()) { + systemTask->PushMessage(System::Messages::TouchWakeUp); + } else { + x = info.x; + y = info.y; + if (info.action == 0) { + lvgl.SetNewTapEvent(info.x, info.y, true); + } else if (info.action == 1) { + lvgl.SetNewTapEvent(info.x, info.y, false); + prevGesture = Pinetime::Drivers::Cst816S::Gestures::None; + isCancelled = false; + } else if (info.action == 2) { + if (!isCancelled) { + lvgl.SetNewTapEvent(info.x, info.y, true); + } + if (info.gesture != Pinetime::Drivers::Cst816S::Gestures::None) { + if (prevGesture != info.gesture) { + prevGesture = info.gesture; + gesture = info.gesture; + } + } + } + systemTask->OnTouchEvent(); + } + } +} + +void TouchHandler::Register(Pinetime::System::SystemTask* systemTask) { + this->systemTask = systemTask; +} + +void TouchHandler::WakeUp() { + vTaskResume(taskHandle); +} diff --git a/src/touchhandler/TouchHandler.h b/src/touchhandler/TouchHandler.h new file mode 100644 index 0000000000..7999e00a39 --- /dev/null +++ b/src/touchhandler/TouchHandler.h @@ -0,0 +1,45 @@ +#pragma once +#include "drivers/Cst816s.h" +#include "systemtask/SystemTask.h" +#include +#include + +namespace Pinetime { + namespace Components { + class LittleVgl; + } + namespace Drivers { + class Cst816S; + } + namespace System { + class SystemTask; + } + namespace Controllers { + class TouchHandler { + public: + explicit TouchHandler(Drivers::Cst816S&, Components::LittleVgl&); + void CancelTap(); + void Register(Pinetime::System::SystemTask* systemTask); + void Start(); + void WakeUp(); + uint8_t GetX() const { + return x; + } + uint8_t GetY() const { + return y; + } + Drivers::Cst816S::Gestures GestureGet(); + private: + static void Process(void* instance); + void Work(); + Pinetime::System::SystemTask* systemTask = nullptr; + TaskHandle_t taskHandle; + Pinetime::Drivers::Cst816S& touchPanel; + Pinetime::Components::LittleVgl& lvgl; + Pinetime::Drivers::Cst816S::Gestures gesture; + Pinetime::Drivers::Cst816S::Gestures prevGesture; + bool isCancelled = false; + uint8_t x, y; + }; + } +} From 0d24d2b81e995d37bb7fb363df21a19b195107b8 Mon Sep 17 00:00:00 2001 From: Riku Isokoski Date: Thu, 15 Jul 2021 23:18:05 +0300 Subject: [PATCH 039/173] Quick fix --- src/drivers/Cst816s.cpp | 2 +- src/touchhandler/TouchHandler.cpp | 6 ++---- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/src/drivers/Cst816s.cpp b/src/drivers/Cst816s.cpp index adb984e00c..127fe1ec51 100644 --- a/src/drivers/Cst816s.cpp +++ b/src/drivers/Cst816s.cpp @@ -81,7 +81,7 @@ Cst816S::TouchInfos Cst816S::GetTouchInfo() { info.x = x; info.y = y; - info.action = action; + info.finger = nbTouchPoints; info.gesture = static_cast(touchData[gestureIndex]); return info; diff --git a/src/touchhandler/TouchHandler.cpp b/src/touchhandler/TouchHandler.cpp index a13d1af397..90b4d6daab 100644 --- a/src/touchhandler/TouchHandler.cpp +++ b/src/touchhandler/TouchHandler.cpp @@ -39,13 +39,11 @@ void TouchHandler::Work() { } else { x = info.x; y = info.y; - if (info.action == 0) { - lvgl.SetNewTapEvent(info.x, info.y, true); - } else if (info.action == 1) { + if (info.finger == 0) { lvgl.SetNewTapEvent(info.x, info.y, false); prevGesture = Pinetime::Drivers::Cst816S::Gestures::None; isCancelled = false; - } else if (info.action == 2) { + } else if (info.finger == 1) { if (!isCancelled) { lvgl.SetNewTapEvent(info.x, info.y, true); } From 2a3e1263906d1145d6b539ff019362f0077d8097 Mon Sep 17 00:00:00 2001 From: Riku Isokoski Date: Fri, 16 Jul 2021 00:07:55 +0300 Subject: [PATCH 040/173] Fix most issues --- src/displayapp/DisplayApp.cpp | 11 ++--------- src/displayapp/DisplayApp.h | 4 ---- src/displayapp/LittleVgl.cpp | 2 +- src/displayapp/LittleVgl.h | 2 +- src/displayapp/screens/InfiniPaint.cpp | 3 --- src/displayapp/screens/Metronome.cpp | 2 +- src/displayapp/screens/Paddle.cpp | 4 ---- src/displayapp/screens/Screen.h | 1 + src/drivers/Cst816s.cpp | 26 +++++++++----------------- src/drivers/Cst816s.h | 26 ++++++++++++-------------- src/systemtask/SystemTask.cpp | 2 +- src/touchhandler/TouchHandler.cpp | 20 ++++++++++++-------- 12 files changed, 40 insertions(+), 63 deletions(-) diff --git a/src/displayapp/DisplayApp.cpp b/src/displayapp/DisplayApp.cpp index ca7e390f02..945f182a2d 100644 --- a/src/displayapp/DisplayApp.cpp +++ b/src/displayapp/DisplayApp.cpp @@ -226,9 +226,7 @@ void DisplayApp::Refresh() { } } - if (touchMode == TouchModes::Polling) { - currentScreen->OnTouchEvent(touchHandler.GetX(), touchHandler.GetY()); - } + currentScreen->OnTouchEvent(touchHandler.GetX(), touchHandler.GetY()); if (nextApp != Apps::None) { LoadApp(nextApp, nextDirection); @@ -367,6 +365,7 @@ void DisplayApp::LoadApp(Apps app, DisplayApp::FullRefreshDirections direction) break; case Apps::Metronome: currentScreen = std::make_unique(this, motorController, *systemTask); + ReturnApp(Apps::Launcher, FullRefreshDirections::Down, TouchEvents::None); break; case Apps::Motion: currentScreen = std::make_unique(this, motionController); @@ -397,10 +396,8 @@ void DisplayApp::PushMessage(Messages msg) { TouchEvents DisplayApp::GetGesture() { auto gesture = touchHandler.GestureGet(); switch (gesture) { - /* case Pinetime::Drivers::Cst816S::Gestures::SingleTap: return TouchEvents::Tap; - */ case Pinetime::Drivers::Cst816S::Gestures::LongPress: return TouchEvents::LongTap; case Pinetime::Drivers::Cst816S::Gestures::DoubleTap: @@ -445,10 +442,6 @@ void DisplayApp::SetFullRefresh(DisplayApp::FullRefreshDirections direction) { } } -void DisplayApp::SetTouchMode(DisplayApp::TouchModes mode) { - touchMode = mode; -} - void DisplayApp::PushMessageToSystemTask(Pinetime::System::Messages message) { if(systemTask != nullptr) systemTask->PushMessage(message); diff --git a/src/displayapp/DisplayApp.h b/src/displayapp/DisplayApp.h index 74fc4456b7..96951d1c5d 100644 --- a/src/displayapp/DisplayApp.h +++ b/src/displayapp/DisplayApp.h @@ -43,7 +43,6 @@ namespace Pinetime { public: enum class States { Idle, Running }; enum class FullRefreshDirections { None, Up, Down, Left, Right, LeftAnim, RightAnim }; - enum class TouchModes { Gestures, Polling }; DisplayApp(Drivers::St7789& lcd, Components::LittleVgl& lvgl, @@ -65,7 +64,6 @@ namespace Pinetime { void StartApp(Apps app, DisplayApp::FullRefreshDirections direction); void SetFullRefresh(FullRefreshDirections direction); - void SetTouchMode(TouchModes mode); void Register(Pinetime::System::SystemTask* systemTask); @@ -104,8 +102,6 @@ namespace Pinetime { FullRefreshDirections returnDirection = FullRefreshDirections::None; TouchEvents returnTouchEvent = TouchEvents::None; - TouchModes touchMode = TouchModes::Gestures; - TouchEvents GetGesture(); void RunningState(); void IdleState(); diff --git a/src/displayapp/LittleVgl.cpp b/src/displayapp/LittleVgl.cpp index d0c6161e15..b5669713bc 100644 --- a/src/displayapp/LittleVgl.cpp +++ b/src/displayapp/LittleVgl.cpp @@ -166,7 +166,7 @@ void LittleVgl::FlushDisplay(const lv_area_t* area, lv_color_t* color_p) { lv_disp_flush_ready(&disp_drv); } -void LittleVgl::SetNewTapEvent(uint16_t x, uint16_t y, bool contact) { +void LittleVgl::SetNewTouchPoint(uint16_t x, uint16_t y, bool contact) { tap_x = x; tap_y = y; tapped = contact; diff --git a/src/displayapp/LittleVgl.h b/src/displayapp/LittleVgl.h index 8d1ed56f7b..1f8a3d79f0 100644 --- a/src/displayapp/LittleVgl.h +++ b/src/displayapp/LittleVgl.h @@ -24,7 +24,7 @@ namespace Pinetime { void FlushDisplay(const lv_area_t* area, lv_color_t* color_p); bool GetTouchPadInfo(lv_indev_data_t* ptr); void SetFullRefresh(FullRefreshDirections direction); - void SetNewTapEvent(uint16_t x, uint16_t y, bool contact); + void SetNewTouchPoint(uint16_t x, uint16_t y, bool contact); private: void InitDisplay(); diff --git a/src/displayapp/screens/InfiniPaint.cpp b/src/displayapp/screens/InfiniPaint.cpp index 3224008409..58bfa558e4 100644 --- a/src/displayapp/screens/InfiniPaint.cpp +++ b/src/displayapp/screens/InfiniPaint.cpp @@ -5,13 +5,10 @@ using namespace Pinetime::Applications::Screens; InfiniPaint::InfiniPaint(Pinetime::Applications::DisplayApp* app, Pinetime::Components::LittleVgl& lvgl) : Screen(app), lvgl {lvgl} { - app->SetTouchMode(DisplayApp::TouchModes::Polling); std::fill(b, b + bufferSize, selectColor); } InfiniPaint::~InfiniPaint() { - // Reset the touchmode - app->SetTouchMode(DisplayApp::TouchModes::Gestures); lv_obj_clean(lv_scr_act()); } diff --git a/src/displayapp/screens/Metronome.cpp b/src/displayapp/screens/Metronome.cpp index 15916b620d..3e3f478e51 100644 --- a/src/displayapp/screens/Metronome.cpp +++ b/src/displayapp/screens/Metronome.cpp @@ -91,7 +91,7 @@ Metronome::~Metronome() { } bool Metronome::OnTouchEvent(Pinetime::Applications::TouchEvents event) { - return true; + return false; } bool Metronome::Refresh() { diff --git a/src/displayapp/screens/Paddle.cpp b/src/displayapp/screens/Paddle.cpp index 5a939ac7a1..79e0c3d347 100644 --- a/src/displayapp/screens/Paddle.cpp +++ b/src/displayapp/screens/Paddle.cpp @@ -5,8 +5,6 @@ using namespace Pinetime::Applications::Screens; Paddle::Paddle(Pinetime::Applications::DisplayApp* app, Pinetime::Components::LittleVgl& lvgl) : Screen(app), lvgl {lvgl} { - app->SetTouchMode(DisplayApp::TouchModes::Polling); - background = lv_obj_create(lv_scr_act(), nullptr); lv_obj_set_size(background, LV_HOR_RES + 1, LV_VER_RES); lv_obj_set_pos(background, -1, 0); @@ -32,8 +30,6 @@ Paddle::Paddle(Pinetime::Applications::DisplayApp* app, Pinetime::Components::Li } Paddle::~Paddle() { - // Reset the touchmode - app->SetTouchMode(DisplayApp::TouchModes::Gestures); lv_obj_clean(lv_scr_act()); } diff --git a/src/displayapp/screens/Screen.h b/src/displayapp/screens/Screen.h index 8e49c9dec6..6567a20c34 100644 --- a/src/displayapp/screens/Screen.h +++ b/src/displayapp/screens/Screen.h @@ -60,6 +60,7 @@ namespace Pinetime { } /** @return false if the event hasn't been handled by the app, true if it has been handled */ + // Returning true will cancel lvgl tap virtual bool OnTouchEvent(TouchEvents event) { return false; } diff --git a/src/drivers/Cst816s.cpp b/src/drivers/Cst816s.cpp index 127fe1ec51..b8f8e45df9 100644 --- a/src/drivers/Cst816s.cpp +++ b/src/drivers/Cst816s.cpp @@ -56,32 +56,24 @@ Cst816S::TouchInfos Cst816S::GetTouchInfo() { Cst816S::TouchInfos info; auto ret = twiMaster.Read(twiAddress, 0, touchData, sizeof(touchData)); - if (ret != TwiMaster::ErrorCodes::NoError) - return {}; - - auto nbTouchPoints = touchData[2] & 0x0f; - - uint8_t i = 0; - - uint8_t pointId = (touchData[touchIdIndex + (touchStep * i)]) >> 4; - if (nbTouchPoints == 0 && pointId == lastTouchId) + if (ret != TwiMaster::ErrorCodes::NoError) { + info.isValid = false; return info; + } - info.isTouch = true; + auto nbTouchPoints = touchData[2] & 0x0f; - auto xHigh = touchData[touchXHighIndex + (touchStep * i)] & 0x0f; - auto xLow = touchData[touchXLowIndex + (touchStep * i)]; + auto xHigh = touchData[touchXHighIndex] & 0x0f; + auto xLow = touchData[touchXLowIndex]; uint16_t x = (xHigh << 8) | xLow; - auto yHigh = touchData[touchYHighIndex + (touchStep * i)] & 0x0f; - auto yLow = touchData[touchYLowIndex + (touchStep * i)]; + auto yHigh = touchData[touchYHighIndex] & 0x0f; + auto yLow = touchData[touchYLowIndex]; uint16_t y = (yHigh << 8) | yLow; - auto action = touchData[touchEventIndex + (touchStep * i)] >> 6; /* 0 = Down, 1 = Up, 2 = contact*/ - info.x = x; info.y = y; - info.finger = nbTouchPoints; + info.touching = (nbTouchPoints > 0); info.gesture = static_cast(touchData[gestureIndex]); return info; diff --git a/src/drivers/Cst816s.h b/src/drivers/Cst816s.h index 14c296eaba..26bdf4e06b 100644 --- a/src/drivers/Cst816s.h +++ b/src/drivers/Cst816s.h @@ -19,12 +19,9 @@ namespace Pinetime { struct TouchInfos { uint16_t x = 0; uint16_t y = 0; - uint8_t action = 0; - uint8_t finger = 0; - uint8_t pressure = 0; - uint8_t area = 0; Gestures gesture = Gestures::None; - bool isTouch = false; + bool touching = false; + bool isValid = false; }; Cst816S(TwiMaster& twiMaster, uint8_t twiAddress); @@ -41,23 +38,24 @@ namespace Pinetime { private: static constexpr uint8_t pinIrq = 28; static constexpr uint8_t pinReset = 10; - static constexpr uint8_t lastTouchId = 0x0f; + + // Unused/Unavailable commented out + static constexpr uint8_t gestureIndex = 1; static constexpr uint8_t touchPointNumIndex = 2; - static constexpr uint8_t touchMiscIndex = 8; - static constexpr uint8_t touchXYIndex = 7; - static constexpr uint8_t touchEventIndex = 3; + //static constexpr uint8_t touchEventIndex = 3; static constexpr uint8_t touchXHighIndex = 3; static constexpr uint8_t touchXLowIndex = 4; + //static constexpr uint8_t touchIdIndex = 5; static constexpr uint8_t touchYHighIndex = 5; static constexpr uint8_t touchYLowIndex = 6; - static constexpr uint8_t touchIdIndex = 5; - static constexpr uint8_t touchStep = 6; - static constexpr uint8_t gestureIndex = 1; + //static constexpr uint8_t touchStep = 6; + //static constexpr uint8_t touchXYIndex = 7; + //static constexpr uint8_t touchMiscIndex = 8; - uint8_t touchData[10]; + uint8_t touchData[7]; TwiMaster& twiMaster; uint8_t twiAddress; }; } -} \ No newline at end of file +} diff --git a/src/systemtask/SystemTask.cpp b/src/systemtask/SystemTask.cpp index f6aee78516..7277fc9367 100644 --- a/src/systemtask/SystemTask.cpp +++ b/src/systemtask/SystemTask.cpp @@ -231,7 +231,7 @@ void SystemTask::Work() { twiMaster.Wakeup(); auto touchInfo = touchPanel.GetTouchInfo(); twiMaster.Sleep(); - if (touchInfo.isTouch and ((touchInfo.gesture == Pinetime::Drivers::Cst816S::Gestures::DoubleTap and + if (touchInfo.isValid and ((touchInfo.gesture == Pinetime::Drivers::Cst816S::Gestures::DoubleTap and settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::DoubleTap)) or (touchInfo.gesture == Pinetime::Drivers::Cst816S::Gestures::SingleTap and settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::SingleTap)))) { diff --git a/src/touchhandler/TouchHandler.cpp b/src/touchhandler/TouchHandler.cpp index 90b4d6daab..c6f8629fc6 100644 --- a/src/touchhandler/TouchHandler.cpp +++ b/src/touchhandler/TouchHandler.cpp @@ -9,7 +9,7 @@ TouchHandler::TouchHandler(Drivers::Cst816S& touchPanel, Components::LittleVgl& void TouchHandler::CancelTap() { isCancelled = true; - lvgl.SetNewTapEvent(-1, -1, false); + lvgl.SetNewTouchPoint(-1, -1, true); } Pinetime::Drivers::Cst816S::Gestures TouchHandler::GestureGet() { @@ -19,7 +19,7 @@ Pinetime::Drivers::Cst816S::Gestures TouchHandler::GestureGet() { } void TouchHandler::Start() { - if (pdPASS != xTaskCreate(TouchHandler::Process, "Touch", 80, this, 0, &taskHandle)) { + if (pdPASS != xTaskCreate(TouchHandler::Process, "Touch", 100, this, 0, &taskHandle)) { APP_ERROR_HANDLER(NRF_ERROR_NO_MEM); } } @@ -39,13 +39,9 @@ void TouchHandler::Work() { } else { x = info.x; y = info.y; - if (info.finger == 0) { - lvgl.SetNewTapEvent(info.x, info.y, false); - prevGesture = Pinetime::Drivers::Cst816S::Gestures::None; - isCancelled = false; - } else if (info.finger == 1) { + if (info.touching) { if (!isCancelled) { - lvgl.SetNewTapEvent(info.x, info.y, true); + lvgl.SetNewTouchPoint(info.x, info.y, true); } if (info.gesture != Pinetime::Drivers::Cst816S::Gestures::None) { if (prevGesture != info.gesture) { @@ -53,6 +49,14 @@ void TouchHandler::Work() { gesture = info.gesture; } } + } else { + if (isCancelled) { + lvgl.SetNewTouchPoint(-1, -1, false); + isCancelled = false; + } else { + lvgl.SetNewTouchPoint(info.x, info.y, false); + } + prevGesture = Pinetime::Drivers::Cst816S::Gestures::None; } systemTask->OnTouchEvent(); } From 93ccbf38e81b30165e49e897c01cac2eb54cc331 Mon Sep 17 00:00:00 2001 From: Riku Isokoski Date: Fri, 16 Jul 2021 01:49:20 +0300 Subject: [PATCH 041/173] Fix touch wakeup and code cleanup --- src/displayapp/LittleVgl.cpp | 21 ----------------- src/drivers/TwiMaster.cpp | 12 ++++++---- src/drivers/TwiMaster.h | 3 ++- src/main.cpp | 4 +++- src/systemtask/SystemTask.cpp | 38 +++++++++++++++---------------- src/systemtask/SystemTask.h | 13 +++++++---- src/touchhandler/TouchHandler.cpp | 5 ++-- 7 files changed, 43 insertions(+), 53 deletions(-) diff --git a/src/displayapp/LittleVgl.cpp b/src/displayapp/LittleVgl.cpp index b5669713bc..2bd5e57be7 100644 --- a/src/displayapp/LittleVgl.cpp +++ b/src/displayapp/LittleVgl.cpp @@ -181,27 +181,6 @@ bool LittleVgl::GetTouchPadInfo(lv_indev_data_t* ptr) { ptr->state = LV_INDEV_STATE_REL; } return false; - /* - auto info = touchPanel.GetTouchInfo(); - - if((previousClick.x != info.x || previousClick.y != info.y) && - (info.gesture == Drivers::Cst816S::Gestures::SingleTap)) { - // TODO For an unknown reason, the first touch is taken twice into account. - // 'firstTouch' is a quite'n'dirty workaound until I find a better solution - if(firstTouch) ptr->state = LV_INDEV_STATE_REL; - else ptr->state = LV_INDEV_STATE_PR; - firstTouch = false; - previousClick.x = info.x; - previousClick.y = info.y; - } - else { - ptr->state = LV_INDEV_STATE_REL; - } - - ptr->point.x = info.x; - ptr->point.y = info.y; - return false; - */ } void LittleVgl::InitTheme() { diff --git a/src/drivers/TwiMaster.cpp b/src/drivers/TwiMaster.cpp index fc9edf810f..456c3e64b8 100644 --- a/src/drivers/TwiMaster.cpp +++ b/src/drivers/TwiMaster.cpp @@ -12,9 +12,10 @@ TwiMaster::TwiMaster(const Modules module, const Parameters& params) : module {m } void TwiMaster::Init() { + sleeping = false; if(mutex == nullptr) mutex = xSemaphoreCreateBinary(); - + NRF_GPIO->PIN_CNF[params.pinScl] = ((uint32_t) GPIO_PIN_CNF_DIR_Input << GPIO_PIN_CNF_DIR_Pos) | ((uint32_t) GPIO_PIN_CNF_INPUT_Connect << GPIO_PIN_CNF_INPUT_Pos) | ((uint32_t) GPIO_PIN_CNF_PULL_Pullup << GPIO_PIN_CNF_PULL_Pos) | ((uint32_t) GPIO_PIN_CNF_DRIVE_S0D1 << GPIO_PIN_CNF_DRIVE_Pos) | @@ -176,11 +177,14 @@ void TwiMaster::Sleep() { nrf_gpio_cfg_default(6); nrf_gpio_cfg_default(7); NRF_LOG_INFO("[TWIMASTER] Sleep"); + sleeping = true; } void TwiMaster::Wakeup() { - Init(); - NRF_LOG_INFO("[TWIMASTER] Wakeup"); + if (sleeping) { + Init(); + NRF_LOG_INFO("[TWIMASTER] Wakeup"); + } } /* Sometimes, the TWIM device just freeze and never set the event EVENTS_LASTTX. @@ -206,4 +210,4 @@ void TwiMaster::FixHwFreezed() { // Re-enable I²C twiBaseAddress->ENABLE = twi_state; -} \ No newline at end of file +} diff --git a/src/drivers/TwiMaster.h b/src/drivers/TwiMaster.h index 6175b99b44..5748ec65f8 100644 --- a/src/drivers/TwiMaster.h +++ b/src/drivers/TwiMaster.h @@ -39,6 +39,7 @@ namespace Pinetime { uint8_t internalBuffer[maxDataSize + registerSize]; uint32_t txStartedCycleCount = 0; static constexpr uint32_t HwFreezedDelay {161000}; + bool sleeping; }; } -} \ No newline at end of file +} diff --git a/src/main.cpp b/src/main.cpp index f427db40a9..b8d4b02398 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -161,10 +161,12 @@ Pinetime::System::SystemTask systemTask(spi, heartRateController, displayApp, heartRateApp, - fs); + fs, + touchHandler); void nrfx_gpiote_evt_handler(nrfx_gpiote_pin_t pin, nrf_gpiote_polarity_t action) { if (pin == pinTouchIrq) { + twiMaster.Wakeup(); touchHandler.WakeUp(); return; } diff --git a/src/systemtask/SystemTask.cpp b/src/systemtask/SystemTask.cpp index 7277fc9367..93d1986324 100644 --- a/src/systemtask/SystemTask.cpp +++ b/src/systemtask/SystemTask.cpp @@ -60,7 +60,8 @@ SystemTask::SystemTask(Drivers::SpiMaster& spi, Pinetime::Controllers::HeartRateController& heartRateController, Pinetime::Applications::DisplayApp& displayApp, Pinetime::Applications::HeartRateTask& heartRateApp, - Pinetime::Controllers::FS& fs) + Pinetime::Controllers::FS& fs, + Pinetime::Controllers::TouchHandler& touchHandler) : spi {spi}, lcd {lcd}, spiNorFlash {spiNorFlash}, @@ -72,18 +73,18 @@ SystemTask::SystemTask(Drivers::SpiMaster& spi, dateTimeController {dateTimeController}, timerController {timerController}, watchdog {watchdog}, - notificationManager{notificationManager}, + notificationManager {notificationManager}, motorController {motorController}, heartRateSensor {heartRateSensor}, motionSensor {motionSensor}, settingsController {settingsController}, - heartRateController{heartRateController}, - motionController{motionController}, - displayApp{displayApp}, + heartRateController {heartRateController}, + motionController {motionController}, + displayApp {displayApp}, heartRateApp(heartRateApp), - fs{fs}, + fs {fs}, + touchHandler {touchHandler}, nimbleController(*this, bleController, dateTimeController, notificationManager, batteryController, spiNorFlash, heartRateController) { - } void SystemTask::Start() { @@ -105,11 +106,11 @@ void SystemTask::Work() { APP_GPIOTE_INIT(2); app_timer_init(); - + spi.Init(); spiNorFlash.Init(); spiNorFlash.Wakeup(); - + fs.Init(); nimbleController.Init(); @@ -228,14 +229,14 @@ void SystemTask::Work() { isWakingUp = false; break; case Messages::TouchWakeUp: { - twiMaster.Wakeup(); - auto touchInfo = touchPanel.GetTouchInfo(); - twiMaster.Sleep(); - if (touchInfo.isValid and ((touchInfo.gesture == Pinetime::Drivers::Cst816S::Gestures::DoubleTap and - settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::DoubleTap)) or - (touchInfo.gesture == Pinetime::Drivers::Cst816S::Gestures::SingleTap and - settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::SingleTap)))) { + auto gesture = touchHandler.GestureGet(); + if ((gesture == Pinetime::Drivers::Cst816S::Gestures::DoubleTap && + settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::DoubleTap)) || + (gesture == Pinetime::Drivers::Cst816S::Gestures::SingleTap && + settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::SingleTap))) { GoToRunning(); + } else { + twiMaster.Sleep(); } } break; case Messages::GoToSleep: @@ -311,7 +312,7 @@ void SystemTask::Work() { break; case Messages::OnChargingEvent: motorController.SetDuration(15); - // Battery level is updated on every message - there's no need to do anything + // Battery level is updated on every message - there's no need to do anything break; default: @@ -410,14 +411,13 @@ void SystemTask::PushMessage(System::Messages msg) { isGoingToSleep = true; } - if(in_isr()) { + if (in_isr()) { BaseType_t xHigherPriorityTaskWoken; xHigherPriorityTaskWoken = pdFALSE; xQueueSendFromISR(systemTasksMsgQueue, &msg, &xHigherPriorityTaskWoken); if (xHigherPriorityTaskWoken) { /* Actual macro used here is port specific. */ portYIELD_FROM_ISR(xHigherPriorityTaskWoken); - } } else { xQueueSend(systemTasksMsgQueue, &msg, portMAX_DELAY); diff --git a/src/systemtask/SystemTask.h b/src/systemtask/SystemTask.h index f8cf63705c..a7ee73ad97 100644 --- a/src/systemtask/SystemTask.h +++ b/src/systemtask/SystemTask.h @@ -17,6 +17,7 @@ #include "components/motor/MotorController.h" #include "components/timer/TimerController.h" #include "components/fs/FS.h" +#include "touchhandler/TouchHandler.h" #ifdef PINETIME_IS_RECOVERY #include "displayapp/DisplayAppRecovery.h" @@ -24,7 +25,7 @@ #else #include "components/settings/Settings.h" #include "displayapp/DisplayApp.h" - #include "displayapp/LittleVgl.h" + #include "displayapp/LittleVgl.h" #endif #include "drivers/Watchdog.h" @@ -39,6 +40,9 @@ namespace Pinetime { class TwiMaster; class Hrs3300; } + namespace Controllers { + class TouchHandler; + } namespace System { class SystemTask { public: @@ -62,7 +66,8 @@ namespace Pinetime { Pinetime::Controllers::HeartRateController& heartRateController, Pinetime::Applications::DisplayApp& displayApp, Pinetime::Applications::HeartRateTask& heartRateApp, - Pinetime::Controllers::FS& fs); + Pinetime::Controllers::FS& fs, + Pinetime::Controllers::TouchHandler& touchHandler); void Start(); void PushMessage(Messages msg); @@ -91,7 +96,6 @@ namespace Pinetime { Pinetime::Components::LittleVgl& lvgl; Pinetime::Controllers::Battery& batteryController; - Pinetime::Controllers::Ble& bleController; Pinetime::Controllers::DateTime& dateTimeController; Pinetime::Controllers::TimerController& timerController; @@ -106,13 +110,14 @@ namespace Pinetime { Pinetime::Drivers::Bma421& motionSensor; Pinetime::Controllers::Settings& settingsController; Pinetime::Controllers::HeartRateController& heartRateController; - + Controllers::BrightnessController brightnessController; Pinetime::Controllers::MotionController& motionController; Pinetime::Applications::DisplayApp& displayApp; Pinetime::Applications::HeartRateTask& heartRateApp; Pinetime::Controllers::FS& fs; + Pinetime::Controllers::TouchHandler& touchHandler; Pinetime::Controllers::NimbleController nimbleController; static constexpr uint8_t pinSpiSck = 2; diff --git a/src/touchhandler/TouchHandler.cpp b/src/touchhandler/TouchHandler.cpp index c6f8629fc6..86dc29f6bc 100644 --- a/src/touchhandler/TouchHandler.cpp +++ b/src/touchhandler/TouchHandler.cpp @@ -2,9 +2,7 @@ using namespace Pinetime::Controllers; -TouchHandler::TouchHandler(Drivers::Cst816S& touchPanel, Components::LittleVgl& lvgl) - : touchPanel {touchPanel}, - lvgl {lvgl} { +TouchHandler::TouchHandler(Drivers::Cst816S& touchPanel, Components::LittleVgl& lvgl) : touchPanel {touchPanel}, lvgl {lvgl} { } void TouchHandler::CancelTap() { @@ -35,6 +33,7 @@ void TouchHandler::Work() { vTaskSuspend(taskHandle); info = touchPanel.GetTouchInfo(); if (systemTask->IsSleeping()) { + gesture = info.gesture; systemTask->PushMessage(System::Messages::TouchWakeUp); } else { x = info.x; From baffa1594f9c1a03a95f0cc10955e3cf8bf880ce Mon Sep 17 00:00:00 2001 From: Riku Isokoski Date: Fri, 16 Jul 2021 02:17:17 +0300 Subject: [PATCH 042/173] Fix gestures --- .../screens/settings/QuickSettings.cpp | 11 ---------- .../screens/settings/QuickSettings.h | 1 - src/touchhandler/TouchHandler.cpp | 20 ++++++++++++------- src/touchhandler/TouchHandler.h | 1 - 4 files changed, 13 insertions(+), 20 deletions(-) diff --git a/src/displayapp/screens/settings/QuickSettings.cpp b/src/displayapp/screens/settings/QuickSettings.cpp index 2da5ca276b..076bea82a6 100644 --- a/src/displayapp/screens/settings/QuickSettings.cpp +++ b/src/displayapp/screens/settings/QuickSettings.cpp @@ -154,17 +154,6 @@ void QuickSettings::OnButtonEvent(lv_obj_t* object, lv_event_t event) { } } -bool QuickSettings::OnTouchEvent(Pinetime::Applications::TouchEvents event) { - switch (event) { - case Pinetime::Applications::TouchEvents::SwipeLeft: - running = false; - return false; - - default: - return true; - } -} - bool QuickSettings::Refresh() { return running; } diff --git a/src/displayapp/screens/settings/QuickSettings.h b/src/displayapp/screens/settings/QuickSettings.h index a14f46bf32..e0fc0a87b3 100644 --- a/src/displayapp/screens/settings/QuickSettings.h +++ b/src/displayapp/screens/settings/QuickSettings.h @@ -29,7 +29,6 @@ namespace Pinetime { bool Refresh() override; - bool OnTouchEvent(Pinetime::Applications::TouchEvents event) override; void OnButtonEvent(lv_obj_t* object, lv_event_t event); void UpdateScreen(); diff --git a/src/touchhandler/TouchHandler.cpp b/src/touchhandler/TouchHandler.cpp index 86dc29f6bc..160b5e1451 100644 --- a/src/touchhandler/TouchHandler.cpp +++ b/src/touchhandler/TouchHandler.cpp @@ -29,11 +29,23 @@ void TouchHandler::Process(void* instance) { void TouchHandler::Work() { Pinetime::Drivers::Cst816S::TouchInfos info; + Pinetime::Drivers::Cst816S::Gestures prevGesture = Pinetime::Drivers::Cst816S::Gestures::None; while (true) { vTaskSuspend(taskHandle); + info = touchPanel.GetTouchInfo(); + + if (info.gesture != Pinetime::Drivers::Cst816S::Gestures::None) { + if (prevGesture != info.gesture) { + if (info.gesture == Pinetime::Drivers::Cst816S::Gestures::SlideDown || info.gesture == Pinetime::Drivers::Cst816S::Gestures::SlideLeft || + info.gesture == Pinetime::Drivers::Cst816S::Gestures::SlideUp || info.gesture == Pinetime::Drivers::Cst816S::Gestures::SlideRight) { + prevGesture = info.gesture; + } + gesture = info.gesture; + } + } + if (systemTask->IsSleeping()) { - gesture = info.gesture; systemTask->PushMessage(System::Messages::TouchWakeUp); } else { x = info.x; @@ -42,12 +54,6 @@ void TouchHandler::Work() { if (!isCancelled) { lvgl.SetNewTouchPoint(info.x, info.y, true); } - if (info.gesture != Pinetime::Drivers::Cst816S::Gestures::None) { - if (prevGesture != info.gesture) { - prevGesture = info.gesture; - gesture = info.gesture; - } - } } else { if (isCancelled) { lvgl.SetNewTouchPoint(-1, -1, false); diff --git a/src/touchhandler/TouchHandler.h b/src/touchhandler/TouchHandler.h index 7999e00a39..37ef5af23b 100644 --- a/src/touchhandler/TouchHandler.h +++ b/src/touchhandler/TouchHandler.h @@ -37,7 +37,6 @@ namespace Pinetime { Pinetime::Drivers::Cst816S& touchPanel; Pinetime::Components::LittleVgl& lvgl; Pinetime::Drivers::Cst816S::Gestures gesture; - Pinetime::Drivers::Cst816S::Gestures prevGesture; bool isCancelled = false; uint8_t x, y; }; From 329482f87308c185e970b141bcbfe9c83b46c4da Mon Sep 17 00:00:00 2001 From: Riku Isokoski Date: Fri, 16 Jul 2021 11:55:29 +0300 Subject: [PATCH 043/173] Fix remaining known issues --- src/displayapp/DisplayApp.cpp | 4 +++- src/displayapp/screens/Tile.cpp | 3 ++- src/touchhandler/TouchHandler.cpp | 9 ++++----- src/touchhandler/TouchHandler.h | 11 ++++++++--- 4 files changed, 17 insertions(+), 10 deletions(-) diff --git a/src/displayapp/DisplayApp.cpp b/src/displayapp/DisplayApp.cpp index 945f182a2d..1ff8d51db0 100644 --- a/src/displayapp/DisplayApp.cpp +++ b/src/displayapp/DisplayApp.cpp @@ -226,7 +226,9 @@ void DisplayApp::Refresh() { } } - currentScreen->OnTouchEvent(touchHandler.GetX(), touchHandler.GetY()); + if (touchHandler.IsTouching()) { + currentScreen->OnTouchEvent(touchHandler.GetX(), touchHandler.GetY()); + } if (nextApp != Apps::None) { LoadApp(nextApp, nextDirection); diff --git a/src/displayapp/screens/Tile.cpp b/src/displayapp/screens/Tile.cpp index 5a40e915fe..8eb5eb0afc 100644 --- a/src/displayapp/screens/Tile.cpp +++ b/src/displayapp/screens/Tile.cpp @@ -91,6 +91,7 @@ Tile::Tile(uint8_t screenID, lv_obj_set_style_local_bg_color(btnm1, LV_BTNMATRIX_PART_BTN, LV_STATE_DISABLED, lv_color_hex(0x111111)); for (uint8_t i = 0; i < 6; i++) { + lv_btnmatrix_set_btn_ctrl(btnm1, i, LV_BTNMATRIX_CTRL_CLICK_TRIG); if (applications[i].application == Apps::None) { lv_btnmatrix_set_btn_ctrl(btnm1, i, LV_BTNMATRIX_CTRL_DISABLED); } @@ -123,7 +124,7 @@ bool Tile::Refresh() { } void Tile::OnObjectEvent(lv_obj_t* obj, lv_event_t event) { - if (event == LV_EVENT_CLICKED) { + if (event == LV_EVENT_VALUE_CHANGED) { app->StartApp(apps[lv_btnmatrix_get_active_btn(obj)], DisplayApp::FullRefreshDirections::Up); running = false; } diff --git a/src/touchhandler/TouchHandler.cpp b/src/touchhandler/TouchHandler.cpp index 160b5e1451..0d0b827353 100644 --- a/src/touchhandler/TouchHandler.cpp +++ b/src/touchhandler/TouchHandler.cpp @@ -6,8 +6,10 @@ TouchHandler::TouchHandler(Drivers::Cst816S& touchPanel, Components::LittleVgl& } void TouchHandler::CancelTap() { - isCancelled = true; - lvgl.SetNewTouchPoint(-1, -1, true); + if (info.touching) { + isCancelled = true; + lvgl.SetNewTouchPoint(-1, -1, true); + } } Pinetime::Drivers::Cst816S::Gestures TouchHandler::GestureGet() { @@ -28,7 +30,6 @@ void TouchHandler::Process(void* instance) { } void TouchHandler::Work() { - Pinetime::Drivers::Cst816S::TouchInfos info; Pinetime::Drivers::Cst816S::Gestures prevGesture = Pinetime::Drivers::Cst816S::Gestures::None; while (true) { vTaskSuspend(taskHandle); @@ -48,8 +49,6 @@ void TouchHandler::Work() { if (systemTask->IsSleeping()) { systemTask->PushMessage(System::Messages::TouchWakeUp); } else { - x = info.x; - y = info.y; if (info.touching) { if (!isCancelled) { lvgl.SetNewTouchPoint(info.x, info.y, true); diff --git a/src/touchhandler/TouchHandler.h b/src/touchhandler/TouchHandler.h index 37ef5af23b..6b8189f52b 100644 --- a/src/touchhandler/TouchHandler.h +++ b/src/touchhandler/TouchHandler.h @@ -22,23 +22,28 @@ namespace Pinetime { void Register(Pinetime::System::SystemTask* systemTask); void Start(); void WakeUp(); + + bool IsTouching() const { + return info.touching; + } uint8_t GetX() const { - return x; + return info.x; } uint8_t GetY() const { - return y; + return info.y; } Drivers::Cst816S::Gestures GestureGet(); private: static void Process(void* instance); void Work(); + + Pinetime::Drivers::Cst816S::TouchInfos info; Pinetime::System::SystemTask* systemTask = nullptr; TaskHandle_t taskHandle; Pinetime::Drivers::Cst816S& touchPanel; Pinetime::Components::LittleVgl& lvgl; Pinetime::Drivers::Cst816S::Gestures gesture; bool isCancelled = false; - uint8_t x, y; }; } } From 3e42297bd86fa20daaf7f59f6bc0a69de6cf9e53 Mon Sep 17 00:00:00 2001 From: Riku Isokoski Date: Sun, 18 Jul 2021 12:32:46 +0300 Subject: [PATCH 044/173] Update --- src/drivers/Cst816s.h | 2 +- src/main.cpp | 3 --- src/systemtask/SystemTask.cpp | 3 +++ src/touchhandler/TouchHandler.cpp | 44 ++++++++++++++++--------------- 4 files changed, 27 insertions(+), 25 deletions(-) diff --git a/src/drivers/Cst816s.h b/src/drivers/Cst816s.h index 26bdf4e06b..d4c17bb823 100644 --- a/src/drivers/Cst816s.h +++ b/src/drivers/Cst816s.h @@ -21,7 +21,7 @@ namespace Pinetime { uint16_t y = 0; Gestures gesture = Gestures::None; bool touching = false; - bool isValid = false; + bool isValid = true; }; Cst816S(TwiMaster& twiMaster, uint8_t twiAddress); diff --git a/src/main.cpp b/src/main.cpp index b8d4b02398..62e4446f32 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -315,9 +315,6 @@ int main(void) { systemTask.Start(); - touchHandler.Register(&systemTask); - touchHandler.Start(); - nimble_port_init(); vTaskStartScheduler(); diff --git a/src/systemtask/SystemTask.cpp b/src/systemtask/SystemTask.cpp index 93d1986324..252d3cc319 100644 --- a/src/systemtask/SystemTask.cpp +++ b/src/systemtask/SystemTask.cpp @@ -144,6 +144,9 @@ void SystemTask::Work() { heartRateSensor.Disable(); heartRateApp.Start(); + touchHandler.Register(this); + touchHandler.Start(); + nrf_gpio_cfg_sense_input(pinButton, (nrf_gpio_pin_pull_t) GPIO_PIN_CNF_PULL_Pulldown, (nrf_gpio_pin_sense_t) GPIO_PIN_CNF_SENSE_High); nrf_gpio_cfg_output(15); nrf_gpio_pin_set(15); diff --git a/src/touchhandler/TouchHandler.cpp b/src/touchhandler/TouchHandler.cpp index 0d0b827353..187aa6966c 100644 --- a/src/touchhandler/TouchHandler.cpp +++ b/src/touchhandler/TouchHandler.cpp @@ -30,37 +30,39 @@ void TouchHandler::Process(void* instance) { } void TouchHandler::Work() { - Pinetime::Drivers::Cst816S::Gestures prevGesture = Pinetime::Drivers::Cst816S::Gestures::None; + bool slideReleased = true; while (true) { vTaskSuspend(taskHandle); info = touchPanel.GetTouchInfo(); - if (info.gesture != Pinetime::Drivers::Cst816S::Gestures::None) { - if (prevGesture != info.gesture) { - if (info.gesture == Pinetime::Drivers::Cst816S::Gestures::SlideDown || info.gesture == Pinetime::Drivers::Cst816S::Gestures::SlideLeft || - info.gesture == Pinetime::Drivers::Cst816S::Gestures::SlideUp || info.gesture == Pinetime::Drivers::Cst816S::Gestures::SlideRight) { - prevGesture = info.gesture; + if (info.isValid) { + if (info.gesture != Pinetime::Drivers::Cst816S::Gestures::None) { + if (slideReleased) { + if (info.gesture == Pinetime::Drivers::Cst816S::Gestures::SlideDown || + info.gesture == Pinetime::Drivers::Cst816S::Gestures::SlideLeft || + info.gesture == Pinetime::Drivers::Cst816S::Gestures::SlideUp || + info.gesture == Pinetime::Drivers::Cst816S::Gestures::SlideRight) { + slideReleased = false; + } + gesture = info.gesture; } - gesture = info.gesture; } - } - if (systemTask->IsSleeping()) { - systemTask->PushMessage(System::Messages::TouchWakeUp); - } else { - if (info.touching) { - if (!isCancelled) { - lvgl.SetNewTouchPoint(info.x, info.y, true); - } - } else { - if (isCancelled) { - lvgl.SetNewTouchPoint(-1, -1, false); - isCancelled = false; + if (!systemTask->IsSleeping()) { + if (info.touching) { + if (!isCancelled) { + lvgl.SetNewTouchPoint(info.x, info.y, true); + } } else { - lvgl.SetNewTouchPoint(info.x, info.y, false); + if (isCancelled) { + lvgl.SetNewTouchPoint(-1, -1, false); + isCancelled = false; + } else { + lvgl.SetNewTouchPoint(info.x, info.y, false); + } + slideReleased = true; } - prevGesture = Pinetime::Drivers::Cst816S::Gestures::None; } systemTask->OnTouchEvent(); } From dc2b5f0c6b387f674915d0dbe817b7ac2a821e07 Mon Sep 17 00:00:00 2001 From: Riku Isokoski Date: Mon, 19 Jul 2021 10:21:42 +0300 Subject: [PATCH 045/173] Restore Tile.cpp changes --- src/displayapp/screens/Tile.cpp | 8 +++++--- src/displayapp/screens/Tile.h | 2 +- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/displayapp/screens/Tile.cpp b/src/displayapp/screens/Tile.cpp index 8eb5eb0afc..853fa7ece4 100644 --- a/src/displayapp/screens/Tile.cpp +++ b/src/displayapp/screens/Tile.cpp @@ -12,7 +12,9 @@ namespace { static void event_handler(lv_obj_t* obj, lv_event_t event) { Tile* screen = static_cast(obj->user_data); - screen->OnObjectEvent(obj, event); + uint32_t* eventDataPtr = (uint32_t*) lv_event_get_data(); + uint32_t eventData = *eventDataPtr; + screen->OnObjectEvent(obj, event, eventData); } } @@ -123,9 +125,9 @@ bool Tile::Refresh() { return running; } -void Tile::OnObjectEvent(lv_obj_t* obj, lv_event_t event) { +void Tile::OnObjectEvent(lv_obj_t* obj, lv_event_t event, uint32_t buttonId) { if (event == LV_EVENT_VALUE_CHANGED) { - app->StartApp(apps[lv_btnmatrix_get_active_btn(obj)], DisplayApp::FullRefreshDirections::Up); + app->StartApp(apps[buttonId], DisplayApp::FullRefreshDirections::Up); running = false; } } diff --git a/src/displayapp/screens/Tile.h b/src/displayapp/screens/Tile.h index 91ce9d01db..4ebd81cd9b 100644 --- a/src/displayapp/screens/Tile.h +++ b/src/displayapp/screens/Tile.h @@ -32,7 +32,7 @@ namespace Pinetime { bool Refresh() override; void UpdateScreen(); - void OnObjectEvent(lv_obj_t* obj, lv_event_t event); + void OnObjectEvent(lv_obj_t* obj, lv_event_t event, uint32_t buttonId); private: Pinetime::Controllers::Battery& batteryController; From 97c761a5c74994ea1d9bef9c14e6e24afb9b4be2 Mon Sep 17 00:00:00 2001 From: Riku Isokoski Date: Mon, 19 Jul 2021 16:26:12 +0300 Subject: [PATCH 046/173] Refresh rework --- src/displayapp/DisplayApp.cpp | 2 +- src/displayapp/screens/ApplicationList.cpp | 6 --- src/displayapp/screens/ApplicationList.h | 3 +- src/displayapp/screens/BatteryInfo.cpp | 17 ++----- src/displayapp/screens/BatteryInfo.h | 6 +-- src/displayapp/screens/Brightness.cpp | 4 -- src/displayapp/screens/Brightness.h | 3 +- src/displayapp/screens/Clock.cpp | 7 +-- src/displayapp/screens/Clock.h | 2 - src/displayapp/screens/FirmwareUpdate.cpp | 15 +++--- src/displayapp/screens/FirmwareUpdate.h | 6 ++- src/displayapp/screens/FirmwareValidation.cpp | 4 -- src/displayapp/screens/FirmwareValidation.h | 2 - src/displayapp/screens/FlashLight.cpp | 4 -- src/displayapp/screens/FlashLight.h | 2 - src/displayapp/screens/HeartRate.cpp | 7 +-- src/displayapp/screens/HeartRate.h | 4 +- src/displayapp/screens/InfiniPaint.cpp | 4 -- src/displayapp/screens/InfiniPaint.h | 2 - src/displayapp/screens/Label.cpp | 4 -- src/displayapp/screens/Label.h | 4 +- src/displayapp/screens/List.cpp | 5 -- src/displayapp/screens/List.h | 2 - src/displayapp/screens/Meter.cpp | 8 ++-- src/displayapp/screens/Meter.h | 4 +- src/displayapp/screens/Metronome.cpp | 6 ++- src/displayapp/screens/Metronome.h | 4 +- src/displayapp/screens/Motion.cpp | 8 ++-- src/displayapp/screens/Motion.h | 6 ++- src/displayapp/screens/Music.cpp | 9 ++-- src/displayapp/screens/Music.h | 4 +- src/displayapp/screens/Navigation.cpp | 9 ++-- src/displayapp/screens/Navigation.h | 4 +- src/displayapp/screens/Notifications.cpp | 7 +-- src/displayapp/screens/Notifications.h | 7 ++- src/displayapp/screens/Paddle.cpp | 6 ++- src/displayapp/screens/Paddle.h | 4 +- src/displayapp/screens/PineTimeStyle.cpp | 10 ++-- src/displayapp/screens/PineTimeStyle.h | 4 +- src/displayapp/screens/Screen.cpp | 6 ++- src/displayapp/screens/Screen.h | 24 ++++------ src/displayapp/screens/ScreenList.h | 7 +-- src/displayapp/screens/Steps.cpp | 12 ++--- src/displayapp/screens/Steps.h | 25 +++++----- src/displayapp/screens/StopWatch.cpp | 12 ++--- src/displayapp/screens/StopWatch.h | 5 +- src/displayapp/screens/SystemInfo.cpp | 7 --- src/displayapp/screens/SystemInfo.h | 3 +- src/displayapp/screens/Tile.cpp | 4 -- src/displayapp/screens/Tile.h | 1 - src/displayapp/screens/Timer.cpp | 46 +++++++------------ src/displayapp/screens/Timer.h | 35 +++++++------- src/displayapp/screens/Twos.cpp | 6 +-- src/displayapp/screens/Twos.h | 3 +- src/displayapp/screens/WatchFaceAnalog.cpp | 6 +-- src/displayapp/screens/WatchFaceAnalog.h | 4 +- src/displayapp/screens/WatchFaceDigital.cpp | 8 ++-- src/displayapp/screens/WatchFaceDigital.h | 4 +- .../screens/settings/QuickSettings.cpp | 4 -- .../screens/settings/QuickSettings.h | 2 - .../screens/settings/SettingDisplay.cpp | 6 +-- .../screens/settings/SettingDisplay.h | 1 - .../screens/settings/SettingSteps.cpp | 7 +-- .../screens/settings/SettingSteps.h | 23 ++++------ .../screens/settings/SettingTimeFormat.cpp | 6 +-- .../screens/settings/SettingTimeFormat.h | 1 - .../screens/settings/SettingWakeUp.cpp | 4 -- .../screens/settings/SettingWakeUp.h | 1 - .../screens/settings/SettingWatchFace.cpp | 6 +-- .../screens/settings/SettingWatchFace.h | 1 - src/displayapp/screens/settings/Settings.cpp | 7 --- src/displayapp/screens/settings/Settings.h | 2 - 72 files changed, 198 insertions(+), 306 deletions(-) diff --git a/src/displayapp/DisplayApp.cpp b/src/displayapp/DisplayApp.cpp index 071af0c859..450833f9b7 100644 --- a/src/displayapp/DisplayApp.cpp +++ b/src/displayapp/DisplayApp.cpp @@ -239,7 +239,7 @@ void DisplayApp::Refresh() { } void DisplayApp::RunningState() { - if (!currentScreen->Refresh()) { + if (!currentScreen->IsRunning()) { LoadApp(returnToApp, returnDirection); } lv_task_handler(); diff --git a/src/displayapp/screens/ApplicationList.cpp b/src/displayapp/screens/ApplicationList.cpp index 78c7cd9a4b..67b67a5323 100644 --- a/src/displayapp/screens/ApplicationList.cpp +++ b/src/displayapp/screens/ApplicationList.cpp @@ -34,12 +34,6 @@ ApplicationList::~ApplicationList() { lv_obj_clean(lv_scr_act()); } -bool ApplicationList::Refresh() { - if (running) - running = screens.Refresh(); - return running; -} - bool ApplicationList::OnTouchEvent(Pinetime::Applications::TouchEvents event) { return screens.OnTouchEvent(event); } diff --git a/src/displayapp/screens/ApplicationList.h b/src/displayapp/screens/ApplicationList.h index 88534ec47e..103c38ae0d 100644 --- a/src/displayapp/screens/ApplicationList.h +++ b/src/displayapp/screens/ApplicationList.h @@ -18,7 +18,6 @@ namespace Pinetime { Pinetime::Controllers::Battery& batteryController, Controllers::DateTime& dateTimeController); ~ApplicationList() override; - bool Refresh() override; bool OnTouchEvent(TouchEvents event) override; private: @@ -33,4 +32,4 @@ namespace Pinetime { }; } } -} \ No newline at end of file +} diff --git a/src/displayapp/screens/BatteryInfo.cpp b/src/displayapp/screens/BatteryInfo.cpp index 0ab47ebfff..91c2651236 100644 --- a/src/displayapp/screens/BatteryInfo.cpp +++ b/src/displayapp/screens/BatteryInfo.cpp @@ -4,11 +4,6 @@ using namespace Pinetime::Applications::Screens; -static void lv_update_task(struct _lv_task_t* task) { - auto user_data = static_cast(task->user_data); - user_data->UpdateScreen(); -} - BatteryInfo::BatteryInfo(Pinetime::Applications::DisplayApp* app, Pinetime::Controllers::Battery& batteryController) : Screen(app), batteryController {batteryController} { @@ -49,16 +44,16 @@ BatteryInfo::BatteryInfo(Pinetime::Applications::DisplayApp* app, Pinetime::Cont lv_obj_set_pos(backgroundLabel, 0, 0); lv_label_set_text_static(backgroundLabel, ""); - taskUpdate = lv_task_create(lv_update_task, 5000, LV_TASK_PRIO_LOW, this); - UpdateScreen(); + taskRefresh = lv_task_create(RefreshTaskCallback, 5000, LV_TASK_PRIO_MID, this); + Refresh(); } BatteryInfo::~BatteryInfo() { - lv_task_del(taskUpdate); + lv_task_del(taskRefresh); lv_obj_clean(lv_scr_act()); } -void BatteryInfo::UpdateScreen() { +void BatteryInfo::Refresh() { batteryController.Update(); @@ -85,7 +80,3 @@ void BatteryInfo::UpdateScreen() { lv_label_set_text_fmt(voltage, "%1i.%02i volts", batteryVoltage / 1000, batteryVoltage % 1000 / 10); lv_bar_set_value(charging_bar, batteryPercent, LV_ANIM_ON); } - -bool BatteryInfo::Refresh() { - return running; -} diff --git a/src/displayapp/screens/BatteryInfo.h b/src/displayapp/screens/BatteryInfo.h index 69793244c8..63454a264a 100644 --- a/src/displayapp/screens/BatteryInfo.h +++ b/src/displayapp/screens/BatteryInfo.h @@ -19,9 +19,7 @@ namespace Pinetime { BatteryInfo(DisplayApp* app, Pinetime::Controllers::Battery& batteryController); ~BatteryInfo() override; - bool Refresh() override; - - void UpdateScreen(); + void Refresh() override; private: Pinetime::Controllers::Battery& batteryController; @@ -31,7 +29,7 @@ namespace Pinetime { lv_obj_t* charging_bar; lv_obj_t* status; - lv_task_t* taskUpdate; + lv_task_t* taskRefresh; uint8_t batteryPercent = 0; uint16_t batteryVoltage = 0; diff --git a/src/displayapp/screens/Brightness.cpp b/src/displayapp/screens/Brightness.cpp index 47c10561c7..1278cd62aa 100644 --- a/src/displayapp/screens/Brightness.cpp +++ b/src/displayapp/screens/Brightness.cpp @@ -30,10 +30,6 @@ Brightness::~Brightness() { lv_obj_clean(lv_scr_act()); } -bool Brightness::Refresh() { - return running; -} - const char* Brightness::LevelToString(Pinetime::Controllers::BrightnessController::Levels level) { switch (level) { case Pinetime::Controllers::BrightnessController::Levels::Off: diff --git a/src/displayapp/screens/Brightness.h b/src/displayapp/screens/Brightness.h index 9ee337536c..14e48592e6 100644 --- a/src/displayapp/screens/Brightness.h +++ b/src/displayapp/screens/Brightness.h @@ -12,7 +12,6 @@ namespace Pinetime { public: Brightness(DisplayApp* app, Controllers::BrightnessController& brightness); ~Brightness() override; - bool Refresh() override; bool OnTouchEvent(TouchEvents event) override; @@ -31,4 +30,4 @@ namespace Pinetime { }; } } -} \ No newline at end of file +} diff --git a/src/displayapp/screens/Clock.cpp b/src/displayapp/screens/Clock.cpp index e0684976f3..e3af5e4791 100644 --- a/src/displayapp/screens/Clock.cpp +++ b/src/displayapp/screens/Clock.cpp @@ -55,11 +55,6 @@ Clock::~Clock() { lv_obj_clean(lv_scr_act()); } -bool Clock::Refresh() { - screen->Refresh(); - return running; -} - bool Clock::OnTouchEvent(Pinetime::Applications::TouchEvents event) { return screen->OnTouchEvent(event); } @@ -101,4 +96,4 @@ std::unique_ptr Clock::WatchFaceCustomScreen() { return std::make_unique(app, dateTimeController, batteryController, bleController, notificatioManager, settingsController); } -*/ \ No newline at end of file +*/ diff --git a/src/displayapp/screens/Clock.h b/src/displayapp/screens/Clock.h index a48feea1b9..500672a709 100644 --- a/src/displayapp/screens/Clock.h +++ b/src/displayapp/screens/Clock.h @@ -34,8 +34,6 @@ namespace Pinetime { Controllers::MotionController& motionController); ~Clock() override; - bool Refresh() override; - bool OnTouchEvent(TouchEvents event) override; private: diff --git a/src/displayapp/screens/FirmwareUpdate.cpp b/src/displayapp/screens/FirmwareUpdate.cpp index 4086b1520f..11ac7bcb85 100644 --- a/src/displayapp/screens/FirmwareUpdate.cpp +++ b/src/displayapp/screens/FirmwareUpdate.cpp @@ -30,36 +30,40 @@ FirmwareUpdate::FirmwareUpdate(Pinetime::Applications::DisplayApp* app, Pinetime lv_label_set_text(percentLabel, ""); lv_obj_set_auto_realign(percentLabel, true); lv_obj_align(percentLabel, bar1, LV_ALIGN_OUT_TOP_MID, 0, 60); + + taskRefresh = lv_task_create(RefreshTaskCallback, LV_DISP_DEF_REFR_PERIOD, LV_TASK_PRIO_MID, this); } FirmwareUpdate::~FirmwareUpdate() { + lv_task_del(taskRefresh); lv_obj_clean(lv_scr_act()); } -bool FirmwareUpdate::Refresh() { +void FirmwareUpdate::Refresh() { switch (bleController.State()) { default: case Pinetime::Controllers::Ble::FirmwareUpdateStates::Idle: case Pinetime::Controllers::Ble::FirmwareUpdateStates::Running: if (state != States::Running) state = States::Running; - return DisplayProgression(); + DisplayProgression(); + return; case Pinetime::Controllers::Ble::FirmwareUpdateStates::Validated: if (state != States::Validated) { UpdateValidated(); state = States::Validated; } - return running; + return; case Pinetime::Controllers::Ble::FirmwareUpdateStates::Error: if (state != States::Error) { UpdateError(); state = States::Error; } - return running; + return; } } -bool FirmwareUpdate::DisplayProgression() const { +void FirmwareUpdate::DisplayProgression() const { float current = bleController.FirmwareUpdateCurrentBytes() / 1024.0f; float total = bleController.FirmwareUpdateTotalBytes() / 1024.0f; int16_t pc = (current / total) * 100.0f; @@ -67,7 +71,6 @@ bool FirmwareUpdate::DisplayProgression() const { lv_label_set_text(percentLabel, percentStr); lv_bar_set_value(bar1, pc, LV_ANIM_OFF); - return running; } void FirmwareUpdate::UpdateValidated() { diff --git a/src/displayapp/screens/FirmwareUpdate.h b/src/displayapp/screens/FirmwareUpdate.h index f4d34df0ef..12cd4aea9c 100644 --- a/src/displayapp/screens/FirmwareUpdate.h +++ b/src/displayapp/screens/FirmwareUpdate.h @@ -15,7 +15,7 @@ namespace Pinetime { FirmwareUpdate(DisplayApp* app, Pinetime::Controllers::Ble& bleController); ~FirmwareUpdate() override; - bool Refresh() override; + void Refresh() override; private: enum class States { Idle, Running, Validated, Error }; @@ -27,11 +27,13 @@ namespace Pinetime { States state; - bool DisplayProgression() const; + void DisplayProgression() const; void UpdateValidated(); void UpdateError(); + + lv_task_t* taskRefresh; }; } } diff --git a/src/displayapp/screens/FirmwareValidation.cpp b/src/displayapp/screens/FirmwareValidation.cpp index 1d05be8d39..7ad45fac0a 100644 --- a/src/displayapp/screens/FirmwareValidation.cpp +++ b/src/displayapp/screens/FirmwareValidation.cpp @@ -61,10 +61,6 @@ FirmwareValidation::~FirmwareValidation() { lv_obj_clean(lv_scr_act()); } -bool FirmwareValidation::Refresh() { - return running; -} - void FirmwareValidation::OnButtonEvent(lv_obj_t* object, lv_event_t event) { if (object == buttonValidate && event == LV_EVENT_PRESSED) { validator.Validate(); diff --git a/src/displayapp/screens/FirmwareValidation.h b/src/displayapp/screens/FirmwareValidation.h index 1ef5ba0a60..bfdb096de0 100644 --- a/src/displayapp/screens/FirmwareValidation.h +++ b/src/displayapp/screens/FirmwareValidation.h @@ -16,8 +16,6 @@ namespace Pinetime { FirmwareValidation(DisplayApp* app, Pinetime::Controllers::FirmwareValidator& validator); ~FirmwareValidation() override; - bool Refresh() override; - void OnButtonEvent(lv_obj_t* object, lv_event_t event); private: diff --git a/src/displayapp/screens/FlashLight.cpp b/src/displayapp/screens/FlashLight.cpp index 7db2c6c8f0..eebb776cb3 100644 --- a/src/displayapp/screens/FlashLight.cpp +++ b/src/displayapp/screens/FlashLight.cpp @@ -65,10 +65,6 @@ void FlashLight::OnClickEvent(lv_obj_t* obj, lv_event_t event) { } } -bool FlashLight::Refresh() { - return running; -} - bool FlashLight::OnTouchEvent(Pinetime::Applications::TouchEvents event) { return true; } diff --git a/src/displayapp/screens/FlashLight.h b/src/displayapp/screens/FlashLight.h index a862ffdb55..7f5ca6c5dc 100644 --- a/src/displayapp/screens/FlashLight.h +++ b/src/displayapp/screens/FlashLight.h @@ -16,8 +16,6 @@ namespace Pinetime { FlashLight(DisplayApp* app, System::SystemTask& systemTask, Controllers::BrightnessController& brightness); ~FlashLight() override; - bool Refresh() override; - bool OnTouchEvent(Pinetime::Applications::TouchEvents event) override; void OnClickEvent(lv_obj_t* obj, lv_event_t event); diff --git a/src/displayapp/screens/HeartRate.cpp b/src/displayapp/screens/HeartRate.cpp index 5689b63e42..b6ece27f7a 100644 --- a/src/displayapp/screens/HeartRate.cpp +++ b/src/displayapp/screens/HeartRate.cpp @@ -64,14 +64,17 @@ HeartRate::HeartRate(Pinetime::Applications::DisplayApp* app, UpdateStartStopButton(isHrRunning); if (isHrRunning) systemTask.PushMessage(Pinetime::System::Messages::DisableSleeping); + + taskRefresh = lv_task_create(RefreshTaskCallback, 100, LV_TASK_PRIO_MID, this); } HeartRate::~HeartRate() { + lv_task_del(taskRefresh); lv_obj_clean(lv_scr_act()); systemTask.PushMessage(Pinetime::System::Messages::EnableSleeping); } -bool HeartRate::Refresh() { +void HeartRate::Refresh() { auto state = heartRateController.State(); switch (state) { @@ -86,8 +89,6 @@ bool HeartRate::Refresh() { lv_label_set_text(label_status, ToString(state)); lv_obj_align(label_status, label_hr, LV_ALIGN_OUT_BOTTOM_MID, 0, 10); - - return running; } void HeartRate::OnStartStopEvent(lv_event_t event) { diff --git a/src/displayapp/screens/HeartRate.h b/src/displayapp/screens/HeartRate.h index a23c5af815..7f7d3ad3f0 100644 --- a/src/displayapp/screens/HeartRate.h +++ b/src/displayapp/screens/HeartRate.h @@ -20,7 +20,7 @@ namespace Pinetime { HeartRate(DisplayApp* app, Controllers::HeartRateController& HeartRateController, System::SystemTask& systemTask); ~HeartRate() override; - bool Refresh() override; + void Refresh() override; void OnStartStopEvent(lv_event_t event); @@ -33,6 +33,8 @@ namespace Pinetime { lv_obj_t* label_status; lv_obj_t* btn_startStop; lv_obj_t* label_startStop; + + lv_task_t* taskRefresh; }; } } diff --git a/src/displayapp/screens/InfiniPaint.cpp b/src/displayapp/screens/InfiniPaint.cpp index 3224008409..4dde81a4cc 100644 --- a/src/displayapp/screens/InfiniPaint.cpp +++ b/src/displayapp/screens/InfiniPaint.cpp @@ -15,10 +15,6 @@ InfiniPaint::~InfiniPaint() { lv_obj_clean(lv_scr_act()); } -bool InfiniPaint::Refresh() { - return running; -} - bool InfiniPaint::OnTouchEvent(Pinetime::Applications::TouchEvents event) { switch (event) { case Pinetime::Applications::TouchEvents::LongTap: diff --git a/src/displayapp/screens/InfiniPaint.h b/src/displayapp/screens/InfiniPaint.h index 6251752ad3..0a70e03358 100644 --- a/src/displayapp/screens/InfiniPaint.h +++ b/src/displayapp/screens/InfiniPaint.h @@ -17,8 +17,6 @@ namespace Pinetime { ~InfiniPaint() override; - bool Refresh() override; - bool OnTouchEvent(TouchEvents event) override; bool OnTouchEvent(uint16_t x, uint16_t y) override; diff --git a/src/displayapp/screens/Label.cpp b/src/displayapp/screens/Label.cpp index 0132dbd223..8b079d9950 100644 --- a/src/displayapp/screens/Label.cpp +++ b/src/displayapp/screens/Label.cpp @@ -36,7 +36,3 @@ Label::Label(uint8_t screenID, uint8_t numScreens, Pinetime::Applications::Displ Label::~Label() { lv_obj_clean(lv_scr_act()); } - -bool Label::Refresh() { - return running; -} diff --git a/src/displayapp/screens/Label.h b/src/displayapp/screens/Label.h index 62b80bec7e..7e86c83dd7 100644 --- a/src/displayapp/screens/Label.h +++ b/src/displayapp/screens/Label.h @@ -12,8 +12,6 @@ namespace Pinetime { Label(uint8_t screenID, uint8_t numScreens, DisplayApp* app, lv_obj_t* labelText); ~Label() override; - bool Refresh() override; - private: bool running = true; @@ -25,4 +23,4 @@ namespace Pinetime { }; } } -} \ No newline at end of file +} diff --git a/src/displayapp/screens/List.cpp b/src/displayapp/screens/List.cpp index b4f4d2cfff..efc505c223 100644 --- a/src/displayapp/screens/List.cpp +++ b/src/displayapp/screens/List.cpp @@ -102,11 +102,6 @@ List::~List() { lv_obj_clean(lv_scr_act()); } -bool List::Refresh() { - - return running; -} - void List::OnButtonEvent(lv_obj_t* object, lv_event_t event) { if (event == LV_EVENT_RELEASED) { for (int i = 0; i < MAXLISTITEMS; i++) { diff --git a/src/displayapp/screens/List.h b/src/displayapp/screens/List.h index a45fd1d3c9..d9f61f2910 100644 --- a/src/displayapp/screens/List.h +++ b/src/displayapp/screens/List.h @@ -27,8 +27,6 @@ namespace Pinetime { std::array& applications); ~List() override; - bool Refresh() override; - void OnButtonEvent(lv_obj_t* object, lv_event_t event); private: diff --git a/src/displayapp/screens/Meter.cpp b/src/displayapp/screens/Meter.cpp index e0dbdfada8..57cde9cf2e 100644 --- a/src/displayapp/screens/Meter.cpp +++ b/src/displayapp/screens/Meter.cpp @@ -20,17 +20,17 @@ Meter::Meter(Pinetime::Applications::DisplayApp* app) : Screen(app) { lv_obj_set_size(lmeter, 200, 200); lv_obj_align(lmeter, nullptr, LV_ALIGN_CENTER, 0, 0); + + taskRefresh = lv_task_create(RefreshTaskCallback, LV_DISP_DEF_REFR_PERIOD, LV_TASK_PRIO_MID, this); } Meter::~Meter() { - + lv_task_del(taskRefresh); lv_obj_clean(lv_scr_act()); } -bool Meter::Refresh() { +void Meter::Refresh() { lv_linemeter_set_value(lmeter, value++); /*Set the current value*/ if (value >= 60) value = 0; - - return running; } diff --git a/src/displayapp/screens/Meter.h b/src/displayapp/screens/Meter.h index 24af15adce..9b3d1d488a 100644 --- a/src/displayapp/screens/Meter.h +++ b/src/displayapp/screens/Meter.h @@ -14,13 +14,15 @@ namespace Pinetime { Meter(DisplayApp* app); ~Meter() override; - bool Refresh() override; + void Refresh() override; private: lv_style_t style_lmeter; lv_obj_t* lmeter; uint32_t value = 0; + + lv_task_t* taskRefresh; }; } } diff --git a/src/displayapp/screens/Metronome.cpp b/src/displayapp/screens/Metronome.cpp index 7bfbccb761..06cd7efb88 100644 --- a/src/displayapp/screens/Metronome.cpp +++ b/src/displayapp/screens/Metronome.cpp @@ -85,9 +85,12 @@ Metronome::Metronome(DisplayApp* app, Controllers::MotorController& motorControl lv_label_set_text(playPauseLabel, Symbols::play); app->SetTouchMode(DisplayApp::TouchModes::Polling); + + taskRefresh = lv_task_create(RefreshTaskCallback, LV_DISP_DEF_REFR_PERIOD, LV_TASK_PRIO_MID, this); } Metronome::~Metronome() { + lv_task_del(taskRefresh); app->SetTouchMode(DisplayApp::TouchModes::Gestures); systemTask.PushMessage(System::Messages::EnableSleeping); lv_obj_clean(lv_scr_act()); @@ -97,7 +100,7 @@ bool Metronome::OnTouchEvent(Pinetime::Applications::TouchEvents event) { return true; } -bool Metronome::Refresh() { +void Metronome::Refresh() { switch (currentState) { case States::Stopped: { break; @@ -117,7 +120,6 @@ bool Metronome::Refresh() { break; } } - return running; } void Metronome::OnEvent(lv_obj_t* obj, lv_event_t event) { diff --git a/src/displayapp/screens/Metronome.h b/src/displayapp/screens/Metronome.h index 3a1f1084b6..d83dc741e5 100644 --- a/src/displayapp/screens/Metronome.h +++ b/src/displayapp/screens/Metronome.h @@ -11,7 +11,7 @@ namespace Pinetime::Applications::Screens { public: Metronome(DisplayApp* app, Controllers::MotorController& motorController, System::SystemTask& systemTask); ~Metronome() override; - bool Refresh() override; + void Refresh() override; bool OnTouchEvent(TouchEvents event) override; void OnEvent(lv_obj_t* obj, lv_event_t event); enum class States { Running, Stopped }; @@ -30,5 +30,7 @@ namespace Pinetime::Applications::Screens { lv_obj_t *bpmArc, *bpmTap, *bpmValue, *bpmLegend; lv_obj_t *bpbDropdown, *bpbLegend; lv_obj_t *playPause, *playPauseLabel; + + lv_task_t* taskRefresh; }; } diff --git a/src/displayapp/screens/Motion.cpp b/src/displayapp/screens/Motion.cpp index a8bb3c1879..108b942d9e 100644 --- a/src/displayapp/screens/Motion.cpp +++ b/src/displayapp/screens/Motion.cpp @@ -32,18 +32,20 @@ Motion::Motion(Pinetime::Applications::DisplayApp* app, Controllers::MotionContr lv_label_set_align(label, LV_LABEL_ALIGN_CENTER); lv_obj_align(label, NULL, LV_ALIGN_IN_TOP_MID, 0, 10); lv_label_set_recolor(label, true); - + labelStep = lv_label_create(lv_scr_act(), NULL); lv_obj_align(labelStep, chart, LV_ALIGN_IN_BOTTOM_LEFT, 0, 0); lv_label_set_text(labelStep, "Steps ---"); + taskRefresh = lv_task_create(RefreshTaskCallback, LV_DISP_DEF_REFR_PERIOD, LV_TASK_PRIO_MID, this); } Motion::~Motion() { + lv_task_del(taskRefresh); lv_obj_clean(lv_scr_act()); } -bool Motion::Refresh() { +void Motion::Refresh() { lv_chart_set_next(chart, ser1, motionController.X()); lv_chart_set_next(chart, ser2, motionController.Y()); lv_chart_set_next(chart, ser3, motionController.Z()); @@ -52,8 +54,6 @@ bool Motion::Refresh() { lv_label_set_text_fmt(label, "X #FF0000 %d# Y #008000 %d# Z #FFFF00 %d#", motionController.X() / 0x10, motionController.Y() / 0x10, motionController.Z() / 0x10); lv_obj_align(label, NULL, LV_ALIGN_IN_TOP_MID, 0, 10); - - return running; } bool Motion::OnButtonPushed() { diff --git a/src/displayapp/screens/Motion.h b/src/displayapp/screens/Motion.h index 132b20ec5c..3f91eceed1 100644 --- a/src/displayapp/screens/Motion.h +++ b/src/displayapp/screens/Motion.h @@ -17,7 +17,7 @@ namespace Pinetime { Motion(DisplayApp* app, Controllers::MotionController& motionController); ~Motion() override; - bool Refresh() override; + void Refresh() override; bool OnButtonPushed() override; private: @@ -32,7 +32,9 @@ namespace Pinetime { static constexpr uint8_t nbStepsBufferSize = 9; char nbStepsBuffer[nbStepsBufferSize + 1]; bool running = true; + + lv_task_t* taskRefresh; }; } } -} \ No newline at end of file +} diff --git a/src/displayapp/screens/Music.cpp b/src/displayapp/screens/Music.cpp index 9f10f508a0..beb96faee6 100644 --- a/src/displayapp/screens/Music.cpp +++ b/src/displayapp/screens/Music.cpp @@ -146,13 +146,16 @@ Music::Music(Pinetime::Applications::DisplayApp* app, Pinetime::Controllers::Mus frameB = false; musicService.event(Controllers::MusicService::EVENT_MUSIC_OPEN); + + taskRefresh = lv_task_create(RefreshTaskCallback, 5000, LV_TASK_PRIO_MID, this); } Music::~Music() { + lv_task_del(taskRefresh); lv_obj_clean(lv_scr_act()); } -bool Music::Refresh() { +void Music::Refresh() { if (artist != musicService.getArtist()) { artist = musicService.getArtist(); currentLength = 0; @@ -216,8 +219,6 @@ bool Music::Refresh() { } else { lv_label_set_text(txtPlayPause, Symbols::play); } - - return running; } void Music::UpdateLength() { @@ -303,4 +304,4 @@ bool Music::OnTouchEvent(Pinetime::Applications::TouchEvents event) { return true; } } -} \ No newline at end of file +} diff --git a/src/displayapp/screens/Music.h b/src/displayapp/screens/Music.h index ef8f1fec7f..a2d138b1ea 100644 --- a/src/displayapp/screens/Music.h +++ b/src/displayapp/screens/Music.h @@ -35,7 +35,7 @@ namespace Pinetime { ~Music() override; - bool Refresh() override; + void Refresh() override; void OnObjectEvent(lv_obj_t* obj, lv_event_t event); @@ -78,6 +78,8 @@ namespace Pinetime { bool playing; + lv_task_t* taskRefresh; + /** Watchapp */ }; } diff --git a/src/displayapp/screens/Navigation.cpp b/src/displayapp/screens/Navigation.cpp index 79b04e21e2..d437cc6d5e 100644 --- a/src/displayapp/screens/Navigation.cpp +++ b/src/displayapp/screens/Navigation.cpp @@ -161,13 +161,16 @@ Navigation::Navigation(Pinetime::Applications::DisplayApp* app, Pinetime::Contro lv_bar_set_anim_time(barProgress, 500); lv_bar_set_range(barProgress, 0, 100); lv_bar_set_value(barProgress, 0, LV_ANIM_OFF); + + taskRefresh = lv_task_create(RefreshTaskCallback, LV_DISP_DEF_REFR_PERIOD, LV_TASK_PRIO_MID, this); } Navigation::~Navigation() { + lv_task_del(taskRefresh); lv_obj_clean(lv_scr_act()); } -bool Navigation::Refresh() { +void Navigation::Refresh() { if (flag != navService.getFlag()) { flag = navService.getFlag(); lv_label_set_text(imgFlag, iconForName(flag)); @@ -192,8 +195,4 @@ bool Navigation::Refresh() { lv_obj_set_style_local_bg_color(barProgress, LV_BAR_PART_INDIC, LV_STATE_DEFAULT, LV_COLOR_ORANGE); } } - - return running; } - - diff --git a/src/displayapp/screens/Navigation.h b/src/displayapp/screens/Navigation.h index eb7e00c445..48f00a76e2 100644 --- a/src/displayapp/screens/Navigation.h +++ b/src/displayapp/screens/Navigation.h @@ -35,7 +35,7 @@ namespace Pinetime { Navigation(DisplayApp* app, Pinetime::Controllers::NavigationService& nav); ~Navigation() override; - bool Refresh() override; + void Refresh() override; private: lv_obj_t* imgFlag; @@ -49,6 +49,8 @@ namespace Pinetime { std::string narrative; std::string manDist; int progress; + + lv_task_t* taskRefresh; }; } } diff --git a/src/displayapp/screens/Notifications.cpp b/src/displayapp/screens/Notifications.cpp index 38b1242075..33e50cc35f 100644 --- a/src/displayapp/screens/Notifications.cpp +++ b/src/displayapp/screens/Notifications.cpp @@ -47,13 +47,16 @@ Notifications::Notifications(DisplayApp* app, timeoutTickCountStart = xTaskGetTickCount(); timeoutTickCountEnd = timeoutTickCountStart + (5 * 1024); } + + taskRefresh = lv_task_create(RefreshTaskCallback, LV_DISP_DEF_REFR_PERIOD, LV_TASK_PRIO_MID, this); } Notifications::~Notifications() { + lv_task_del(taskRefresh); lv_obj_clean(lv_scr_act()); } -bool Notifications::Refresh() { +void Notifications::Refresh() { if (mode == Modes::Preview) { auto tick = xTaskGetTickCount(); int32_t pos = 240 - ((tick - timeoutTickCountStart) / ((timeoutTickCountEnd - timeoutTickCountStart) / 240)); @@ -63,8 +66,6 @@ bool Notifications::Refresh() { timeoutLinePoints[1].x = pos; lv_line_set_points(timeoutLine, timeoutLinePoints, 2); } - - return running; } bool Notifications::OnTouchEvent(Pinetime::Applications::TouchEvents event) { diff --git a/src/displayapp/screens/Notifications.h b/src/displayapp/screens/Notifications.h index 51ca81da9b..6d47e23205 100644 --- a/src/displayapp/screens/Notifications.h +++ b/src/displayapp/screens/Notifications.h @@ -22,7 +22,7 @@ namespace Pinetime { Modes mode); ~Notifications() override; - bool Refresh() override; + void Refresh() override; bool OnTouchEvent(Pinetime::Applications::TouchEvents event) override; class NotificationItem { @@ -35,9 +35,6 @@ namespace Pinetime { Modes mode, Pinetime::Controllers::AlertNotificationService& alertNotificationService); ~NotificationItem(); - bool Refresh() { - return false; - } void OnAcceptIncomingCall(lv_event_t event); void OnMuteIncomingCall(lv_event_t event); void OnRejectIncomingCall(lv_event_t event); @@ -78,6 +75,8 @@ namespace Pinetime { lv_obj_t* timeoutLine; uint32_t timeoutTickCountStart; uint32_t timeoutTickCountEnd; + + lv_task_t* taskRefresh; }; } } diff --git a/src/displayapp/screens/Paddle.cpp b/src/displayapp/screens/Paddle.cpp index 5a939ac7a1..87fc87253f 100644 --- a/src/displayapp/screens/Paddle.cpp +++ b/src/displayapp/screens/Paddle.cpp @@ -29,15 +29,18 @@ Paddle::Paddle(Pinetime::Applications::DisplayApp* app, Pinetime::Components::Li lv_obj_set_style_local_bg_color(ball, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_WHITE); lv_obj_set_style_local_radius(ball, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, LV_RADIUS_CIRCLE); lv_obj_set_size(ball, ballSize, ballSize); + + taskRefresh = lv_task_create(RefreshTaskCallback, 20, LV_TASK_PRIO_MID, this); } Paddle::~Paddle() { + lv_task_del(taskRefresh); // Reset the touchmode app->SetTouchMode(DisplayApp::TouchModes::Gestures); lv_obj_clean(lv_scr_act()); } -bool Paddle::Refresh() { +void Paddle::Refresh() { ballX += dx; ballY += dy; @@ -69,7 +72,6 @@ bool Paddle::Refresh() { } } lv_label_set_text_fmt(points, "%04d", score); - return running; } bool Paddle::OnTouchEvent(Pinetime::Applications::TouchEvents event) { diff --git a/src/displayapp/screens/Paddle.h b/src/displayapp/screens/Paddle.h index 30ab8f948d..fc2131a15c 100644 --- a/src/displayapp/screens/Paddle.h +++ b/src/displayapp/screens/Paddle.h @@ -16,7 +16,7 @@ namespace Pinetime { Paddle(DisplayApp* app, Pinetime::Components::LittleVgl& lvgl); ~Paddle() override; - bool Refresh() override; + void Refresh() override; bool OnTouchEvent(TouchEvents event) override; bool OnTouchEvent(uint16_t x, uint16_t y) override; @@ -40,6 +40,8 @@ namespace Pinetime { lv_obj_t* paddle; lv_obj_t* ball; lv_obj_t* background; + + lv_task_t* taskRefresh; }; } } diff --git a/src/displayapp/screens/PineTimeStyle.cpp b/src/displayapp/screens/PineTimeStyle.cpp index 591f3a49fc..c595223a80 100644 --- a/src/displayapp/screens/PineTimeStyle.cpp +++ b/src/displayapp/screens/PineTimeStyle.cpp @@ -200,13 +200,17 @@ PineTimeStyle::PineTimeStyle(DisplayApp* app, lv_obj_set_size(backgroundLabel, 240, 240); lv_obj_set_pos(backgroundLabel, 0, 0); lv_label_set_text(backgroundLabel, ""); + + taskRefresh = lv_task_create(RefreshTaskCallback, LV_DISP_DEF_REFR_PERIOD, LV_TASK_PRIO_MID, this); + Refresh(); } PineTimeStyle::~PineTimeStyle() { + lv_task_del(taskRefresh); lv_obj_clean(lv_scr_act()); } -bool PineTimeStyle::Refresh() { +void PineTimeStyle::Refresh() { batteryPercentRemaining = batteryController.PercentRemaining(); if (batteryPercentRemaining.IsUpdated()) { auto batteryPercent = batteryPercentRemaining.Get(); @@ -335,6 +339,4 @@ bool PineTimeStyle::Refresh() { lv_obj_set_style_local_scale_grad_color(stepGauge, LV_GAUGE_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_WHITE); } } - - return running; -} \ No newline at end of file +} diff --git a/src/displayapp/screens/PineTimeStyle.h b/src/displayapp/screens/PineTimeStyle.h index 3b4ded1e14..88180c5eab 100644 --- a/src/displayapp/screens/PineTimeStyle.h +++ b/src/displayapp/screens/PineTimeStyle.h @@ -30,7 +30,7 @@ namespace Pinetime { Controllers::MotionController& motionController); ~PineTimeStyle() override; - bool Refresh() override; + void Refresh() override; void OnObjectEvent(lv_obj_t* pObj, lv_event_t i); @@ -80,6 +80,8 @@ namespace Pinetime { Controllers::NotificationManager& notificatioManager; Controllers::Settings& settingsController; Controllers::MotionController& motionController; + + lv_task_t* taskRefresh; }; } } diff --git a/src/displayapp/screens/Screen.cpp b/src/displayapp/screens/Screen.cpp index 1467df3309..6ae5b7bb00 100644 --- a/src/displayapp/screens/Screen.cpp +++ b/src/displayapp/screens/Screen.cpp @@ -1,2 +1,6 @@ #include "Screen.h" -using namespace Pinetime::Applications::Screens; \ No newline at end of file +using namespace Pinetime::Applications::Screens; + +void Screen::RefreshTaskCallback(lv_task_t* task) { + static_cast(task->user_data)->Refresh(); +} diff --git a/src/displayapp/screens/Screen.h b/src/displayapp/screens/Screen.h index 8e49c9dec6..30de2adcf4 100644 --- a/src/displayapp/screens/Screen.h +++ b/src/displayapp/screens/Screen.h @@ -2,6 +2,7 @@ #include #include "../TouchEvents.h" +#include namespace Pinetime { namespace Applications { @@ -34,25 +35,20 @@ namespace Pinetime { }; class Screen { + private: + virtual void Refresh() { + } + public: explicit Screen(DisplayApp* app) : app {app} { } virtual ~Screen() = default; - /** - * Most of the time, apps only react to events (touch events, for example). - * In this case you don't need to do anything in this method. - * - * For example, InfiniPaint does nothing in Refresh(). - * But, if you want to update your display periodically, draw an animation... - * you cannot do it in a touch event handler because these handlers are not - * called if the user does not touch the screen. - * - * That's why Refresh() is there: update the display periodically. - * - * @return false if the app can be closed, true if it must continue to run - **/ - virtual bool Refresh() = 0; + static void RefreshTaskCallback(lv_task_t* task); + + bool IsRunning() const { + return running; + } /** @return false if the button hasn't been handled by the app, true if it has been handled */ virtual bool OnButtonPushed() { diff --git a/src/displayapp/screens/ScreenList.h b/src/displayapp/screens/ScreenList.h index ea66bfb237..a9d747aa0f 100644 --- a/src/displayapp/screens/ScreenList.h +++ b/src/displayapp/screens/ScreenList.h @@ -30,11 +30,6 @@ namespace Pinetime { lv_obj_clean(lv_scr_act()); } - bool Refresh() override { - running = current->Refresh(); - return running; - } - bool OnTouchEvent(TouchEvents event) override { if (mode == ScreenListModes::UpDown) { @@ -110,4 +105,4 @@ namespace Pinetime { }; } } -} \ No newline at end of file +} diff --git a/src/displayapp/screens/Steps.cpp b/src/displayapp/screens/Steps.cpp index 6aabd30e75..a096bbcd5b 100644 --- a/src/displayapp/screens/Steps.cpp +++ b/src/displayapp/screens/Steps.cpp @@ -50,20 +50,20 @@ Steps::Steps( lv_obj_set_size(backgroundLabel, 240, 240); lv_obj_set_pos(backgroundLabel, 0, 0); lv_label_set_text_static(backgroundLabel, ""); + + taskRefresh = lv_task_create(RefreshTaskCallback, 100, LV_TASK_PRIO_MID, this); } Steps::~Steps() { + lv_task_del(taskRefresh); lv_obj_clean(lv_scr_act()); } -bool Steps::Refresh() { - +void Steps::Refresh() { stepsCount = motionController.NbSteps(); - + lv_label_set_text_fmt(lSteps, "%li", stepsCount); lv_obj_align(lSteps, nullptr, LV_ALIGN_CENTER, 0, -20); - - lv_arc_set_value(stepsArc, int16_t(500 * stepsCount / settingsController.GetStepsGoal())); - return running; + lv_arc_set_value(stepsArc, int16_t(500 * stepsCount / settingsController.GetStepsGoal())); } diff --git a/src/displayapp/screens/Steps.h b/src/displayapp/screens/Steps.h index 9c135e260a..d7cf31e17d 100644 --- a/src/displayapp/screens/Steps.h +++ b/src/displayapp/screens/Steps.h @@ -15,24 +15,23 @@ namespace Pinetime { namespace Screens { class Steps : public Screen { - public: - Steps(DisplayApp* app, Controllers::MotionController& motionController, Controllers::Settings &settingsController); - ~Steps() override; + public: + Steps(DisplayApp* app, Controllers::MotionController& motionController, Controllers::Settings& settingsController); + ~Steps() override; - bool Refresh() override; - + void Refresh() override; - private: + private: + Controllers::MotionController& motionController; + Controllers::Settings& settingsController; - Controllers::MotionController& motionController; - Controllers::Settings& settingsController; + lv_obj_t* lSteps; + lv_obj_t* lStepsIcon; + lv_obj_t* stepsArc; - lv_obj_t * lSteps; - lv_obj_t * lStepsIcon; - lv_obj_t * stepsArc; - - uint32_t stepsCount; + uint32_t stepsCount; + lv_task_t* taskRefresh; }; } } diff --git a/src/displayapp/screens/StopWatch.cpp b/src/displayapp/screens/StopWatch.cpp index f4db5d6ef4..74b49db106 100644 --- a/src/displayapp/screens/StopWatch.cpp +++ b/src/displayapp/screens/StopWatch.cpp @@ -48,7 +48,6 @@ static void stop_lap_event_handler(lv_obj_t* obj, lv_event_t event) { StopWatch::StopWatch(DisplayApp* app, System::SystemTask& systemTask) : Screen(app), systemTask {systemTask}, - running {true}, currentState {States::Init}, startTime {}, oldTimeElapsed {}, @@ -101,9 +100,12 @@ StopWatch::StopWatch(DisplayApp* app, System::SystemTask& systemTask) lv_obj_set_style_local_text_color(lapTwoText, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_YELLOW); lv_obj_align(lapTwoText, lv_scr_act(), LV_ALIGN_IN_LEFT_MID, 50, 55); lv_label_set_text(lapTwoText, ""); + + taskRefresh = lv_task_create(RefreshTaskCallback, 20, LV_TASK_PRIO_MID, this); } StopWatch::~StopWatch() { + lv_task_del(taskRefresh); systemTask.PushMessage(Pinetime::System::Messages::EnableSleeping); lv_obj_clean(lv_scr_act()); } @@ -149,7 +151,7 @@ void StopWatch::pause() { systemTask.PushMessage(Pinetime::System::Messages::EnableSleeping); } -bool StopWatch::Refresh() { +void StopWatch::Refresh() { if (currentState == States::Running) { timeElapsed = calculateDelta(startTime, xTaskGetTickCount()); currentTimeSeparated = convertTicksToTimeSegments((oldTimeElapsed + timeElapsed)); @@ -157,7 +159,6 @@ bool StopWatch::Refresh() { lv_label_set_text_fmt(time, "%02d:%02d", currentTimeSeparated.mins, currentTimeSeparated.secs); lv_label_set_text_fmt(msecTime, "%02d", currentTimeSeparated.hundredths); } - return running; } void StopWatch::playPauseBtnEventHandler(lv_event_t event) { @@ -196,8 +197,7 @@ void StopWatch::stopLapBtnEventHandler(lv_event_t event) { bool StopWatch::OnButtonPushed() { if (currentState == States::Running) { pause(); - } else { - running = false; + return true; } - return true; + return false; } diff --git a/src/displayapp/screens/StopWatch.h b/src/displayapp/screens/StopWatch.h index e132f158b5..25634e9236 100644 --- a/src/displayapp/screens/StopWatch.h +++ b/src/displayapp/screens/StopWatch.h @@ -64,7 +64,7 @@ namespace Pinetime::Applications::Screens { public: StopWatch(DisplayApp* app, System::SystemTask& systemTask); ~StopWatch() override; - bool Refresh() override; + void Refresh() override; void playPauseBtnEventHandler(lv_event_t event); void stopLapBtnEventHandler(lv_event_t event); @@ -77,7 +77,6 @@ namespace Pinetime::Applications::Screens { private: Pinetime::System::SystemTask& systemTask; TickType_t timeElapsed; - bool running; States currentState; TickType_t startTime; TickType_t oldTimeElapsed; @@ -86,5 +85,7 @@ namespace Pinetime::Applications::Screens { int lapNr = 0; lv_obj_t *time, *msecTime, *btnPlayPause, *btnStopLap, *txtPlayPause, *txtStopLap; lv_obj_t *lapOneText, *lapTwoText; + + lv_task_t* taskRefresh; }; } diff --git a/src/displayapp/screens/SystemInfo.cpp b/src/displayapp/screens/SystemInfo.cpp index f5bf0cc9e5..78399b7483 100644 --- a/src/displayapp/screens/SystemInfo.cpp +++ b/src/displayapp/screens/SystemInfo.cpp @@ -63,13 +63,6 @@ SystemInfo::~SystemInfo() { lv_obj_clean(lv_scr_act()); } -bool SystemInfo::Refresh() { - if (running) { - screens.Refresh(); - } - return running; -} - bool SystemInfo::OnButtonPushed() { running = false; return true; diff --git a/src/displayapp/screens/SystemInfo.h b/src/displayapp/screens/SystemInfo.h index 9d471f612e..5b1b4ee591 100644 --- a/src/displayapp/screens/SystemInfo.h +++ b/src/displayapp/screens/SystemInfo.h @@ -30,7 +30,6 @@ namespace Pinetime { Pinetime::Drivers::WatchdogView& watchdog, Pinetime::Controllers::MotionController& motionController); ~SystemInfo() override; - bool Refresh() override; bool OnButtonPushed() override; bool OnTouchEvent(TouchEvents event) override; @@ -56,4 +55,4 @@ namespace Pinetime { }; } } -} \ No newline at end of file +} diff --git a/src/displayapp/screens/Tile.cpp b/src/displayapp/screens/Tile.cpp index 3eb127cc43..d2ab9b4a58 100644 --- a/src/displayapp/screens/Tile.cpp +++ b/src/displayapp/screens/Tile.cpp @@ -120,10 +120,6 @@ void Tile::UpdateScreen() { lv_label_set_text(batteryIcon, BatteryIcon::GetBatteryIcon(batteryController.PercentRemaining())); } -bool Tile::Refresh() { - return running; -} - void Tile::OnObjectEvent(lv_obj_t* obj, lv_event_t event, uint32_t buttonId) { if (event == LV_EVENT_VALUE_CHANGED) { app->StartApp(apps[buttonId], DisplayApp::FullRefreshDirections::Up); diff --git a/src/displayapp/screens/Tile.h b/src/displayapp/screens/Tile.h index 4ebd81cd9b..5de5b04b66 100644 --- a/src/displayapp/screens/Tile.h +++ b/src/displayapp/screens/Tile.h @@ -30,7 +30,6 @@ namespace Pinetime { ~Tile() override; - bool Refresh() override; void UpdateScreen(); void OnObjectEvent(lv_obj_t* obj, lv_event_t event, uint32_t buttonId); diff --git a/src/displayapp/screens/Timer.cpp b/src/displayapp/screens/Timer.cpp index 99e979bad5..ae6ed30e1b 100644 --- a/src/displayapp/screens/Timer.cpp +++ b/src/displayapp/screens/Timer.cpp @@ -4,10 +4,8 @@ #include "Symbols.h" #include "lvgl/lvgl.h" - using namespace Pinetime::Applications::Screens; - static void btnEventHandler(lv_obj_t* obj, lv_event_t event) { Timer* screen = static_cast(obj->user_data); screen->OnButtonEvent(obj, event); @@ -22,7 +20,7 @@ void Timer::createButtons() { lv_obj_set_width(btnMinutesUp, 60); txtMUp = lv_label_create(btnMinutesUp, nullptr); lv_label_set_text(txtMUp, "+"); - + btnMinutesDown = lv_btn_create(lv_scr_act(), nullptr); btnMinutesDown->user_data = this; lv_obj_set_event_cb(btnMinutesDown, btnEventHandler); @@ -31,7 +29,7 @@ void Timer::createButtons() { lv_obj_set_width(btnMinutesDown, 60); txtMDown = lv_label_create(btnMinutesDown, nullptr); lv_label_set_text(txtMDown, "-"); - + btnSecondsUp = lv_btn_create(lv_scr_act(), nullptr); btnSecondsUp->user_data = this; lv_obj_set_event_cb(btnSecondsUp, btnEventHandler); @@ -40,7 +38,7 @@ void Timer::createButtons() { lv_obj_set_width(btnSecondsUp, 60); txtSUp = lv_label_create(btnSecondsUp, nullptr); lv_label_set_text(txtSUp, "+"); - + btnSecondsDown = lv_btn_create(lv_scr_act(), nullptr); btnSecondsDown->user_data = this; lv_obj_set_event_cb(btnSecondsDown, btnEventHandler); @@ -49,24 +47,20 @@ void Timer::createButtons() { lv_obj_set_width(btnSecondsDown, 60); txtSDown = lv_label_create(btnSecondsDown, nullptr); lv_label_set_text(txtSDown, "-"); - } - Timer::Timer(DisplayApp* app, Controllers::TimerController& timerController) - : Screen(app), - running{true}, - timerController{timerController} { - + : Screen(app), running {true}, timerController {timerController} { + time = lv_label_create(lv_scr_act(), nullptr); lv_obj_set_style_local_text_font(time, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, &jetbrains_mono_76); lv_obj_set_style_local_text_color(time, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_GRAY); - + uint32_t seconds = timerController.GetTimeRemaining() / 1000; lv_label_set_text_fmt(time, "%02lu:%02lu", seconds / 60, seconds % 60); lv_obj_align(time, lv_scr_act(), LV_ALIGN_IN_LEFT_MID, 0, -20); - + btnPlayPause = lv_btn_create(lv_scr_act(), nullptr); btnPlayPause->user_data = this; lv_obj_set_event_cb(btnPlayPause, btnEventHandler); @@ -79,20 +73,20 @@ Timer::Timer(DisplayApp* app, Controllers::TimerController& timerController) lv_label_set_text(txtPlayPause, Symbols::play); createButtons(); } - + + taskRefresh = lv_task_create(RefreshTaskCallback, 20, LV_TASK_PRIO_MID, this); } Timer::~Timer() { + lv_task_del(taskRefresh); lv_obj_clean(lv_scr_act()); - } -bool Timer::Refresh() { +void Timer::Refresh() { if (timerController.IsRunning()) { uint32_t seconds = timerController.GetTimeRemaining() / 1000; lv_label_set_text_fmt(time, "%02lu:%02lu", seconds / 60, seconds % 60); } - return running; } void Timer::OnButtonEvent(lv_obj_t* obj, lv_event_t event) { @@ -105,11 +99,11 @@ void Timer::OnButtonEvent(lv_obj_t* obj, lv_event_t event) { secondsToSet = seconds % 60; timerController.StopTimer(); createButtons(); - + } else if (secondsToSet + minutesToSet > 0) { lv_label_set_text(txtPlayPause, Symbols::pause); timerController.StartTimer((secondsToSet + minutesToSet * 60) * 1000); - + lv_obj_del(btnSecondsDown); btnSecondsDown = nullptr; lv_obj_del(btnSecondsUp); @@ -118,7 +112,6 @@ void Timer::OnButtonEvent(lv_obj_t* obj, lv_event_t event) { btnMinutesDown = nullptr; lv_obj_del(btnMinutesUp); btnMinutesUp = nullptr; - } } else { if (!timerController.IsRunning()) { @@ -129,7 +122,7 @@ void Timer::OnButtonEvent(lv_obj_t* obj, lv_event_t event) { minutesToSet++; } lv_label_set_text_fmt(time, "%02d:%02d", minutesToSet, secondsToSet); - + } else if (obj == btnMinutesDown) { if (minutesToSet == 0) { minutesToSet = 59; @@ -137,7 +130,7 @@ void Timer::OnButtonEvent(lv_obj_t* obj, lv_event_t event) { minutesToSet--; } lv_label_set_text_fmt(time, "%02d:%02d", minutesToSet, secondsToSet); - + } else if (obj == btnSecondsUp) { if (secondsToSet >= 59) { secondsToSet = 0; @@ -145,7 +138,7 @@ void Timer::OnButtonEvent(lv_obj_t* obj, lv_event_t event) { secondsToSet++; } lv_label_set_text_fmt(time, "%02d:%02d", minutesToSet, secondsToSet); - + } else if (obj == btnSecondsDown) { if (secondsToSet == 0) { secondsToSet = 59; @@ -153,21 +146,16 @@ void Timer::OnButtonEvent(lv_obj_t* obj, lv_event_t event) { secondsToSet--; } lv_label_set_text_fmt(time, "%02d:%02d", minutesToSet, secondsToSet); - } } - } - } - } - void Timer::setDone() { lv_label_set_text(time, "00:00"); lv_label_set_text(txtPlayPause, Symbols::play); secondsToSet = 0; minutesToSet = 0; createButtons(); -} \ No newline at end of file +} diff --git a/src/displayapp/screens/Timer.h b/src/displayapp/screens/Timer.h index 0d66f2d46e..d0fc8ed151 100644 --- a/src/displayapp/screens/Timer.h +++ b/src/displayapp/screens/Timer.h @@ -8,35 +8,32 @@ #include "components/timer/TimerController.h" namespace Pinetime::Applications::Screens { - - + class Timer : public Screen { public: - - enum class Modes { - Normal, Done - }; - + enum class Modes { Normal, Done }; + Timer(DisplayApp* app, Controllers::TimerController& timerController); - + ~Timer() override; - - bool Refresh() override; - + + void Refresh() override; + void setDone(); - + void OnButtonEvent(lv_obj_t* obj, lv_event_t event); - + private: - bool running; uint8_t secondsToSet = 0; uint8_t minutesToSet = 0; Controllers::TimerController& timerController; - + void createButtons(); - - lv_obj_t* time, * msecTime, * btnPlayPause, * txtPlayPause, * btnMinutesUp, * btnMinutesDown, * btnSecondsUp, * btnSecondsDown, * txtMUp, - * txtMDown, * txtSUp, * txtSDown; + + lv_obj_t *time, *msecTime, *btnPlayPause, *txtPlayPause, *btnMinutesUp, *btnMinutesDown, *btnSecondsUp, *btnSecondsDown, *txtMUp, + *txtMDown, *txtSUp, *txtSDown; + + lv_task_t* taskRefresh; }; -} \ No newline at end of file +} diff --git a/src/displayapp/screens/Twos.cpp b/src/displayapp/screens/Twos.cpp index eb2680770d..4201d501cc 100644 --- a/src/displayapp/screens/Twos.cpp +++ b/src/displayapp/screens/Twos.cpp @@ -102,10 +102,6 @@ Twos::~Twos() { lv_obj_clean(lv_scr_act()); } -bool Twos::Refresh() { - return running; -} - bool Twos::placeNewTile() { std::vector> availableCells; for (int row = 0; row < 4; row++) { @@ -295,4 +291,4 @@ void Twos::updateGridDisplay(Tile grid[][4]) { } } } -} \ No newline at end of file +} diff --git a/src/displayapp/screens/Twos.h b/src/displayapp/screens/Twos.h index 3367618f22..6d85cff68b 100644 --- a/src/displayapp/screens/Twos.h +++ b/src/displayapp/screens/Twos.h @@ -14,7 +14,6 @@ namespace Pinetime { public: Twos(DisplayApp* app); ~Twos() override; - bool Refresh() override; bool OnTouchEvent(TouchEvents event) override; @@ -36,4 +35,4 @@ namespace Pinetime { }; } } -} \ No newline at end of file +} diff --git a/src/displayapp/screens/WatchFaceAnalog.cpp b/src/displayapp/screens/WatchFaceAnalog.cpp index f1889379a4..b6720bd148 100644 --- a/src/displayapp/screens/WatchFaceAnalog.cpp +++ b/src/displayapp/screens/WatchFaceAnalog.cpp @@ -119,10 +119,12 @@ WatchFaceAnalog::WatchFaceAnalog(Pinetime::Applications::DisplayApp* app, lv_style_set_line_rounded(&hour_line_style_trace, LV_STATE_DEFAULT, false); lv_obj_add_style(hour_body_trace, LV_LINE_PART_MAIN, &hour_line_style_trace); + taskRefresh = lv_task_create(RefreshTaskCallback, 20, LV_TASK_PRIO_MID, this); UpdateClock(); } WatchFaceAnalog::~WatchFaceAnalog() { + lv_task_del(taskRefresh); lv_style_reset(&hour_line_style); lv_style_reset(&hour_line_style_trace); @@ -176,7 +178,7 @@ void WatchFaceAnalog::UpdateClock() { } } -bool WatchFaceAnalog::Refresh() { +void WatchFaceAnalog::Refresh() { batteryPercentRemaining = batteryController.PercentRemaining(); if (batteryPercentRemaining.IsUpdated()) { auto batteryPercent = batteryPercentRemaining.Get(); @@ -211,6 +213,4 @@ bool WatchFaceAnalog::Refresh() { currentDay = day; } } - - return true; } diff --git a/src/displayapp/screens/WatchFaceAnalog.h b/src/displayapp/screens/WatchFaceAnalog.h index ac7f0ac51f..c9b19b4d2a 100644 --- a/src/displayapp/screens/WatchFaceAnalog.h +++ b/src/displayapp/screens/WatchFaceAnalog.h @@ -32,7 +32,7 @@ namespace Pinetime { ~WatchFaceAnalog() override; - bool Refresh() override; + void Refresh() override; private: uint8_t sHour, sMinute, sSecond; @@ -83,6 +83,8 @@ namespace Pinetime { Controllers::Settings& settingsController; void UpdateClock(); + + lv_task_t* taskRefresh; }; } } diff --git a/src/displayapp/screens/WatchFaceDigital.cpp b/src/displayapp/screens/WatchFaceDigital.cpp index f1285eaf35..9b6aee2376 100644 --- a/src/displayapp/screens/WatchFaceDigital.cpp +++ b/src/displayapp/screens/WatchFaceDigital.cpp @@ -100,13 +100,17 @@ WatchFaceDigital::WatchFaceDigital(DisplayApp* app, lv_obj_set_style_local_text_color(stepIcon, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x00FFE7)); lv_label_set_text(stepIcon, Symbols::shoe); lv_obj_align(stepIcon, stepValue, LV_ALIGN_OUT_LEFT_MID, -5, 0); + + taskRefresh = lv_task_create(RefreshTaskCallback, 20, LV_TASK_PRIO_MID, this); + Refresh(); } WatchFaceDigital::~WatchFaceDigital() { + lv_task_del(taskRefresh); lv_obj_clean(lv_scr_act()); } -bool WatchFaceDigital::Refresh() { +void WatchFaceDigital::Refresh() { batteryPercentRemaining = batteryController.PercentRemaining(); if (batteryPercentRemaining.IsUpdated()) { auto batteryPercent = batteryPercentRemaining.Get(); @@ -240,6 +244,4 @@ bool WatchFaceDigital::Refresh() { lv_obj_align(stepValue, lv_scr_act(), LV_ALIGN_IN_BOTTOM_RIGHT, -5, -2); lv_obj_align(stepIcon, stepValue, LV_ALIGN_OUT_LEFT_MID, -5, 0); } - - return running; } diff --git a/src/displayapp/screens/WatchFaceDigital.h b/src/displayapp/screens/WatchFaceDigital.h index 76c8d3dcce..02ec93cb44 100644 --- a/src/displayapp/screens/WatchFaceDigital.h +++ b/src/displayapp/screens/WatchFaceDigital.h @@ -33,7 +33,7 @@ namespace Pinetime { Controllers::MotionController& motionController); ~WatchFaceDigital() override; - bool Refresh() override; + void Refresh() override; void OnObjectEvent(lv_obj_t* pObj, lv_event_t i); @@ -75,6 +75,8 @@ namespace Pinetime { Controllers::Settings& settingsController; Controllers::HeartRateController& heartRateController; Controllers::MotionController& motionController; + + lv_task_t* taskRefresh; }; } } diff --git a/src/displayapp/screens/settings/QuickSettings.cpp b/src/displayapp/screens/settings/QuickSettings.cpp index acc2a27a3f..abee1688e1 100644 --- a/src/displayapp/screens/settings/QuickSettings.cpp +++ b/src/displayapp/screens/settings/QuickSettings.cpp @@ -164,7 +164,3 @@ bool QuickSettings::OnTouchEvent(Pinetime::Applications::TouchEvents event) { return true; } } - -bool QuickSettings::Refresh() { - return running; -} diff --git a/src/displayapp/screens/settings/QuickSettings.h b/src/displayapp/screens/settings/QuickSettings.h index a14f46bf32..7757f28f18 100644 --- a/src/displayapp/screens/settings/QuickSettings.h +++ b/src/displayapp/screens/settings/QuickSettings.h @@ -27,8 +27,6 @@ namespace Pinetime { ~QuickSettings() override; - bool Refresh() override; - bool OnTouchEvent(Pinetime::Applications::TouchEvents event) override; void OnButtonEvent(lv_obj_t* object, lv_event_t event); diff --git a/src/displayapp/screens/settings/SettingDisplay.cpp b/src/displayapp/screens/settings/SettingDisplay.cpp index 4954185df3..7b31c47c96 100644 --- a/src/displayapp/screens/settings/SettingDisplay.cpp +++ b/src/displayapp/screens/settings/SettingDisplay.cpp @@ -80,10 +80,6 @@ SettingDisplay::~SettingDisplay() { settingsController.SaveSettings(); } -bool SettingDisplay::Refresh() { - return running; -} - void SettingDisplay::UpdateSelected(lv_obj_t* object, lv_event_t event) { if (event == LV_EVENT_VALUE_CHANGED) { for (int i = 0; i < optionsTotal; i++) { @@ -110,4 +106,4 @@ void SettingDisplay::UpdateSelected(lv_obj_t* object, lv_event_t event) { } } } -} \ No newline at end of file +} diff --git a/src/displayapp/screens/settings/SettingDisplay.h b/src/displayapp/screens/settings/SettingDisplay.h index b8ed87ec60..51b23aca4e 100644 --- a/src/displayapp/screens/settings/SettingDisplay.h +++ b/src/displayapp/screens/settings/SettingDisplay.h @@ -15,7 +15,6 @@ namespace Pinetime { SettingDisplay(DisplayApp* app, Pinetime::Controllers::Settings& settingsController); ~SettingDisplay() override; - bool Refresh() override; void UpdateSelected(lv_obj_t* object, lv_event_t event); private: diff --git a/src/displayapp/screens/settings/SettingSteps.cpp b/src/displayapp/screens/settings/SettingSteps.cpp index faa843e621..bec7972b8f 100644 --- a/src/displayapp/screens/settings/SettingSteps.cpp +++ b/src/displayapp/screens/settings/SettingSteps.cpp @@ -70,11 +70,6 @@ SettingSteps::~SettingSteps() { settingsController.SaveSettings(); } -bool SettingSteps::Refresh() { - return running; -} - - void SettingSteps::UpdateSelected(lv_obj_t *object, lv_event_t event) { uint32_t value = settingsController.GetStepsGoal(); if(object == btnPlus && (event == LV_EVENT_PRESSED)) { @@ -95,4 +90,4 @@ void SettingSteps::UpdateSelected(lv_obj_t *object, lv_event_t event) { } } -} \ No newline at end of file +} diff --git a/src/displayapp/screens/settings/SettingSteps.h b/src/displayapp/screens/settings/SettingSteps.h index 0a4c2056b2..5fc05dee90 100644 --- a/src/displayapp/screens/settings/SettingSteps.h +++ b/src/displayapp/screens/settings/SettingSteps.h @@ -10,22 +10,19 @@ namespace Pinetime { namespace Applications { namespace Screens { - class SettingSteps : public Screen{ - public: - SettingSteps(DisplayApp* app, Pinetime::Controllers::Settings &settingsController); - ~SettingSteps() override; + class SettingSteps : public Screen { + public: + SettingSteps(DisplayApp* app, Pinetime::Controllers::Settings& settingsController); + ~SettingSteps() override; - bool Refresh() override; - void UpdateSelected(lv_obj_t *object, lv_event_t event); - - private: + void UpdateSelected(lv_obj_t* object, lv_event_t event); - Controllers::Settings& settingsController; + private: + Controllers::Settings& settingsController; - lv_obj_t * stepValue; - lv_obj_t * btnPlus; - lv_obj_t * btnMinus; - + lv_obj_t* stepValue; + lv_obj_t* btnPlus; + lv_obj_t* btnMinus; }; } } diff --git a/src/displayapp/screens/settings/SettingTimeFormat.cpp b/src/displayapp/screens/settings/SettingTimeFormat.cpp index 031a2a72a3..c99e3a0e2a 100644 --- a/src/displayapp/screens/settings/SettingTimeFormat.cpp +++ b/src/displayapp/screens/settings/SettingTimeFormat.cpp @@ -64,10 +64,6 @@ SettingTimeFormat::~SettingTimeFormat() { settingsController.SaveSettings(); } -bool SettingTimeFormat::Refresh() { - return running; -} - void SettingTimeFormat::UpdateSelected(lv_obj_t* object, lv_event_t event) { if (event == LV_EVENT_VALUE_CHANGED) { for (int i = 0; i < optionsTotal; i++) { @@ -86,4 +82,4 @@ void SettingTimeFormat::UpdateSelected(lv_obj_t* object, lv_event_t event) { } } } -} \ No newline at end of file +} diff --git a/src/displayapp/screens/settings/SettingTimeFormat.h b/src/displayapp/screens/settings/SettingTimeFormat.h index 9203b45be8..eac4bdc9fd 100644 --- a/src/displayapp/screens/settings/SettingTimeFormat.h +++ b/src/displayapp/screens/settings/SettingTimeFormat.h @@ -15,7 +15,6 @@ namespace Pinetime { SettingTimeFormat(DisplayApp* app, Pinetime::Controllers::Settings& settingsController); ~SettingTimeFormat() override; - bool Refresh() override; void UpdateSelected(lv_obj_t* object, lv_event_t event); private: diff --git a/src/displayapp/screens/settings/SettingWakeUp.cpp b/src/displayapp/screens/settings/SettingWakeUp.cpp index 0e0803537f..646afe6bde 100644 --- a/src/displayapp/screens/settings/SettingWakeUp.cpp +++ b/src/displayapp/screens/settings/SettingWakeUp.cpp @@ -72,10 +72,6 @@ SettingWakeUp::~SettingWakeUp() { settingsController.SaveSettings(); } -bool SettingWakeUp::Refresh() { - return running; -} - void SettingWakeUp::UpdateSelected(lv_obj_t* object, lv_event_t event) { using WakeUpMode = Pinetime::Controllers::Settings::WakeUpMode; if (event == LV_EVENT_VALUE_CHANGED && !ignoringEvents) { diff --git a/src/displayapp/screens/settings/SettingWakeUp.h b/src/displayapp/screens/settings/SettingWakeUp.h index 248dd9acfd..b9a31dc9e5 100644 --- a/src/displayapp/screens/settings/SettingWakeUp.h +++ b/src/displayapp/screens/settings/SettingWakeUp.h @@ -15,7 +15,6 @@ namespace Pinetime { SettingWakeUp(DisplayApp* app, Pinetime::Controllers::Settings& settingsController); ~SettingWakeUp() override; - bool Refresh() override; void UpdateSelected(lv_obj_t* object, lv_event_t event); private: diff --git a/src/displayapp/screens/settings/SettingWatchFace.cpp b/src/displayapp/screens/settings/SettingWatchFace.cpp index 3e73489d6f..1d27acd976 100644 --- a/src/displayapp/screens/settings/SettingWatchFace.cpp +++ b/src/displayapp/screens/settings/SettingWatchFace.cpp @@ -75,10 +75,6 @@ SettingWatchFace::~SettingWatchFace() { settingsController.SaveSettings(); } -bool SettingWatchFace::Refresh() { - return running; -} - void SettingWatchFace::UpdateSelected(lv_obj_t* object, lv_event_t event) { if (event == LV_EVENT_VALUE_CHANGED) { for (uint8_t i = 0; i < optionsTotal; i++) { @@ -90,4 +86,4 @@ void SettingWatchFace::UpdateSelected(lv_obj_t* object, lv_event_t event) { } } } -} \ No newline at end of file +} diff --git a/src/displayapp/screens/settings/SettingWatchFace.h b/src/displayapp/screens/settings/SettingWatchFace.h index 1930a22853..d4a96c6df9 100644 --- a/src/displayapp/screens/settings/SettingWatchFace.h +++ b/src/displayapp/screens/settings/SettingWatchFace.h @@ -15,7 +15,6 @@ namespace Pinetime { SettingWatchFace(DisplayApp* app, Pinetime::Controllers::Settings& settingsController); ~SettingWatchFace() override; - bool Refresh() override; void UpdateSelected(lv_obj_t* object, lv_event_t event); private: diff --git a/src/displayapp/screens/settings/Settings.cpp b/src/displayapp/screens/settings/Settings.cpp index e63a35846e..c7995742fd 100644 --- a/src/displayapp/screens/settings/Settings.cpp +++ b/src/displayapp/screens/settings/Settings.cpp @@ -26,13 +26,6 @@ Settings::~Settings() { lv_obj_clean(lv_scr_act()); } -bool Settings::Refresh() { - - if (running) - running = screens.Refresh(); - return running; -} - bool Settings::OnTouchEvent(Pinetime::Applications::TouchEvents event) { return screens.OnTouchEvent(event); } diff --git a/src/displayapp/screens/settings/Settings.h b/src/displayapp/screens/settings/Settings.h index 711a6be6d0..02ccff69e8 100644 --- a/src/displayapp/screens/settings/Settings.h +++ b/src/displayapp/screens/settings/Settings.h @@ -14,8 +14,6 @@ namespace Pinetime { Settings(DisplayApp* app, Pinetime::Controllers::Settings& settingsController); ~Settings() override; - bool Refresh() override; - bool OnTouchEvent(Pinetime::Applications::TouchEvents event) override; private: From 331fc2be6931238960c894d0a926f673607455fc Mon Sep 17 00:00:00 2001 From: Riku Isokoski Date: Mon, 19 Jul 2021 17:06:20 +0300 Subject: [PATCH 047/173] Set remaining default periods to LV_DISP_DEF_REFR_PERIOD --- src/displayapp/screens/Music.cpp | 2 +- src/displayapp/screens/Paddle.cpp | 2 +- src/displayapp/screens/StopWatch.cpp | 2 +- src/displayapp/screens/Timer.cpp | 2 +- src/displayapp/screens/WatchFaceAnalog.cpp | 2 +- src/displayapp/screens/WatchFaceDigital.cpp | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/displayapp/screens/Music.cpp b/src/displayapp/screens/Music.cpp index beb96faee6..2d22877251 100644 --- a/src/displayapp/screens/Music.cpp +++ b/src/displayapp/screens/Music.cpp @@ -147,7 +147,7 @@ Music::Music(Pinetime::Applications::DisplayApp* app, Pinetime::Controllers::Mus musicService.event(Controllers::MusicService::EVENT_MUSIC_OPEN); - taskRefresh = lv_task_create(RefreshTaskCallback, 5000, LV_TASK_PRIO_MID, this); + taskRefresh = lv_task_create(RefreshTaskCallback, LV_DISP_DEF_REFR_PERIOD, LV_TASK_PRIO_MID, this); } Music::~Music() { diff --git a/src/displayapp/screens/Paddle.cpp b/src/displayapp/screens/Paddle.cpp index 87fc87253f..d43173dc51 100644 --- a/src/displayapp/screens/Paddle.cpp +++ b/src/displayapp/screens/Paddle.cpp @@ -30,7 +30,7 @@ Paddle::Paddle(Pinetime::Applications::DisplayApp* app, Pinetime::Components::Li lv_obj_set_style_local_radius(ball, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, LV_RADIUS_CIRCLE); lv_obj_set_size(ball, ballSize, ballSize); - taskRefresh = lv_task_create(RefreshTaskCallback, 20, LV_TASK_PRIO_MID, this); + taskRefresh = lv_task_create(RefreshTaskCallback, LV_DISP_DEF_REFR_PERIOD, LV_TASK_PRIO_MID, this); } Paddle::~Paddle() { diff --git a/src/displayapp/screens/StopWatch.cpp b/src/displayapp/screens/StopWatch.cpp index 74b49db106..0d4feb2003 100644 --- a/src/displayapp/screens/StopWatch.cpp +++ b/src/displayapp/screens/StopWatch.cpp @@ -101,7 +101,7 @@ StopWatch::StopWatch(DisplayApp* app, System::SystemTask& systemTask) lv_obj_align(lapTwoText, lv_scr_act(), LV_ALIGN_IN_LEFT_MID, 50, 55); lv_label_set_text(lapTwoText, ""); - taskRefresh = lv_task_create(RefreshTaskCallback, 20, LV_TASK_PRIO_MID, this); + taskRefresh = lv_task_create(RefreshTaskCallback, LV_DISP_DEF_REFR_PERIOD, LV_TASK_PRIO_MID, this); } StopWatch::~StopWatch() { diff --git a/src/displayapp/screens/Timer.cpp b/src/displayapp/screens/Timer.cpp index ae6ed30e1b..ff3099d54e 100644 --- a/src/displayapp/screens/Timer.cpp +++ b/src/displayapp/screens/Timer.cpp @@ -74,7 +74,7 @@ Timer::Timer(DisplayApp* app, Controllers::TimerController& timerController) createButtons(); } - taskRefresh = lv_task_create(RefreshTaskCallback, 20, LV_TASK_PRIO_MID, this); + taskRefresh = lv_task_create(RefreshTaskCallback, LV_DISP_DEF_REFR_PERIOD, LV_TASK_PRIO_MID, this); } Timer::~Timer() { diff --git a/src/displayapp/screens/WatchFaceAnalog.cpp b/src/displayapp/screens/WatchFaceAnalog.cpp index b6720bd148..95c3fe46b6 100644 --- a/src/displayapp/screens/WatchFaceAnalog.cpp +++ b/src/displayapp/screens/WatchFaceAnalog.cpp @@ -119,7 +119,7 @@ WatchFaceAnalog::WatchFaceAnalog(Pinetime::Applications::DisplayApp* app, lv_style_set_line_rounded(&hour_line_style_trace, LV_STATE_DEFAULT, false); lv_obj_add_style(hour_body_trace, LV_LINE_PART_MAIN, &hour_line_style_trace); - taskRefresh = lv_task_create(RefreshTaskCallback, 20, LV_TASK_PRIO_MID, this); + taskRefresh = lv_task_create(RefreshTaskCallback, LV_DISP_DEF_REFR_PERIOD, LV_TASK_PRIO_MID, this); UpdateClock(); } diff --git a/src/displayapp/screens/WatchFaceDigital.cpp b/src/displayapp/screens/WatchFaceDigital.cpp index 9b6aee2376..e66e7aa953 100644 --- a/src/displayapp/screens/WatchFaceDigital.cpp +++ b/src/displayapp/screens/WatchFaceDigital.cpp @@ -101,7 +101,7 @@ WatchFaceDigital::WatchFaceDigital(DisplayApp* app, lv_label_set_text(stepIcon, Symbols::shoe); lv_obj_align(stepIcon, stepValue, LV_ALIGN_OUT_LEFT_MID, -5, 0); - taskRefresh = lv_task_create(RefreshTaskCallback, 20, LV_TASK_PRIO_MID, this); + taskRefresh = lv_task_create(RefreshTaskCallback, LV_DISP_DEF_REFR_PERIOD, LV_TASK_PRIO_MID, this); Refresh(); } From 5e4d3c87e92b8f2dd1020577f3ebad93322b0f6f Mon Sep 17 00:00:00 2001 From: Kieran Cawthray Date: Thu, 22 Jul 2021 15:37:34 +0200 Subject: [PATCH 048/173] Remove .gitignore --- .gitignore | 41 ----------------------------------------- 1 file changed, 41 deletions(-) delete mode 100644 .gitignore diff --git a/.gitignore b/.gitignore deleted file mode 100644 index 2f9ac181a6..0000000000 --- a/.gitignore +++ /dev/null @@ -1,41 +0,0 @@ -.idea/ -# Python virtual environment for DFU images -.venv/ - -# CMake -cmake-build-* -cmake-* -CMakeFiles -**/CMakeCache.txt -cmake_install.cmake -Makefile -build -tools - -# Resulting binary files -*.a -*.so -*.s -*.hex -*.bin -!bootloader/bootloader-5.0.4.bin -*.map -*.out -pinetime*.cbp - -# InfiniTime's files -core -sdk -src/Version.h -docker/post_build.sh -Testing/Temporary/ - -# Linux -**/.directory -**/*.swp - -# OSX/MacOS -**/.DS_Store - -# Windows -**/thumbs.db \ No newline at end of file From 0a0f28fff4be4c9fd9030d9375459fb7b5fdd004 Mon Sep 17 00:00:00 2001 From: Riku Isokoski Date: Thu, 22 Jul 2021 22:57:45 +0300 Subject: [PATCH 049/173] Make firmware updating more foolproof (#469) * Make firmware updating more foolproof and fix bugs * No need to manually handle overflow * Make startTime TickType_t * Don't process TouchEvents::None * Fix sleep getting re-enabled issue more directly --- src/components/ble/DfuService.cpp | 9 +++---- src/displayapp/DisplayApp.cpp | 7 ++++- src/displayapp/screens/FirmwareUpdate.cpp | 33 ++++++++++++++++++----- src/displayapp/screens/FirmwareUpdate.h | 9 +++++-- src/systemtask/SystemTask.cpp | 11 +++++--- 5 files changed, 52 insertions(+), 17 deletions(-) diff --git a/src/components/ble/DfuService.cpp b/src/components/ble/DfuService.cpp index e6bcea81f1..4179994d49 100644 --- a/src/components/ble/DfuService.cpp +++ b/src/components/ble/DfuService.cpp @@ -266,13 +266,14 @@ int DfuService::ControlPointHandler(uint16_t connectionHandle, os_mbuf* om) { static_cast(ErrorCodes::NoError)}; notificationManager.AsyncSend(connectionHandle, controlPointCharacteristicHandle, data, 3); } else { - bleController.State(Pinetime::Controllers::Ble::FirmwareUpdateStates::Error); NRF_LOG_INFO("Image Error : bad CRC"); uint8_t data[3] {static_cast(Opcodes::Response), static_cast(Opcodes::ValidateFirmware), static_cast(ErrorCodes::CrcError)}; notificationManager.AsyncSend(connectionHandle, controlPointCharacteristicHandle, data, 3); + bleController.State(Pinetime::Controllers::Ble::FirmwareUpdateStates::Error); + Reset(); } return 0; @@ -283,10 +284,8 @@ int DfuService::ControlPointHandler(uint16_t connectionHandle, os_mbuf* om) { return 0; } NRF_LOG_INFO("[DFU] -> Activate image and reset!"); - bleController.StopFirmwareUpdate(); - systemTask.PushMessage(Pinetime::System::Messages::BleFirmwareUpdateFinished); - Reset(); bleController.State(Pinetime::Controllers::Ble::FirmwareUpdateStates::Validated); + Reset(); return 0; default: return 0; @@ -294,6 +293,7 @@ int DfuService::ControlPointHandler(uint16_t connectionHandle, os_mbuf* om) { } void DfuService::OnTimeout() { + bleController.State(Pinetime::Controllers::Ble::FirmwareUpdateStates::Error); Reset(); } @@ -307,7 +307,6 @@ void DfuService::Reset() { applicationSize = 0; expectedCrc = 0; notificationManager.Reset(); - bleController.State(Pinetime::Controllers::Ble::FirmwareUpdateStates::Error); bleController.StopFirmwareUpdate(); systemTask.PushMessage(Pinetime::System::Messages::BleFirmwareUpdateFinished); } diff --git a/src/displayapp/DisplayApp.cpp b/src/displayapp/DisplayApp.cpp index 071af0c859..4d32a7e5a0 100644 --- a/src/displayapp/DisplayApp.cpp +++ b/src/displayapp/DisplayApp.cpp @@ -177,9 +177,13 @@ void DisplayApp::Refresh() { } break; case Messages::TouchEvent: { - if (state != States::Running) + if (state != States::Running) { break; + } auto gesture = OnTouchEvent(); + if (gesture == TouchEvents::None) { + break; + } if (!currentScreen->OnTouchEvent(gesture)) { if (currentApp == Apps::Clock) { switch (gesture) { @@ -286,6 +290,7 @@ void DisplayApp::LoadApp(Apps app, DisplayApp::FullRefreshDirections direction) break; case Apps::FirmwareUpdate: currentScreen = std::make_unique(this, bleController); + ReturnApp(Apps::Clock, FullRefreshDirections::Down, TouchEvents::None); break; case Apps::Notifications: diff --git a/src/displayapp/screens/FirmwareUpdate.cpp b/src/displayapp/screens/FirmwareUpdate.cpp index 4086b1520f..edb2e49d2c 100644 --- a/src/displayapp/screens/FirmwareUpdate.cpp +++ b/src/displayapp/screens/FirmwareUpdate.cpp @@ -27,9 +27,10 @@ FirmwareUpdate::FirmwareUpdate(Pinetime::Applications::DisplayApp* app, Pinetime lv_bar_set_value(bar1, 0, LV_ANIM_OFF); percentLabel = lv_label_create(lv_scr_act(), nullptr); - lv_label_set_text(percentLabel, ""); + lv_label_set_text(percentLabel, "Waiting..."); lv_obj_set_auto_realign(percentLabel, true); lv_obj_align(percentLabel, bar1, LV_ALIGN_OUT_TOP_MID, 0, 60); + startTime = xTaskGetTickCount(); } FirmwareUpdate::~FirmwareUpdate() { @@ -40,26 +41,42 @@ bool FirmwareUpdate::Refresh() { switch (bleController.State()) { default: case Pinetime::Controllers::Ble::FirmwareUpdateStates::Idle: + // This condition makes sure that the app is exited if somehow it got + // launched without a firmware update. This should never happen. + if (state != States::Error) { + if (xTaskGetTickCount() - startTime > (60 * 1024)) { + UpdateError(); + state = States::Error; + } + } else if (xTaskGetTickCount() - startTime > (5 * 1024)) { + running = false; + } + break; case Pinetime::Controllers::Ble::FirmwareUpdateStates::Running: if (state != States::Running) state = States::Running; - return DisplayProgression(); + DisplayProgression(); + break; case Pinetime::Controllers::Ble::FirmwareUpdateStates::Validated: if (state != States::Validated) { UpdateValidated(); state = States::Validated; } - return running; + break; case Pinetime::Controllers::Ble::FirmwareUpdateStates::Error: if (state != States::Error) { UpdateError(); state = States::Error; } - return running; + if (xTaskGetTickCount() - startTime > (5 * 1024)) { + running = false; + } + break; } + return running; } -bool FirmwareUpdate::DisplayProgression() const { +void FirmwareUpdate::DisplayProgression() const { float current = bleController.FirmwareUpdateCurrentBytes() / 1024.0f; float total = bleController.FirmwareUpdateTotalBytes() / 1024.0f; int16_t pc = (current / total) * 100.0f; @@ -67,7 +84,6 @@ bool FirmwareUpdate::DisplayProgression() const { lv_label_set_text(percentLabel, percentStr); lv_bar_set_value(bar1, pc, LV_ANIM_OFF); - return running; } void FirmwareUpdate::UpdateValidated() { @@ -78,4 +94,9 @@ void FirmwareUpdate::UpdateValidated() { void FirmwareUpdate::UpdateError() { lv_label_set_recolor(percentLabel, true); lv_label_set_text(percentLabel, "#ff0000 Error!#"); + startTime = xTaskGetTickCount(); +} + +bool FirmwareUpdate::OnButtonPushed() { + return true; } diff --git a/src/displayapp/screens/FirmwareUpdate.h b/src/displayapp/screens/FirmwareUpdate.h index f4d34df0ef..90c99f4cfa 100644 --- a/src/displayapp/screens/FirmwareUpdate.h +++ b/src/displayapp/screens/FirmwareUpdate.h @@ -2,6 +2,7 @@ #include "Screen.h" #include +#include "FreeRTOS.h" namespace Pinetime { namespace Controllers { @@ -25,13 +26,17 @@ namespace Pinetime { lv_obj_t* titleLabel; mutable char percentStr[10]; - States state; + States state = States::Idle; - bool DisplayProgression() const; + void DisplayProgression() const; + + bool OnButtonPushed() override; void UpdateValidated(); void UpdateError(); + + TickType_t startTime; }; } } diff --git a/src/systemtask/SystemTask.cpp b/src/systemtask/SystemTask.cpp index d8b965b118..7efd1d6bdb 100644 --- a/src/systemtask/SystemTask.cpp +++ b/src/systemtask/SystemTask.cpp @@ -198,7 +198,11 @@ void SystemTask::Work() { Messages message = static_cast(msg); switch (message) { case Messages::EnableSleeping: - doNotGoToSleep = false; + // Make sure that exiting an app doesn't enable sleeping, + // if the exiting was caused by a firmware update + if (!bleController.IsFirmwareUpdating()) { + doNotGoToSleep = false; + } break; case Messages::DisableSleeping: doNotGoToSleep = true; @@ -275,10 +279,11 @@ void SystemTask::Work() { displayApp.PushMessage(Pinetime::Applications::Display::Messages::BleFirmwareUpdateStarted); break; case Messages::BleFirmwareUpdateFinished: + if (bleController.State() == Pinetime::Controllers::Ble::FirmwareUpdateStates::Validated) { + NVIC_SystemReset(); + } doNotGoToSleep = false; xTimerStart(idleTimer, 0); - if (bleController.State() == Pinetime::Controllers::Ble::FirmwareUpdateStates::Validated) - NVIC_SystemReset(); break; case Messages::OnTouchEvent: ReloadIdleTimer(); From d6cccc2dcd95a7d332ee657d1357ae060389f6e6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-Fran=C3=A7ois=20Milants?= Date: Fri, 23 Jul 2021 11:46:37 +0200 Subject: [PATCH 050/173] Set version to 1.3.0 --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index f2e467e991..9d02c10105 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,5 +1,5 @@ cmake_minimum_required(VERSION 3.10) -project(pinetime VERSION 1.2.0 LANGUAGES C CXX ASM) +project(pinetime VERSION 1.3.0 LANGUAGES C CXX ASM) set(CMAKE_C_STANDARD 99) set(CMAKE_CXX_STANDARD 14) From 547b5a869911bc98e08df05dc56de7ae830f7eeb Mon Sep 17 00:00:00 2001 From: Kieran Cawthray Date: Fri, 23 Jul 2021 15:06:08 +0200 Subject: [PATCH 051/173] Restore .gitignore --- .gitignore | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000000..2f9ac181a6 --- /dev/null +++ b/.gitignore @@ -0,0 +1,41 @@ +.idea/ +# Python virtual environment for DFU images +.venv/ + +# CMake +cmake-build-* +cmake-* +CMakeFiles +**/CMakeCache.txt +cmake_install.cmake +Makefile +build +tools + +# Resulting binary files +*.a +*.so +*.s +*.hex +*.bin +!bootloader/bootloader-5.0.4.bin +*.map +*.out +pinetime*.cbp + +# InfiniTime's files +core +sdk +src/Version.h +docker/post_build.sh +Testing/Temporary/ + +# Linux +**/.directory +**/*.swp + +# OSX/MacOS +**/.DS_Store + +# Windows +**/thumbs.db \ No newline at end of file From b3e3d75d0fd077cd4341092f57403b6b3e17c7fd Mon Sep 17 00:00:00 2001 From: Kieran Cawthray Date: Sat, 24 Jul 2021 14:25:27 +0200 Subject: [PATCH 052/173] Add extra screen in settings to show scrollbar correctly --- src/displayapp/screens/settings/Settings.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/displayapp/screens/settings/Settings.cpp b/src/displayapp/screens/settings/Settings.cpp index 733478048d..43f60a3163 100644 --- a/src/displayapp/screens/settings/Settings.cpp +++ b/src/displayapp/screens/settings/Settings.cpp @@ -49,7 +49,7 @@ std::unique_ptr Settings::CreateScreen1() { {Symbols::clock, "Watch face", Apps::SettingWatchFace}, }}; - return std::make_unique(0, 2, app, settingsController, applications); + return std::make_unique(0, 3, app, settingsController, applications); } std::unique_ptr Settings::CreateScreen2() { @@ -61,7 +61,7 @@ std::unique_ptr Settings::CreateScreen2() { {Symbols::list, "About", Apps::SysInfo}, }}; - return std::make_unique(1, 2, app, settingsController, applications); + return std::make_unique(1, 3, app, settingsController, applications); } std::unique_ptr Settings::CreateScreen3() { @@ -73,5 +73,5 @@ std::unique_ptr Settings::CreateScreen3() { {Symbols::none, "None", Apps::None}, }}; - return std::make_unique(2, 2, app, settingsController, applications); + return std::make_unique(2, 3, app, settingsController, applications); } From bb26c68f2cb971dd2bb6eaa9916ec2372ebcc646 Mon Sep 17 00:00:00 2001 From: Alexandros Feuerstein <32029275+afeuerstein@users.noreply.github.com> Date: Sat, 24 Jul 2021 15:39:24 +0200 Subject: [PATCH 053/173] minor changes regarding building (#356) * don't enforce any flashing through debug ports --- CMakeLists.txt | 4 ---- 1 file changed, 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 9d02c10105..b442fc118f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -21,10 +21,6 @@ if (NOT NRF5_SDK_PATH) message(FATAL_ERROR "The path to the NRF52 SDK must be specified on the command line (add -DNRF5_SDK_PATH=") endif () -if(NOT USE_JLINK AND NOT USE_GDB_CLIENT AND NOT USE_OPENOCD) - set(USE_JLINK true) -endif() - if(USE_JLINK) if (NOT NRFJPROG) message(FATAL_ERROR "the path to the tool nrfjprog must be specified on the command line (add -DNRFJPROG=") From a1a6eae43f5995e21ff3d535094a6350e1031804 Mon Sep 17 00:00:00 2001 From: Avamander Date: Sun, 18 Apr 2021 19:20:16 +0300 Subject: [PATCH 054/173] Added a pre-commit hook that should simplify commiting pre-formatted code --- hooks/README.md | 5 +++++ hooks/pre-commit | 13 +++++++++++++ 2 files changed, 18 insertions(+) create mode 100644 hooks/README.md create mode 100755 hooks/pre-commit diff --git a/hooks/README.md b/hooks/README.md new file mode 100644 index 0000000000..de8fc67bc4 --- /dev/null +++ b/hooks/README.md @@ -0,0 +1,5 @@ +# Git hooks + +This directory contains Git hooks that simplify contributing to this repository. + +You can install them by copying the files into `.git/hooks` in the repository folder or by running `git config --local core.hooksPath hooks` diff --git a/hooks/pre-commit b/hooks/pre-commit new file mode 100755 index 0000000000..2e918a17dc --- /dev/null +++ b/hooks/pre-commit @@ -0,0 +1,13 @@ +#!/bin/bash +for FILE in $(git diff --cached --name-only) +do + if [[ "$FILE" =~ src/[A-Za-z0-9\ \-]+*\.(c|h|cpp|cc)$ ]]; then + echo Autoformatting $FILE with clang-format + clang-format-11 -style=file -i -- $FILE + git add -- $FILE + elif [[ "$FILE" =~ src/(components|displayapp|drivers|heartratetask|logging|systemtask)/.*\.(c|h|cpp|cc)$ ]]; then + echo Autoformatting $FILE with clang-format + clang-format-11 -style=file -i -- $FILE + git add -- $FILE + fi +done From 10ef3a749ede4a27fe162bd730b26fb778ffaa85 Mon Sep 17 00:00:00 2001 From: Avamander Date: Sat, 1 May 2021 20:36:27 +0300 Subject: [PATCH 055/173] Added autodetection for clang-format version --- hooks/pre-commit | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/hooks/pre-commit b/hooks/pre-commit index 2e918a17dc..15961f19a0 100755 --- a/hooks/pre-commit +++ b/hooks/pre-commit @@ -1,13 +1,19 @@ #!/bin/bash +if clang-format --version | grep -q 'version 11\.'; then + CLANG_FORMAT_EXECUTABLE="clang-format" +else + CLANG_FORMAT_EXECUTABLE="clang-format-11" +fi + for FILE in $(git diff --cached --name-only) do if [[ "$FILE" =~ src/[A-Za-z0-9\ \-]+*\.(c|h|cpp|cc)$ ]]; then - echo Autoformatting $FILE with clang-format - clang-format-11 -style=file -i -- $FILE + echo Autoformatting $FILE with $CLANG_FORMAT_EXECUTABLE + $CLANG_FORMAT_EXECUTABLE -style=file -i -- $FILE git add -- $FILE elif [[ "$FILE" =~ src/(components|displayapp|drivers|heartratetask|logging|systemtask)/.*\.(c|h|cpp|cc)$ ]]; then - echo Autoformatting $FILE with clang-format - clang-format-11 -style=file -i -- $FILE + echo Autoformatting $FILE with $CLANG_FORMAT_EXECUTABLE + $CLANG_FORMAT_EXECUTABLE -style=file -i -- $FILE git add -- $FILE fi done From 1ba99d242788b50b26b739d571d4866a6c2d0fed Mon Sep 17 00:00:00 2001 From: Avamander Date: Mon, 3 May 2021 14:12:33 +0300 Subject: [PATCH 056/173] Made the pre-commit hook fail explicitly when the executable doesn't exist --- hooks/pre-commit | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/hooks/pre-commit b/hooks/pre-commit index 15961f19a0..5e10aa19a1 100755 --- a/hooks/pre-commit +++ b/hooks/pre-commit @@ -5,6 +5,12 @@ else CLANG_FORMAT_EXECUTABLE="clang-format-11" fi +if ! command -v $CLANG_FORMAT_EXECUTABLE &> /dev/null +then + echo $CLANG_FORMAT_EXECUTABLE does not exist, make sure to install it + exit 1 +fi + for FILE in $(git diff --cached --name-only) do if [[ "$FILE" =~ src/[A-Za-z0-9\ \-]+*\.(c|h|cpp|cc)$ ]]; then From ce26ef8a67f75e551975942c3217a4fd6846f591 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-Fran=C3=A7ois=20Milants?= Date: Sat, 24 Jul 2021 20:23:44 +0200 Subject: [PATCH 057/173] Add PineTimeStyle in the list of watchface in README.md --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index bd23c8678b..4ff21286d0 100644 --- a/README.md +++ b/README.md @@ -41,9 +41,10 @@ As of now, here is the list of achievements of this project: * Brightness settings * Flashlight * Settings - - 2 watch faces: + - 3 watch faces: * Digital * Analog + * [PineTimeStyle](https://wiki.pine64.org/wiki/PineTimeStyle) - Multiple 'apps' : * Music (control the playback of the music on your phone) * Heart rate (controls the heart rate sensor and display current heartbeat) From 34949a47c59e7a4d8f67a0188bba6d08a046340d Mon Sep 17 00:00:00 2001 From: Riku Isokoski Date: Sat, 24 Jul 2021 21:29:10 +0300 Subject: [PATCH 058/173] Dim screen before sleep (#464) * Implement dimming --- src/displayapp/DisplayApp.cpp | 13 +++++++++- src/displayapp/Messages.h | 6 +++-- src/systemtask/SystemTask.cpp | 45 ++++++++++++++++++++++++++--------- src/systemtask/SystemTask.h | 7 +++--- 4 files changed, 54 insertions(+), 17 deletions(-) diff --git a/src/displayapp/DisplayApp.cpp b/src/displayapp/DisplayApp.cpp index b09483937e..b5ad26f030 100644 --- a/src/displayapp/DisplayApp.cpp +++ b/src/displayapp/DisplayApp.cpp @@ -165,8 +165,15 @@ void DisplayApp::Refresh() { lastWakeTime = xTaskGetTickCount(); if (messageReceived) { switch (msg) { - case Messages::GoToSleep: + case Messages::DimScreen: + // Backup brightness is the brightness to return to after dimming or sleeping brightnessController.Backup(); + brightnessController.Set(Controllers::BrightnessController::Levels::Low); + break; + case Messages::RestoreBrightness: + brightnessController.Restore(); + break; + case Messages::GoToSleep: while (brightnessController.Level() != Controllers::BrightnessController::Levels::Off) { brightnessController.Lower(); vTaskDelay(100); @@ -230,6 +237,8 @@ void DisplayApp::Refresh() { } } else if (returnTouchEvent == gesture) { LoadApp(returnToApp, returnDirection); + brightnessController.Set(settingsController.GetBrightness()); + brightnessController.Backup(); } else if (touchMode == TouchModes::Gestures) { if (gesture == TouchEvents::Tap) { lvgl.SetNewTapEvent(info.x, info.y); @@ -243,6 +252,8 @@ void DisplayApp::Refresh() { } else { if (!currentScreen->OnButtonPushed()) { LoadApp(returnToApp, returnDirection); + brightnessController.Set(settingsController.GetBrightness()); + brightnessController.Backup(); } } break; diff --git a/src/displayapp/Messages.h b/src/displayapp/Messages.h index ce65f84645..322505e6fe 100644 --- a/src/displayapp/Messages.h +++ b/src/displayapp/Messages.h @@ -13,8 +13,10 @@ namespace Pinetime { NewNotification, TimerDone, BleFirmwareUpdateStarted, - UpdateTimeOut + UpdateTimeOut, + DimScreen, + RestoreBrightness }; } } -} \ No newline at end of file +} diff --git a/src/systemtask/SystemTask.cpp b/src/systemtask/SystemTask.cpp index 7efd1d6bdb..8915ce7448 100644 --- a/src/systemtask/SystemTask.cpp +++ b/src/systemtask/SystemTask.cpp @@ -33,6 +33,13 @@ namespace { } } +void DimTimerCallback(TimerHandle_t xTimer) { + + NRF_LOG_INFO("DimTimerCallback"); + auto sysTask = static_cast(pvTimerGetTimerID(xTimer)); + sysTask->OnDim(); +} + void IdleTimerCallback(TimerHandle_t xTimer) { NRF_LOG_INFO("IdleTimerCallback"); @@ -105,7 +112,7 @@ void SystemTask::Work() { APP_GPIOTE_INIT(2); app_timer_init(); - + spi.Init(); spiNorFlash.Init(); spiNorFlash.Wakeup(); @@ -114,7 +121,6 @@ void SystemTask::Work() { nimbleController.Init(); nimbleController.StartAdvertising(); - brightnessController.Init(); lcd.Init(); twiMaster.Init(); @@ -179,8 +185,9 @@ void SystemTask::Work() { nrf_gpio_cfg_sense_input(pinPowerPresentIrq, NRF_GPIO_PIN_NOPULL, NRF_GPIO_PIN_SENSE_HIGH); } - idleTimer = xTimerCreate("idleTimer", pdMS_TO_TICKS(settingsController.GetScreenTimeOut()), pdFALSE, this, IdleTimerCallback); - xTimerStart(idleTimer, 0); + idleTimer = xTimerCreate("idleTimer", pdMS_TO_TICKS(2000), pdFALSE, this, IdleTimerCallback); + dimTimer = xTimerCreate("dimTimer", pdMS_TO_TICKS(settingsController.GetScreenTimeOut() - 2000), pdFALSE, this, DimTimerCallback); + xTimerStart(dimTimer, 0); // Suppress endless loop diagnostic #pragma clang diagnostic push @@ -208,7 +215,7 @@ void SystemTask::Work() { doNotGoToSleep = true; break; case Messages::UpdateTimeOut: - xTimerChangePeriod(idleTimer, pdMS_TO_TICKS(settingsController.GetScreenTimeOut()), 0); + xTimerChangePeriod(dimTimer, pdMS_TO_TICKS(settingsController.GetScreenTimeOut() - 2000), 0); break; case Messages::GoToRunning: spi.Wakeup(); @@ -220,7 +227,7 @@ void SystemTask::Work() { } nimbleController.StartAdvertising(); - xTimerStart(idleTimer, 0); + xTimerStart(dimTimer, 0); spiNorFlash.Wakeup(); lcd.Wakeup(); @@ -230,6 +237,7 @@ void SystemTask::Work() { isSleeping = false; isWakingUp = false; + isDimmed = false; break; case Messages::TouchWakeUp: { twiMaster.Wakeup(); @@ -246,6 +254,7 @@ void SystemTask::Work() { isGoingToSleep = true; NRF_LOG_INFO("[systemtask] Going to sleep"); xTimerStop(idleTimer, 0); + xTimerStop(dimTimer, 0); displayApp.PushMessage(Pinetime::Applications::Display::Messages::GoToSleep); heartRateApp.PushMessage(Pinetime::Applications::HeartRateTask::Messages::GoToSleep); break; @@ -283,13 +292,15 @@ void SystemTask::Work() { NVIC_SystemReset(); } doNotGoToSleep = false; - xTimerStart(idleTimer, 0); + xTimerStart(dimTimer, 0); break; case Messages::OnTouchEvent: ReloadIdleTimer(); + displayApp.PushMessage(Pinetime::Applications::Display::Messages::TouchEvent); break; case Messages::OnButtonEvent: ReloadIdleTimer(); + displayApp.PushMessage(Pinetime::Applications::Display::Messages::ButtonPushed); break; case Messages::OnDisplayTaskSleeping: if (BootloaderVersion::IsValid()) { @@ -381,7 +392,6 @@ void SystemTask::OnButtonPushed() { if (!isSleeping) { NRF_LOG_INFO("[systemtask] Button pushed"); PushMessage(Messages::OnButtonEvent); - displayApp.PushMessage(Pinetime::Applications::Display::Messages::ButtonPushed); } else { if (!isWakingUp) { NRF_LOG_INFO("[systemtask] Button pushed, waking up"); @@ -402,7 +412,6 @@ void SystemTask::OnTouchEvent() { return; if (!isSleeping) { PushMessage(Messages::OnTouchEvent); - displayApp.PushMessage(Pinetime::Applications::Display::Messages::TouchEvent); } else if (!isWakingUp) { if (settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::SingleTap) or settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::DoubleTap)) { @@ -430,6 +439,15 @@ void SystemTask::PushMessage(System::Messages msg) { } } +void SystemTask::OnDim() { + if (doNotGoToSleep) + return; + NRF_LOG_INFO("Dim timeout -> Dim screen") + displayApp.PushMessage(Pinetime::Applications::Display::Messages::DimScreen); + xTimerStart(idleTimer, 0); + isDimmed = true; +} + void SystemTask::OnIdle() { if (doNotGoToSleep) return; @@ -437,8 +455,13 @@ void SystemTask::OnIdle() { PushMessage(Messages::GoToSleep); } -void SystemTask::ReloadIdleTimer() const { +void SystemTask::ReloadIdleTimer() { if (isSleeping || isGoingToSleep) return; - xTimerReset(idleTimer, 0); + if (isDimmed) { + displayApp.PushMessage(Pinetime::Applications::Display::Messages::RestoreBrightness); + isDimmed = false; + } + xTimerReset(dimTimer, 0); + xTimerStop(idleTimer, 0); } diff --git a/src/systemtask/SystemTask.h b/src/systemtask/SystemTask.h index f8cf63705c..ba4342987b 100644 --- a/src/systemtask/SystemTask.h +++ b/src/systemtask/SystemTask.h @@ -71,6 +71,7 @@ namespace Pinetime { void OnTouchEvent(); void OnIdle(); + void OnDim(); Pinetime::Controllers::NimbleController& nimble() { return nimbleController; @@ -99,6 +100,7 @@ namespace Pinetime { std::atomic isSleeping {false}; std::atomic isGoingToSleep {false}; std::atomic isWakingUp {false}; + std::atomic isDimmed {false}; Pinetime::Drivers::Watchdog& watchdog; Pinetime::Controllers::NotificationManager& notificationManager; Pinetime::Controllers::MotorController& motorController; @@ -106,8 +108,6 @@ namespace Pinetime { Pinetime::Drivers::Bma421& motionSensor; Pinetime::Controllers::Settings& settingsController; Pinetime::Controllers::HeartRateController& heartRateController; - - Controllers::BrightnessController brightnessController; Pinetime::Controllers::MotionController& motionController; Pinetime::Applications::DisplayApp& displayApp; @@ -126,9 +126,10 @@ namespace Pinetime { static void Process(void* instance); void Work(); - void ReloadIdleTimer() const; + void ReloadIdleTimer(); bool isBleDiscoveryTimerRunning = false; uint8_t bleDiscoveryTimer = 0; + TimerHandle_t dimTimer; TimerHandle_t idleTimer; bool doNotGoToSleep = false; From ec2469a6c1efea44692cf5e3a90160f96a6013d3 Mon Sep 17 00:00:00 2001 From: Riku Isokoski Date: Sun, 25 Jul 2021 17:54:05 +0300 Subject: [PATCH 059/173] Code cleanup (#466) * Code cleanup * Remove override again --- src/displayapp/DisplayApp.cpp | 12 +++---- src/displayapp/screens/Label.h | 4 +-- src/displayapp/screens/Motion.cpp | 14 ++++---- src/displayapp/screens/Motion.h | 6 +--- src/displayapp/screens/PineTimeStyle.cpp | 36 +++++++++---------- src/displayapp/screens/Steps.cpp | 19 +++++----- src/displayapp/screens/SystemInfo.cpp | 5 --- src/displayapp/screens/SystemInfo.h | 5 +-- .../screens/settings/QuickSettings.cpp | 6 +--- .../screens/settings/QuickSettings.h | 1 - 10 files changed, 42 insertions(+), 66 deletions(-) diff --git a/src/displayapp/DisplayApp.cpp b/src/displayapp/DisplayApp.cpp index b5ad26f030..d4a73f5ee7 100644 --- a/src/displayapp/DisplayApp.cpp +++ b/src/displayapp/DisplayApp.cpp @@ -202,7 +202,7 @@ void DisplayApp::Refresh() { break; case Messages::TimerDone: if (currentApp == Apps::Timer) { - auto *timer = static_cast(currentScreen.get()); + auto* timer = static_cast(currentScreen.get()); timer->setDone(); } else { LoadApp(Apps::Timer, DisplayApp::FullRefreshDirections::Down); @@ -268,7 +268,7 @@ void DisplayApp::Refresh() { } } - if(nextApp != Apps::None) { + if (nextApp != Apps::None) { LoadApp(nextApp, nextDirection); nextApp = Apps::None; } @@ -383,8 +383,8 @@ void DisplayApp::LoadApp(Apps app, DisplayApp::FullRefreshDirections direction) ReturnApp(Apps::Settings, FullRefreshDirections::Down, TouchEvents::SwipeDown); break; case Apps::SysInfo: - currentScreen = - std::make_unique(this, dateTimeController, batteryController, brightnessController, bleController, watchdog, motionController); + currentScreen = std::make_unique( + this, dateTimeController, batteryController, brightnessController, bleController, watchdog, motionController); ReturnApp(Apps::Settings, FullRefreshDirections::Down, TouchEvents::SwipeDown); break; case Apps::FlashLight: @@ -429,7 +429,7 @@ void DisplayApp::IdleState() { } void DisplayApp::PushMessage(Messages msg) { - if(in_isr()) { + if (in_isr()) { BaseType_t xHigherPriorityTaskWoken; xHigherPriorityTaskWoken = pdFALSE; xQueueSendFromISR(msgQueue, &msg, &xHigherPriorityTaskWoken); @@ -471,7 +471,7 @@ void DisplayApp::SetTouchMode(DisplayApp::TouchModes mode) { } void DisplayApp::PushMessageToSystemTask(Pinetime::System::Messages message) { - if(systemTask != nullptr) + if (systemTask != nullptr) systemTask->PushMessage(message); } diff --git a/src/displayapp/screens/Label.h b/src/displayapp/screens/Label.h index 62b80bec7e..834f8c8804 100644 --- a/src/displayapp/screens/Label.h +++ b/src/displayapp/screens/Label.h @@ -15,8 +15,6 @@ namespace Pinetime { bool Refresh() override; private: - bool running = true; - lv_obj_t* labelText = nullptr; lv_point_t pageIndicatorBasePoints[2]; lv_point_t pageIndicatorPoints[2]; @@ -25,4 +23,4 @@ namespace Pinetime { }; } } -} \ No newline at end of file +} diff --git a/src/displayapp/screens/Motion.cpp b/src/displayapp/screens/Motion.cpp index a8bb3c1879..43a5575e93 100644 --- a/src/displayapp/screens/Motion.cpp +++ b/src/displayapp/screens/Motion.cpp @@ -32,11 +32,10 @@ Motion::Motion(Pinetime::Applications::DisplayApp* app, Controllers::MotionContr lv_label_set_align(label, LV_LABEL_ALIGN_CENTER); lv_obj_align(label, NULL, LV_ALIGN_IN_TOP_MID, 0, 10); lv_label_set_recolor(label, true); - + labelStep = lv_label_create(lv_scr_act(), NULL); lv_obj_align(labelStep, chart, LV_ALIGN_IN_BOTTOM_LEFT, 0, 0); lv_label_set_text(labelStep, "Steps ---"); - } Motion::~Motion() { @@ -50,13 +49,12 @@ bool Motion::Refresh() { lv_label_set_text_fmt(labelStep, "Steps %lu", motionController.NbSteps()); - lv_label_set_text_fmt(label, "X #FF0000 %d# Y #008000 %d# Z #FFFF00 %d#", motionController.X() / 0x10, motionController.Y() / 0x10, motionController.Z() / 0x10); + lv_label_set_text_fmt(label, + "X #FF0000 %d# Y #008000 %d# Z #FFFF00 %d#", + motionController.X() / 0x10, + motionController.Y() / 0x10, + motionController.Z() / 0x10); lv_obj_align(label, NULL, LV_ALIGN_IN_TOP_MID, 0, 10); return running; } - -bool Motion::OnButtonPushed() { - running = false; - return true; -} diff --git a/src/displayapp/screens/Motion.h b/src/displayapp/screens/Motion.h index 132b20ec5c..7e65197b6a 100644 --- a/src/displayapp/screens/Motion.h +++ b/src/displayapp/screens/Motion.h @@ -18,7 +18,6 @@ namespace Pinetime { ~Motion() override; bool Refresh() override; - bool OnButtonPushed() override; private: Controllers::MotionController& motionController; @@ -29,10 +28,7 @@ namespace Pinetime { lv_obj_t* label; lv_obj_t* labelStep; - static constexpr uint8_t nbStepsBufferSize = 9; - char nbStepsBuffer[nbStepsBufferSize + 1]; - bool running = true; }; } } -} \ No newline at end of file +} diff --git a/src/displayapp/screens/PineTimeStyle.cpp b/src/displayapp/screens/PineTimeStyle.cpp index 591f3a49fc..0efb4dc300 100644 --- a/src/displayapp/screens/PineTimeStyle.cpp +++ b/src/displayapp/screens/PineTimeStyle.cpp @@ -264,23 +264,23 @@ bool PineTimeStyle::Refresh() { char hoursChar[3]; char ampmChar[5]; - if (settingsController.GetClockType() == Controllers::Settings::ClockType::H24) { - sprintf(hoursChar, "%02d", hour); - } else { - if (hour == 0 && hour != 12) { - hour = 12; - sprintf(ampmChar, "A\nM"); - } else if (hour == 12 && hour != 0) { - hour = 12; - sprintf(ampmChar, "P\nM"); - } else if (hour < 12 && hour != 0) { - sprintf(ampmChar, "A\nM"); - } else if (hour > 12 && hour != 0) { - hour = hour - 12; - sprintf(ampmChar, "P\nM"); - } - sprintf(hoursChar, "%02d", hour); + if (settingsController.GetClockType() == Controllers::Settings::ClockType::H24) { + sprintf(hoursChar, "%02d", hour); + } else { + if (hour == 0 && hour != 12) { + hour = 12; + sprintf(ampmChar, "A\nM"); + } else if (hour == 12 && hour != 0) { + hour = 12; + sprintf(ampmChar, "P\nM"); + } else if (hour < 12 && hour != 0) { + sprintf(ampmChar, "A\nM"); + } else if (hour > 12 && hour != 0) { + hour = hour - 12; + sprintf(ampmChar, "P\nM"); } + sprintf(hoursChar, "%02d", hour); + } if (hoursChar[0] != displayedChar[0] || hoursChar[1] != displayedChar[1] || minutesChar[0] != displayedChar[2] || minutesChar[1] != displayedChar[3]) { @@ -292,9 +292,9 @@ bool PineTimeStyle::Refresh() { char hourStr[3]; char minStr[3]; - if (settingsController.GetClockType() == Controllers::Settings::ClockType::H12) { + if (settingsController.GetClockType() == Controllers::Settings::ClockType::H12) { lv_label_set_text(timeAMPM, ampmChar); - } + } /* Display the time as 2 pairs of digits */ sprintf(hourStr, "%c%c", hoursChar[0], hoursChar[1]); diff --git a/src/displayapp/screens/Steps.cpp b/src/displayapp/screens/Steps.cpp index 6aabd30e75..d72e8333aa 100644 --- a/src/displayapp/screens/Steps.cpp +++ b/src/displayapp/screens/Steps.cpp @@ -5,13 +5,10 @@ using namespace Pinetime::Applications::Screens; -Steps::Steps( - Pinetime::Applications::DisplayApp *app, - Controllers::MotionController& motionController, - Controllers::Settings &settingsController) - : Screen(app), - motionController{motionController}, - settingsController{settingsController} { +Steps::Steps(Pinetime::Applications::DisplayApp* app, + Controllers::MotionController& motionController, + Controllers::Settings& settingsController) + : Screen(app), motionController {motionController}, settingsController {settingsController} { stepsArc = lv_arc_create(lv_scr_act(), nullptr); @@ -34,12 +31,12 @@ Steps::Steps( lv_label_set_text_fmt(lSteps, "%li", stepsCount); lv_obj_align(lSteps, nullptr, LV_ALIGN_CENTER, 0, -20); - lv_obj_t * lstepsL = lv_label_create(lv_scr_act(), nullptr); + lv_obj_t* lstepsL = lv_label_create(lv_scr_act(), nullptr); lv_obj_set_style_local_text_color(lstepsL, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x111111)); lv_label_set_text_static(lstepsL, "Steps"); lv_obj_align(lstepsL, lSteps, LV_ALIGN_OUT_BOTTOM_MID, 0, 10); - lv_obj_t * lstepsGoal = lv_label_create(lv_scr_act(), nullptr); + lv_obj_t* lstepsGoal = lv_label_create(lv_scr_act(), nullptr); lv_obj_set_style_local_text_color(lstepsGoal, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_CYAN); lv_label_set_text_fmt(lstepsGoal, "Goal\n%lu", settingsController.GetStepsGoal()); lv_label_set_align(lstepsGoal, LV_LABEL_ALIGN_CENTER); @@ -59,10 +56,10 @@ Steps::~Steps() { bool Steps::Refresh() { stepsCount = motionController.NbSteps(); - + lv_label_set_text_fmt(lSteps, "%li", stepsCount); lv_obj_align(lSteps, nullptr, LV_ALIGN_CENTER, 0, -20); - + lv_arc_set_value(stepsArc, int16_t(500 * stepsCount / settingsController.GetStepsGoal())); return running; diff --git a/src/displayapp/screens/SystemInfo.cpp b/src/displayapp/screens/SystemInfo.cpp index f5bf0cc9e5..853434dbba 100644 --- a/src/displayapp/screens/SystemInfo.cpp +++ b/src/displayapp/screens/SystemInfo.cpp @@ -70,11 +70,6 @@ bool SystemInfo::Refresh() { return running; } -bool SystemInfo::OnButtonPushed() { - running = false; - return true; -} - bool SystemInfo::OnTouchEvent(Pinetime::Applications::TouchEvents event) { return screens.OnTouchEvent(event); } diff --git a/src/displayapp/screens/SystemInfo.h b/src/displayapp/screens/SystemInfo.h index 9d471f612e..a9ad652d41 100644 --- a/src/displayapp/screens/SystemInfo.h +++ b/src/displayapp/screens/SystemInfo.h @@ -31,12 +31,9 @@ namespace Pinetime { Pinetime::Controllers::MotionController& motionController); ~SystemInfo() override; bool Refresh() override; - bool OnButtonPushed() override; bool OnTouchEvent(TouchEvents event) override; private: - bool running = true; - Pinetime::Controllers::DateTime& dateTimeController; Pinetime::Controllers::Battery& batteryController; Pinetime::Controllers::BrightnessController& brightnessController; @@ -56,4 +53,4 @@ namespace Pinetime { }; } } -} \ No newline at end of file +} diff --git a/src/displayapp/screens/settings/QuickSettings.cpp b/src/displayapp/screens/settings/QuickSettings.cpp index 3fb9c70bdd..2cd24876f3 100644 --- a/src/displayapp/screens/settings/QuickSettings.cpp +++ b/src/displayapp/screens/settings/QuickSettings.cpp @@ -27,7 +27,7 @@ QuickSettings::QuickSettings(Pinetime::Applications::DisplayApp* app, batteryController {batteryController}, dateTimeController {dateTimeController}, brightness {brightness}, - motorController{motorController}, + motorController {motorController}, settingsController {settingsController} { // Time @@ -154,10 +154,6 @@ void QuickSettings::OnButtonEvent(lv_obj_t* object, lv_event_t event) { } } -bool QuickSettings::OnTouchEvent(Pinetime::Applications::TouchEvents event) { - return false; -} - bool QuickSettings::Refresh() { return running; } diff --git a/src/displayapp/screens/settings/QuickSettings.h b/src/displayapp/screens/settings/QuickSettings.h index a14f46bf32..e0fc0a87b3 100644 --- a/src/displayapp/screens/settings/QuickSettings.h +++ b/src/displayapp/screens/settings/QuickSettings.h @@ -29,7 +29,6 @@ namespace Pinetime { bool Refresh() override; - bool OnTouchEvent(Pinetime::Applications::TouchEvents event) override; void OnButtonEvent(lv_obj_t* object, lv_event_t event); void UpdateScreen(); From 7a6ceadb24a57ae041d02f5a73f484f587517e32 Mon Sep 17 00:00:00 2001 From: Riku Isokoski Date: Sun, 25 Jul 2021 18:50:55 +0300 Subject: [PATCH 060/173] Update documentation (#467) * Fix and update documentation * Add newlines --- README.md | 44 +++++++++++++++--------- doc/gettingStarted/gettingStarted-1.0.md | 31 ++++++++++------- 2 files changed, 46 insertions(+), 29 deletions(-) diff --git a/README.md b/README.md index 4ff21286d0..d9de40029f 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,3 @@ - # PineTime [![Build PineTime Firmware](https://github.com/JF002/InfiniTime/workflows/Build%20PineTime%20Firmware/badge.svg?branch=master)](https://github.com/JF002/InfiniTime/actions) @@ -12,9 +11,10 @@ The **Pinetime** smartwatch is built around the NRF52832 MCU (512KB Flash, 64KB RAM), a 240*240 LCD display driven by the ST7789 controller, an accelerometer, a heart rate sensor, and a vibration motor. # InfiniTime + ![InfiniTime logo](images/infinitime-logo.jpg "InfiniTime Logo") -The goal of this project is to design an open-source firmware for the Pinetime smartwatch : +The goal of this project is to design an open-source firmware for the Pinetime smartwatch : - Code written in **modern C++**; - Build system based on **CMake**; @@ -36,7 +36,7 @@ As of now, here is the list of achievements of this project: - Heart rate measurements - Step counting - Wake-up on wrist rotation - - Quick actions + - Quick actions * Disable vibration on notification * Brightness settings * Flashlight @@ -46,20 +46,22 @@ As of now, here is the list of achievements of this project: * Analog * [PineTimeStyle](https://wiki.pine64.org/wiki/PineTimeStyle) - Multiple 'apps' : - * Music (control the playback of the music on your phone) - * Heart rate (controls the heart rate sensor and display current heartbeat) + * Music (control the playback of music on your phone) + * Heart rate (measure your heart rate) * Navigation (displays navigation instructions coming from the companion app) * Notification (displays the last notification received) * Paddle (single player pong-like game) - * Two (2048 clone game) - * Stopwatch (with all the necessary functions such as play, pause, lap, stop) - * Motion sensor and step counter (displays the number of steps and the state of the motion sensor in real-time) + * Twos (2048 clone game) + * Stopwatch + * Steps (displays the number of steps taken) + * Timer (set a countdown timer that will notify you when it expires) * Metronome (vibrates to a given bpm with a customizable beats per bar) - User settings: * Display timeout * Wake-up condition * Time format (12/24h) * Default watch face + * Daily step goal * Battery status * Firmware validation * System information @@ -70,18 +72,21 @@ As of now, here is the list of achievements of this project: * **[Experimental]** [WebBLEWatch](https://hubmartin.github.io/WebBLEWatch/) Synchronize time directly from your web browser. [video](https://youtu.be/IakiuhVDdrY) - OTA (Over-the-air) update via BLE - [Bootloader](https://github.com/JF002/pinetime-mcuboot-bootloader) based on [MCUBoot](https://juullabs-oss.github.io/mcuboot/) - + ## Documentation ### Getting started + - [Getting started with InfiniTime 1.0 (quick user guide, update bootloader and InfiniTime,...)](doc/gettingStarted/gettingStarted-1.0.md) - [Flash, upgrade (OTA), time synchronization,...](doc/gettingStarted/ota-gadgetbridge-nrfconnect.md) ### Develop + - [Generate the fonts and symbols](src/displayapp/fonts/README.md) - [Creating a stopwatch in Pinetime(article)](https://pankajraghav.com/2021/04/03/PINETIME-STOPCLOCK.html) ### Build, flash and debug + - [Project branches](doc/branches.md) - [Versioning](doc/versioning.md) - [Files included in the release notes](doc/filesInReleaseNotes.md) @@ -94,20 +99,23 @@ As of now, here is the list of achievements of this project: - Using files from the releases ### Contribute + - [How to contribute ?](doc/contribute.md) ### API + - [BLE implementation and API](./doc/ble.md) - + ### Architecture and technical topics + - [Memory analysis](./doc/MemoryAnalysis.md) - + ### Using the firmware + - [Integration with Gadgetbridge](doc/companionapps/Gadgetbridge.md) - [Integration with AmazFish](doc/companionapps/Amazfish.md) - [Firmware update, OTA](doc/companionapps/NrfconnectOTA.md) - - + ## TODO - contribute This project is far from being finished, and there are still a lot of things to do for this project to become a firmware usable by the general public. @@ -121,12 +129,13 @@ Here a quick list out of my head of things to do for this project: - Measure power consumption and improve battery life - Improve documentation, take better pictures and video than mine - Improve the UI - - Create companion app for multiple OSes (Linux, Android, iOS) and platforms (desktop, ARM, mobile). Do not forget the other devices from Pine64 like [the Pinephone](https://www.pine64.org/pinephone/) and the [Pinebook Pro](https://www.pine64.org/pinebook-pro/). + - Create companion app for multiple OSes (Linux, Android, iOS) and platforms (desktop, ARM, mobile). Do not forget the other devices from Pine64 like [the Pinephone](https://www.pine64.org/pinephone/) and the [Pinebook Pro](https://www.pine64.org/pinebook-pro/). - Design a simple CI (preferably self-hosted and easy to reproduce). - + Do not hesitate to clone/fork the code, hack it and create pull-requests. I'll do my best to review and merge them :) ## Licenses + This project is released under the GNU General Public License version 3 or, at your option, any later version. It integrates the following projects: @@ -134,8 +143,9 @@ It integrates the following projects: - UI : **[LittleVGL/LVGL](https://lvgl.io/)** under the MIT license - BLE stack : **[NimBLE](https://github.com/apache/mynewt-nimble)** under the Apache 2.0 license - Font : **[Jetbrains Mono](https://www.jetbrains.com/fr-fr/lp/mono/)** under the Apache 2.0 license - -## Credits + +## Credits + I’m not working alone on this project. First, many people create PR for this projects. Then, there is the whole #pinetime community : a lot of people all around the world who are hacking, searching, experimenting and programming the Pinetime. We exchange our ideas, experiments and code in the chat rooms and forums. Here are some people I would like to highlight: diff --git a/doc/gettingStarted/gettingStarted-1.0.md b/doc/gettingStarted/gettingStarted-1.0.md index 2ac22b9762..88ff20724b 100644 --- a/doc/gettingStarted/gettingStarted-1.0.md +++ b/doc/gettingStarted/gettingStarted-1.0.md @@ -1,7 +1,9 @@ # Getting started with InfiniTime 1.0 + On April 22 2021, InfiniTime and Pine64 [announced the release of InfiniTime 1.0](https://www.pine64.org/2021/04/22/its-time-infinitime-1-0/) and the availability of PineTime smartwatches as *enthusiast grade end-user product*. This page aims to guide you with your first step with your new PineTime. ## Firmware, InfiniTime, Bootloader, Recovery firmware, OTA, DFU... What is it? + You might have already seen these words by reading the announcement, release notes, or [the wiki guide](https://wiki.pine64.org/wiki/Upgrade_PineTime_to_InfiniTime_1.0.0) and, you may find them misleading if you're not familiar with the project. Basically, a **firmware** is just a software running on the embedded hardware of a device, the PineTime in this case. @@ -13,9 +15,10 @@ Basically, a **firmware** is just a software running on the embedded hardware of **OTA** and **DFU** refer to the update of the firmware over BLE (**B**luetooth **L**ow **E**nergy). **OTA** means **O**ver **T**he **A**ir, this is a functionality that allows the user to update the firmware how their device using a wireless communication like BLE. When we talk about **DFU** (**D**igital **F**irmware **U**pdate), we refer to the file format and protocol used to send the update of the firmware to the watch over-the-air. InfiniTime implement the (legacy) DFU protocol from Nordic Semiconductor (NRF). ## How to check the version of InfiniTime and the bootloader? + Since September 2020, all PineTimes (devkits or sealed) are flashed using the **[first iteration of the bootloader](https://github.com/lupyuen/pinetime-rust-mynewt/releases/tag/v4.1.7)** and **[InfiniTime 0.7.1](https://github.com/JF002/InfiniTime/releases/tag/0.7.1)**. There was no recovery firmware at that time. -The bootloader only runs when the watch starts (from an empty battery, for example) or after a reset (after a succesful OTA or a manual reset - long push on the button). +The bootloader only runs when the watch starts (from an empty battery, for example) or after a reset (after a successful OTA or a manual reset - long push on the button). You can recognize this first iteration of the bootloader with it greenish **PINETIME** logo. @@ -30,14 +33,14 @@ And for version >= 1.0 : ![InfiniTime 1.0 version](version-1.0.jpg) - -PineTime shipped from June 2020 (to be confirmed) will be flashed with the [new version of the bootloader](https://github.com/JF002/pinetime-mcuboot-bootloader/releases/tag/1.0.0), the [recovery firmware](https://github.com/JF002/InfiniTime/releases/tag/0.14.1) and [InfiniTime 1.0](https://github.com/JF002/InfiniTime/releases/tag/1.0.0). +PineTime shipped from June 2021 (to be confirmed) will be flashed with the [new version of the bootloader](https://github.com/JF002/pinetime-mcuboot-bootloader/releases/tag/1.0.0), the [recovery firmware](https://github.com/JF002/InfiniTime/releases/tag/0.14.1) and [InfiniTime 1.0](https://github.com/JF002/InfiniTime/releases/tag/1.0.0). The bootloader is easily recognizable with it white pine cone that is progressively drawn in green. It also displays its own version on the bottom (1.0.0 as of now). ![Bootloader 1.0](bootloader-1.0.jpg) ## How to update your PineTime? + To update your PineTime, you can use one of the compatible companion applications. Here are the main ones: - **[Amazfish](https://github.com/piggz/harbour-amazfish)** (Desktop Linux, mobile Linux, SailfishOS, runs on the PinebookPro and the Pinephone) @@ -45,36 +48,41 @@ To update your PineTime, you can use one of the compatible companion application - **[Siglo](https://github.com/alexr4535/siglo)** (Linux, GTK based) - **NRFConnect** (closed source, Android & iOS). -See [this page](ota-gadgetbridge-nrfconnect.md) for more info about the OTA procedure using Gadgetbrige and NRFCOnnect. +See [this page](ota-gadgetbridge-nrfconnect.md) for more info about the OTA procedure using Gadgetbridge and NRFConnect. ### From InfiniTime 0.7.1 / old bootloader + If your PineTime is currently running InfiniTime 0.7.1 and the old bootloader, we strongly recommend you update them to more recent version (Bootloader 1.0.0 and InfiniTime 1.0.0 as of now). We also recommend you install the recovery firmware once the bootloader is up-do-date. Using the companion app of your choice, you'll need to apply the OTA procedure for these 3 firmwares in this sequence (failing to follow this specific order might temporarily or permanently brick your device): - + 1. Flash the latest version of InfiniTime. The file to upload is named **pinetime-mcuboot-app-dfu-x.y.z.zip**. Here is the link to [InfiniTime 1.0](https://github.com/JF002/InfiniTime/releases/download/1.0.0/pinetime-mcuboot-app-dfu-1.0.0.zip). - 2. Update the bootloader by applying the OTA procedure with the file named [**reloader-mcuboot.zip** from the repo of the bootloader](https://github.com/JF002/pinetime-mcuboot-bootloader/releases/download/1.0.0/reloader-mcuboot.zip). + 2. Update the bootloader by applying the OTA procedure with the file named [**reloader-mcuboot.zip** from the repo of the bootloader](https://github.com/JF002/pinetime-mcuboot-bootloader/releases/download/1.0.0/reloader-mcuboot.zip). 3. Install the recovery firmware by applying the OTA procedure with the file named [**pinetime-mcuboot-recovery-loader-dfu-0.14.1.zip** from the version 0.14.1 of InfiniTime](https://github.com/JF002/InfiniTime/releases/download/0.14.1/pinetime-mcuboot-recovery-loader-dfu-0.14.1.zip). You'll find more info about this process in [this wiki page](https://wiki.pine64.org/wiki/Upgrade_PineTime_to_InfiniTime_1.0.0). You can also see the procedure in video [here](https://video.codingfield.com/videos/watch/831077c5-16f3-47b4-9b2b-c4bbfecc6529) and [here (from Amazfish)](https://video.codingfield.com/videos/watch/f7bffb3d-a6a1-43c4-8f01-f4aeff4adf9e) ### From version > 1.0 + If you are already running the new "1.0.0" bootloader, all you have to do is update your version of InfiniTime when it'll be available. We'll write specific instructions when (if) we release a new version of the bootloader. ### Firmware validation -The bootloader requires a (manual) validation of the firmware. If the watch reset with an updated firmware that was not validated, the bootloader will consider it as non-functionning and will revert to the previous version of the firmware. This is a safety feature to prevent bricking your device with a faulty firmware. + +The bootloader requires a (manual) validation of the firmware. If the watch reset with an updated firmware that was not validated, the bootloader will consider it as non-functioning and will revert to the previous version of the firmware. This is a safety feature to prevent bricking your device with a faulty firmware. You can validate your updated firmware on InfiniTime >= 1.0 by following this simple procedure: - + - From the watchface, swipe **right** to display the *Quick Actions menu* - Open the **Settings** app by tapping the *gear* icon on the bottom right - Swipe down and tap on the entry named **Firmware** - This app shows the version that is currently running. If it's not validated yet, it displays 2 buttons: - **Validate** to validate your firmware - **Reset** to reset the watch and revert to the previously running version of the firmware - + ## InfiniTime 1.0 quick user guide + ### Setting the time + By default, InfiniTime starts on the digital watchface. It'll probably display the epoch time (1 Jan 1970, 00:00). The time will be automatically synchronized once you connect on of the companion app to your PineTime using BLE connectivity. InfiniTime does not provide any way to manually set the time for now. ### Navigation in the menu @@ -90,7 +98,7 @@ By default, InfiniTime starts on the digital watchface. It'll probably display t - Start the **flashlight** app - Enable/disable vibrations on notifications (Do Not Disturb mode) - Enter the **settings** menu - - Settings + - Settings - Display timeout - Wake up event (Tap, wrist rotation) - Time format (12/24H) @@ -104,9 +112,8 @@ By default, InfiniTime starts on the digital watchface. It'll probably display t Most of the time, the bootloader just runs without your intervention (update and load the firmware). However, you can enable 2 functionalities using the push button: - + - Push the button until the pine cone is drawn in **blue** to force the rollback of the previous version of the firmware, even if you've already validated the updated one - Push the button until the pine cone is drawn in **red** to load the recovery firmware. This recovery firmware only provides BLE connectivity and OTA functionality. More info about the bootloader in [its project page](https://github.com/JF002/pinetime-mcuboot-bootloader/blob/master/README.md). - From a69be1520a61a9153be8e7f79bf6ad9972a9cf6b Mon Sep 17 00:00:00 2001 From: Riku Isokoski Date: Fri, 9 Jul 2021 17:35:52 +0300 Subject: [PATCH 061/173] Add task state info to SystemInfo --- src/displayapp/screens/SystemInfo.cpp | 42 ++++++++++++++++++++------- 1 file changed, 32 insertions(+), 10 deletions(-) diff --git a/src/displayapp/screens/SystemInfo.cpp b/src/displayapp/screens/SystemInfo.cpp index 853434dbba..2bb8481882 100644 --- a/src/displayapp/screens/SystemInfo.cpp +++ b/src/displayapp/screens/SystemInfo.cpp @@ -207,28 +207,50 @@ bool SystemInfo::sortById(const TaskStatus_t& lhs, const TaskStatus_t& rhs) { std::unique_ptr SystemInfo::CreateScreen4() { TaskStatus_t tasksStatus[7]; lv_obj_t* infoTask = lv_table_create(lv_scr_act(), NULL); - lv_table_set_col_cnt(infoTask, 3); + lv_table_set_col_cnt(infoTask, 4); lv_table_set_row_cnt(infoTask, 8); - lv_obj_set_pos(infoTask, 10, 10); + lv_obj_set_pos(infoTask, 0, 10); lv_table_set_cell_value(infoTask, 0, 0, "#"); - lv_table_set_col_width(infoTask, 0, 50); - lv_table_set_cell_value(infoTask, 0, 1, "Task"); - lv_table_set_col_width(infoTask, 1, 80); - lv_table_set_cell_value(infoTask, 0, 2, "Free"); - lv_table_set_col_width(infoTask, 2, 90); + lv_table_set_col_width(infoTask, 0, 30); + lv_table_set_cell_value(infoTask, 0, 1, "S"); // State + lv_table_set_col_width(infoTask, 1, 30); + lv_table_set_cell_value(infoTask, 0, 2, "Task"); + lv_table_set_col_width(infoTask, 2, 80); + lv_table_set_cell_value(infoTask, 0, 3, "Free"); + lv_table_set_col_width(infoTask, 3, 90); auto nb = uxTaskGetSystemState(tasksStatus, 7, nullptr); std::sort(tasksStatus, tasksStatus + nb, sortById); for (uint8_t i = 0; i < nb; i++) { lv_table_set_cell_value(infoTask, i + 1, 0, std::to_string(tasksStatus[i].xTaskNumber).c_str()); - lv_table_set_cell_value(infoTask, i + 1, 1, tasksStatus[i].pcTaskName); + char state[2] = {0}; + switch (tasksStatus[i].eCurrentState) { + case eReady: + case eRunning: + state[0] = 'R'; + break; + case eBlocked: + state[0] = 'B'; + break; + case eSuspended: + state[0] = 'S'; + break; + case eDeleted: + state[0] = 'D'; + break; + default: + state[0] = 'I'; // Invalid + break; + } + lv_table_set_cell_value(infoTask, i + 1, 1, state); + lv_table_set_cell_value(infoTask, i + 1, 2, tasksStatus[i].pcTaskName); if (tasksStatus[i].usStackHighWaterMark < 20) { std::string str1 = std::to_string(tasksStatus[i].usStackHighWaterMark) + " low"; - lv_table_set_cell_value(infoTask, i + 1, 2, str1.c_str()); + lv_table_set_cell_value(infoTask, i + 1, 3, str1.c_str()); } else { - lv_table_set_cell_value(infoTask, i + 1, 2, std::to_string(tasksStatus[i].usStackHighWaterMark).c_str()); + lv_table_set_cell_value(infoTask, i + 1, 3, std::to_string(tasksStatus[i].usStackHighWaterMark).c_str()); } } return std::make_unique(3, 5, app, infoTask); From f2f22184b08ce8f43c43f98e11dec88433868ec6 Mon Sep 17 00:00:00 2001 From: Riku Isokoski Date: Tue, 13 Jul 2021 16:30:24 +0300 Subject: [PATCH 062/173] Add new unique icons for some apps --- src/displayapp/fonts/README.md | 2 +- src/displayapp/fonts/jetbrains_mono_bold_20.c | 111 +++++++++++------- src/displayapp/screens/ApplicationList.cpp | 2 +- src/displayapp/screens/Symbols.h | 3 + .../screens/settings/SettingWakeUp.cpp | 2 +- .../screens/settings/SettingWatchFace.cpp | 4 +- src/displayapp/screens/settings/Settings.cpp | 4 +- 7 files changed, 79 insertions(+), 49 deletions(-) diff --git a/src/displayapp/fonts/README.md b/src/displayapp/fonts/README.md index ec4beb88fb..8a26084613 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` + 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` * 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 98243bb4da..d8705528ce 100644 --- a/src/displayapp/fonts/jetbrains_mono_bold_20.c +++ b/src/displayapp/fonts/jetbrains_mono_bold_20.c @@ -734,6 +734,15 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0xff, 0x7, 0xef, 0xf0, 0x10, 0xff, 0x0, 0x3, 0xc0, 0x0, + /* U+F015 "" */ + 0x0, 0x38, 0xe0, 0x0, 0xf9, 0xc0, 0x3, 0xfb, + 0x80, 0x1e, 0x3f, 0x0, 0x79, 0x3e, 0x1, 0xe7, + 0x3c, 0xf, 0x9f, 0xbc, 0x3c, 0xff, 0x9e, 0xf3, + 0xff, 0x9e, 0xcf, 0xff, 0x98, 0x3f, 0xff, 0x80, + 0x7f, 0xff, 0x0, 0xfc, 0x7e, 0x1, 0xf8, 0xfc, + 0x3, 0xf1, 0xf8, 0x7, 0xe3, 0xf0, 0xf, 0xc7, + 0xe0, + /* U+F017 "" */ 0x3, 0xf8, 0x1, 0xff, 0xc0, 0x7f, 0xfc, 0x1f, 0xff, 0xc7, 0xf1, 0xfc, 0xfe, 0x3f, 0x9f, 0xc7, @@ -823,6 +832,14 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0xdf, 0x9e, 0x38, 0xf3, 0x7, 0x6, 0x0, 0xe0, 0x0, 0x1c, 0x0, 0x3, 0x80, 0x0, 0x70, 0x0, + /* U+F06E "" */ + 0x0, 0xfe, 0x0, 0xf, 0xff, 0x80, 0x3e, 0xf, + 0x80, 0xf8, 0xf, 0x83, 0xe3, 0x8f, 0x8f, 0x87, + 0x8f, 0xbf, 0x1f, 0x9f, 0xfe, 0xff, 0x3f, 0xfd, + 0xfe, 0x7e, 0xf9, 0xf8, 0xf8, 0xf9, 0xe3, 0xe0, + 0xf8, 0xf, 0x80, 0xf8, 0x3e, 0x0, 0xff, 0xf0, + 0x0, 0x3f, 0x80, 0x0, + /* U+F095 "" */ 0x0, 0x0, 0x0, 0x0, 0x3e, 0x0, 0x7, 0xf0, 0x0, 0x7f, 0x0, 0x7, 0xf0, 0x0, 0xff, 0x0, @@ -861,6 +878,13 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x1, 0xf8, 0x0, 0x9f, 0xc0, 0xf, 0xfc, 0x0, 0x7f, 0xc0, 0x7, 0xf8, 0x0, 0x1f, 0x0, 0x0, + /* U+F201 "" */ + 0x40, 0x0, 0x7, 0x0, 0x0, 0x38, 0x1, 0xf9, + 0xc0, 0x7, 0xce, 0x18, 0x1e, 0x71, 0xe1, 0xf3, + 0x9f, 0x9d, 0x9d, 0xff, 0xc4, 0xe6, 0x7c, 0x7, + 0x1, 0xc0, 0x38, 0x0, 0x1, 0xc0, 0x0, 0xe, + 0x0, 0x0, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xe0, + /* U+F21E "" */ 0x1e, 0x7, 0x83, 0xf9, 0xfe, 0x7f, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xcf, 0xff, 0xfc, @@ -1182,42 +1206,45 @@ static const lv_font_fmt_txt_glyph_dsc_t glyph_dsc[] = { {.bitmap_index = 2484, .adv_w = 192, .box_w = 10, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, {.bitmap_index = 2498, .adv_w = 192, .box_w = 9, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, {.bitmap_index = 2511, .adv_w = 320, .box_w = 20, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 2561, .adv_w = 320, .box_w = 19, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 2609, .adv_w = 320, .box_w = 20, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 2659, .adv_w = 240, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 2688, .adv_w = 360, .box_w = 23, .box_h = 19, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 2743, .adv_w = 280, .box_w = 18, .box_h = 17, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 2782, .adv_w = 320, .box_w = 20, .box_h = 17, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 2825, .adv_w = 280, .box_w = 13, .box_h = 17, .ofs_x = 2, .ofs_y = -1}, - {.bitmap_index = 2853, .adv_w = 280, .box_w = 18, .box_h = 21, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 2901, .adv_w = 280, .box_w = 18, .box_h = 17, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 2940, .adv_w = 280, .box_w = 18, .box_h = 17, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 2979, .adv_w = 280, .box_w = 13, .box_h = 17, .ofs_x = 2, .ofs_y = -1}, - {.bitmap_index = 3007, .adv_w = 320, .box_w = 19, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 3055, .adv_w = 320, .box_w = 20, .box_h = 21, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 3108, .adv_w = 120, .box_w = 8, .box_h = 19, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 3127, .adv_w = 320, .box_w = 20, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 3177, .adv_w = 240, .box_w = 15, .box_h = 19, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 3213, .adv_w = 320, .box_w = 20, .box_h = 19, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 3261, .adv_w = 320, .box_w = 20, .box_h = 17, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 3304, .adv_w = 400, .box_w = 25, .box_h = 12, .ofs_x = 0, .ofs_y = 1}, - {.bitmap_index = 3342, .adv_w = 400, .box_w = 25, .box_h = 12, .ofs_x = 0, .ofs_y = 1}, - {.bitmap_index = 3380, .adv_w = 400, .box_w = 25, .box_h = 12, .ofs_x = 0, .ofs_y = 1}, - {.bitmap_index = 3418, .adv_w = 400, .box_w = 25, .box_h = 12, .ofs_x = 0, .ofs_y = 1}, - {.bitmap_index = 3456, .adv_w = 400, .box_w = 25, .box_h = 12, .ofs_x = 0, .ofs_y = 1}, - {.bitmap_index = 3494, .adv_w = 240, .box_w = 15, .box_h = 19, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 3530, .adv_w = 280, .box_w = 15, .box_h = 20, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 3568, .adv_w = 200, .box_w = 11, .box_h = 21, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 3597, .adv_w = 280, .box_w = 16, .box_h = 19, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 3635, .adv_w = 400, .box_w = 25, .box_h = 21, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 3701, .adv_w = 360, .box_w = 23, .box_h = 17, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 3750, .adv_w = 320, .box_w = 20, .box_h = 20, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 3800, .adv_w = 400, .box_w = 25, .box_h = 19, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 3860, .adv_w = 320, .box_w = 20, .box_h = 21, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 3913, .adv_w = 360, .box_w = 23, .box_h = 21, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 3974, .adv_w = 360, .box_w = 22, .box_h = 20, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 4029, .adv_w = 360, .box_w = 22, .box_h = 19, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 4082, .adv_w = 320, .box_w = 20, .box_h = 15, .ofs_x = 0, .ofs_y = 0} + {.bitmap_index = 2561, .adv_w = 360, .box_w = 23, .box_h = 17, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 2610, .adv_w = 320, .box_w = 19, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 2658, .adv_w = 320, .box_w = 20, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 2708, .adv_w = 240, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 2737, .adv_w = 360, .box_w = 23, .box_h = 19, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 2792, .adv_w = 280, .box_w = 18, .box_h = 17, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 2831, .adv_w = 320, .box_w = 20, .box_h = 17, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 2874, .adv_w = 280, .box_w = 13, .box_h = 17, .ofs_x = 2, .ofs_y = -1}, + {.bitmap_index = 2902, .adv_w = 280, .box_w = 18, .box_h = 21, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 2950, .adv_w = 280, .box_w = 18, .box_h = 17, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 2989, .adv_w = 280, .box_w = 18, .box_h = 17, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 3028, .adv_w = 280, .box_w = 13, .box_h = 17, .ofs_x = 2, .ofs_y = -1}, + {.bitmap_index = 3056, .adv_w = 320, .box_w = 19, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 3104, .adv_w = 360, .box_w = 23, .box_h = 15, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 3148, .adv_w = 320, .box_w = 20, .box_h = 21, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 3201, .adv_w = 120, .box_w = 8, .box_h = 19, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 3220, .adv_w = 320, .box_w = 20, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 3270, .adv_w = 240, .box_w = 15, .box_h = 19, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 3306, .adv_w = 320, .box_w = 20, .box_h = 19, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 3354, .adv_w = 320, .box_w = 21, .box_h = 15, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 3394, .adv_w = 320, .box_w = 20, .box_h = 17, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 3437, .adv_w = 400, .box_w = 25, .box_h = 12, .ofs_x = 0, .ofs_y = 1}, + {.bitmap_index = 3475, .adv_w = 400, .box_w = 25, .box_h = 12, .ofs_x = 0, .ofs_y = 1}, + {.bitmap_index = 3513, .adv_w = 400, .box_w = 25, .box_h = 12, .ofs_x = 0, .ofs_y = 1}, + {.bitmap_index = 3551, .adv_w = 400, .box_w = 25, .box_h = 12, .ofs_x = 0, .ofs_y = 1}, + {.bitmap_index = 3589, .adv_w = 400, .box_w = 25, .box_h = 12, .ofs_x = 0, .ofs_y = 1}, + {.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} }; /*--------------------- @@ -1225,11 +1252,11 @@ static const lv_font_fmt_txt_glyph_dsc_t glyph_dsc[] = { *--------------------*/ static const uint16_t unicode_list_2[] = { - 0x0, 0x16, 0x23, 0x26, 0x27, 0x28, 0x39, 0x47, - 0x4a, 0x4b, 0x4c, 0x50, 0x68, 0x94, 0x128, 0x184, - 0x1e5, 0x1fb, 0x21d, 0x23f, 0x240, 0x241, 0x242, 0x243, - 0x251, 0x292, 0x293, 0x2f1, 0x3dc, 0x3fc, 0x45c, 0x54a, - 0x55f, 0x568, 0x59e, 0x59f, 0x6a8 + 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 }; /*Collect the unicode lists and glyph_id offsets*/ @@ -1245,7 +1272,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 = 37, .type = LV_FONT_FMT_TXT_CMAP_SPARSE_TINY + .unicode_list = unicode_list_2, .glyph_id_ofs_list = NULL, .list_length = 40, .type = LV_FONT_FMT_TXT_CMAP_SPARSE_TINY } }; diff --git a/src/displayapp/screens/ApplicationList.cpp b/src/displayapp/screens/ApplicationList.cpp index 78c7cd9a4b..d6c3970b08 100644 --- a/src/displayapp/screens/ApplicationList.cpp +++ b/src/displayapp/screens/ApplicationList.cpp @@ -62,7 +62,7 @@ std::unique_ptr ApplicationList::CreateScreen2() { {Symbols::paintbrush, Apps::Paint}, {Symbols::paddle, Apps::Paddle}, {"2", Apps::Twos}, - {"M", Apps::Motion}, + {Symbols::chartLine, Apps::Motion}, {Symbols::drum, Apps::Metronome}, {"", Apps::None}, }}; diff --git a/src/displayapp/screens/Symbols.h b/src/displayapp/screens/Symbols.h index c9d615415d..e68a7af6b2 100644 --- a/src/displayapp/screens/Symbols.h +++ b/src/displayapp/screens/Symbols.h @@ -41,6 +41,9 @@ namespace Pinetime { static constexpr const char* hourGlass = "\xEF\x89\x92"; static constexpr const char* lapsFlag = "\xEF\x80\xA4"; static constexpr const char* drum = "\xEF\x95\xA9"; + static constexpr const char* chartLine = "\xEF\x88\x81"; + static constexpr const char* eye = "\xEF\x81\xAE"; + static constexpr const char* home = "\xEF\x80\x95"; // lv_font_sys_48.c static constexpr const char* settings = "\xEE\xA4\x82"; // e902 diff --git a/src/displayapp/screens/settings/SettingWakeUp.cpp b/src/displayapp/screens/settings/SettingWakeUp.cpp index 0e0803537f..cce9a60d8d 100644 --- a/src/displayapp/screens/settings/SettingWakeUp.cpp +++ b/src/displayapp/screens/settings/SettingWakeUp.cpp @@ -36,7 +36,7 @@ SettingWakeUp::SettingWakeUp(Pinetime::Applications::DisplayApp* app, Pinetime:: lv_obj_t* icon = lv_label_create(lv_scr_act(), nullptr); lv_obj_set_style_local_text_color(icon, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_ORANGE); - lv_label_set_text_static(icon, Symbols::clock); + lv_label_set_text_static(icon, Symbols::eye); lv_label_set_align(icon, LV_LABEL_ALIGN_CENTER); lv_obj_align(icon, title, LV_ALIGN_OUT_LEFT_MID, -10, 0); diff --git a/src/displayapp/screens/settings/SettingWatchFace.cpp b/src/displayapp/screens/settings/SettingWatchFace.cpp index 3e73489d6f..02b9081608 100644 --- a/src/displayapp/screens/settings/SettingWatchFace.cpp +++ b/src/displayapp/screens/settings/SettingWatchFace.cpp @@ -36,7 +36,7 @@ SettingWatchFace::SettingWatchFace(Pinetime::Applications::DisplayApp* app, Pine lv_obj_t* icon = lv_label_create(lv_scr_act(), nullptr); lv_obj_set_style_local_text_color(icon, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_ORANGE); - lv_label_set_text_static(icon, Symbols::clock); + lv_label_set_text_static(icon, Symbols::home); lv_label_set_align(icon, LV_LABEL_ALIGN_CENTER); lv_obj_align(icon, title, LV_ALIGN_OUT_LEFT_MID, -10, 0); @@ -90,4 +90,4 @@ void SettingWatchFace::UpdateSelected(lv_obj_t* object, lv_event_t event) { } } } -} \ No newline at end of file +} diff --git a/src/displayapp/screens/settings/Settings.cpp b/src/displayapp/screens/settings/Settings.cpp index e63a35846e..0ab213776f 100644 --- a/src/displayapp/screens/settings/Settings.cpp +++ b/src/displayapp/screens/settings/Settings.cpp @@ -41,9 +41,9 @@ std::unique_ptr Settings::CreateScreen1() { std::array applications {{ {Symbols::sun, "Display", Apps::SettingDisplay}, - {Symbols::clock, "Wake Up", Apps::SettingWakeUp}, + {Symbols::eye, "Wake Up", Apps::SettingWakeUp}, {Symbols::clock, "Time format", Apps::SettingTimeFormat}, - {Symbols::clock, "Watch face", Apps::SettingWatchFace}, + {Symbols::home, "Watch face", Apps::SettingWatchFace}, }}; return std::make_unique(0, 2, app, settingsController, applications); From 1ae22f45f97bf5135a23ab0dedd87d7fdaff82bd Mon Sep 17 00:00:00 2001 From: Riku Isokoski Date: Tue, 13 Jul 2021 21:09:04 +0300 Subject: [PATCH 063/173] Fix cases where Get() isn't used --- src/displayapp/screens/Screen.h | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/displayapp/screens/Screen.h b/src/displayapp/screens/Screen.h index 8e49c9dec6..6c9110c6b8 100644 --- a/src/displayapp/screens/Screen.h +++ b/src/displayapp/screens/Screen.h @@ -13,8 +13,12 @@ namespace Pinetime { DirtyValue() = default; // Use NSDMI explicit DirtyValue(T const& v) : value {v} { } // Use MIL and const-lvalue-ref - bool IsUpdated() const { - return isUpdated; + bool IsUpdated() { + if (this->isUpdated) { + this->isUpdated = false; + return true; + } + return false; } T const& Get() { this->isUpdated = false; From 6222b7c22307b114fef0ddd2148472dbebbc5174 Mon Sep 17 00:00:00 2001 From: Grant Date: Sun, 25 Jul 2021 10:58:55 -0500 Subject: [PATCH 064/173] Correct spelling issue in documentation (#509) * Correct spelling issue --- doc/PinetimeStubWithNrf52DK.md | 4 ++-- doc/ble.md | 4 ++-- doc/branches.md | 2 +- doc/buildAndProgram.md | 2 +- doc/buildWithDocker.md | 2 +- doc/contribute.md | 2 +- doc/filesInReleaseNotes.md | 2 +- 7 files changed, 9 insertions(+), 9 deletions(-) diff --git a/doc/PinetimeStubWithNrf52DK.md b/doc/PinetimeStubWithNrf52DK.md index 521312510f..c485792106 100644 --- a/doc/PinetimeStubWithNrf52DK.md +++ b/doc/PinetimeStubWithNrf52DK.md @@ -1,7 +1,7 @@ # Build a stub for PineTime using NRF52-DK [NRF52-DK](https://www.nordicsemi.com/Software-and-Tools/Development-Kits/nRF52-DK) is the official developpment kit for NRF52832 SoC from Nordic Semiconductor. -It can be very useful for PineTime developpment: +It can be very useful for PineTime development: * You can use it embedded JLink SWD programmer/debugger to program and debug you code on the PineTime * As it's based on the same SoC than the PineTime, you can program it to actually run the same code than the PineTime. @@ -47,4 +47,4 @@ You also need to enable the I/O expander to disconnect pins from buttons and led | --------- | --------- | | DETECT | GND | -Now, you should be able to program the SoC on the NRF52-DK board, and use it as if it was running on the pintime. \ No newline at end of file +Now, you should be able to program the SoC on the NRF52-DK board, and use it as if it was running on the PineTime. \ No newline at end of file diff --git a/doc/ble.md b/doc/ble.md index fdf1a5b60d..518b99c839 100644 --- a/doc/ble.md +++ b/doc/ble.md @@ -5,9 +5,9 @@ This page describes the BLE implementation and API built in this firmware. **Note** : I'm a beginner in BLE related technologies and the information of this document reflect my current knowledge and understanding of the BLE stack. These informations might be erroneous or incomplete. Feel free to submit a PR if you think you can improve these. ## BLE Connection -When starting the firmware start a BLE advertising : it send small messages that can be received by any *central* device in range. This allows the device to announce its presence to other devices. +When starting the firmware start a BLE advertising : it sends small messages that can be received by any *central* device in range. This allows the device to announce its presence to other devices. -A companion application (running on a PC, RasberryPi, smartphone) which received this avertising packet can request a connection to the device. This connection procedure allows the 2 devices to negociate communication parameters, security keys,... +A companion application (running on a PC, RaspberryPi, smartphone) which received this avertising packet can request a connection to the device. This connection procedure allows the 2 devices to negotiate communication parameters, security keys,... When the connection is established, the pinetime will try to discover services running on the companion application. For now **CTS** (**C**urrent **T**ime **S**ervice) and **ANS** (**A**lert **N**otification **S**ervice) are supported. diff --git a/doc/branches.md b/doc/branches.md index 0fb8316d92..ef280f40e8 100644 --- a/doc/branches.md +++ b/doc/branches.md @@ -2,7 +2,7 @@ The branching model of this project is based on the workflow named [Git flow](https://nvie.com/posts/a-successful-git-branching-model/). It is based on 2 main branches: - - **master** : this branch is always ready to be reployed. It means that at any time, we should be able to build the branch and release a new version of the application. + - **master** : this branch is always ready to be deployed. It means that at any time, we should be able to build the branch and release a new version of the application. - **develop** : this branch contains the latest development that will be integrated in the next release once it's considered as stable. New features should be implemented in **feature branches** created from **develop**. When the feature is ready, a pull-request is created and it'll be merge into **develop** when it is succesfully reviewed and accepted. diff --git a/doc/buildAndProgram.md b/doc/buildAndProgram.md index 5fe593ae3e..87b6dd9a5d 100644 --- a/doc/buildAndProgram.md +++ b/doc/buildAndProgram.md @@ -163,7 +163,7 @@ J-Link>g ``` #### JLink RTT -RTT is a feature from Segger's JLink devices that allows bidirectionnal communication between the debugger and the target. This feature can be used to get the logs from the embedded software on the development computer. +RTT is a feature from Segger's JLink devices that allows bidirectional communication between the debugger and the target. This feature can be used to get the logs from the embedded software on the development computer. - Program the MCU with the code (see above) - Start JLinkExe diff --git a/doc/buildWithDocker.md b/doc/buildWithDocker.md index 17fb53d9d1..2e4ecbb610 100644 --- a/doc/buildWithDocker.md +++ b/doc/buildWithDocker.md @@ -13,7 +13,7 @@ Based on Ubuntu 18.04 with the following build dependencies: The `infinitime-build` image contains all the dependencies you need. The default `CMD` will compile sources found in `/sources`, so you need only mount your code. -This example will build the firmware, generate the MCUBoot image and generate the DFU file. For cloning the repo, see [these instructions](../doc/buildAndProgram.md#clone-the-repo). Outputs will be written to **/build/output**: +This example will build the firmware, generate the MCUBoot image and generate the DFU file. For cloning the repo, see [these instructions](../doc/buildAndProgram.md#clone-the-repo). Outputs will be written to **/build/output**: ```bash cd # e.g. cd ./work/Pinetime diff --git a/doc/contribute.md b/doc/contribute.md index 09d20774d5..9f4c21547b 100644 --- a/doc/contribute.md +++ b/doc/contribute.md @@ -48,7 +48,7 @@ When reviewing PR, the author and contributors will first look at the **descript Then, reviewing **a few files that were modified for a single purpose** is a lot more easier than to review 30 files modified for many reasons (bug fix, UI improvements, typos in doc,...), even if all these changes make sense. Also, it's possible that we agree on some modification but not on some other, and we won't be able to merge the PR because of the changes that are not accepted. -We do our best to keep the code as consistent as possible, and that mean we pay attention to the **formatting** of the code. If the code formatting is not consistent with our code base, we'll ask you to review it, which will take more time. +We do our best to keep the code as consistent as possible, and that means we pay attention to the **formatting** of the code. If the code formatting is not consistent with our code base, we'll ask you to review it, which will take more time. The last step of the review consists in **testing** the modification. If it doesn't work out of the box, we'll ask your to review your code and to ensure that it works as expected. diff --git a/doc/filesInReleaseNotes.md b/doc/filesInReleaseNotes.md index 78c20b51a3..1a37fefbcd 100644 --- a/doc/filesInReleaseNotes.md +++ b/doc/filesInReleaseNotes.md @@ -18,7 +18,7 @@ This firmware is standalone, meaning that it does not need a bootloader to actua **This firmware must be flashed at address 0x00 in the main flash memory** ### Bootloader -The bootloader is maintained by [lupyuen](https://github.com/lupyuen) and is a binary version of [this release](https://github.com/lupyuen/pinetime-rust-mynewt/releases/tag/v5.0.4). +The bootloader is maintained by [lupyuen](https://github.com/lupyuen) and is a binary version of [this release](https://github.com/lupyuen/pinetime-rust-mynewt/releases/tag/v5.0.4). - **bootloader.hex** : Firmware in Intel HEX file format. From 574434550ac372953954813e36a26d6d4c2a5cc6 Mon Sep 17 00:00:00 2001 From: Riku Isokoski Date: Fri, 23 Jul 2021 23:58:40 +0300 Subject: [PATCH 065/173] Fix slow scroll --- src/displayapp/screens/Music.cpp | 4 +--- src/displayapp/screens/Notifications.cpp | 1 - 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/src/displayapp/screens/Music.cpp b/src/displayapp/screens/Music.cpp index 9f10f508a0..c8d5e4b084 100644 --- a/src/displayapp/screens/Music.cpp +++ b/src/displayapp/screens/Music.cpp @@ -119,7 +119,6 @@ Music::Music(Pinetime::Applications::DisplayApp* app, Pinetime::Controllers::Mus constexpr int8_t MIDDLE_OFFSET = -25; txtArtist = lv_label_create(lv_scr_act(), nullptr); lv_label_set_long_mode(txtArtist, LV_LABEL_LONG_SROLL_CIRC); - lv_label_set_anim_speed(txtArtist, 1); lv_obj_align(txtArtist, nullptr, LV_ALIGN_IN_LEFT_MID, 12, MIDDLE_OFFSET + 1 * FONT_HEIGHT); lv_label_set_align(txtArtist, LV_ALIGN_IN_LEFT_MID); lv_obj_set_width(txtArtist, LV_HOR_RES - 12); @@ -127,7 +126,6 @@ Music::Music(Pinetime::Applications::DisplayApp* app, Pinetime::Controllers::Mus txtTrack = lv_label_create(lv_scr_act(), nullptr); lv_label_set_long_mode(txtTrack, LV_LABEL_LONG_SROLL_CIRC); - lv_label_set_anim_speed(txtTrack, 1); lv_obj_align(txtTrack, nullptr, LV_ALIGN_IN_LEFT_MID, 12, MIDDLE_OFFSET + 2 * FONT_HEIGHT + LINE_PAD); lv_label_set_align(txtTrack, LV_ALIGN_IN_LEFT_MID); @@ -303,4 +301,4 @@ bool Music::OnTouchEvent(Pinetime::Applications::TouchEvents event) { return true; } } -} \ No newline at end of file +} diff --git a/src/displayapp/screens/Notifications.cpp b/src/displayapp/screens/Notifications.cpp index 38b1242075..5c23ed1f14 100644 --- a/src/displayapp/screens/Notifications.cpp +++ b/src/displayapp/screens/Notifications.cpp @@ -184,7 +184,6 @@ Notifications::NotificationItem::NotificationItem(const char* title, } lv_label_set_text(alert_type, title); lv_label_set_long_mode(alert_type, LV_LABEL_LONG_SROLL_CIRC); - lv_label_set_anim_speed(alert_type, 3); lv_obj_set_width(alert_type, 180); lv_obj_align(alert_type, NULL, LV_ALIGN_IN_TOP_LEFT, 0, 16); From 7b75ca591d31ccd8883a1a1ff83cfd271959dbaa Mon Sep 17 00:00:00 2001 From: Jonathan Vander Mey Date: Sat, 17 Jul 2021 00:41:15 -0400 Subject: [PATCH 066/173] Fix compile warnings --- src/displayapp/screens/SystemInfo.cpp | 2 ++ src/libs/lv_conf.h | 1 + 2 files changed, 3 insertions(+) diff --git a/src/displayapp/screens/SystemInfo.cpp b/src/displayapp/screens/SystemInfo.cpp index 2bb8481882..e7c5b65aea 100644 --- a/src/displayapp/screens/SystemInfo.cpp +++ b/src/displayapp/screens/SystemInfo.cpp @@ -20,6 +20,8 @@ namespace { return "BMA421"; case Pinetime::Controllers::MotionController::DeviceTypes::BMA425: return "BMA425"; + case Pinetime::Controllers::MotionController::DeviceTypes::Unknown: + return "???"; } return "???"; } diff --git a/src/libs/lv_conf.h b/src/libs/lv_conf.h index 18fc3fa252..73109c5af9 100644 --- a/src/libs/lv_conf.h +++ b/src/libs/lv_conf.h @@ -295,6 +295,7 @@ typedef void* lv_img_decoder_user_data_t; #define LV_TICK_CUSTOM 1 #if LV_TICK_CUSTOM == 1 #define LV_TICK_CUSTOM_INCLUDE "FreeRTOS.h" /*Header for the system time function*/ +uint32_t xTaskGetTickCount(); /*Forward declare to avoid compiler warning*/ #define LV_TICK_CUSTOM_SYS_TIME_EXPR (xTaskGetTickCount()) /*Expression evaluating to current system time in ms*/ #endif /*LV_TICK_CUSTOM*/ From 514481ef7f9c71ad816b31d979c6ab39ce9380dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-Fran=C3=A7ois=20Milants?= Date: Sun, 25 Jul 2021 19:55:21 +0200 Subject: [PATCH 067/173] Tile event handler : read the event data only if the event is a "value changed event". LVGL sends many other event and some of them do not set the event data (global static variable) to a valid address, which may cause an invalid read. I noticed that when porting this class on RISC-V platform (BL602). --- src/displayapp/screens/Tile.cpp | 18 ++++++++++-------- src/displayapp/screens/Tile.h | 2 +- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/src/displayapp/screens/Tile.cpp b/src/displayapp/screens/Tile.cpp index 3eb127cc43..d5d6cb80c6 100644 --- a/src/displayapp/screens/Tile.cpp +++ b/src/displayapp/screens/Tile.cpp @@ -6,15 +6,17 @@ using namespace Pinetime::Applications::Screens; namespace { static void lv_update_task(struct _lv_task_t* task) { - auto user_data = static_cast(task->user_data); + auto* user_data = static_cast(task->user_data); user_data->UpdateScreen(); } static void event_handler(lv_obj_t* obj, lv_event_t event) { + if (event != LV_EVENT_VALUE_CHANGED) return; + Tile* screen = static_cast(obj->user_data); - uint32_t* eventDataPtr = (uint32_t*) lv_event_get_data(); + auto* eventDataPtr = (uint32_t*) lv_event_get_data(); uint32_t eventData = *eventDataPtr; - screen->OnObjectEvent(obj, event, eventData); + screen->OnValueChangedEvent(obj, eventData); } } @@ -124,9 +126,9 @@ bool Tile::Refresh() { return running; } -void Tile::OnObjectEvent(lv_obj_t* obj, lv_event_t event, uint32_t buttonId) { - if (event == LV_EVENT_VALUE_CHANGED) { - app->StartApp(apps[buttonId], DisplayApp::FullRefreshDirections::Up); - running = false; - } +void Tile::OnValueChangedEvent(lv_obj_t* obj, uint32_t buttonId) { + if(obj != btnm1) return; + + app->StartApp(apps[buttonId], DisplayApp::FullRefreshDirections::Up); + running = false; } diff --git a/src/displayapp/screens/Tile.h b/src/displayapp/screens/Tile.h index 4ebd81cd9b..765a8def61 100644 --- a/src/displayapp/screens/Tile.h +++ b/src/displayapp/screens/Tile.h @@ -32,7 +32,7 @@ namespace Pinetime { bool Refresh() override; void UpdateScreen(); - void OnObjectEvent(lv_obj_t* obj, lv_event_t event, uint32_t buttonId); + void OnValueChangedEvent(lv_obj_t* obj, uint32_t buttonId); private: Pinetime::Controllers::Battery& batteryController; From e6bc485679022c51486ac3a28b8473b95ff0d115 Mon Sep 17 00:00:00 2001 From: Kieran Cawthray Date: Sun, 25 Jul 2021 22:18:39 +0200 Subject: [PATCH 068/173] Increment settings value, remove old hacky fix --- src/components/settings/Settings.h | 2 +- src/displayapp/screens/PineTimeStyle.cpp | 28 +++++++----------------- 2 files changed, 9 insertions(+), 21 deletions(-) diff --git a/src/components/settings/Settings.h b/src/components/settings/Settings.h index cddef6350f..40cafe9a78 100644 --- a/src/components/settings/Settings.h +++ b/src/components/settings/Settings.h @@ -154,7 +154,7 @@ namespace Pinetime { private: Pinetime::Controllers::FS& fs; - static constexpr uint32_t settingsVersion = 0x0001; + static constexpr uint32_t settingsVersion = 0x0002; struct SettingsData { uint32_t version = settingsVersion; diff --git a/src/displayapp/screens/PineTimeStyle.cpp b/src/displayapp/screens/PineTimeStyle.cpp index b27bd9c7b5..afce698cdb 100644 --- a/src/displayapp/screens/PineTimeStyle.cpp +++ b/src/displayapp/screens/PineTimeStyle.cpp @@ -52,7 +52,7 @@ PineTimeStyle::PineTimeStyle(DisplayApp* app, settingsController {settingsController}, motionController {motionController} { - /* This sets the watchface number to return to after leaving the menu */ + // This sets the watchface number to return to after leaving the menu settingsController.SetClockFace(2); displayedChar[0] = 0; @@ -61,14 +61,7 @@ PineTimeStyle::PineTimeStyle(DisplayApp* app, displayedChar[3] = 0; displayedChar[4] = 0; - //Feels like a hack, but if all the colors are white, this is probably not what the user wants - if (settingsController.GetPTSColorTime() + settingsController.GetPTSColorBar() + settingsController.GetPTSColorBG() == 0) { - settingsController.SetPTSColorTime(11); - settingsController.SetPTSColorBar(11); - settingsController.SetPTSColorBG(3); - } - - /* Create a 200px wide background rectangle */ + //Create a 200px wide background rectangle timebar = lv_obj_create(lv_scr_act(), nullptr); lv_obj_set_style_local_bg_color(timebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, pts_colors[settingsController.GetPTSColorBG()]); @@ -76,8 +69,7 @@ PineTimeStyle::PineTimeStyle(DisplayApp* app, lv_obj_set_size(timebar, 200, 240); lv_obj_align(timebar, lv_scr_act(), LV_ALIGN_IN_TOP_LEFT, 5, 0); - /* Display the time */ - + // Display the time timeDD1 = lv_label_create(lv_scr_act(), nullptr); lv_obj_set_style_local_text_font(timeDD1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, &open_sans_light); lv_obj_set_style_local_text_color(timeDD1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, pts_colors[settingsController.GetPTSColorTime()]); @@ -96,16 +88,14 @@ PineTimeStyle::PineTimeStyle(DisplayApp* app, lv_label_set_text(timeAMPM, ""); lv_obj_align(timeAMPM, timebar, LV_ALIGN_IN_BOTTOM_LEFT, 2, -20); - /* Create a 40px wide bar down the right side of the screen */ - + // Create a 40px wide bar down the right side of the screen sidebar = lv_obj_create(lv_scr_act(), nullptr); lv_obj_set_style_local_bg_color(sidebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, pts_colors[settingsController.GetPTSColorBar()]); lv_obj_set_style_local_radius(sidebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, 0); lv_obj_set_size(sidebar, 40, 240); lv_obj_align(sidebar, lv_scr_act(), LV_ALIGN_IN_TOP_RIGHT, 0, 0); - /* Display icons */ - + // Display icons batteryIcon = lv_label_create(lv_scr_act(), nullptr); lv_obj_set_style_local_text_color(batteryIcon, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x000000)); lv_label_set_text(batteryIcon, Symbols::batteryFull); @@ -123,8 +113,7 @@ PineTimeStyle::PineTimeStyle(DisplayApp* app, lv_obj_set_style_local_text_color(notificationIcon, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x000000)); lv_obj_align(notificationIcon, sidebar, LV_ALIGN_IN_TOP_MID, 0, 40); - /* Calendar icon */ - + // Calendar icon calendarOuter = lv_obj_create(lv_scr_act(), nullptr); lv_obj_set_style_local_bg_color(calendarOuter, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x000000)); lv_obj_set_style_local_radius(calendarOuter, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, 0); @@ -161,8 +150,7 @@ PineTimeStyle::PineTimeStyle(DisplayApp* app, lv_obj_set_size(calendarCrossBar2, 8, 3); lv_obj_align(calendarCrossBar2, calendarBar2, LV_ALIGN_IN_BOTTOM_MID, 0, 0); - /* Display date */ - + // Display date dateDayOfWeek = lv_label_create(lv_scr_act(), nullptr); lv_obj_set_style_local_text_color(dateDayOfWeek, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x000000)); lv_label_set_text(dateDayOfWeek, "THU"); @@ -303,7 +291,7 @@ bool PineTimeStyle::Refresh() { lv_label_set_text(timeAMPM, ampmChar); } - /* Display the time as 2 pairs of digits */ + // Display the time as 2 pairs of digits sprintf(hourStr, "%c%c", hoursChar[0], hoursChar[1]); lv_label_set_text(timeDD1, hourStr); From 79ee65bfd53d31dd282dbbb7952296cc6f1212eb Mon Sep 17 00:00:00 2001 From: Riku Isokoski Date: Tue, 27 Jul 2021 22:41:48 +0300 Subject: [PATCH 069/173] Increase ADC precision --- src/components/battery/BatteryController.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/components/battery/BatteryController.cpp b/src/components/battery/BatteryController.cpp index 54b9ffd95b..e334eeacb6 100644 --- a/src/components/battery/BatteryController.cpp +++ b/src/components/battery/BatteryController.cpp @@ -39,7 +39,7 @@ void Battery::SaadcInit() { nrf_saadc_channel_config_t adcChannelConfig = {.resistor_p = NRF_SAADC_RESISTOR_DISABLED, .resistor_n = NRF_SAADC_RESISTOR_DISABLED, - .gain = NRF_SAADC_GAIN1_5, + .gain = NRF_SAADC_GAIN1_4, .reference = NRF_SAADC_REFERENCE_INTERNAL, .acq_time = NRF_SAADC_ACQTIME_40US, .mode = NRF_SAADC_MODE_SINGLE_ENDED, @@ -59,11 +59,11 @@ void Battery::SaadcEventHandler(nrfx_saadc_evt_t const* p_event) { APP_ERROR_CHECK(nrfx_saadc_buffer_convert(&saadc_value, 1)); // A hardware voltage divider divides the battery voltage by 2 - // ADC gain is 1/5 - // thus adc_voltage = battery_voltage / 2 * gain = battery_voltage / 10 + // ADC gain is 1/4 + // thus adc_voltage = battery_voltage / 2 * gain = battery_voltage / 8 // reference_voltage is 0.6V // p_event->data.done.p_buffer[0] = (adc_voltage / reference_voltage) * 1024 - voltage = p_event->data.done.p_buffer[0] * 6000 / 1024; + voltage = p_event->data.done.p_buffer[0] * (0.6 * 8 * 1000) / 1024; if (voltage > battery_max) { percentRemaining = 100; From e6dcb3009fe6f847a7486dbb1b3143bbf49a15b9 Mon Sep 17 00:00:00 2001 From: Riku Isokoski Date: Sun, 1 Aug 2021 13:05:48 +0300 Subject: [PATCH 070/173] Improvements --- src/components/motor/MotorController.cpp | 40 +++---- src/components/motor/MotorController.h | 12 +- src/displayapp/DisplayApp.cpp | 4 +- src/displayapp/screens/Metronome.cpp | 4 +- src/displayapp/screens/Notifications.cpp | 103 +++++------------- src/displayapp/screens/Notifications.h | 27 ++--- .../screens/settings/QuickSettings.cpp | 2 +- src/systemtask/SystemTask.cpp | 9 +- 8 files changed, 70 insertions(+), 131 deletions(-) diff --git a/src/components/motor/MotorController.cpp b/src/components/motor/MotorController.cpp index 808830254f..b25e6bc829 100644 --- a/src/components/motor/MotorController.cpp +++ b/src/components/motor/MotorController.cpp @@ -16,41 +16,37 @@ void MotorController::Init() { nrf_gpio_pin_set(pinMotor); app_timer_init(); - app_timer_create(&shortVibTimer, APP_TIMER_MODE_SINGLE_SHOT, vibrate); - app_timer_create(&longVibTimer, APP_TIMER_MODE_REPEATED, vibrate); - isBusy = false; + app_timer_create(&shortVibTimer, APP_TIMER_MODE_SINGLE_SHOT, StopMotor); + app_timer_create(&longVibTimer, APP_TIMER_MODE_REPEATED, Ring); } -void MotorController::runForDuration(uint8_t motorDuration) { +void MotorController::Ring(void* p_context) { + auto* motorController = static_cast(p_context); + motorController->RunForDuration(50); +} - if (settingsController.GetVibrationStatus() == Controllers::Settings::Vibration::OFF || isBusy) +void MotorController::RunForDuration(uint8_t motorDuration) { + if (settingsController.GetVibrationStatus() == Controllers::Settings::Vibration::OFF) { return; + } nrf_gpio_pin_clear(pinMotor); - /* Start timer for motorDuration miliseconds and timer triggers vibrate() when it finishes*/ - app_timer_start(shortVibTimer, APP_TIMER_TICKS(motorDuration), NULL); + app_timer_start(shortVibTimer, APP_TIMER_TICKS(motorDuration), nullptr); } -void MotorController::startRunning(uint8_t motorDuration) { - if (settingsController.GetVibrationStatus() == Controllers::Settings::Vibration::OFF || isBusy ) +void MotorController::StartRinging() { + if (settingsController.GetVibrationStatus() == Controllers::Settings::Vibration::OFF) { return; - //prevent other vibrations while running - isBusy = true; - nrf_gpio_pin_clear(pinMotor); - app_timer_start(longVibTimer, APP_TIMER_TICKS(motorDuration), NULL); + } + Ring(this); + app_timer_start(longVibTimer, APP_TIMER_TICKS(1000), this); } -void MotorController::stopRunning() { - +void MotorController::StopRinging() { app_timer_stop(longVibTimer); nrf_gpio_pin_set(pinMotor); - isBusy = false; } -void MotorController::vibrate(void* p_context) { - if (nrf_gpio_pin_out_read(pinMotor) == 0) { - nrf_gpio_pin_set(pinMotor); - } else { - nrf_gpio_pin_clear(pinMotor); - } +void MotorController::StopMotor(void* p_context) { + nrf_gpio_pin_set(pinMotor); } diff --git a/src/components/motor/MotorController.h b/src/components/motor/MotorController.h index 5daeb8cee5..d2c9fe5f2c 100644 --- a/src/components/motor/MotorController.h +++ b/src/components/motor/MotorController.h @@ -12,14 +12,14 @@ namespace Pinetime { public: MotorController(Controllers::Settings& settingsController); void Init(); - void runForDuration(uint8_t motorDuration); - void startRunning(uint8_t motorDuration); - void stopRunning(); + void RunForDuration(uint8_t motorDuration); + void StartRinging(); + static void StopRinging(); private: + static void Ring(void* p_context); Controllers::Settings& settingsController; - static void vibrate(void* p_context); - bool isBusy; - }; + static void StopMotor(void* p_context); + }; } } diff --git a/src/displayapp/DisplayApp.cpp b/src/displayapp/DisplayApp.cpp index bdd703eed2..d4a73f5ee7 100644 --- a/src/displayapp/DisplayApp.cpp +++ b/src/displayapp/DisplayApp.cpp @@ -336,12 +336,12 @@ void DisplayApp::LoadApp(Apps app, DisplayApp::FullRefreshDirections direction) case Apps::Notifications: currentScreen = std::make_unique( - this, notificationManager, systemTask->nimble().alertService(), motorController, Screens::Notifications::Modes::Normal); + this, notificationManager, systemTask->nimble().alertService(), Screens::Notifications::Modes::Normal); ReturnApp(Apps::Clock, FullRefreshDirections::Up, TouchEvents::SwipeUp); break; case Apps::NotificationsPreview: currentScreen = std::make_unique( - this, notificationManager, systemTask->nimble().alertService(), motorController, Screens::Notifications::Modes::Preview); + this, notificationManager, systemTask->nimble().alertService(), Screens::Notifications::Modes::Preview); ReturnApp(Apps::Clock, FullRefreshDirections::Up, TouchEvents::SwipeUp); break; case Apps::Timer: diff --git a/src/displayapp/screens/Metronome.cpp b/src/displayapp/screens/Metronome.cpp index 7bfbccb761..16c34f458f 100644 --- a/src/displayapp/screens/Metronome.cpp +++ b/src/displayapp/screens/Metronome.cpp @@ -109,9 +109,9 @@ bool Metronome::Refresh() { startTime = xTaskGetTickCount(); if (counter == 0) { counter = bpb; - motorController.SetDuration(90); + motorController.RunForDuration(90); } else { - motorController.SetDuration(30); + motorController.RunForDuration(30); } } break; diff --git a/src/displayapp/screens/Notifications.cpp b/src/displayapp/screens/Notifications.cpp index 5eecb42134..5096917e3a 100644 --- a/src/displayapp/screens/Notifications.cpp +++ b/src/displayapp/screens/Notifications.cpp @@ -11,13 +11,8 @@ extern lv_font_t jetbrains_mono_bold_20; Notifications::Notifications(DisplayApp* app, Pinetime::Controllers::NotificationManager& notificationManager, Pinetime::Controllers::AlertNotificationService& alertNotificationService, - Controllers::MotorController& motorController, Modes mode) - : Screen(app), - notificationManager{notificationManager}, - alertNotificationService{alertNotificationService}, - motorController{motorController}, - mode{mode} { + : Screen(app), notificationManager {notificationManager}, alertNotificationService {alertNotificationService}, mode {mode} { notificationManager.ClearNewNotificationFlag(); auto notification = notificationManager.GetLastNotification(); if (notification.valid) { @@ -28,10 +23,7 @@ Notifications::Notifications(DisplayApp* app, notification.category, notificationManager.NbNotifications(), mode, - alertNotificationService, - motorController, - &timeoutTickCountEnd, - &timeoutTickCountStart); + alertNotificationService); validDisplay = true; } else { currentItem = std::make_unique("Notification", @@ -40,14 +32,10 @@ Notifications::Notifications(DisplayApp* app, notification.category, notificationManager.NbNotifications(), Modes::Preview, - alertNotificationService, - motorController, - &timeoutTickCountEnd, - &timeoutTickCountStart); + alertNotificationService); } - if (mode == Modes::Preview) { - + if (mode == Modes::Preview && notification.category != Controllers::NotificationManager::Categories::IncomingCall) { timeoutLine = lv_line_create(lv_scr_act(), nullptr); lv_obj_set_style_local_line_width(timeoutLine, LV_LINE_PART_MAIN, LV_STATE_DEFAULT, 3); @@ -61,11 +49,13 @@ Notifications::Notifications(DisplayApp* app, } Notifications::~Notifications() { + // make sure we stop any vibrations before exiting + Controllers::MotorController::StopRinging(); lv_obj_clean(lv_scr_act()); } bool Notifications::Refresh() { - if (mode == Modes::Preview && !currentItem->timeoutOnHold) { + if (mode == Modes::Preview && timeoutLine != nullptr) { auto tick = xTaskGetTickCount(); int32_t pos = 240 - ((tick - timeoutTickCountStart) / ((timeoutTickCountEnd - timeoutTickCountStart) / 240)); if (pos < 0) @@ -74,10 +64,7 @@ bool Notifications::Refresh() { timeoutLinePoints[1].x = pos; lv_line_set_points(timeoutLine, timeoutLinePoints, 2); } - //make sure we stop any vibrations before exiting - if (!running) - motorController.stopRunning(); - return running; + return running && currentItem->IsRunning(); } bool Notifications::OnTouchEvent(Pinetime::Applications::TouchEvents event) { @@ -105,10 +92,7 @@ bool Notifications::OnTouchEvent(Pinetime::Applications::TouchEvents event) { previousNotification.category, notificationManager.NbNotifications(), mode, - alertNotificationService, - motorController, - &timeoutTickCountEnd, - &timeoutTickCountStart); + alertNotificationService); } return true; case Pinetime::Applications::TouchEvents::SwipeUp: { @@ -133,10 +117,7 @@ bool Notifications::OnTouchEvent(Pinetime::Applications::TouchEvents event) { nextNotification.category, notificationManager.NbNotifications(), mode, - alertNotificationService, - motorController, - &timeoutTickCountEnd, - &timeoutTickCountStart); + alertNotificationService); } return true; case Pinetime::Applications::TouchEvents::LongTap: { @@ -149,19 +130,9 @@ bool Notifications::OnTouchEvent(Pinetime::Applications::TouchEvents event) { } namespace { - static void AcceptIncomingCallEventHandler(lv_obj_t* obj, lv_event_t event) { - auto* item = static_cast(obj->user_data); - item->OnAcceptIncomingCall(event); - } - - static void MuteIncomingCallEventHandler(lv_obj_t* obj, lv_event_t event) { + void CallEventHandler(lv_obj_t* obj, lv_event_t event) { auto* item = static_cast(obj->user_data); - item->OnMuteIncomingCall(event); - } - - static void RejectIncomingCallEventHandler(lv_obj_t* obj, lv_event_t event) { - auto* item = static_cast(obj->user_data); - item->OnRejectIncomingCall(event); + item->OnCallButtonEvent(obj, event); } } @@ -171,12 +142,8 @@ Notifications::NotificationItem::NotificationItem(const char* title, Controllers::NotificationManager::Categories category, uint8_t notifNb, Modes mode, - Pinetime::Controllers::AlertNotificationService& alertNotificationService, - Controllers::MotorController& motorController, - uint32_t* timeoutEnd, - uint32_t* timeoutStart) - : notifNr{notifNr}, notifNb{notifNb}, mode{mode}, alertNotificationService{alertNotificationService}, - motorController{motorController}, timeoutEnd{timeoutEnd}, timeoutStart{timeoutStart} { + Pinetime::Controllers::AlertNotificationService& alertNotificationService) + : notifNr {notifNr}, notifNb {notifNb}, mode {mode}, alertNotificationService {alertNotificationService} { lv_obj_t* container1 = lv_cont_create(lv_scr_act(), NULL); lv_obj_set_style_local_bg_color(container1, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x222222)); @@ -234,7 +201,7 @@ Notifications::NotificationItem::NotificationItem(const char* title, bt_accept = lv_btn_create(lv_scr_act(), nullptr); bt_accept->user_data = this; - lv_obj_set_event_cb(bt_accept, AcceptIncomingCallEventHandler); + lv_obj_set_event_cb(bt_accept, CallEventHandler); lv_obj_set_size(bt_accept, 76, 76); lv_obj_align(bt_accept, NULL, LV_ALIGN_IN_BOTTOM_LEFT, 0, 0); label_accept = lv_label_create(bt_accept, nullptr); @@ -243,7 +210,7 @@ Notifications::NotificationItem::NotificationItem(const char* title, bt_reject = lv_btn_create(lv_scr_act(), nullptr); bt_reject->user_data = this; - lv_obj_set_event_cb(bt_reject, RejectIncomingCallEventHandler); + lv_obj_set_event_cb(bt_reject, CallEventHandler); lv_obj_set_size(bt_reject, 76, 76); lv_obj_align(bt_reject, NULL, LV_ALIGN_IN_BOTTOM_MID, 0, 0); label_reject = lv_label_create(bt_reject, nullptr); @@ -252,13 +219,12 @@ Notifications::NotificationItem::NotificationItem(const char* title, bt_mute = lv_btn_create(lv_scr_act(), nullptr); bt_mute->user_data = this; - lv_obj_set_event_cb(bt_mute, MuteIncomingCallEventHandler); + lv_obj_set_event_cb(bt_mute, CallEventHandler); lv_obj_set_size(bt_mute, 76, 76); lv_obj_align(bt_mute, NULL, LV_ALIGN_IN_BOTTOM_RIGHT, 0, 0); label_mute = lv_label_create(bt_mute, nullptr); lv_label_set_text(label_mute, Symbols::volumMute); lv_obj_set_style_local_bg_color(bt_mute, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_GRAY); - timeoutOnHold = true; } break; } @@ -269,35 +235,24 @@ Notifications::NotificationItem::NotificationItem(const char* title, lv_label_set_text(backgroundLabel, ""); } -void Notifications::NotificationItem::OnAcceptIncomingCall(lv_event_t event) { - if (event != LV_EVENT_CLICKED) +void Notifications::NotificationItem::OnCallButtonEvent(lv_obj_t* obj, lv_event_t event) { + if (event != LV_EVENT_CLICKED) { return; - callPreviewInteraction(); - alertNotificationService.AcceptIncomingCall(); -} + } -void Notifications::NotificationItem::OnMuteIncomingCall(lv_event_t event) { - if (event != LV_EVENT_CLICKED) - return; - callPreviewInteraction(); - alertNotificationService.MuteIncomingCall(); -} + Controllers::MotorController::StopRinging(); -void Notifications::NotificationItem::OnRejectIncomingCall(lv_event_t event) { - if (event != LV_EVENT_CLICKED) - return; - callPreviewInteraction(); - alertNotificationService.RejectIncomingCall(); -} + if (obj == bt_accept) { + alertNotificationService.AcceptIncomingCall(); + } else if (obj == bt_reject) { + alertNotificationService.RejectIncomingCall(); + } else if (obj == bt_mute) { + alertNotificationService.MuteIncomingCall(); + } -inline void Notifications::NotificationItem::callPreviewInteraction() { - *timeoutStart = xTaskGetTickCount(); - *timeoutEnd = *timeoutStart + (5 * 1024); - timeoutOnHold = false; - motorController.stopRunning(); + running = false; } - Notifications::NotificationItem::~NotificationItem() { lv_obj_clean(lv_scr_act()); } diff --git a/src/displayapp/screens/Notifications.h b/src/displayapp/screens/Notifications.h index 32bd0770f0..9244e9fa24 100644 --- a/src/displayapp/screens/Notifications.h +++ b/src/displayapp/screens/Notifications.h @@ -5,7 +5,6 @@ #include #include "Screen.h" #include "components/ble/NotificationManager.h" -#include "components/motor/MotorController.h" namespace Pinetime { namespace Controllers { @@ -20,7 +19,6 @@ namespace Pinetime { explicit Notifications(DisplayApp* app, Pinetime::Controllers::NotificationManager& notificationManager, Pinetime::Controllers::AlertNotificationService& alertNotificationService, - Controllers::MotorController& motorController, Modes mode); ~Notifications() override; @@ -35,22 +33,14 @@ namespace Pinetime { Controllers::NotificationManager::Categories, uint8_t notifNb, Modes mode, - Pinetime::Controllers::AlertNotificationService& alertNotificationService, - Controllers::MotorController& motorController, - uint32_t* timeoutEnd, - uint32_t* timeoutStart); + Pinetime::Controllers::AlertNotificationService& alertNotificationService); ~NotificationItem(); - bool Refresh() { - return false; + bool IsRunning() const { + return running; } - void OnAcceptIncomingCall(lv_event_t event); - void OnMuteIncomingCall(lv_event_t event); - void OnRejectIncomingCall(lv_event_t event); - - bool timeoutOnHold = false; + void OnCallButtonEvent(lv_obj_t*, lv_event_t event); + private: - void callPreviewInteraction(); - uint8_t notifNr = 0; uint8_t notifNb = 0; char pageText[4]; @@ -66,11 +56,9 @@ namespace Pinetime { lv_obj_t* label_mute; lv_obj_t* label_reject; lv_obj_t* bottomPlaceholder; - uint32_t* timeoutEnd; - uint32_t* timeoutStart; Modes mode; Pinetime::Controllers::AlertNotificationService& alertNotificationService; - Controllers::MotorController& motorController; + bool running = true; }; private: @@ -83,11 +71,10 @@ namespace Pinetime { Modes mode = Modes::Normal; std::unique_ptr currentItem; Controllers::NotificationManager::Notification::Id currentId; - Controllers::MotorController& motorController; bool validDisplay = false; lv_point_t timeoutLinePoints[2] {{0, 1}, {239, 1}}; - lv_obj_t* timeoutLine; + lv_obj_t* timeoutLine = nullptr; uint32_t timeoutTickCountStart; uint32_t timeoutTickCountEnd; }; diff --git a/src/displayapp/screens/settings/QuickSettings.cpp b/src/displayapp/screens/settings/QuickSettings.cpp index 5e46e2e572..0421d10370 100644 --- a/src/displayapp/screens/settings/QuickSettings.cpp +++ b/src/displayapp/screens/settings/QuickSettings.cpp @@ -140,7 +140,7 @@ void QuickSettings::OnButtonEvent(lv_obj_t* object, lv_event_t event) { if (lv_obj_get_state(btn3, LV_BTN_PART_MAIN) & LV_STATE_CHECKED) { settingsController.SetVibrationStatus(Controllers::Settings::Vibration::ON); - motorController.runForDuration(35); + motorController.RunForDuration(35); lv_label_set_text_static(btn3_lvl, Symbols::notificationsOn); } else { settingsController.SetVibrationStatus(Controllers::Settings::Vibration::OFF); diff --git a/src/systemtask/SystemTask.cpp b/src/systemtask/SystemTask.cpp index f05ade6511..7426ac2f6d 100644 --- a/src/systemtask/SystemTask.cpp +++ b/src/systemtask/SystemTask.cpp @@ -267,16 +267,17 @@ void SystemTask::Work() { GoToRunning(); } if (notificationManager.GetLastNotification().category == Controllers::NotificationManager::Categories::IncomingCall) { - motorController.startRunning(500); + motorController.StartRinging(); } else { - motorController.runForDuration(35); + motorController.RunForDuration(35); } displayApp.PushMessage(Pinetime::Applications::Display::Messages::NewNotification); + break; case Messages::OnTimerDone: if (isSleeping && !isWakingUp) { GoToRunning(); } - motorController.runForDuration(35); + motorController.RunForDuration(35); displayApp.PushMessage(Pinetime::Applications::Display::Messages::TimerDone); break; case Messages::BleConnected: @@ -329,7 +330,7 @@ void SystemTask::Work() { stepCounterMustBeReset = true; break; case Messages::OnChargingEvent: - motorController.SetDuration(15); + motorController.RunForDuration(15); // Battery level is updated on every message - there's no need to do anything break; From a618f43b4d8b1d0868c37e10193d3c95ce080040 Mon Sep 17 00:00:00 2001 From: Riku Isokoski Date: Sun, 1 Aug 2021 14:13:32 +0300 Subject: [PATCH 071/173] Fixes --- src/displayapp/DisplayApp.cpp | 4 ++-- src/displayapp/screens/Notifications.cpp | 27 +++++++++++++++--------- src/displayapp/screens/Notifications.h | 2 ++ 3 files changed, 21 insertions(+), 12 deletions(-) diff --git a/src/displayapp/DisplayApp.cpp b/src/displayapp/DisplayApp.cpp index d4a73f5ee7..bdd703eed2 100644 --- a/src/displayapp/DisplayApp.cpp +++ b/src/displayapp/DisplayApp.cpp @@ -336,12 +336,12 @@ void DisplayApp::LoadApp(Apps app, DisplayApp::FullRefreshDirections direction) case Apps::Notifications: currentScreen = std::make_unique( - this, notificationManager, systemTask->nimble().alertService(), Screens::Notifications::Modes::Normal); + this, notificationManager, systemTask->nimble().alertService(), motorController, Screens::Notifications::Modes::Normal); ReturnApp(Apps::Clock, FullRefreshDirections::Up, TouchEvents::SwipeUp); break; case Apps::NotificationsPreview: currentScreen = std::make_unique( - this, notificationManager, systemTask->nimble().alertService(), Screens::Notifications::Modes::Preview); + this, notificationManager, systemTask->nimble().alertService(), motorController, Screens::Notifications::Modes::Preview); ReturnApp(Apps::Clock, FullRefreshDirections::Up, TouchEvents::SwipeUp); break; case Apps::Timer: diff --git a/src/displayapp/screens/Notifications.cpp b/src/displayapp/screens/Notifications.cpp index 5096917e3a..c061c1469d 100644 --- a/src/displayapp/screens/Notifications.cpp +++ b/src/displayapp/screens/Notifications.cpp @@ -11,6 +11,7 @@ extern lv_font_t jetbrains_mono_bold_20; Notifications::Notifications(DisplayApp* app, Pinetime::Controllers::NotificationManager& notificationManager, Pinetime::Controllers::AlertNotificationService& alertNotificationService, + Pinetime::Controllers::MotorController& motorController, Modes mode) : Screen(app), notificationManager {notificationManager}, alertNotificationService {alertNotificationService}, mode {mode} { notificationManager.ClearNewNotificationFlag(); @@ -35,16 +36,21 @@ Notifications::Notifications(DisplayApp* app, alertNotificationService); } - if (mode == Modes::Preview && notification.category != Controllers::NotificationManager::Categories::IncomingCall) { - timeoutLine = lv_line_create(lv_scr_act(), nullptr); + if (mode == Modes::Preview) { + if (notification.category == Controllers::NotificationManager::Categories::IncomingCall) { + motorController.StartRinging(); + } else { + motorController.RunForDuration(35); + timeoutLine = lv_line_create(lv_scr_act(), nullptr); - lv_obj_set_style_local_line_width(timeoutLine, LV_LINE_PART_MAIN, LV_STATE_DEFAULT, 3); - lv_obj_set_style_local_line_color(timeoutLine, LV_LINE_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_WHITE); - lv_obj_set_style_local_line_rounded(timeoutLine, LV_LINE_PART_MAIN, LV_STATE_DEFAULT, true); + lv_obj_set_style_local_line_width(timeoutLine, LV_LINE_PART_MAIN, LV_STATE_DEFAULT, 3); + lv_obj_set_style_local_line_color(timeoutLine, LV_LINE_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_WHITE); + lv_obj_set_style_local_line_rounded(timeoutLine, LV_LINE_PART_MAIN, LV_STATE_DEFAULT, true); - lv_line_set_points(timeoutLine, timeoutLinePoints, 2); - timeoutTickCountStart = xTaskGetTickCount(); - timeoutTickCountEnd = timeoutTickCountStart + (5 * 1024); + lv_line_set_points(timeoutLine, timeoutLinePoints, 2); + timeoutTickCountStart = xTaskGetTickCount(); + timeoutTickCountEnd = timeoutTickCountStart + (5 * 1024); + } } } @@ -68,8 +74,9 @@ bool Notifications::Refresh() { } bool Notifications::OnTouchEvent(Pinetime::Applications::TouchEvents event) { - if (mode != Modes::Normal) - return true; + if (mode != Modes::Normal) { + return false; + } switch (event) { case Pinetime::Applications::TouchEvents::SwipeDown: { diff --git a/src/displayapp/screens/Notifications.h b/src/displayapp/screens/Notifications.h index 9244e9fa24..a02d9b465a 100644 --- a/src/displayapp/screens/Notifications.h +++ b/src/displayapp/screens/Notifications.h @@ -5,6 +5,7 @@ #include #include "Screen.h" #include "components/ble/NotificationManager.h" +#include "components/motor/MotorController.h" namespace Pinetime { namespace Controllers { @@ -19,6 +20,7 @@ namespace Pinetime { explicit Notifications(DisplayApp* app, Pinetime::Controllers::NotificationManager& notificationManager, Pinetime::Controllers::AlertNotificationService& alertNotificationService, + Pinetime::Controllers::MotorController& motorController, Modes mode); ~Notifications() override; From 09aaa5871071857dbcd955ce8ea8e33e95960678 Mon Sep 17 00:00:00 2001 From: Riku Isokoski Date: Sun, 1 Aug 2021 16:19:09 +0300 Subject: [PATCH 072/173] Remove floating point calculation --- src/components/battery/BatteryController.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/battery/BatteryController.cpp b/src/components/battery/BatteryController.cpp index e334eeacb6..f8a64ecd18 100644 --- a/src/components/battery/BatteryController.cpp +++ b/src/components/battery/BatteryController.cpp @@ -61,9 +61,9 @@ void Battery::SaadcEventHandler(nrfx_saadc_evt_t const* p_event) { // A hardware voltage divider divides the battery voltage by 2 // ADC gain is 1/4 // thus adc_voltage = battery_voltage / 2 * gain = battery_voltage / 8 - // reference_voltage is 0.6V + // reference_voltage is 600mV // p_event->data.done.p_buffer[0] = (adc_voltage / reference_voltage) * 1024 - voltage = p_event->data.done.p_buffer[0] * (0.6 * 8 * 1000) / 1024; + voltage = p_event->data.done.p_buffer[0] * (8 * 600) / 1024; if (voltage > battery_max) { percentRemaining = 100; From f9319dfb91a38c773b4af221f2fd0d975cf061f2 Mon Sep 17 00:00:00 2001 From: Riku Isokoski Date: Sun, 1 Aug 2021 21:19:33 +0300 Subject: [PATCH 073/173] Remove leftover --- src/systemtask/SystemTask.cpp | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/systemtask/SystemTask.cpp b/src/systemtask/SystemTask.cpp index 7426ac2f6d..3553f449fd 100644 --- a/src/systemtask/SystemTask.cpp +++ b/src/systemtask/SystemTask.cpp @@ -266,11 +266,6 @@ void SystemTask::Work() { if (isSleeping && !isWakingUp) { GoToRunning(); } - if (notificationManager.GetLastNotification().category == Controllers::NotificationManager::Categories::IncomingCall) { - motorController.StartRinging(); - } else { - motorController.RunForDuration(35); - } displayApp.PushMessage(Pinetime::Applications::Display::Messages::NewNotification); break; case Messages::OnTimerDone: From 28abeae21bb370c45d26912bba4737a1cc6ddca7 Mon Sep 17 00:00:00 2001 From: hubmartin Date: Mon, 2 Aug 2021 21:37:48 +0200 Subject: [PATCH 074/173] DRAFT: Put gpio pins to separate file --- src/CMakeLists.txt | 1 + src/components/battery/BatteryController.h | 3 ++- src/drivers/Cst816s.h | 3 ++- src/drivers/PinMap.h | 25 ++++++++++++++++++++++ src/systemtask/SystemTask.h | 3 ++- 5 files changed, 32 insertions(+), 3 deletions(-) create mode 100644 src/drivers/PinMap.h diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 40e1f2a554..24b5ae4ac1 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -615,6 +615,7 @@ set(INCLUDE_FILES drivers/DebugPins.h drivers/InternalFlash.h drivers/Hrs3300.h + drivers/PinMap.h drivers/Bma421.h drivers/Bma421_C/bma4.c drivers/Bma421_C/bma423.c diff --git a/src/components/battery/BatteryController.h b/src/components/battery/BatteryController.h index 1333ad0e77..cd66ff8f14 100644 --- a/src/components/battery/BatteryController.h +++ b/src/components/battery/BatteryController.h @@ -3,6 +3,7 @@ #include #include #include +#include namespace Pinetime { namespace Controllers { @@ -72,7 +73,7 @@ namespace Pinetime { static constexpr uint8_t percentRemainingSamples = 5; CircBuffer percentRemainingBuffer {}; - static constexpr uint32_t chargingPin = 12; + static constexpr uint32_t chargingPin = PINMAP_CHARGING_PIN; static constexpr uint32_t powerPresentPin = 19; static constexpr nrf_saadc_input_t batteryVoltageAdcInput = NRF_SAADC_INPUT_AIN7; uint16_t voltage = 0; diff --git a/src/drivers/Cst816s.h b/src/drivers/Cst816s.h index 14c296eaba..fa53907aa9 100644 --- a/src/drivers/Cst816s.h +++ b/src/drivers/Cst816s.h @@ -1,6 +1,7 @@ #pragma once #include "TwiMaster.h" +#include namespace Pinetime { namespace Drivers { @@ -40,7 +41,7 @@ namespace Pinetime { private: static constexpr uint8_t pinIrq = 28; - static constexpr uint8_t pinReset = 10; + static constexpr uint8_t pinReset = PINMAP_CST816S_RESET_PIN; static constexpr uint8_t lastTouchId = 0x0f; static constexpr uint8_t touchPointNumIndex = 2; static constexpr uint8_t touchMiscIndex = 8; diff --git a/src/drivers/PinMap.h b/src/drivers/PinMap.h new file mode 100644 index 0000000000..61bb10e496 --- /dev/null +++ b/src/drivers/PinMap.h @@ -0,0 +1,25 @@ +#pragma once + +#ifdef WATCH_P8 + +// BatteryController.h +#define PINMAP_CHARGING_PIN 19 + +// Cst816s.h +#define PINMAP_CST816S_RESET_PIN 13 + +// SystemTask.h +#define PINMAP_BUTTON_PIN 17 + +#else + +// BatteryController.h +#define PINMAP_CHARGING_PIN 12 + +// Cst816s.h +#define PINMAP_CST816S_RESET_PIN 10 + +// SystemTask.h +#define PINMAP_BUTTON_PIN 13 + +#endif \ No newline at end of file diff --git a/src/systemtask/SystemTask.h b/src/systemtask/SystemTask.h index ba4342987b..2756f77415 100644 --- a/src/systemtask/SystemTask.h +++ b/src/systemtask/SystemTask.h @@ -8,6 +8,7 @@ #include #include #include +#include #include #include "SystemMonitor.h" @@ -120,7 +121,7 @@ namespace Pinetime { static constexpr uint8_t pinSpiMiso = 4; static constexpr uint8_t pinSpiCsn = 25; static constexpr uint8_t pinLcdDataCommand = 18; - static constexpr uint8_t pinButton = 13; + static constexpr uint8_t pinButton = PINMAP_BUTTON_PIN; static constexpr uint8_t pinTouchIrq = 28; static constexpr uint8_t pinPowerPresentIrq = 19; From f244c960d3848096b60f735e705819f05a0459d7 Mon Sep 17 00:00:00 2001 From: Martin Hub Date: Tue, 3 Aug 2021 17:41:34 +0200 Subject: [PATCH 075/173] Update ota-gadgetbridge-nrfconnect.md --- doc/gettingStarted/ota-gadgetbridge-nrfconnect.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/doc/gettingStarted/ota-gadgetbridge-nrfconnect.md b/doc/gettingStarted/ota-gadgetbridge-nrfconnect.md index 1187a9b745..2f2dd55e97 100644 --- a/doc/gettingStarted/ota-gadgetbridge-nrfconnect.md +++ b/doc/gettingStarted/ota-gadgetbridge-nrfconnect.md @@ -88,6 +88,10 @@ If you are using OpenOCD with a STLinkV2, you can find more info [on this page]( ### Using Gadgetbridge Good news! Gadgetbridge **automatically** synchronizes the time when connecting to your PineTime! +### Using any Chromium-based web browser +You can use it from your PC, Mac, Android. Browsers now have BLE support. +https://hubmartin.github.io/WebBLEWatch/ + ### Using NRFConnect You must enable the **CTS** *GATT server* into NRFConnect so that InfiniTime can synchronize the time with your smartphone. From 2992f4afd286d26068bba0afdd9337ab6d96aa15 Mon Sep 17 00:00:00 2001 From: Martin Hub Date: Tue, 3 Aug 2021 17:56:02 +0200 Subject: [PATCH 076/173] Add FW validation note after DFU flash --- doc/gettingStarted/ota-gadgetbridge-nrfconnect.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/doc/gettingStarted/ota-gadgetbridge-nrfconnect.md b/doc/gettingStarted/ota-gadgetbridge-nrfconnect.md index 1187a9b745..86bbab8692 100644 --- a/doc/gettingStarted/ota-gadgetbridge-nrfconnect.md +++ b/doc/gettingStarted/ota-gadgetbridge-nrfconnect.md @@ -47,6 +47,8 @@ Read carefully the warning and tap **Install**: Wait for the transfer to finish. Your PineTime should reset and reboot with the new version of InfiniTime! +Don't forget to **validate** your firmware. In the InfiniTime go to the settings (swipe right, select gear icon) and Firmware option and click **validate**. Otherwise after reboot the previous firmware will be used. + ![Gadgetbridge 5](gadgetbridge5.jpg) ### Using NRFConnect @@ -64,6 +66,8 @@ Select **Distribution packet (ZIP)**: Browse to the DFU file you downloaded previously, the DFU transfer will start automatically. When the transfer is finished, your PineTime will reset and restart on the new version of InfiniTime! +Don't forget to **validate** your firmware. In the InfiniTime go to the settings (swipe right, select gear icon) and Firmware option and click **validate**. Otherwise after reboot the previous firmware will be used. + ![NRFConnect 3](nrfconnect3.jpg) ## How to flash InfiniTime using the SWD interface From c30e54c7b743f7c6364d35412d74ba9be8dc3c04 Mon Sep 17 00:00:00 2001 From: Riku Isokoski Date: Tue, 3 Aug 2021 19:49:54 +0300 Subject: [PATCH 077/173] Make it easier for new people to find instructions --- README.md | 22 ++++++---------------- 1 file changed, 6 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index d9de40029f..af91616c94 100644 --- a/README.md +++ b/README.md @@ -1,20 +1,15 @@ -# PineTime +## New to InfiniTime? -[![Build PineTime Firmware](https://github.com/JF002/InfiniTime/workflows/Build%20PineTime%20Firmware/badge.svg?branch=master)](https://github.com/JF002/InfiniTime/actions) - -> The PineTime is a free and open source smartwatch capable of running custom-built open operating systems. Some of the notable features include a heart rate monitor, a week-long battery as well as a capacitive touch IPS display that is legible in direct sunlight. It is a fully community driven side-project, which means that it will ultimately be up to the developers and end-users to determine when they deem the PineTime ready to ship. - -> We envision the PineTime as a companion for not only your PinePhone but also for your favorite devices — any phone, tablet, or even PC. - -*https://www.pine64.org/pinetime/* - -The **Pinetime** smartwatch is built around the NRF52832 MCU (512KB Flash, 64KB RAM), a 240*240 LCD display driven by the ST7789 controller, an accelerometer, a heart rate sensor, and a vibration motor. + - [Getting started with InfiniTime 1.0 (quick user guide, update bootloader and InfiniTime,...)](doc/gettingStarted/gettingStarted-1.0.md) + - [Flash, upgrade (OTA), time synchronization,...](doc/gettingStarted/ota-gadgetbridge-nrfconnect.md) # InfiniTime +[![Build PineTime Firmware](https://github.com/JF002/InfiniTime/workflows/Build%20PineTime%20Firmware/badge.svg?branch=master)](https://github.com/JF002/InfiniTime/actions) + ![InfiniTime logo](images/infinitime-logo.jpg "InfiniTime Logo") -The goal of this project is to design an open-source firmware for the Pinetime smartwatch : +The goal of this project is to design an open-source firmware for the [Pinetime smartwatch](https://www.pine64.org/pinetime/) : - Code written in **modern C++**; - Build system based on **CMake**; @@ -75,11 +70,6 @@ As of now, here is the list of achievements of this project: ## Documentation -### Getting started - - - [Getting started with InfiniTime 1.0 (quick user guide, update bootloader and InfiniTime,...)](doc/gettingStarted/gettingStarted-1.0.md) - - [Flash, upgrade (OTA), time synchronization,...](doc/gettingStarted/ota-gadgetbridge-nrfconnect.md) - ### Develop - [Generate the fonts and symbols](src/displayapp/fonts/README.md) From 285ac9e4c86f6f1fb96130d2df038fff7ec49ad5 Mon Sep 17 00:00:00 2001 From: Riku Isokoski Date: Tue, 3 Aug 2021 19:51:58 +0300 Subject: [PATCH 078/173] Move getting started slightly lower --- README.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index af91616c94..a6f0d3a659 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,3 @@ -## New to InfiniTime? - - - [Getting started with InfiniTime 1.0 (quick user guide, update bootloader and InfiniTime,...)](doc/gettingStarted/gettingStarted-1.0.md) - - [Flash, upgrade (OTA), time synchronization,...](doc/gettingStarted/ota-gadgetbridge-nrfconnect.md) - # InfiniTime [![Build PineTime Firmware](https://github.com/JF002/InfiniTime/workflows/Build%20PineTime%20Firmware/badge.svg?branch=master)](https://github.com/JF002/InfiniTime/actions) @@ -17,6 +12,11 @@ The goal of this project is to design an open-source firmware for the [Pinetime - Using **[LittleVGL/LVGL 7](https://lvgl.io/)** as UI library... - ... and **[NimBLE 1.3.0](https://github.com/apache/mynewt-nimble)** as BLE stack. +## New to InfiniTime? + + - [Getting started with InfiniTime 1.0 (quick user guide, update bootloader and InfiniTime,...)](doc/gettingStarted/gettingStarted-1.0.md) + - [Flash, upgrade (OTA), time synchronization,...](doc/gettingStarted/ota-gadgetbridge-nrfconnect.md) + ## Overview ![Pinetime screens](images/1.0.0/collage.png "PinetimeScreens") From b7aa04e1f55096d754a7cc291f02f3430f5a3cd9 Mon Sep 17 00:00:00 2001 From: hubmartin Date: Tue, 3 Aug 2021 20:32:23 +0200 Subject: [PATCH 079/173] PinMap with namespace and constexpr --- src/components/battery/BatteryController.cpp | 6 +-- src/components/battery/BatteryController.h | 2 - .../brightness/BrightnessController.cpp | 32 ++++++++-------- .../brightness/BrightnessController.h | 3 -- src/components/motor/MotorController.cpp | 9 +++-- src/components/motor/MotorController.h | 1 - src/drivers/Cst816s.cpp | 13 ++++--- src/drivers/Cst816s.h | 3 -- src/drivers/PinMap.h | 37 +++++++++++++++++++ src/main.cpp | 29 +++++---------- src/recoveryLoader.cpp | 19 ++++------ src/systemtask/SystemTask.cpp | 20 +++++----- src/systemtask/SystemTask.h | 9 ----- 13 files changed, 96 insertions(+), 87 deletions(-) diff --git a/src/components/battery/BatteryController.cpp b/src/components/battery/BatteryController.cpp index fa476ea302..d543ccd947 100644 --- a/src/components/battery/BatteryController.cpp +++ b/src/components/battery/BatteryController.cpp @@ -12,12 +12,12 @@ Battery::Battery() { } void Battery::Init() { - nrf_gpio_cfg_input(chargingPin, static_cast GPIO_PIN_CNF_PULL_Pullup); + nrf_gpio_cfg_input(PinMap::Charging, static_cast GPIO_PIN_CNF_PULL_Pullup); } void Battery::Update() { - isCharging = !nrf_gpio_pin_read(chargingPin); - isPowerPresent = !nrf_gpio_pin_read(powerPresentPin); + isCharging = !nrf_gpio_pin_read(PinMap::Charging); + isPowerPresent = !nrf_gpio_pin_read(PinMap::PowerPresent); if (isReading) { return; diff --git a/src/components/battery/BatteryController.h b/src/components/battery/BatteryController.h index cd66ff8f14..993ef6c5c2 100644 --- a/src/components/battery/BatteryController.h +++ b/src/components/battery/BatteryController.h @@ -73,8 +73,6 @@ namespace Pinetime { static constexpr uint8_t percentRemainingSamples = 5; CircBuffer percentRemainingBuffer {}; - static constexpr uint32_t chargingPin = PINMAP_CHARGING_PIN; - static constexpr uint32_t powerPresentPin = 19; static constexpr nrf_saadc_input_t batteryVoltageAdcInput = NRF_SAADC_INPUT_AIN7; uint16_t voltage = 0; int percentRemaining = -1; diff --git a/src/components/brightness/BrightnessController.cpp b/src/components/brightness/BrightnessController.cpp index 8ad987d1f4..350dfeeb07 100644 --- a/src/components/brightness/BrightnessController.cpp +++ b/src/components/brightness/BrightnessController.cpp @@ -1,13 +1,13 @@ #include "BrightnessController.h" #include #include "displayapp/screens/Symbols.h" - +#include "drivers/PinMap.h" using namespace Pinetime::Controllers; void BrightnessController::Init() { - nrf_gpio_cfg_output(pinLcdBacklight1); - nrf_gpio_cfg_output(pinLcdBacklight2); - nrf_gpio_cfg_output(pinLcdBacklight3); + nrf_gpio_cfg_output(PinMap::LcdBacklight1); + nrf_gpio_cfg_output(PinMap::LcdBacklight2); + nrf_gpio_cfg_output(PinMap::LcdBacklight3); Set(level); } @@ -16,24 +16,24 @@ void BrightnessController::Set(BrightnessController::Levels level) { switch (level) { default: case Levels::High: - nrf_gpio_pin_clear(pinLcdBacklight1); - nrf_gpio_pin_clear(pinLcdBacklight2); - nrf_gpio_pin_clear(pinLcdBacklight3); + nrf_gpio_pin_clear(PinMap::LcdBacklight1); + nrf_gpio_pin_clear(PinMap::LcdBacklight2); + nrf_gpio_pin_clear(PinMap::LcdBacklight3); break; case Levels::Medium: - nrf_gpio_pin_clear(pinLcdBacklight1); - nrf_gpio_pin_clear(pinLcdBacklight2); - nrf_gpio_pin_set(pinLcdBacklight3); + nrf_gpio_pin_clear(PinMap::LcdBacklight1); + nrf_gpio_pin_clear(PinMap::LcdBacklight2); + nrf_gpio_pin_set(PinMap::LcdBacklight3); break; case Levels::Low: - nrf_gpio_pin_clear(pinLcdBacklight1); - nrf_gpio_pin_set(pinLcdBacklight2); - nrf_gpio_pin_set(pinLcdBacklight3); + nrf_gpio_pin_clear(PinMap::LcdBacklight1); + nrf_gpio_pin_set(PinMap::LcdBacklight2); + nrf_gpio_pin_set(PinMap::LcdBacklight3); break; case Levels::Off: - nrf_gpio_pin_set(pinLcdBacklight1); - nrf_gpio_pin_set(pinLcdBacklight2); - nrf_gpio_pin_set(pinLcdBacklight3); + nrf_gpio_pin_set(PinMap::LcdBacklight1); + nrf_gpio_pin_set(PinMap::LcdBacklight2); + nrf_gpio_pin_set(PinMap::LcdBacklight3); break; } } diff --git a/src/components/brightness/BrightnessController.h b/src/components/brightness/BrightnessController.h index c47158a910..0d7ac2ffa6 100644 --- a/src/components/brightness/BrightnessController.h +++ b/src/components/brightness/BrightnessController.h @@ -22,9 +22,6 @@ namespace Pinetime { const char* ToString(); private: - static constexpr uint8_t pinLcdBacklight1 = 14; - static constexpr uint8_t pinLcdBacklight2 = 22; - static constexpr uint8_t pinLcdBacklight3 = 23; Levels level = Levels::High; Levels backupLevel = Levels::High; }; diff --git a/src/components/motor/MotorController.cpp b/src/components/motor/MotorController.cpp index 3afa0cedd8..1f20936874 100644 --- a/src/components/motor/MotorController.cpp +++ b/src/components/motor/MotorController.cpp @@ -2,6 +2,7 @@ #include #include "systemtask/SystemTask.h" #include "app_timer.h" +#include "drivers/PinMap.h" APP_TIMER_DEF(vibTimer); @@ -11,8 +12,8 @@ MotorController::MotorController(Controllers::Settings& settingsController) : se } void MotorController::Init() { - nrf_gpio_cfg_output(pinMotor); - nrf_gpio_pin_set(pinMotor); + nrf_gpio_cfg_output(PinMap::Motor); + nrf_gpio_pin_set(PinMap::Motor); app_timer_create(&vibTimer, APP_TIMER_MODE_SINGLE_SHOT, vibrate); } @@ -21,11 +22,11 @@ void MotorController::SetDuration(uint8_t motorDuration) { if (settingsController.GetVibrationStatus() == Controllers::Settings::Vibration::OFF) return; - nrf_gpio_pin_clear(pinMotor); + nrf_gpio_pin_clear(PinMap::Motor); /* Start timer for motorDuration miliseconds and timer triggers vibrate() when it finishes*/ app_timer_start(vibTimer, APP_TIMER_TICKS(motorDuration), NULL); } void MotorController::vibrate(void* p_context) { - nrf_gpio_pin_set(pinMotor); + nrf_gpio_pin_set(PinMap::Motor); } \ No newline at end of file diff --git a/src/components/motor/MotorController.h b/src/components/motor/MotorController.h index df61af7849..00cd193768 100644 --- a/src/components/motor/MotorController.h +++ b/src/components/motor/MotorController.h @@ -6,7 +6,6 @@ namespace Pinetime { namespace Controllers { - static constexpr uint8_t pinMotor = 16; class MotorController { public: diff --git a/src/drivers/Cst816s.cpp b/src/drivers/Cst816s.cpp index fd9792b3f4..b039ab0fd2 100644 --- a/src/drivers/Cst816s.cpp +++ b/src/drivers/Cst816s.cpp @@ -3,6 +3,7 @@ #include #include #include +#include "drivers/PinMap.h" using namespace Pinetime::Drivers; @@ -18,12 +19,12 @@ Cst816S::Cst816S(TwiMaster& twiMaster, uint8_t twiAddress) : twiMaster {twiMaste } void Cst816S::Init() { - nrf_gpio_cfg_output(pinReset); - nrf_gpio_pin_set(pinReset); + nrf_gpio_cfg_output(PinMap::Cst816sReset); + nrf_gpio_pin_set(PinMap::Cst816sReset); vTaskDelay(50); - nrf_gpio_pin_clear(pinReset); + nrf_gpio_pin_clear(PinMap::Cst816sReset); vTaskDelay(5); - nrf_gpio_pin_set(pinReset); + nrf_gpio_pin_set(PinMap::Cst816sReset); vTaskDelay(50); // Wake the touchpanel up @@ -78,9 +79,9 @@ Cst816S::TouchInfos Cst816S::GetTouchInfo() { } void Cst816S::Sleep() { - nrf_gpio_pin_clear(pinReset); + nrf_gpio_pin_clear(PinMap::Cst816sReset); vTaskDelay(5); - nrf_gpio_pin_set(pinReset); + nrf_gpio_pin_set(PinMap::Cst816sReset); vTaskDelay(50); static constexpr uint8_t sleepValue = 0x03; twiMaster.Write(twiAddress, 0xA5, &sleepValue, 1); diff --git a/src/drivers/Cst816s.h b/src/drivers/Cst816s.h index fa53907aa9..b621510494 100644 --- a/src/drivers/Cst816s.h +++ b/src/drivers/Cst816s.h @@ -1,7 +1,6 @@ #pragma once #include "TwiMaster.h" -#include namespace Pinetime { namespace Drivers { @@ -40,8 +39,6 @@ namespace Pinetime { void Wakeup(); private: - static constexpr uint8_t pinIrq = 28; - static constexpr uint8_t pinReset = PINMAP_CST816S_RESET_PIN; static constexpr uint8_t lastTouchId = 0x0f; static constexpr uint8_t touchPointNumIndex = 2; static constexpr uint8_t touchMiscIndex = 8; diff --git a/src/drivers/PinMap.h b/src/drivers/PinMap.h index 61bb10e496..117cf11fb9 100644 --- a/src/drivers/PinMap.h +++ b/src/drivers/PinMap.h @@ -1,5 +1,42 @@ #pragma once +namespace Pinetime { + namespace PinMap { + #define WATCH_P8 + #ifdef WATCH_P8 + static constexpr uint8_t Charging = 19; + static constexpr uint8_t Cst816sReset = 13; + static constexpr uint8_t Button = 17; + #else + static constexpr uint8_t Charging = 12; + static constexpr uint8_t Cst816sReset = 10; + static constexpr uint8_t Button = 13; + #endif + + static constexpr uint8_t Cst816sIrq = 28; + static constexpr uint8_t PowerPresent = 19; + + static constexpr uint8_t Motor = 16; + + static constexpr uint8_t LcdBacklight1 = 14; + static constexpr uint8_t LcdBacklight2 = 22; + static constexpr uint8_t LcdBacklight3 = 23; + + static constexpr uint8_t SpiSck = 2; + static constexpr uint8_t SpiMosi = 3; + static constexpr uint8_t SpiMiso = 4; + + static constexpr uint8_t SpiFlashCsn = 5; + static constexpr uint8_t SpiLcdCsn = 25; + static constexpr uint8_t LcdDataCommand = 18; + + static constexpr uint8_t TwiScl = 7; + static constexpr uint8_t TwiSda = 6; + + } +} + + #ifdef WATCH_P8 // BatteryController.h diff --git a/src/main.cpp b/src/main.cpp index ffbba5e765..408ce4375a 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -42,6 +42,7 @@ #include "drivers/St7789.h" #include "drivers/TwiMaster.h" #include "drivers/Cst816s.h" +#include "drivers/PinMap.h" #include "systemtask/SystemTask.h" #if NRF_LOG_ENABLED @@ -52,14 +53,6 @@ Pinetime::Logging::NrfLogger logger; Pinetime::Logging::DummyLogger logger; #endif -static constexpr uint8_t pinSpiSck = 2; -static constexpr uint8_t pinSpiMosi = 3; -static constexpr uint8_t pinSpiMiso = 4; -static constexpr uint8_t pinSpiFlashCsn = 5; -static constexpr uint8_t pinLcdCsn = 25; -static constexpr uint8_t pinLcdDataCommand = 18; -static constexpr uint8_t pinTwiScl = 7; -static constexpr uint8_t pinTwiSda = 6; static constexpr uint8_t touchPanelTwiAddress = 0x15; static constexpr uint8_t motionSensorTwiAddress = 0x18; static constexpr uint8_t heartRateSensorTwiAddress = 0x44; @@ -68,14 +61,14 @@ Pinetime::Drivers::SpiMaster spi {Pinetime::Drivers::SpiMaster::SpiModule::SPI0, {Pinetime::Drivers::SpiMaster::BitOrder::Msb_Lsb, Pinetime::Drivers::SpiMaster::Modes::Mode3, Pinetime::Drivers::SpiMaster::Frequencies::Freq8Mhz, - pinSpiSck, - pinSpiMosi, - pinSpiMiso}}; + Pinetime::PinMap::SpiSck, + Pinetime::PinMap::SpiMosi, + Pinetime::PinMap::SpiMiso}}; -Pinetime::Drivers::Spi lcdSpi {spi, pinLcdCsn}; -Pinetime::Drivers::St7789 lcd {lcdSpi, pinLcdDataCommand}; +Pinetime::Drivers::Spi lcdSpi {spi, Pinetime::PinMap::SpiLcdCsn}; +Pinetime::Drivers::St7789 lcd {lcdSpi, Pinetime::PinMap::LcdDataCommand}; -Pinetime::Drivers::Spi flashSpi {spi, pinSpiFlashCsn}; +Pinetime::Drivers::Spi flashSpi {spi, Pinetime::PinMap::SpiFlashCsn}; Pinetime::Drivers::SpiNorFlash spiNorFlash {flashSpi}; // The TWI device should work @ up to 400Khz but there is a HW bug which prevent it from @@ -83,7 +76,7 @@ Pinetime::Drivers::SpiNorFlash spiNorFlash {flashSpi}; // at ~390Khz with correct timings. static constexpr uint32_t MaxTwiFrequencyWithoutHardwareBug {0x06200000}; Pinetime::Drivers::TwiMaster twiMaster {Pinetime::Drivers::TwiMaster::Modules::TWIM1, - Pinetime::Drivers::TwiMaster::Parameters {MaxTwiFrequencyWithoutHardwareBug, pinTwiSda, pinTwiScl}}; + Pinetime::Drivers::TwiMaster::Parameters {MaxTwiFrequencyWithoutHardwareBug, Pinetime::PinMap::TwiSda, Pinetime::PinMap::TwiScl}}; Pinetime::Drivers::Cst816S touchPanel {twiMaster, touchPanelTwiAddress}; #ifdef PINETIME_IS_RECOVERY static constexpr bool isFactory = true; @@ -106,8 +99,6 @@ Pinetime::Controllers::Battery batteryController; Pinetime::Controllers::Ble bleController; void ble_manager_set_ble_connection_callback(void (*connection)()); void ble_manager_set_ble_disconnection_callback(void (*disconnection)()); -static constexpr uint8_t pinTouchIrq = 28; -static constexpr uint8_t pinPowerPresentIrq = 19; Pinetime::Controllers::HeartRateController heartRateController; Pinetime::Applications::HeartRateTask heartRateApp(heartRateSensor, heartRateController); @@ -161,14 +152,14 @@ Pinetime::System::SystemTask systemTask(spi, fs); void nrfx_gpiote_evt_handler(nrfx_gpiote_pin_t pin, nrf_gpiote_polarity_t action) { - if (pin == pinTouchIrq) { + if (pin == Pinetime::PinMap::Cst816sIrq) { systemTask.OnTouchEvent(); return; } BaseType_t xHigherPriorityTaskWoken = pdFALSE; - if (pin == pinPowerPresentIrq and action == NRF_GPIOTE_POLARITY_TOGGLE) { + if (pin == Pinetime::PinMap::PowerPresent and action == NRF_GPIOTE_POLARITY_TOGGLE) { xTimerStartFromISR(debounceChargeTimer, &xHigherPriorityTaskWoken); portYIELD_FROM_ISR(xHigherPriorityTaskWoken); return; diff --git a/src/recoveryLoader.cpp b/src/recoveryLoader.cpp index 9818179dee..acec14c8ad 100644 --- a/src/recoveryLoader.cpp +++ b/src/recoveryLoader.cpp @@ -15,6 +15,7 @@ #include #include #include "recoveryImage.h" +#include "drivers/PinMap.h" #include "displayapp/icons/infinitime/infinitime-nb.c" #include "components/rle/RleDecoder.h" @@ -27,12 +28,6 @@ Pinetime::Logging::NrfLogger logger; Pinetime::Logging::DummyLogger logger; #endif -static constexpr uint8_t pinSpiSck = 2; -static constexpr uint8_t pinSpiMosi = 3; -static constexpr uint8_t pinSpiMiso = 4; -static constexpr uint8_t pinSpiFlashCsn = 5; -static constexpr uint8_t pinLcdCsn = 25; -static constexpr uint8_t pinLcdDataCommand = 18; static constexpr uint8_t displayWidth = 240; static constexpr uint8_t displayHeight = 240; @@ -45,14 +40,14 @@ Pinetime::Drivers::SpiMaster spi {Pinetime::Drivers::SpiMaster::SpiModule::SPI0, {Pinetime::Drivers::SpiMaster::BitOrder::Msb_Lsb, Pinetime::Drivers::SpiMaster::Modes::Mode3, Pinetime::Drivers::SpiMaster::Frequencies::Freq8Mhz, - pinSpiSck, - pinSpiMosi, - pinSpiMiso}}; -Pinetime::Drivers::Spi flashSpi {spi, pinSpiFlashCsn}; + Pinetime::PinMap::SpiSck, + Pinetime::PinMap::SpiMosi, + Pinetime::PinMap::SpiMiso}}; +Pinetime::Drivers::Spi flashSpi {spi, Pinetime::PinMap::SpiFlashCsn}; Pinetime::Drivers::SpiNorFlash spiNorFlash {flashSpi}; -Pinetime::Drivers::Spi lcdSpi {spi, pinLcdCsn}; -Pinetime::Drivers::St7789 lcd {lcdSpi, pinLcdDataCommand}; +Pinetime::Drivers::Spi lcdSpi {spi, Pinetime::PinMap::SpiLcdCsn}; +Pinetime::Drivers::St7789 lcd {lcdSpi, Pinetime::PinMap::LcdDataCommand}; Pinetime::Components::Gfx gfx {lcd}; Pinetime::Controllers::BrightnessController brightnessController; diff --git a/src/systemtask/SystemTask.cpp b/src/systemtask/SystemTask.cpp index 8915ce7448..e03a57bd4d 100644 --- a/src/systemtask/SystemTask.cpp +++ b/src/systemtask/SystemTask.cpp @@ -21,8 +21,10 @@ #include "drivers/SpiNorFlash.h" #include "drivers/TwiMaster.h" #include "drivers/Hrs3300.h" +#include "drivers/PinMap.h" #include "main.h" + #include using namespace Pinetime::System; @@ -149,7 +151,7 @@ void SystemTask::Work() { heartRateSensor.Disable(); heartRateApp.Start(); - nrf_gpio_cfg_sense_input(pinButton, (nrf_gpio_pin_pull_t) GPIO_PIN_CNF_PULL_Pulldown, (nrf_gpio_pin_sense_t) GPIO_PIN_CNF_SENSE_High); + nrf_gpio_cfg_sense_input(PinMap::Button, (nrf_gpio_pin_pull_t) GPIO_PIN_CNF_PULL_Pulldown, (nrf_gpio_pin_sense_t) GPIO_PIN_CNF_SENSE_High); nrf_gpio_cfg_output(15); nrf_gpio_pin_set(15); @@ -160,9 +162,9 @@ void SystemTask::Work() { pinConfig.sense = (nrf_gpiote_polarity_t) NRF_GPIOTE_POLARITY_HITOLO; pinConfig.pull = (nrf_gpio_pin_pull_t) GPIO_PIN_CNF_PULL_Pulldown; - nrfx_gpiote_in_init(pinButton, &pinConfig, nrfx_gpiote_evt_handler); + nrfx_gpiote_in_init(PinMap::Button, &pinConfig, nrfx_gpiote_evt_handler); - nrf_gpio_cfg_sense_input(pinTouchIrq, (nrf_gpio_pin_pull_t) GPIO_PIN_CNF_PULL_Pullup, (nrf_gpio_pin_sense_t) GPIO_PIN_CNF_SENSE_Low); + nrf_gpio_cfg_sense_input(PinMap::Cst816sIrq, (nrf_gpio_pin_pull_t) GPIO_PIN_CNF_PULL_Pullup, (nrf_gpio_pin_sense_t) GPIO_PIN_CNF_SENSE_Low); pinConfig.skip_gpio_setup = true; pinConfig.hi_accuracy = false; @@ -170,19 +172,19 @@ void SystemTask::Work() { pinConfig.sense = (nrf_gpiote_polarity_t) NRF_GPIOTE_POLARITY_HITOLO; pinConfig.pull = (nrf_gpio_pin_pull_t) GPIO_PIN_CNF_PULL_Pullup; - nrfx_gpiote_in_init(pinTouchIrq, &pinConfig, nrfx_gpiote_evt_handler); + nrfx_gpiote_in_init(PinMap::Cst816sIrq, &pinConfig, nrfx_gpiote_evt_handler); pinConfig.sense = NRF_GPIOTE_POLARITY_TOGGLE; pinConfig.pull = NRF_GPIO_PIN_NOPULL; pinConfig.is_watcher = false; pinConfig.hi_accuracy = false; pinConfig.skip_gpio_setup = true; - nrfx_gpiote_in_init(pinPowerPresentIrq, &pinConfig, nrfx_gpiote_evt_handler); + nrfx_gpiote_in_init(PinMap::PowerPresent, &pinConfig, nrfx_gpiote_evt_handler); - if (nrf_gpio_pin_read(pinPowerPresentIrq)) { - nrf_gpio_cfg_sense_input(pinPowerPresentIrq, NRF_GPIO_PIN_NOPULL, NRF_GPIO_PIN_SENSE_LOW); + if (nrf_gpio_pin_read(PinMap::PowerPresent)) { + nrf_gpio_cfg_sense_input(PinMap::PowerPresent, NRF_GPIO_PIN_NOPULL, NRF_GPIO_PIN_SENSE_LOW); } else { - nrf_gpio_cfg_sense_input(pinPowerPresentIrq, NRF_GPIO_PIN_NOPULL, NRF_GPIO_PIN_SENSE_HIGH); + nrf_gpio_cfg_sense_input(PinMap::PowerPresent, NRF_GPIO_PIN_NOPULL, NRF_GPIO_PIN_SENSE_HIGH); } idleTimer = xTimerCreate("idleTimer", pdMS_TO_TICKS(2000), pdFALSE, this, IdleTimerCallback); @@ -354,7 +356,7 @@ void SystemTask::Work() { monitor.Process(); uint32_t systick_counter = nrf_rtc_counter_get(portNRF_RTC_REG); dateTimeController.UpdateTime(systick_counter); - if (!nrf_gpio_pin_read(pinButton)) + if (!nrf_gpio_pin_read(PinMap::Button)) watchdog.Kick(); } // Clear diagnostic suppression diff --git a/src/systemtask/SystemTask.h b/src/systemtask/SystemTask.h index 2756f77415..e4da6b1a54 100644 --- a/src/systemtask/SystemTask.h +++ b/src/systemtask/SystemTask.h @@ -116,15 +116,6 @@ namespace Pinetime { Pinetime::Controllers::FS& fs; Pinetime::Controllers::NimbleController nimbleController; - static constexpr uint8_t pinSpiSck = 2; - static constexpr uint8_t pinSpiMosi = 3; - static constexpr uint8_t pinSpiMiso = 4; - static constexpr uint8_t pinSpiCsn = 25; - static constexpr uint8_t pinLcdDataCommand = 18; - static constexpr uint8_t pinButton = PINMAP_BUTTON_PIN; - static constexpr uint8_t pinTouchIrq = 28; - static constexpr uint8_t pinPowerPresentIrq = 19; - static void Process(void* instance); void Work(); void ReloadIdleTimer(); From b3e6da75148fcb54fdb5fe02f6bdc7d7d3905e98 Mon Sep 17 00:00:00 2001 From: hubmartin Date: Tue, 3 Aug 2021 20:40:27 +0200 Subject: [PATCH 080/173] Cleanup, set Pinetime as default --- src/components/battery/BatteryController.cpp | 1 + src/components/battery/BatteryController.h | 1 - src/drivers/PinMap.h | 58 ++++++-------------- 3 files changed, 18 insertions(+), 42 deletions(-) diff --git a/src/components/battery/BatteryController.cpp b/src/components/battery/BatteryController.cpp index d543ccd947..e2fce7f3c4 100644 --- a/src/components/battery/BatteryController.cpp +++ b/src/components/battery/BatteryController.cpp @@ -1,4 +1,5 @@ #include "BatteryController.h" +#include "drivers/PinMap.h" #include #include #include diff --git a/src/components/battery/BatteryController.h b/src/components/battery/BatteryController.h index 993ef6c5c2..5c7fa1f4a0 100644 --- a/src/components/battery/BatteryController.h +++ b/src/components/battery/BatteryController.h @@ -3,7 +3,6 @@ #include #include #include -#include namespace Pinetime { namespace Controllers { diff --git a/src/drivers/PinMap.h b/src/drivers/PinMap.h index 117cf11fb9..c8b091f1cf 100644 --- a/src/drivers/PinMap.h +++ b/src/drivers/PinMap.h @@ -2,61 +2,37 @@ namespace Pinetime { namespace PinMap { - #define WATCH_P8 + #ifdef WATCH_P8 + // COLMI P8 static constexpr uint8_t Charging = 19; static constexpr uint8_t Cst816sReset = 13; static constexpr uint8_t Button = 17; #else + // Pinetime static constexpr uint8_t Charging = 12; static constexpr uint8_t Cst816sReset = 10; static constexpr uint8_t Button = 13; #endif - static constexpr uint8_t Cst816sIrq = 28; - static constexpr uint8_t PowerPresent = 19; + static constexpr uint8_t Cst816sIrq = 28; + static constexpr uint8_t PowerPresent = 19; - static constexpr uint8_t Motor = 16; + static constexpr uint8_t Motor = 16; - static constexpr uint8_t LcdBacklight1 = 14; - static constexpr uint8_t LcdBacklight2 = 22; - static constexpr uint8_t LcdBacklight3 = 23; + static constexpr uint8_t LcdBacklight1 = 14; + static constexpr uint8_t LcdBacklight2 = 22; + static constexpr uint8_t LcdBacklight3 = 23; - static constexpr uint8_t SpiSck = 2; - static constexpr uint8_t SpiMosi = 3; - static constexpr uint8_t SpiMiso = 4; + static constexpr uint8_t SpiSck = 2; + static constexpr uint8_t SpiMosi = 3; + static constexpr uint8_t SpiMiso = 4; - static constexpr uint8_t SpiFlashCsn = 5; - static constexpr uint8_t SpiLcdCsn = 25; - static constexpr uint8_t LcdDataCommand = 18; - - static constexpr uint8_t TwiScl = 7; - static constexpr uint8_t TwiSda = 6; + static constexpr uint8_t SpiFlashCsn = 5; + static constexpr uint8_t SpiLcdCsn = 25; + static constexpr uint8_t LcdDataCommand = 18; + static constexpr uint8_t TwiScl = 7; + static constexpr uint8_t TwiSda = 6; } } - - -#ifdef WATCH_P8 - -// BatteryController.h -#define PINMAP_CHARGING_PIN 19 - -// Cst816s.h -#define PINMAP_CST816S_RESET_PIN 13 - -// SystemTask.h -#define PINMAP_BUTTON_PIN 17 - -#else - -// BatteryController.h -#define PINMAP_CHARGING_PIN 12 - -// Cst816s.h -#define PINMAP_CST816S_RESET_PIN 10 - -// SystemTask.h -#define PINMAP_BUTTON_PIN 13 - -#endif \ No newline at end of file From abd8f343e48bdfa1dc4c8604d843a5c2d8071bc0 Mon Sep 17 00:00:00 2001 From: hubmartin Date: Wed, 4 Aug 2021 14:43:04 +0200 Subject: [PATCH 081/173] Rename backlight level pins --- .../brightness/BrightnessController.cpp | 30 +++++++++---------- src/drivers/PinMap.h | 6 ++-- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/src/components/brightness/BrightnessController.cpp b/src/components/brightness/BrightnessController.cpp index 350dfeeb07..6c524679c1 100644 --- a/src/components/brightness/BrightnessController.cpp +++ b/src/components/brightness/BrightnessController.cpp @@ -5,9 +5,9 @@ using namespace Pinetime::Controllers; void BrightnessController::Init() { - nrf_gpio_cfg_output(PinMap::LcdBacklight1); - nrf_gpio_cfg_output(PinMap::LcdBacklight2); - nrf_gpio_cfg_output(PinMap::LcdBacklight3); + nrf_gpio_cfg_output(PinMap::LcdBacklightLow); + nrf_gpio_cfg_output(PinMap::LcdBacklightMedium); + nrf_gpio_cfg_output(PinMap::LcdBacklightHigh); Set(level); } @@ -16,24 +16,24 @@ void BrightnessController::Set(BrightnessController::Levels level) { switch (level) { default: case Levels::High: - nrf_gpio_pin_clear(PinMap::LcdBacklight1); - nrf_gpio_pin_clear(PinMap::LcdBacklight2); - nrf_gpio_pin_clear(PinMap::LcdBacklight3); + nrf_gpio_pin_clear(PinMap::LcdBacklightLow); + nrf_gpio_pin_clear(PinMap::LcdBacklightMedium); + nrf_gpio_pin_clear(PinMap::LcdBacklightHigh); break; case Levels::Medium: - nrf_gpio_pin_clear(PinMap::LcdBacklight1); - nrf_gpio_pin_clear(PinMap::LcdBacklight2); - nrf_gpio_pin_set(PinMap::LcdBacklight3); + nrf_gpio_pin_clear(PinMap::LcdBacklightLow); + nrf_gpio_pin_clear(PinMap::LcdBacklightMedium); + nrf_gpio_pin_set(PinMap::LcdBacklightHigh); break; case Levels::Low: - nrf_gpio_pin_clear(PinMap::LcdBacklight1); - nrf_gpio_pin_set(PinMap::LcdBacklight2); - nrf_gpio_pin_set(PinMap::LcdBacklight3); + nrf_gpio_pin_clear(PinMap::LcdBacklightLow); + nrf_gpio_pin_set(PinMap::LcdBacklightMedium); + nrf_gpio_pin_set(PinMap::LcdBacklightHigh); break; case Levels::Off: - nrf_gpio_pin_set(PinMap::LcdBacklight1); - nrf_gpio_pin_set(PinMap::LcdBacklight2); - nrf_gpio_pin_set(PinMap::LcdBacklight3); + nrf_gpio_pin_set(PinMap::LcdBacklightLow); + nrf_gpio_pin_set(PinMap::LcdBacklightMedium); + nrf_gpio_pin_set(PinMap::LcdBacklightHigh); break; } } diff --git a/src/drivers/PinMap.h b/src/drivers/PinMap.h index c8b091f1cf..57964020c6 100644 --- a/src/drivers/PinMap.h +++ b/src/drivers/PinMap.h @@ -20,9 +20,9 @@ namespace Pinetime { static constexpr uint8_t Motor = 16; - static constexpr uint8_t LcdBacklight1 = 14; - static constexpr uint8_t LcdBacklight2 = 22; - static constexpr uint8_t LcdBacklight3 = 23; + static constexpr uint8_t LcdBacklightLow = 14; + static constexpr uint8_t LcdBacklightMedium = 22; + static constexpr uint8_t LcdBacklightHigh = 23; static constexpr uint8_t SpiSck = 2; static constexpr uint8_t SpiMosi = 3; From 65423b3c945002b5828f8be3b42e27bc9c83d8b4 Mon Sep 17 00:00:00 2001 From: Niall Cooling Date: Thu, 25 Feb 2021 16:18:08 +0000 Subject: [PATCH 082/173] added devcontainer files --- .devcontainer/Dockerfile | 43 ++++++++++++++++++ .devcontainer/build.sh | 78 +++++++++++++++++++++++++++++++++ .devcontainer/devcontainer.json | 32 ++++++++++++++ 3 files changed, 153 insertions(+) create mode 100644 .devcontainer/Dockerfile create mode 100755 .devcontainer/build.sh create mode 100644 .devcontainer/devcontainer.json diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile new file mode 100644 index 0000000000..c6a3588f57 --- /dev/null +++ b/.devcontainer/Dockerfile @@ -0,0 +1,43 @@ +FROM ubuntu:18.04 + +ARG DEBIAN_FRONTEND=noninteractive +RUN apt-get update -qq \ + && apt-get install -y \ +# x86_64 / generic packages + bash \ + build-essential \ + cmake \ + git \ + make \ + python3 \ + python3-pip \ + tar \ + unzip \ + wget \ + curl \ +# aarch64 packages + libffi-dev \ + libssl-dev \ + python3-dev \ + rustc \ + && rm -rf /var/cache/apt/* /var/lib/apt/lists/*; + +RUN adduser infinitime + +RUN pip3 install adafruit-nrfutil +# required for McuBoot +RUN pip3 install setuptools_rust + +WORKDIR /opt/ +# build.sh knows how to compile +COPY build.sh . + +# Lets get each in a separate docker layer for better downloads +# GCC +RUN bash -c "source /opt/build.sh; GetGcc;" +# NrfSdk +RUN bash -c "source /opt/build.sh; GetNrfSdk;" +# McuBoot +RUN bash -c "source /opt/build.sh; GetMcuBoot;" + +ENV SOURCES_DIR /workspaces/Pinetime diff --git a/.devcontainer/build.sh b/.devcontainer/build.sh new file mode 100755 index 0000000000..8f0d0fa94c --- /dev/null +++ b/.devcontainer/build.sh @@ -0,0 +1,78 @@ +#!/bin/bash +(return 0 2>/dev/null) && SOURCED="true" || SOURCED="false" +export LC_ALL=C.UTF-8 +export LANG=C.UTF-8 +set -x +set -e + +# Default locations if the var isn't already set +export TOOLS_DIR="${TOOLS_DIR:=/opt}" +export SOURCES_DIR="${SOURCES_DIR:=/sources}" +export BUILD_DIR="${BUILD_DIR:=$SOURCES_DIR/build}" +export OUTPUT_DIR="${OUTPUT_DIR:=$BUILD_DIR/output}" + +export BUILD_TYPE=${BUILD_TYPE:=Release} +export GCC_ARM_VER=${GCC_ARM_VER:="gcc-arm-none-eabi-9-2020-q2-update"} +export NRF_SDK_VER=${NRF_SDK_VER:="nRF5_SDK_15.3.0_59ac345"} + +MACHINE="$(uname -m)" +[[ "$MACHINE" == "arm64" ]] && MACHINE="aarch64" + +main() { + local target="$1" + + mkdir -p "$TOOLS_DIR" + + [[ ! -d "$TOOLS_DIR/$GCC_ARM_VER" ]] && GetGcc + [[ ! -d "$TOOLS_DIR/$NRF_SDK_VER" ]] && GetNrfSdk + [[ ! -d "$TOOLS_DIR/mcuboot" ]] && GetMcuBoot + + mkdir -p "$BUILD_DIR" + + CmakeGenerate + CmakeBuild $target + BUILD_RESULT=$? + if [ "$DISABLE_POSTBUILD" != "true" -a "$BUILD_RESULT" == 0 ]; then + source "$BUILD_DIR/post_build.sh" + fi +} + +GetGcc() { + GCC_SRC="$GCC_ARM_VER-$MACHINE-linux.tar.bz" + wget -q https://developer.arm.com/-/media/Files/downloads/gnu-rm/9-2020q2/$GCC_SRC -O - | tar -xj -C $TOOLS_DIR/ +} + +GetMcuBoot() { + git clone https://github.com/JuulLabs-OSS/mcuboot.git "$TOOLS_DIR/mcuboot" + pip3 install -r "$TOOLS_DIR/mcuboot/scripts/requirements.txt" +} + +GetNrfSdk() { + wget -q "https://developer.nordicsemi.com/nRF5_SDK/nRF5_SDK_v15.x.x/$NRF_SDK_VER.zip" -O /tmp/$NRF_SDK_VER + unzip -q /tmp/$NRF_SDK_VER -d "$TOOLS_DIR/" + rm /tmp/$NRF_SDK_VER +} + +CmakeGenerate() { + # We can swap the CD and trailing SOURCES_DIR for -B and -S respectively + # once we go to newer CMake (Ubuntu 18.10 gives us CMake 3.10) + cd "$BUILD_DIR" + + cmake -G "Unix Makefiles" \ + -DCMAKE_BUILD_TYPE=$BUILD_TYPE \ + -DUSE_OPENOCD=1 \ + -DARM_NONE_EABI_TOOLCHAIN_PATH="$TOOLS_DIR/$GCC_ARM_VER" \ + -DNRF5_SDK_PATH="$TOOLS_DIR/$NRF_SDK_VER" \ + "$SOURCES_DIR" + cmake -L -N . +} + +CmakeBuild() { + local target="$1" + [[ -n "$target" ]] && target="--target $target" + if cmake --build "$BUILD_DIR" --config $BUILD_TYPE $target -- -j$(nproc) + then return 0; else return 1; + fi +} + +[[ $SOURCED == "false" ]] && main "$@" || echo "Sourced!" \ No newline at end of file diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json new file mode 100644 index 0000000000..fb81d28937 --- /dev/null +++ b/.devcontainer/devcontainer.json @@ -0,0 +1,32 @@ +// For format details, see https://aka.ms/devcontainer.json. For config options, see the README at: +// https://github.com/microsoft/vscode-dev-containers/tree/v0.154.2/containers/cpp +{ + // "name": "Pinetime", + // "image": "feabhas/pinetime-dev" + "build": { + "dockerfile": "Dockerfile", + // Update 'VARIANT' to pick an Debian / Ubuntu OS version: debian-10, debian-9, ubuntu-20.04, ubuntu-18.04 + // "args": { "VARIANT": "ubuntu-20.04" } + }, + "runArgs": [ "--cap-add=SYS_PTRACE", "--security-opt", "seccomp=unconfined"], + + // Set *default* container specific settings.json values on container create. + "settings": { + "terminal.integrated.shell.linux": "/bin/bash" + }, + + // Add the IDs of extensions you want installed when the container is created. + "extensions": [ + "ms-vscode.cpptools" + ], + + // Use 'forwardPorts' to make a list of ports inside the container available locally. + // "forwardPorts": [], + + // Use 'postCreateCommand' to run commands after the container is created. + // "postCreateCommand": "gcc -v", + + // Comment out connect as root instead. More info: https://aka.ms/vscode-remote/containers/non-root. + // "remoteUser": "vscode" + "remoteUser": "infinitime" +} \ No newline at end of file From 273a94f298cc96a1415499d00559fed3a741af71 Mon Sep 17 00:00:00 2001 From: "AzureAD\\NiallCooling" Date: Thu, 25 Feb 2021 17:16:01 +0000 Subject: [PATCH 083/173] removed dependency on build.sh --- .devcontainer/Dockerfile | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index c6a3588f57..7e96152824 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -22,8 +22,6 @@ RUN apt-get update -qq \ rustc \ && rm -rf /var/cache/apt/* /var/lib/apt/lists/*; -RUN adduser infinitime - RUN pip3 install adafruit-nrfutil # required for McuBoot RUN pip3 install setuptools_rust @@ -34,10 +32,19 @@ COPY build.sh . # Lets get each in a separate docker layer for better downloads # GCC -RUN bash -c "source /opt/build.sh; GetGcc;" +# RUN bash -c "source /opt/build.sh; GetGcc;" +RUN wget https://developer.arm.com/-/media/Files/downloads/gnu-rm/9-2020q2/gcc-arm-none-eabi-9-2020-q2-update-x86_64-linux.tar.bz2 -O - | tar -xj -C /opt +# RUN rm gcc-arm-none-eabi-9-2020-q2-update-x86_64-linux.tar.bz2 # NrfSdk -RUN bash -c "source /opt/build.sh; GetNrfSdk;" +# RUN bash -c "source /opt/build.sh; GetNrfSdk;" +RUN wget -q "https://developer.nordicsemi.com/nRF5_SDK/nRF5_SDK_v15.x.x/nRF5_SDK_15.3.0_59ac345.zip" -O /tmp/nRF5_SDK_15.3.0_59ac345 +RUN unzip -q /tmp/nRF5_SDK_15.3.0_59ac345 -d /opt +RUN rm /tmp/nRF5_SDK_15.3.0_59ac345 # McuBoot -RUN bash -c "source /opt/build.sh; GetMcuBoot;" +# RUN bash -c "source /opt/build.sh; GetMcuBoot;" +RUN git clone https://github.com/JuulLabs-OSS/mcuboot.git +RUN pip3 install -r ./mcuboot/scripts/requirements.txt + +RUN adduser infinitime ENV SOURCES_DIR /workspaces/Pinetime From 382db668ed513836a52ff4fdc49b0ee7a08a1527 Mon Sep 17 00:00:00 2001 From: Niall Cooling Date: Thu, 25 Feb 2021 17:49:40 +0000 Subject: [PATCH 084/173] macOS and Win10 dockerfile --- .devcontainer/Dockerfile | 5 +++-- .devcontainer/create_build_openocd.sh | 3 +++ .devcontainer/devcontainer.json | 2 +- 3 files changed, 7 insertions(+), 3 deletions(-) create mode 100755 .devcontainer/create_build_openocd.sh diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index 7e96152824..2c223bc1b4 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -27,14 +27,15 @@ RUN pip3 install adafruit-nrfutil RUN pip3 install setuptools_rust WORKDIR /opt/ -# build.sh knows how to compile +# build.sh knows how to compile but it problimatic on Win10 COPY build.sh . +# create_build_openocd.sh uses cmake to crate to build directory +COPY create_build_openocd.sh . # Lets get each in a separate docker layer for better downloads # GCC # RUN bash -c "source /opt/build.sh; GetGcc;" RUN wget https://developer.arm.com/-/media/Files/downloads/gnu-rm/9-2020q2/gcc-arm-none-eabi-9-2020-q2-update-x86_64-linux.tar.bz2 -O - | tar -xj -C /opt -# RUN rm gcc-arm-none-eabi-9-2020-q2-update-x86_64-linux.tar.bz2 # NrfSdk # RUN bash -c "source /opt/build.sh; GetNrfSdk;" RUN wget -q "https://developer.nordicsemi.com/nRF5_SDK/nRF5_SDK_v15.x.x/nRF5_SDK_15.3.0_59ac345.zip" -O /tmp/nRF5_SDK_15.3.0_59ac345 diff --git a/.devcontainer/create_build_openocd.sh b/.devcontainer/create_build_openocd.sh new file mode 100755 index 0000000000..860ffa1f72 --- /dev/null +++ b/.devcontainer/create_build_openocd.sh @@ -0,0 +1,3 @@ +#!/bin/bash +rm -rf build/ +cmake -G 'Unix Makefiles' -DCMAKE_BUILD_TYPE=Debug -DUSE_OPENOCD=1 -DARM_NONE_EABI_TOOLCHAIN_PATH=/opt/gcc-arm-none-eabi-9-2020-q2-update -DNRF5_SDK_PATH=/opt/nRF5_SDK_15.3.0_59ac345 -S . -Bbuild \ No newline at end of file diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index fb81d28937..1740a8e40b 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -24,7 +24,7 @@ // "forwardPorts": [], // Use 'postCreateCommand' to run commands after the container is created. - // "postCreateCommand": "gcc -v", + // "postCreateCommand": "/opt/create_build_openocd.sh", // Comment out connect as root instead. More info: https://aka.ms/vscode-remote/containers/non-root. // "remoteUser": "vscode" From 937d3e19335758ac76607a1d75c8844b49dd3c3e Mon Sep 17 00:00:00 2001 From: Niall Cooling Date: Fri, 26 Feb 2021 08:14:30 +0000 Subject: [PATCH 085/173] added dos2unix to docker for Win10 and default to release build --- .devcontainer/Dockerfile | 1 + .devcontainer/create_build_openocd.sh | 2 +- .devcontainer/devcontainer.json | 5 +++-- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index 2c223bc1b4..bb7dddba5d 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -15,6 +15,7 @@ RUN apt-get update -qq \ unzip \ wget \ curl \ + dos2unix \ # aarch64 packages libffi-dev \ libssl-dev \ diff --git a/.devcontainer/create_build_openocd.sh b/.devcontainer/create_build_openocd.sh index 860ffa1f72..c5bff5c89b 100755 --- a/.devcontainer/create_build_openocd.sh +++ b/.devcontainer/create_build_openocd.sh @@ -1,3 +1,3 @@ #!/bin/bash rm -rf build/ -cmake -G 'Unix Makefiles' -DCMAKE_BUILD_TYPE=Debug -DUSE_OPENOCD=1 -DARM_NONE_EABI_TOOLCHAIN_PATH=/opt/gcc-arm-none-eabi-9-2020-q2-update -DNRF5_SDK_PATH=/opt/nRF5_SDK_15.3.0_59ac345 -S . -Bbuild \ No newline at end of file +cmake -G 'Unix Makefiles' -DCMAKE_BUILD_TYPE=Release -DUSE_OPENOCD=1 -DARM_NONE_EABI_TOOLCHAIN_PATH=/opt/gcc-arm-none-eabi-9-2020-q2-update -DNRF5_SDK_PATH=/opt/nRF5_SDK_15.3.0_59ac345 -S . -Bbuild \ No newline at end of file diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 1740a8e40b..90b6eceb4c 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -17,14 +17,15 @@ // Add the IDs of extensions you want installed when the container is created. "extensions": [ - "ms-vscode.cpptools" + "ms-vscode.cpptools", + "ms-vscode.cmake-tools", ], // Use 'forwardPorts' to make a list of ports inside the container available locally. // "forwardPorts": [], // Use 'postCreateCommand' to run commands after the container is created. - // "postCreateCommand": "/opt/create_build_openocd.sh", + // "postCreateCommand": "bash /opt/create_build_openocd.sh", // Comment out connect as root instead. More info: https://aka.ms/vscode-remote/containers/non-root. // "remoteUser": "vscode" From c50f2b70c23ff36de8f290ab0e4408be7eeed62c Mon Sep 17 00:00:00 2001 From: Niall Cooling Date: Fri, 26 Feb 2021 15:09:58 +0000 Subject: [PATCH 086/173] added clang-tidy/format to container --- .devcontainer/Dockerfile | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index bb7dddba5d..55f3013682 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -16,6 +16,8 @@ RUN apt-get update -qq \ wget \ curl \ dos2unix \ + clang-format \ + clang-tidy \ # aarch64 packages libffi-dev \ libssl-dev \ From c0b84537b35fd358e929962a962c53e50019079e Mon Sep 17 00:00:00 2001 From: Niall Cooling Date: Fri, 26 Mar 2021 17:37:01 +0000 Subject: [PATCH 087/173] added extra .sh build files --- .devcontainer/build_app.sh | 2 ++ .devcontainer/make_build_dir.sh | 2 ++ .vscode/c_cpp_properties.json | 17 +++++++++++++++++ 3 files changed, 21 insertions(+) create mode 100644 .devcontainer/build_app.sh create mode 100644 .devcontainer/make_build_dir.sh create mode 100644 .vscode/c_cpp_properties.json diff --git a/.devcontainer/build_app.sh b/.devcontainer/build_app.sh new file mode 100644 index 0000000000..0f578cc642 --- /dev/null +++ b/.devcontainer/build_app.sh @@ -0,0 +1,2 @@ +#!/bin/bash +cmake --build /workspaces/Pinetime/build --config Release -- -j6 pinetime-app \ No newline at end of file diff --git a/.devcontainer/make_build_dir.sh b/.devcontainer/make_build_dir.sh new file mode 100644 index 0000000000..0b86b307ae --- /dev/null +++ b/.devcontainer/make_build_dir.sh @@ -0,0 +1,2 @@ +#!/bin/bash +cmake -G 'Unix Makefiles' -DCMAKE_BUILD_TYPE=Release -DUSE_OPENOCD=1 -DARM_NONE_EABI_TOOLCHAIN_PATH=/opt/gcc-arm-none-eabi-9-2020-q2-update -DNRF5_SDK_PATH=/opt/nRF5_SDK_15.3.0_59ac345 /workspaces/Pinetime diff --git a/.vscode/c_cpp_properties.json b/.vscode/c_cpp_properties.json new file mode 100644 index 0000000000..b409ec9823 --- /dev/null +++ b/.vscode/c_cpp_properties.json @@ -0,0 +1,17 @@ +{ + "configurations": [ + { + "name": "Linux", + "includePath": [ + "${workspaceFolder}/**" + ], + "defines": [], + "compilerPath": "/usr/bin/gcc", + "cStandard": "gnu11", + "cppStandard": "gnu++14", + "intelliSenseMode": "linux-gcc-x64", + "compileCommands": "${workspaceFolder}/build/compile_commands.json" + } + ], + "version": 4 +} \ No newline at end of file From f7643a4d828ec3c60f418b6d9a660097eb44e05e Mon Sep 17 00:00:00 2001 From: Tim Keller Date: Sun, 25 Jul 2021 20:12:34 +0000 Subject: [PATCH 088/173] Added cmake variants --- .devcontainer/Dockerfile | 17 +++++-- .devcontainer/README.md | 60 +++++++++++++++++++++++++ .devcontainer/build.sh | 0 .devcontainer/create_build_openocd.sh | 0 .devcontainer/devcontainer.json | 1 + .devcontainer/make_build_dir.sh | 2 +- .gitignore | 2 +- .vscode/c_cpp_properties.json | 15 ++++--- .vscode/cmake-variants.json | 62 +++++++++++++++++++++++++ .vscode/launch.json | 46 +++++++++++++++++++ .vscode/settings.json | 65 +++------------------------ .vscode/tasks.json | 44 ++++++++++++++++++ 12 files changed, 245 insertions(+), 69 deletions(-) create mode 100644 .devcontainer/README.md mode change 100755 => 100644 .devcontainer/build.sh mode change 100755 => 100644 .devcontainer/create_build_openocd.sh create mode 100644 .vscode/cmake-variants.json create mode 100644 .vscode/launch.json create mode 100644 .vscode/tasks.json diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index 55f3013682..4534c7e2e6 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -1,4 +1,4 @@ -FROM ubuntu:18.04 +FROM ubuntu:latest ARG DEBIAN_FRONTEND=noninteractive RUN apt-get update -qq \ @@ -18,12 +18,20 @@ RUN apt-get update -qq \ dos2unix \ clang-format \ clang-tidy \ + locales \ + libncurses5 \ # aarch64 packages libffi-dev \ libssl-dev \ python3-dev \ rustc \ && rm -rf /var/cache/apt/* /var/lib/apt/lists/*; + +#SET LOCALE +RUN locale-gen en_US.UTF-8 +ENV LANG en_US.UTF-8 +ENV LANGUAGE en_US:en +ENV LC_ALL en_US.UTF-8 RUN pip3 install adafruit-nrfutil # required for McuBoot @@ -32,9 +40,10 @@ RUN pip3 install setuptools_rust WORKDIR /opt/ # build.sh knows how to compile but it problimatic on Win10 COPY build.sh . +RUN chmod +x build.sh # create_build_openocd.sh uses cmake to crate to build directory COPY create_build_openocd.sh . - +RUN chmod +x create_build_openocd.sh # Lets get each in a separate docker layer for better downloads # GCC # RUN bash -c "source /opt/build.sh; GetGcc;" @@ -51,4 +60,6 @@ RUN pip3 install -r ./mcuboot/scripts/requirements.txt RUN adduser infinitime -ENV SOURCES_DIR /workspaces/Pinetime +ENV NRF5_SDK_PATH /opt/nRF5_SDK_15.3.0_59ac345 +ENV ARM_NONE_EABI_TOOLCHAIN_PATH /opt/gcc-arm-none-eabi-9-2020-q2-update +ENV SOURCES_DIR /workspaces/InfiniTime diff --git a/.devcontainer/README.md b/.devcontainer/README.md new file mode 100644 index 0000000000..ff9307b2cc --- /dev/null +++ b/.devcontainer/README.md @@ -0,0 +1,60 @@ +# VScode devcontainer +This is a docker-based interactive development environment using VSCode and Docker Devcontainers removing the need to install any tools locally* + + + +## Requirements + +- VScode + - [Remote - Containers](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers) extension +- Docker +- OpenOCD - For debugging + +## Using + +### Code editing, and building. + +1. Clone InifiniTime and update submodules +2. Launch VSCode +3. Open InifiTime directory, +4. Allow VSCode to open folder with devcontainer. + +After this the environment will be built if you do not currently have a container setup, it will install all the necessary tools and extra VSCode extensions. + +In order to build InfiniTime we need to run the initial submodule init and Cmake commands. + +#### Manually + + You can use the VSCode terminal to run the CMake commands as outlined in the [build instructions](blob/develop/doc/buildAndProgram.md) + +#### Script + +The dev enviroment comes with some scripts to make this easier, They are located in /opt/. + +There are also VSCode tasks provided should you desire to use those. + +The task BuildInit will update submodules and configure for openocd + + + +### Build + +You can use the build.sh script located in /opt/ + +There will also eventually be a Build task. - Not written yet + + + +### Debugging + +Docker on windows does not support passing USB devices to the underlying WSL2 subsystem, To get around this we use openocd in server mode running on the host. + +`openocd -f -f ` + +This will launch openocd in server mode and attach it to the MCU. + +The default launch.json file expects openocd to be listening on port 3333, edit if needed + + +## Current Issues +Currently WSL2 Has some real performance issues with IO on a windows host. Accessing files on the virtualized filesystem is much faster. Using VSCodes "clone in container" feature of the Remote - Containers will get around this. After the container is built you will need to update the submodules and follow the build isntructions like normal \ No newline at end of file diff --git a/.devcontainer/build.sh b/.devcontainer/build.sh old mode 100755 new mode 100644 diff --git a/.devcontainer/create_build_openocd.sh b/.devcontainer/create_build_openocd.sh old mode 100755 new mode 100644 diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 90b6eceb4c..223b651fbb 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -19,6 +19,7 @@ "extensions": [ "ms-vscode.cpptools", "ms-vscode.cmake-tools", + "marus25.cortex-debug" ], // Use 'forwardPorts' to make a list of ports inside the container available locally. diff --git a/.devcontainer/make_build_dir.sh b/.devcontainer/make_build_dir.sh index 0b86b307ae..76240037c2 100644 --- a/.devcontainer/make_build_dir.sh +++ b/.devcontainer/make_build_dir.sh @@ -1,2 +1,2 @@ #!/bin/bash -cmake -G 'Unix Makefiles' -DCMAKE_BUILD_TYPE=Release -DUSE_OPENOCD=1 -DARM_NONE_EABI_TOOLCHAIN_PATH=/opt/gcc-arm-none-eabi-9-2020-q2-update -DNRF5_SDK_PATH=/opt/nRF5_SDK_15.3.0_59ac345 /workspaces/Pinetime +cmake -G 'Unix Makefiles' -DCMAKE_BUILD_TYPE=Release -DUSE_OPENOCD=1 -DARM_NONE_EABI_TOOLCHAIN_PATH=/opt/gcc-arm-none-eabi-9-2020-q2-update -DNRF5_SDK_PATH=/opt/nRF5_SDK_15.3.0_59ac345 ${SOURCES_DIR} diff --git a/.gitignore b/.gitignore index 2f9ac181a6..6de76a9e20 100644 --- a/.gitignore +++ b/.gitignore @@ -4,7 +4,7 @@ # CMake cmake-build-* -cmake-* +cmake-*/ CMakeFiles **/CMakeCache.txt cmake_install.cmake diff --git a/.vscode/c_cpp_properties.json b/.vscode/c_cpp_properties.json index b409ec9823..f5c74b3a6b 100644 --- a/.vscode/c_cpp_properties.json +++ b/.vscode/c_cpp_properties.json @@ -1,15 +1,18 @@ { "configurations": [ { - "name": "Linux", + "name": "nrfCC", "includePath": [ - "${workspaceFolder}/**" + "${workspaceFolder}/**", + "${workspaceFolder}/src/**", + "${workspaceFolder}/src" ], "defines": [], - "compilerPath": "/usr/bin/gcc", - "cStandard": "gnu11", - "cppStandard": "gnu++14", - "intelliSenseMode": "linux-gcc-x64", + "compilerPath": "${env:ARM_NONE_EABI_TOOLCHAIN_PATH}/bin/arm-none-eabi-gcc", + "cStandard": "c11", + "cppStandard": "c++14", + "intelliSenseMode": "linux-gcc-arm", + "configurationProvider": "ms-vscode.cmake-tools", "compileCommands": "${workspaceFolder}/build/compile_commands.json" } ], diff --git a/.vscode/cmake-variants.json b/.vscode/cmake-variants.json new file mode 100644 index 0000000000..d00e638efe --- /dev/null +++ b/.vscode/cmake-variants.json @@ -0,0 +1,62 @@ +{ + "buildType": { + "default": "release", + "choices": { + "debug": { + "short": "Debug", + "long": "Emit debug information without performing optimizations", + "buildType": "Debug" + }, + "release": { + "short": "Release", + "long": "Perform optimizations", + "buildType": "Release" + } + } + }, + "programmer":{ + "default": "OpenOCD", + "choices":{ + "OpenOCD":{ + "short":"OpenOCD", + "long": "Use OpenOCD", + "settings":{ + "USE_OPENOCD":1 + } + }, + "JLink":{ + "short":"JLink", + "long": "Use JLink", + "settings":{ + "USE_JLINK":1 + } + }, + "GDB":{ + "short":"GDB", + "long": "Use GDB", + "settings":{ + "USE_GDB_CLIENT":1 + } + } + } + }, + "DFU": { + "default": "no", + "choices": { + "no": { + "short": "No DFU", + "long": "Do not build DFU", + "settings": { + "BUILD_DFU":0 + } + }, + "yes": { + "short": "Build DFU", + "long": "Build DFU", + "settings": { + "BUILD_DFU":1 + } + } + } + } +} \ No newline at end of file diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000000..78fc1180a5 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,46 @@ + { + "version": "0.1.0", + "configurations": [ + { + "name": "Debug - Openocd docker Remote", + "type":"cortex-debug", + "cortex-debug.armToolchainPath":"${env:COMPILER_DIR}/bin", + "cwd": "${workspaceRoot}", + "executable": "${command:cmake.launchTargetPath}", + "request": "launch", + "servertype": "external", + // This may need to be arm-none-eabi-gdb depending on your system + "gdbPath" : "${env:COMPILER_DIR}/bin/arm-none-eabi-gdb", + // Connect to an already running OpenOCD instance + "gdbTarget": "host.docker.internal:3333", + "svdFile": "${workspaceRoot}/nrf52.svd", + "runToMain": true, + // Work around for stopping at main on restart + "postRestartCommands": [ + "break main", + "continue" + ] + }, + { + "name": "Debug - Openocd Local", + "type":"cortex-debug", + "cortex-debug.armToolchainPath":"${env:COMPILER_DIR}/bin", + "cwd": "${workspaceRoot}", + "executable": "${command:cmake.launchTargetPath}", + "request": "launch", + "servertype": "openocd", + // This may need to be arm-none-eabi-gdb depending on your system + "gdbPath" : "${env:COMPILER_DIR}/bin/arm-none-eabi-gdb", + // Connect to an already running OpenOCD instance + "gdbTarget": "localhost:3333", + "svdFile": "${workspaceRoot}/nrf52.svd", + "runToMain": true, + // Work around for stopping at main on restart + "postRestartCommands": [ + "break main", + "continue" + ] + } + + ] +} \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json index 05b1175698..3b6866266e 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,59 +1,8 @@ { - "files.associations": { - "chrono": "cpp", - "list": "cpp", - "array": "cpp", - "atomic": "cpp", - "bit": "cpp", - "*.tcc": "cpp", - "cctype": "cpp", - "charconv": "cpp", - "clocale": "cpp", - "cmath": "cpp", - "condition_variable": "cpp", - "cstdarg": "cpp", - "cstddef": "cpp", - "cstdint": "cpp", - "cstdio": "cpp", - "cstdlib": "cpp", - "cstring": "cpp", - "ctime": "cpp", - "cwchar": "cpp", - "cwctype": "cpp", - "deque": "cpp", - "unordered_map": "cpp", - "vector": "cpp", - "exception": "cpp", - "algorithm": "cpp", - "functional": "cpp", - "iterator": "cpp", - "memory": "cpp", - "memory_resource": "cpp", - "netfwd": "cpp", - "numeric": "cpp", - "optional": "cpp", - "random": "cpp", - "ratio": "cpp", - "string": "cpp", - "string_view": "cpp", - "system_error": "cpp", - "tuple": "cpp", - "type_traits": "cpp", - "utility": "cpp", - "fstream": "cpp", - "initializer_list": "cpp", - "iosfwd": "cpp", - "iostream": "cpp", - "istream": "cpp", - "limits": "cpp", - "mutex": "cpp", - "new": "cpp", - "ostream": "cpp", - "sstream": "cpp", - "stdexcept": "cpp", - "streambuf": "cpp", - "thread": "cpp", - "cinttypes": "cpp", - "typeinfo": "cpp" - } -} \ No newline at end of file + "C_Cpp.default.configurationProvider": "ms-vscode.cmake-tools", + "cmake.configureArgs": [ + "-DARM_NONE_EABI_TOOLCHAIN_PATH=${env:ARM_NONE_EABI_TOOLCHAIN_PATH}", + "-DNRF5_SDK_PATH=${env:NRF5_SDK_PATH}", + ], + "cmake.generator": "Unix Makefiles" +} diff --git a/.vscode/tasks.json b/.vscode/tasks.json new file mode 100644 index 0000000000..17f51f5efd --- /dev/null +++ b/.vscode/tasks.json @@ -0,0 +1,44 @@ +{ + "version": "2.0.0", + "tasks": [ + { + "label": "create openocd build", + "type": "shell", + "command": "/opt/create_build_openocd.sh", + "group": { + "kind": "build", + "isDefault": true + }, + "presentation": { + "reveal": "always", + "panel": "shared" + }, + "problemMatcher": [] + }, + { + "label": "update submodules", + "type": "shell", + "command": "git submodule update --init", + "options": { + "cwd": "${workspaceFolder}" + }, + "group": { + "kind": "build", + "isDefault": true + }, + "presentation": { + "reveal": "always", + "panel": "shared" + }, + "problemMatcher": [] + }, + { + "label": "BuildInit", + "dependsOn": [ + "update submodules", + "create openocd build" + ], + "problemMatcher": [] + } + ] +} \ No newline at end of file From e9248b225e78e36ff04f7c26244adf200e17020e Mon Sep 17 00:00:00 2001 From: Tim Keller Date: Mon, 26 Jul 2021 01:14:23 +0000 Subject: [PATCH 089/173] Updated documentation --- .devcontainer/README.md | 4 ++-- .vscode/cmake-variants.json | 4 ++-- .vscode/extensions.json | 3 +++ .vscode/launch.json | 8 +++---- README.md | 1 + doc/buildWithVScode.md | 42 +++++++++++++++++++++++++++++++++++++ 6 files changed, 54 insertions(+), 8 deletions(-) create mode 100644 .vscode/extensions.json create mode 100644 doc/buildWithVScode.md diff --git a/.devcontainer/README.md b/.devcontainer/README.md index ff9307b2cc..c8aef574f9 100644 --- a/.devcontainer/README.md +++ b/.devcontainer/README.md @@ -33,7 +33,7 @@ The dev enviroment comes with some scripts to make this easier, They are located There are also VSCode tasks provided should you desire to use those. -The task BuildInit will update submodules and configure for openocd +The task "update submodules" will update the git submodules @@ -41,7 +41,7 @@ The task BuildInit will update submodules and configure for openocd You can use the build.sh script located in /opt/ -There will also eventually be a Build task. - Not written yet +CMake is also configured and controlls for the CMake plugin are available in VSCode diff --git a/.vscode/cmake-variants.json b/.vscode/cmake-variants.json index d00e638efe..9c95a631a4 100644 --- a/.vscode/cmake-variants.json +++ b/.vscode/cmake-variants.json @@ -47,14 +47,14 @@ "short": "No DFU", "long": "Do not build DFU", "settings": { - "BUILD_DFU":0 + "BUILD_DFU":"0" } }, "yes": { "short": "Build DFU", "long": "Build DFU", "settings": { - "BUILD_DFU":1 + "BUILD_DFU":"1" } } } diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 0000000000..1cc052682e --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,3 @@ +{ + "recommendations": ["ms-vscode.cpptools","ms-vscode.cmake-tools","marus25.cortex-debug"] +} \ No newline at end of file diff --git a/.vscode/launch.json b/.vscode/launch.json index 78fc1180a5..7cf3acd183 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -4,13 +4,13 @@ { "name": "Debug - Openocd docker Remote", "type":"cortex-debug", - "cortex-debug.armToolchainPath":"${env:COMPILER_DIR}/bin", + "cortex-debug.armToolchainPath":"${env:ARM_NONE_EABI_TOOLCHAIN_PATH}/bin", "cwd": "${workspaceRoot}", "executable": "${command:cmake.launchTargetPath}", "request": "launch", "servertype": "external", // This may need to be arm-none-eabi-gdb depending on your system - "gdbPath" : "${env:COMPILER_DIR}/bin/arm-none-eabi-gdb", + "gdbPath" : "${env:ARM_NONE_EABI_TOOLCHAIN_PATH}/bin/arm-none-eabi-gdb", // Connect to an already running OpenOCD instance "gdbTarget": "host.docker.internal:3333", "svdFile": "${workspaceRoot}/nrf52.svd", @@ -24,13 +24,13 @@ { "name": "Debug - Openocd Local", "type":"cortex-debug", - "cortex-debug.armToolchainPath":"${env:COMPILER_DIR}/bin", + "cortex-debug.armToolchainPath":"${env:ARM_NONE_EABI_TOOLCHAIN_PATH}/bin", "cwd": "${workspaceRoot}", "executable": "${command:cmake.launchTargetPath}", "request": "launch", "servertype": "openocd", // This may need to be arm-none-eabi-gdb depending on your system - "gdbPath" : "${env:COMPILER_DIR}/bin/arm-none-eabi-gdb", + "gdbPath" : "${env:ARM_NONE_EABI_TOOLCHAIN_PATH}/bin/arm-none-eabi-gdb", // Connect to an already running OpenOCD instance "gdbTarget": "localhost:3333", "svdFile": "${workspaceRoot}/nrf52.svd", diff --git a/README.md b/README.md index bd23c8678b..4b067dce9b 100644 --- a/README.md +++ b/README.md @@ -87,6 +87,7 @@ As of now, here is the list of achievements of this project: - [Build the project](doc/buildAndProgram.md) - [Flash the firmware using OpenOCD and STLinkV2](doc/openOCD.md) - [Build the project with Docker](doc/buildWithDocker.md) + - [Build the project with VSCode](doc/buildWithVScode.md) - [Bootloader, OTA and DFU](./bootloader/README.md) - [Stub using NRF52-DK](./doc/PinetimeStubWithNrf52DK.md) - Logging with JLink RTT. diff --git a/doc/buildWithVScode.md b/doc/buildWithVScode.md new file mode 100644 index 0000000000..31174d1cc3 --- /dev/null +++ b/doc/buildWithVScode.md @@ -0,0 +1,42 @@ +# Build and Develop the project using VS Code + +The .VSCode folder contains configuration files for developing InfiniTime with VS Code. Effort was made to have these rely on Environment variables instead of hardcoded paths. + +## Environment Setup + +To support as many setups as possible the VS Code configuration files expect there to be certain environment variables to be set. + + Variable | Description | Example +----------|-------------|-------- +**ARM_NONE_EABI_TOOLCHAIN_PATH**|path to the toolchain directory|`export ARM_NONE_EABI_TOOLCHAIN_PATH=/opt/gcc-arm-none-eabi-9-2020-q2-update` +**NRF5_SDK_PATH**|path to the NRF52 SDK|`export NRF5_SDK_PATH=/opt/nRF5_SDK_15.3.0_59ac345` + +## VS Code Extensions + +We leverage a few VS Code extensions for ease of development. + +#### Required Extensions + +- [C/C++](https://marketplace.visualstudio.com/items?itemName=ms-vscode.cpptools) - C/C++ IntelliSense, debugging, and code browsing. +- [CMake Tools](https://marketplace.visualstudio.com/items?itemName=ms-vscode.cmake-tools) - Extended CMake support in Visual Studio Code + +#### Optional Extensions + +[Cortex-Debug](https://marketplace.visualstudio.com/items?itemName=marus25.cortex-debug) - ARM Cortex-M GDB Debugger support for VSCode + +Cortex-Debug is only required for interactive debugging using VS Codes built in GDB support. + + + +## VS Code/Docker DevContainer + +The .devcontainer folder contains the configuration and scripts for using a Docker dev container for building InfiniTime + +Using the [Remote-Containers](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers) extension is recommended. It will handle configuring the Docker virtual machine and setting everything up. + +More documentation is available in the [readme in .devcontainer](.devcontainer/readme.md) + + + + + From 7f2ee62aedd359d34af6569bc691e216a49a7f5d Mon Sep 17 00:00:00 2001 From: Tim Keller Date: Mon, 26 Jul 2021 15:43:48 +0000 Subject: [PATCH 090/173] Typos for days --- .devcontainer/README.md | 32 ++++++++++++++++---------------- doc/buildWithVScode.md | 4 ++-- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/.devcontainer/README.md b/.devcontainer/README.md index c8aef574f9..1932a9d4f0 100644 --- a/.devcontainer/README.md +++ b/.devcontainer/README.md @@ -1,11 +1,11 @@ -# VScode devcontainer -This is a docker-based interactive development environment using VSCode and Docker Devcontainers removing the need to install any tools locally* +# VS Code Dev Container +This is a docker-based interactive development environment using VS Code and Docker Dev Containers removing the need to install any tools locally* ## Requirements -- VScode +- VS Code - [Remote - Containers](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers) extension - Docker - OpenOCD - For debugging @@ -14,24 +14,24 @@ This is a docker-based interactive development environment using VSCode and Dock ### Code editing, and building. -1. Clone InifiniTime and update submodules -2. Launch VSCode -3. Open InifiTime directory, -4. Allow VSCode to open folder with devcontainer. +1. Clone InfiniTime and update submodules +2. Launch VS Code +3. Open InfiniTime directory, +4. Allow VS Code to open folder with devcontainer. After this the environment will be built if you do not currently have a container setup, it will install all the necessary tools and extra VSCode extensions. -In order to build InfiniTime we need to run the initial submodule init and Cmake commands. +In order to build InfiniTime we need to run the initial submodule init and CMake commands. #### Manually - You can use the VSCode terminal to run the CMake commands as outlined in the [build instructions](blob/develop/doc/buildAndProgram.md) + You can use the VS Code terminal to run the CMake commands as outlined in the [build instructions](blob/develop/doc/buildAndProgram.md) #### Script -The dev enviroment comes with some scripts to make this easier, They are located in /opt/. +The dev environment comes with some scripts to make this easier, They are located in /opt/. -There are also VSCode tasks provided should you desire to use those. +There are also VS Code tasks provided should you desire to use those. The task "update submodules" will update the git submodules @@ -41,20 +41,20 @@ The task "update submodules" will update the git submodules You can use the build.sh script located in /opt/ -CMake is also configured and controlls for the CMake plugin are available in VSCode +CMake is also configured and controls for the CMake plugin are available in VS Code ### Debugging -Docker on windows does not support passing USB devices to the underlying WSL2 subsystem, To get around this we use openocd in server mode running on the host. +Docker on windows does not support passing USB devices to the underlying WSL2 subsystem, To get around this we use OpenOCD in server mode running on the host. `openocd -f -f ` -This will launch openocd in server mode and attach it to the MCU. +This will launch OpenOCD in server mode and attach it to the MCU. -The default launch.json file expects openocd to be listening on port 3333, edit if needed +The default launch.json file expects OpenOCD to be listening on port 3333, edit if needed ## Current Issues -Currently WSL2 Has some real performance issues with IO on a windows host. Accessing files on the virtualized filesystem is much faster. Using VSCodes "clone in container" feature of the Remote - Containers will get around this. After the container is built you will need to update the submodules and follow the build isntructions like normal \ No newline at end of file +Currently WSL2 Has some real performance issues with IO on a windows host. Accessing files on the virtualized filesystem is much faster. Using VS Codes "clone in container" feature of the Remote - Containers will get around this. After the container is built you will need to update the submodules and follow the build instructions like normal \ No newline at end of file diff --git a/doc/buildWithVScode.md b/doc/buildWithVScode.md index 31174d1cc3..c1df17b7dd 100644 --- a/doc/buildWithVScode.md +++ b/doc/buildWithVScode.md @@ -1,6 +1,6 @@ # Build and Develop the project using VS Code -The .VSCode folder contains configuration files for developing InfiniTime with VS Code. Effort was made to have these rely on Environment variables instead of hardcoded paths. +The .VS Code folder contains configuration files for developing InfiniTime with VS Code. Effort was made to have these rely on Environment variables instead of hardcoded paths. ## Environment Setup @@ -22,7 +22,7 @@ We leverage a few VS Code extensions for ease of development. #### Optional Extensions -[Cortex-Debug](https://marketplace.visualstudio.com/items?itemName=marus25.cortex-debug) - ARM Cortex-M GDB Debugger support for VSCode +[Cortex-Debug](https://marketplace.visualstudio.com/items?itemName=marus25.cortex-debug) - ARM Cortex-M GDB Debugger support for VS Code Cortex-Debug is only required for interactive debugging using VS Codes built in GDB support. From d2dc719b318a256d3d6f2fea3bdcf30c5eb40969 Mon Sep 17 00:00:00 2001 From: Tim Keller Date: Sun, 8 Aug 2021 22:51:31 +0000 Subject: [PATCH 091/173] Fix intellisense --- .vscode/c_cpp_properties.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.vscode/c_cpp_properties.json b/.vscode/c_cpp_properties.json index f5c74b3a6b..f8da48d59e 100644 --- a/.vscode/c_cpp_properties.json +++ b/.vscode/c_cpp_properties.json @@ -12,7 +12,7 @@ "cStandard": "c11", "cppStandard": "c++14", "intelliSenseMode": "linux-gcc-arm", - "configurationProvider": "ms-vscode.cmake-tools", + "configurationProvider": "ms-vscode.cpp-tools", "compileCommands": "${workspaceFolder}/build/compile_commands.json" } ], From 44889adda074af2a7a5fe61b19667521755dd24d Mon Sep 17 00:00:00 2001 From: Tim Keller Date: Mon, 9 Aug 2021 00:16:17 +0000 Subject: [PATCH 092/173] Setup plugins for Clang-tidy/format --- .devcontainer/Dockerfile | 2 +- .devcontainer/devcontainer.json | 4 +++- .vscode/settings.json | 3 ++- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index 4534c7e2e6..1dd68f2418 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -16,7 +16,7 @@ RUN apt-get update -qq \ wget \ curl \ dos2unix \ - clang-format \ + clang-format-12 \ clang-tidy \ locales \ libncurses5 \ diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 223b651fbb..778fe9cb05 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -19,7 +19,9 @@ "extensions": [ "ms-vscode.cpptools", "ms-vscode.cmake-tools", - "marus25.cortex-debug" + "marus25.cortex-debug", + "notskm.clang-tidy", + "mjohns.clang-format" ], // Use 'forwardPorts' to make a list of ports inside the container available locally. diff --git a/.vscode/settings.json b/.vscode/settings.json index 3b6866266e..8f0e63f460 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -4,5 +4,6 @@ "-DARM_NONE_EABI_TOOLCHAIN_PATH=${env:ARM_NONE_EABI_TOOLCHAIN_PATH}", "-DNRF5_SDK_PATH=${env:NRF5_SDK_PATH}", ], - "cmake.generator": "Unix Makefiles" + "cmake.generator": "Unix Makefiles", + "clang-tidy.buildPath": "build/compile_commands.json" } From baa7e1bf12b58224e9461a5a605dcebabcf9504e Mon Sep 17 00:00:00 2001 From: Riku Isokoski Date: Mon, 9 Aug 2021 17:45:24 +0300 Subject: [PATCH 093/173] Optimize twiMaster --- src/drivers/TwiMaster.cpp | 39 ++++++++++++++++++--------------------- src/drivers/TwiMaster.h | 4 +++- 2 files changed, 21 insertions(+), 22 deletions(-) diff --git a/src/drivers/TwiMaster.cpp b/src/drivers/TwiMaster.cpp index fc9edf810f..e4c03d5b39 100644 --- a/src/drivers/TwiMaster.cpp +++ b/src/drivers/TwiMaster.cpp @@ -9,21 +9,25 @@ using namespace Pinetime::Drivers; // TODO use DMA/IRQ TwiMaster::TwiMaster(const Modules module, const Parameters& params) : module {module}, params {params} { + mutex = xSemaphoreCreateBinary(); } -void TwiMaster::Init() { - if(mutex == nullptr) - mutex = xSemaphoreCreateBinary(); - +void TwiMaster::ConfigurePins() const { NRF_GPIO->PIN_CNF[params.pinScl] = - ((uint32_t) GPIO_PIN_CNF_DIR_Input << GPIO_PIN_CNF_DIR_Pos) | ((uint32_t) GPIO_PIN_CNF_INPUT_Connect << GPIO_PIN_CNF_INPUT_Pos) | - ((uint32_t) GPIO_PIN_CNF_PULL_Pullup << GPIO_PIN_CNF_PULL_Pos) | ((uint32_t) GPIO_PIN_CNF_DRIVE_S0D1 << GPIO_PIN_CNF_DRIVE_Pos) | - ((uint32_t) GPIO_PIN_CNF_SENSE_Disabled << GPIO_PIN_CNF_SENSE_Pos); + (GPIO_PIN_CNF_DIR_Input << GPIO_PIN_CNF_DIR_Pos) | + (GPIO_PIN_CNF_INPUT_Connect << GPIO_PIN_CNF_INPUT_Pos) | + (GPIO_PIN_CNF_DRIVE_S0D1 << GPIO_PIN_CNF_DRIVE_Pos) | + (GPIO_PIN_CNF_SENSE_Disabled << GPIO_PIN_CNF_SENSE_Pos); NRF_GPIO->PIN_CNF[params.pinSda] = - ((uint32_t) GPIO_PIN_CNF_DIR_Input << GPIO_PIN_CNF_DIR_Pos) | ((uint32_t) GPIO_PIN_CNF_INPUT_Connect << GPIO_PIN_CNF_INPUT_Pos) | - ((uint32_t) GPIO_PIN_CNF_PULL_Pullup << GPIO_PIN_CNF_PULL_Pos) | ((uint32_t) GPIO_PIN_CNF_DRIVE_S0D1 << GPIO_PIN_CNF_DRIVE_Pos) | - ((uint32_t) GPIO_PIN_CNF_SENSE_Disabled << GPIO_PIN_CNF_SENSE_Pos); + (GPIO_PIN_CNF_DIR_Input << GPIO_PIN_CNF_DIR_Pos) | + (GPIO_PIN_CNF_INPUT_Connect << GPIO_PIN_CNF_INPUT_Pos) | + (GPIO_PIN_CNF_DRIVE_S0D1 << GPIO_PIN_CNF_DRIVE_Pos) | + (GPIO_PIN_CNF_SENSE_Disabled << GPIO_PIN_CNF_SENSE_Pos); +} + +void TwiMaster::Init() { + ConfigurePins(); switch (module) { case Modules::TWIM1: @@ -179,7 +183,8 @@ void TwiMaster::Sleep() { } void TwiMaster::Wakeup() { - Init(); + ConfigurePins(); + twiBaseAddress->ENABLE = (TWIM_ENABLE_ENABLE_Enabled << TWIM_ENABLE_ENABLE_Pos); NRF_LOG_INFO("[TWIMASTER] Wakeup"); } @@ -194,16 +199,8 @@ void TwiMaster::FixHwFreezed() { uint32_t twi_state = NRF_TWI1->ENABLE; twiBaseAddress->ENABLE = TWIM_ENABLE_ENABLE_Disabled << TWI_ENABLE_ENABLE_Pos; - NRF_GPIO->PIN_CNF[params.pinScl] = - ((uint32_t) GPIO_PIN_CNF_DIR_Input << GPIO_PIN_CNF_DIR_Pos) | ((uint32_t) GPIO_PIN_CNF_INPUT_Connect << GPIO_PIN_CNF_INPUT_Pos) | - ((uint32_t) GPIO_PIN_CNF_PULL_Pullup << GPIO_PIN_CNF_PULL_Pos) | ((uint32_t) GPIO_PIN_CNF_DRIVE_S0S1 << GPIO_PIN_CNF_DRIVE_Pos) | - ((uint32_t) GPIO_PIN_CNF_SENSE_Disabled << GPIO_PIN_CNF_SENSE_Pos); - - NRF_GPIO->PIN_CNF[params.pinSda] = - ((uint32_t) GPIO_PIN_CNF_DIR_Input << GPIO_PIN_CNF_DIR_Pos) | ((uint32_t) GPIO_PIN_CNF_INPUT_Connect << GPIO_PIN_CNF_INPUT_Pos) | - ((uint32_t) GPIO_PIN_CNF_PULL_Pullup << GPIO_PIN_CNF_PULL_Pos) | ((uint32_t) GPIO_PIN_CNF_DRIVE_S0S1 << GPIO_PIN_CNF_DRIVE_Pos) | - ((uint32_t) GPIO_PIN_CNF_SENSE_Disabled << GPIO_PIN_CNF_SENSE_Pos); + ConfigurePins(); // Re-enable I²C twiBaseAddress->ENABLE = twi_state; -} \ No newline at end of file +} diff --git a/src/drivers/TwiMaster.h b/src/drivers/TwiMaster.h index 6175b99b44..b8d36d59eb 100644 --- a/src/drivers/TwiMaster.h +++ b/src/drivers/TwiMaster.h @@ -26,6 +26,8 @@ namespace Pinetime { void Sleep(); void Wakeup(); + void ConfigurePins() const; + private: ErrorCodes Read(uint8_t deviceAddress, uint8_t* buffer, size_t size, bool stop); ErrorCodes Write(uint8_t deviceAddress, const uint8_t* data, size_t size, bool stop); @@ -41,4 +43,4 @@ namespace Pinetime { static constexpr uint32_t HwFreezedDelay {161000}; }; } -} \ No newline at end of file +} From d35a54c060700e537d3e39723b7ee9b1d71b36d8 Mon Sep 17 00:00:00 2001 From: Riku Isokoski Date: Mon, 9 Aug 2021 21:49:35 +0300 Subject: [PATCH 094/173] Try to fix bootloop --- src/main.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/main.cpp b/src/main.cpp index ffbba5e765..a18c39424f 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -5,6 +5,7 @@ #include #include #include +#include // nimble #define min // workaround: nimble's min/max macros conflict with libstdc++ @@ -300,6 +301,14 @@ int main(void) { nrf_drv_clock_init(); + // Unblock i2c? + nrf_gpio_cfg_output(pinTwiScl); + for (uint8_t i = 0; i < 16; i++) { + nrf_gpio_pin_toggle(pinTwiScl); + nrf_delay_us(5); + } + nrf_gpio_cfg_default(pinTwiScl); + debounceTimer = xTimerCreate("debounceTimer", 200, pdFALSE, (void*) 0, DebounceTimerCallback); debounceChargeTimer = xTimerCreate("debounceTimerCharge", 200, pdFALSE, (void*) 0, DebounceTimerChargeCallback); From ff81a72533e479388d49334d0ec3e0635b6e7f40 Mon Sep 17 00:00:00 2001 From: Riku Isokoski Date: Mon, 9 Aug 2021 22:07:06 +0300 Subject: [PATCH 095/173] Better pin configuration --- src/main.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/main.cpp b/src/main.cpp index a18c39424f..39d8906c1d 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -302,7 +302,12 @@ int main(void) { nrf_drv_clock_init(); // Unblock i2c? - nrf_gpio_cfg_output(pinTwiScl); + nrf_gpio_cfg(pinTwiScl, + NRF_GPIO_PIN_DIR_OUTPUT, + NRF_GPIO_PIN_INPUT_DISCONNECT, + NRF_GPIO_PIN_NOPULL, + NRF_GPIO_PIN_S0D1, + NRF_GPIO_PIN_NOSENSE); for (uint8_t i = 0; i < 16; i++) { nrf_gpio_pin_toggle(pinTwiScl); nrf_delay_us(5); From 5eb56d9a06652cb10358ecba051bbfe8ec2957a7 Mon Sep 17 00:00:00 2001 From: Riku Isokoski Date: Mon, 9 Aug 2021 22:11:35 +0300 Subject: [PATCH 096/173] Set pin before loop --- src/main.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main.cpp b/src/main.cpp index 39d8906c1d..d301be6711 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -308,6 +308,7 @@ int main(void) { NRF_GPIO_PIN_NOPULL, NRF_GPIO_PIN_S0D1, NRF_GPIO_PIN_NOSENSE); + nrf_gpio_pin_set(pinTwiScl); for (uint8_t i = 0; i < 16; i++) { nrf_gpio_pin_toggle(pinTwiScl); nrf_delay_us(5); From 2194a339cf55772c944fc1302ca740805d931983 Mon Sep 17 00:00:00 2001 From: Riku Isokoski Date: Tue, 10 Aug 2021 11:26:43 +0300 Subject: [PATCH 097/173] Only enable the bus when needed --- src/drivers/TwiMaster.cpp | 6 ++++-- src/systemtask/SystemTask.cpp | 9 --------- 2 files changed, 4 insertions(+), 11 deletions(-) diff --git a/src/drivers/TwiMaster.cpp b/src/drivers/TwiMaster.cpp index e4c03d5b39..34aac07f68 100644 --- a/src/drivers/TwiMaster.cpp +++ b/src/drivers/TwiMaster.cpp @@ -72,8 +72,10 @@ void TwiMaster::Init() { TwiMaster::ErrorCodes TwiMaster::Read(uint8_t deviceAddress, uint8_t registerAddress, uint8_t* data, size_t size) { xSemaphoreTake(mutex, portMAX_DELAY); + Wakeup(); auto ret = Write(deviceAddress, ®isterAddress, 1, false); ret = Read(deviceAddress, data, size, true); + Sleep(); xSemaphoreGive(mutex); return ret; } @@ -81,9 +83,11 @@ TwiMaster::ErrorCodes TwiMaster::Read(uint8_t deviceAddress, uint8_t registerAdd TwiMaster::ErrorCodes TwiMaster::Write(uint8_t deviceAddress, uint8_t registerAddress, const uint8_t* data, size_t size) { ASSERT(size <= maxDataSize); xSemaphoreTake(mutex, portMAX_DELAY); + Wakeup(); internalBuffer[0] = registerAddress; std::memcpy(internalBuffer + 1, data, size); auto ret = Write(deviceAddress, internalBuffer, size + 1, true); + Sleep(); xSemaphoreGive(mutex); return ret; } @@ -179,13 +183,11 @@ void TwiMaster::Sleep() { } nrf_gpio_cfg_default(6); nrf_gpio_cfg_default(7); - NRF_LOG_INFO("[TWIMASTER] Sleep"); } void TwiMaster::Wakeup() { ConfigurePins(); twiBaseAddress->ENABLE = (TWIM_ENABLE_ENABLE_Enabled << TWIM_ENABLE_ENABLE_Pos); - NRF_LOG_INFO("[TWIMASTER] Wakeup"); } /* Sometimes, the TWIM device just freeze and never set the event EVENTS_LASTTX. diff --git a/src/systemtask/SystemTask.cpp b/src/systemtask/SystemTask.cpp index 8915ce7448..4316330fd2 100644 --- a/src/systemtask/SystemTask.cpp +++ b/src/systemtask/SystemTask.cpp @@ -219,7 +219,6 @@ void SystemTask::Work() { break; case Messages::GoToRunning: spi.Wakeup(); - twiMaster.Wakeup(); // Double Tap needs the touch screen to be in normal mode if (!settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::DoubleTap)) { @@ -240,9 +239,7 @@ void SystemTask::Work() { isDimmed = false; break; case Messages::TouchWakeUp: { - twiMaster.Wakeup(); auto touchInfo = touchPanel.GetTouchInfo(); - twiMaster.Sleep(); if (touchInfo.isTouch and ((touchInfo.gesture == Pinetime::Drivers::Cst816S::Gestures::DoubleTap and settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::DoubleTap)) or (touchInfo.gesture == Pinetime::Drivers::Cst816S::Gestures::SingleTap and @@ -315,7 +312,6 @@ void SystemTask::Work() { if (!settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::DoubleTap)) { touchPanel.Sleep(); } - twiMaster.Sleep(); isSleeping = true; isGoingToSleep = false; @@ -367,17 +363,12 @@ void SystemTask::UpdateMotion() { if (isSleeping && !settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::RaiseWrist)) return; - if (isSleeping) - twiMaster.Wakeup(); - if (stepCounterMustBeReset) { motionSensor.ResetStepCounter(); stepCounterMustBeReset = false; } auto motionValues = motionSensor.Process(); - if (isSleeping) - twiMaster.Sleep(); motionController.IsSensorOk(motionSensor.IsOk()); motionController.Update(motionValues.x, motionValues.y, motionValues.z, motionValues.steps); From 90ea1071d1df4bf80f2a7d62467aca44c8a63d75 Mon Sep 17 00:00:00 2001 From: Riku Isokoski Date: Tue, 10 Aug 2021 11:52:20 +0300 Subject: [PATCH 098/173] Explicitly disable pullup --- src/drivers/TwiMaster.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/drivers/TwiMaster.cpp b/src/drivers/TwiMaster.cpp index 34aac07f68..52f93d8596 100644 --- a/src/drivers/TwiMaster.cpp +++ b/src/drivers/TwiMaster.cpp @@ -16,12 +16,14 @@ void TwiMaster::ConfigurePins() const { NRF_GPIO->PIN_CNF[params.pinScl] = (GPIO_PIN_CNF_DIR_Input << GPIO_PIN_CNF_DIR_Pos) | (GPIO_PIN_CNF_INPUT_Connect << GPIO_PIN_CNF_INPUT_Pos) | + (GPIO_PIN_CNF_PULL_Disabled << GPIO_PIN_CNF_PULL_Pos) | (GPIO_PIN_CNF_DRIVE_S0D1 << GPIO_PIN_CNF_DRIVE_Pos) | (GPIO_PIN_CNF_SENSE_Disabled << GPIO_PIN_CNF_SENSE_Pos); NRF_GPIO->PIN_CNF[params.pinSda] = (GPIO_PIN_CNF_DIR_Input << GPIO_PIN_CNF_DIR_Pos) | (GPIO_PIN_CNF_INPUT_Connect << GPIO_PIN_CNF_INPUT_Pos) | + (GPIO_PIN_CNF_PULL_Disabled << GPIO_PIN_CNF_PULL_Pos) | (GPIO_PIN_CNF_DRIVE_S0D1 << GPIO_PIN_CNF_DRIVE_Pos) | (GPIO_PIN_CNF_SENSE_Disabled << GPIO_PIN_CNF_SENSE_Pos); } From c086520c9796322043d9617e6cff5c554529d640 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-Fran=C3=A7ois=20Milants?= Date: Sat, 24 Jul 2021 13:01:11 +0200 Subject: [PATCH 099/173] Code cleaning in Clock, WatchFaceAnalog, WatchFaceDigital and PineTimeStyle, inspired by PR #232 by nscooling. --- .../datetime/DateTimeController.cpp | 20 +++---- src/displayapp/screens/Clock.cpp | 20 +------ src/displayapp/screens/Clock.h | 7 --- src/displayapp/screens/PineTimeStyle.cpp | 60 +++++-------------- src/displayapp/screens/PineTimeStyle.h | 5 -- src/displayapp/screens/WatchFaceAnalog.cpp | 52 +++++++--------- src/displayapp/screens/WatchFaceAnalog.h | 2 - src/displayapp/screens/WatchFaceDigital.cpp | 45 ++++---------- src/displayapp/screens/WatchFaceDigital.h | 5 +- 9 files changed, 60 insertions(+), 156 deletions(-) diff --git a/src/components/datetime/DateTimeController.cpp b/src/components/datetime/DateTimeController.cpp index 28a70abc9b..d6aa83c844 100644 --- a/src/components/datetime/DateTimeController.cpp +++ b/src/components/datetime/DateTimeController.cpp @@ -55,9 +55,9 @@ void DateTime::UpdateTime(uint32_t systickCounter) { auto time = date::make_time(currentDateTime - dp); auto yearMonthDay = date::year_month_day(dp); - year = (int) yearMonthDay.year(); - month = static_cast((unsigned) yearMonthDay.month()); - day = (unsigned) yearMonthDay.day(); + year = static_cast(yearMonthDay.year()); + month = static_cast(static_cast(yearMonthDay.month())); + day = static_cast(yearMonthDay.day()); dayOfWeek = static_cast(date::weekday(yearMonthDay).iso_encoding()); hour = time.hours().count(); @@ -75,31 +75,31 @@ void DateTime::UpdateTime(uint32_t systickCounter) { } const char* DateTime::MonthShortToString() { - return DateTime::MonthsString[(uint8_t) month]; + return DateTime::MonthsString[static_cast(month)]; } const char* DateTime::MonthShortToStringLow() { - return DateTime::MonthsStringLow[(uint8_t) month]; + return DateTime::MonthsStringLow[static_cast(month)]; } const char* DateTime::MonthsToStringLow() { - return DateTime::MonthsLow[(uint8_t) month]; + return DateTime::MonthsLow[static_cast(month)]; } const char* DateTime::DayOfWeekToString() { - return DateTime::DaysString[(uint8_t) dayOfWeek]; + return DateTime::DaysString[static_cast(dayOfWeek)]; } const char* DateTime::DayOfWeekShortToString() { - return DateTime::DaysStringShort[(uint8_t) dayOfWeek]; + return DateTime::DaysStringShort[static_cast(dayOfWeek)]; } const char* DateTime::DayOfWeekToStringLow() { - return DateTime::DaysStringLow[(uint8_t) dayOfWeek]; + return DateTime::DaysStringLow[static_cast(dayOfWeek)]; } const char* DateTime::DayOfWeekShortToStringLow() { - return DateTime::DaysStringShortLow[(uint8_t) dayOfWeek]; + return DateTime::DaysStringShortLow[static_cast(dayOfWeek)]; } void DateTime::Register(Pinetime::System::SystemTask* systemTask) { diff --git a/src/displayapp/screens/Clock.cpp b/src/displayapp/screens/Clock.cpp index e0684976f3..86afee0c42 100644 --- a/src/displayapp/screens/Clock.cpp +++ b/src/displayapp/screens/Clock.cpp @@ -2,11 +2,6 @@ #include #include -#include -#include "BatteryIcon.h" -#include "BleIcon.h" -#include "NotificationIcon.h" -#include "Symbols.h" #include "components/battery/BatteryController.h" #include "components/motion/MotionController.h" #include "components/ble/BleController.h" @@ -88,17 +83,4 @@ std::unique_ptr Clock::PineTimeStyleScreen() { notificatioManager, settingsController, motionController); -} - -/* -// Examples for more watch faces -std::unique_ptr Clock::WatchFaceMinimalScreen() { - return std::make_unique(app, dateTimeController, batteryController, bleController, notificatioManager, -settingsController); -} - -std::unique_ptr Clock::WatchFaceCustomScreen() { - return std::make_unique(app, dateTimeController, batteryController, bleController, notificatioManager, -settingsController); -} -*/ \ No newline at end of file +} \ No newline at end of file diff --git a/src/displayapp/screens/Clock.h b/src/displayapp/screens/Clock.h index a48feea1b9..7968ccedb0 100644 --- a/src/displayapp/screens/Clock.h +++ b/src/displayapp/screens/Clock.h @@ -9,9 +9,6 @@ #include "components/datetime/DateTimeController.h" namespace Pinetime { - namespace Drivers { - class BMA421; - } namespace Controllers { class Settings; class Battery; @@ -51,10 +48,6 @@ namespace Pinetime { std::unique_ptr WatchFaceDigitalScreen(); std::unique_ptr WatchFaceAnalogScreen(); std::unique_ptr PineTimeStyleScreen(); - - // Examples for more watch faces - // std::unique_ptr WatchFaceMinimalScreen(); - // std::unique_ptr WatchFaceCustomScreen(); }; } } diff --git a/src/displayapp/screens/PineTimeStyle.cpp b/src/displayapp/screens/PineTimeStyle.cpp index 0efb4dc300..98fd976cd4 100644 --- a/src/displayapp/screens/PineTimeStyle.cpp +++ b/src/displayapp/screens/PineTimeStyle.cpp @@ -51,7 +51,6 @@ PineTimeStyle::PineTimeStyle(DisplayApp* app, notificatioManager {notificatioManager}, settingsController {settingsController}, motionController {motionController} { - /* This sets the watchface number to return to after leaving the menu */ settingsController.SetClockFace(2); @@ -62,7 +61,6 @@ PineTimeStyle::PineTimeStyle(DisplayApp* app, displayedChar[4] = 0; /* Create a 200px wide background rectangle */ - timebar = lv_obj_create(lv_scr_act(), nullptr); lv_obj_set_style_local_bg_color(timebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x000000)); lv_obj_set_style_local_radius(timebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, 0); @@ -70,7 +68,6 @@ PineTimeStyle::PineTimeStyle(DisplayApp* app, lv_obj_align(timebar, lv_scr_act(), LV_ALIGN_IN_TOP_LEFT, 5, 0); /* Display the time */ - timeDD1 = lv_label_create(lv_scr_act(), nullptr); lv_obj_set_style_local_text_font(timeDD1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, &open_sans_light); lv_obj_set_style_local_text_color(timeDD1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x008080)); @@ -90,7 +87,6 @@ PineTimeStyle::PineTimeStyle(DisplayApp* app, lv_obj_align(timeAMPM, timebar, LV_ALIGN_IN_BOTTOM_LEFT, 2, -20); /* Create a 40px wide bar down the right side of the screen */ - sidebar = lv_obj_create(lv_scr_act(), nullptr); lv_obj_set_style_local_bg_color(sidebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x008080)); lv_obj_set_style_local_radius(sidebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, 0); @@ -98,7 +94,6 @@ PineTimeStyle::PineTimeStyle(DisplayApp* app, lv_obj_align(sidebar, lv_scr_act(), LV_ALIGN_IN_TOP_RIGHT, 0, 0); /* Display icons */ - batteryIcon = lv_label_create(lv_scr_act(), nullptr); lv_obj_set_style_local_text_color(batteryIcon, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x000000)); lv_label_set_text(batteryIcon, Symbols::batteryFull); @@ -117,7 +112,6 @@ PineTimeStyle::PineTimeStyle(DisplayApp* app, lv_obj_align(notificationIcon, sidebar, LV_ALIGN_IN_TOP_MID, 0, 40); /* Calendar icon */ - calendarOuter = lv_obj_create(lv_scr_act(), nullptr); lv_obj_set_style_local_bg_color(calendarOuter, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x000000)); lv_obj_set_style_local_radius(calendarOuter, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, 0); @@ -155,7 +149,6 @@ PineTimeStyle::PineTimeStyle(DisplayApp* app, lv_obj_align(calendarCrossBar2, calendarBar2, LV_ALIGN_IN_BOTTOM_MID, 0, 0); /* Display date */ - dateDayOfWeek = lv_label_create(lv_scr_act(), nullptr); lv_obj_set_style_local_text_color(dateDayOfWeek, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x000000)); lv_label_set_text(dateDayOfWeek, "THU"); @@ -223,26 +216,17 @@ bool PineTimeStyle::Refresh() { bleState = bleController.IsConnected(); if (bleState.IsUpdated()) { - if (bleState.Get() == true) { - lv_label_set_text(bleIcon, BleIcon::GetIcon(true)); - lv_obj_realign(bleIcon); - } else { - lv_label_set_text(bleIcon, BleIcon::GetIcon(false)); - } + lv_label_set_text(bleIcon, BleIcon::GetIcon(bleState.Get())); + lv_obj_realign(bleIcon); } notificationState = notificatioManager.AreNewNotificationsAvailable(); if (notificationState.IsUpdated()) { - if (notificationState.Get() == true) { - lv_label_set_text(notificationIcon, NotificationIcon::GetIcon(true)); - lv_obj_realign(notificationIcon); - } else { - lv_label_set_text(notificationIcon, NotificationIcon::GetIcon(false)); - } + lv_label_set_text(notificationIcon, NotificationIcon::GetIcon(notificationState.Get())); + lv_obj_realign(notificationIcon); } currentDateTime = dateTimeController.CurrentDateTime(); - if (currentDateTime.IsUpdated()) { auto newDateTime = currentDateTime.Get(); @@ -250,9 +234,9 @@ bool PineTimeStyle::Refresh() { auto time = date::make_time(newDateTime - dp); auto yearMonthDay = date::year_month_day(dp); - auto year = (int) yearMonthDay.year(); - auto month = static_cast((unsigned) yearMonthDay.month()); - auto day = (unsigned) yearMonthDay.day(); + auto year = static_cast(yearMonthDay.year()); + auto month = static_cast(static_cast(yearMonthDay.month())); + auto day = static_cast(yearMonthDay.day()); auto dayOfWeek = static_cast(date::weekday(yearMonthDay).iso_encoding()); int hour = time.hours().count(); @@ -263,9 +247,8 @@ bool PineTimeStyle::Refresh() { char hoursChar[3]; char ampmChar[5]; - if (settingsController.GetClockType() == Controllers::Settings::ClockType::H24) { - sprintf(hoursChar, "%02d", hour); + sprintf(hoursChar, "%02d", hour); } else { if (hour == 0 && hour != 12) { hour = 12; @@ -282,41 +265,26 @@ bool PineTimeStyle::Refresh() { sprintf(hoursChar, "%02d", hour); } - if (hoursChar[0] != displayedChar[0] || hoursChar[1] != displayedChar[1] || minutesChar[0] != displayedChar[2] || + if (hoursChar[0] != displayedChar[0] or hoursChar[1] != displayedChar[1] or minutesChar[0] != displayedChar[2] or minutesChar[1] != displayedChar[3]) { displayedChar[0] = hoursChar[0]; displayedChar[1] = hoursChar[1]; displayedChar[2] = minutesChar[0]; displayedChar[3] = minutesChar[1]; - char hourStr[3]; - char minStr[3]; - if (settingsController.GetClockType() == Controllers::Settings::ClockType::H12) { lv_label_set_text(timeAMPM, ampmChar); } - /* Display the time as 2 pairs of digits */ - sprintf(hourStr, "%c%c", hoursChar[0], hoursChar[1]); - lv_label_set_text(timeDD1, hourStr); - - sprintf(minStr, "%c%c", minutesChar[0], minutesChar[1]); - lv_label_set_text(timeDD2, minStr); + lv_label_set_text_fmt(timeDD1, "%s", hoursChar); + lv_label_set_text_fmt(timeDD2, "%s", minutesChar); } if ((year != currentYear) || (month != currentMonth) || (dayOfWeek != currentDayOfWeek) || (day != currentDay)) { - char dayOfWeekStr[4]; - char dayStr[3]; - char monthStr[4]; - - sprintf(dayOfWeekStr, "%s", dateTimeController.DayOfWeekShortToString()); - sprintf(dayStr, "%d", day); - sprintf(monthStr, "%s", dateTimeController.MonthShortToString()); - - lv_label_set_text(dateDayOfWeek, dayOfWeekStr); - lv_label_set_text(dateDay, dayStr); + lv_label_set_text_fmt(dateDayOfWeek, "%s", dateTimeController.DayOfWeekShortToString()); + lv_label_set_text_fmt(dateDay, "%d", day); lv_obj_realign(dateDay); - lv_label_set_text(dateMonth, monthStr); + lv_label_set_text_fmt(dateMonth, "%s", dateTimeController.MonthShortToString()); currentYear = year; currentMonth = month; diff --git a/src/displayapp/screens/PineTimeStyle.h b/src/displayapp/screens/PineTimeStyle.h index 3b4ded1e14..f4cd28e49a 100644 --- a/src/displayapp/screens/PineTimeStyle.h +++ b/src/displayapp/screens/PineTimeStyle.h @@ -32,8 +32,6 @@ namespace Pinetime { bool Refresh() override; - void OnObjectEvent(lv_obj_t* pObj, lv_event_t i); - private: char displayedChar[5]; @@ -67,9 +65,6 @@ namespace Pinetime { lv_obj_t* calendarBar2; lv_obj_t* calendarCrossBar1; lv_obj_t* calendarCrossBar2; - lv_obj_t* heartbeatIcon; - lv_obj_t* heartbeatValue; - lv_obj_t* heartbeatBpm; lv_obj_t* notificationIcon; lv_obj_t* stepGauge; lv_color_t needle_colors[1]; diff --git a/src/displayapp/screens/WatchFaceAnalog.cpp b/src/displayapp/screens/WatchFaceAnalog.cpp index f1889379a4..621929b83e 100644 --- a/src/displayapp/screens/WatchFaceAnalog.cpp +++ b/src/displayapp/screens/WatchFaceAnalog.cpp @@ -10,38 +10,37 @@ LV_IMG_DECLARE(bg_clock); using namespace Pinetime::Applications::Screens; namespace { - -constexpr auto HOUR_LENGTH = 70; -constexpr auto MINUTE_LENGTH = 90; -constexpr auto SECOND_LENGTH = 110; +constexpr int16_t HourLength = 70; +constexpr int16_t MinuteLength = 90; +constexpr int16_t SecondLength = 110; // sin(90) = 1 so the value of _lv_trigo_sin(90) is the scaling factor const auto LV_TRIG_SCALE = _lv_trigo_sin(90); -int16_t cosine(int16_t angle) { +int16_t Cosine(int16_t angle) { return _lv_trigo_sin(angle + 90); } -int16_t sine(int16_t angle) { +int16_t Sine(int16_t angle) { return _lv_trigo_sin(angle); } -int16_t coordinate_x_relocate(int16_t x) { +int16_t CoordinateXRelocate(int16_t x) { return (x + LV_HOR_RES / 2); } -int16_t coordinate_y_relocate(int16_t y) { +int16_t CoordinateYRelocate(int16_t y) { return std::abs(y - LV_HOR_RES / 2); } -lv_point_t coordinate_relocate(int16_t radius, int16_t angle) { +lv_point_t CoordinateRelocate(int16_t radius, int16_t angle) { return lv_point_t{ - .x = coordinate_x_relocate(radius * static_cast(sine(angle)) / LV_TRIG_SCALE), - .y = coordinate_y_relocate(radius * static_cast(cosine(angle)) / LV_TRIG_SCALE) + .x = CoordinateXRelocate(radius * static_cast(Sine(angle)) / LV_TRIG_SCALE), + .y = CoordinateYRelocate(radius * static_cast(Cosine(angle)) / LV_TRIG_SCALE) }; } -} // namespace +} WatchFaceAnalog::WatchFaceAnalog(Pinetime::Applications::DisplayApp* app, Controllers::DateTime& dateTimeController, @@ -123,7 +122,6 @@ WatchFaceAnalog::WatchFaceAnalog(Pinetime::Applications::DisplayApp* app, } WatchFaceAnalog::~WatchFaceAnalog() { - lv_style_reset(&hour_line_style); lv_style_reset(&hour_line_style_trace); lv_style_reset(&minute_line_style); @@ -134,18 +132,17 @@ WatchFaceAnalog::~WatchFaceAnalog() { } void WatchFaceAnalog::UpdateClock() { - hour = dateTimeController.Hours(); minute = dateTimeController.Minutes(); second = dateTimeController.Seconds(); if (sMinute != minute) { auto const angle = minute * 6; - minute_point[0] = coordinate_relocate(30, angle); - minute_point[1] = coordinate_relocate(MINUTE_LENGTH, angle); + minute_point[0] = CoordinateRelocate(30, angle); + minute_point[1] = CoordinateRelocate(MinuteLength, angle); - minute_point_trace[0] = coordinate_relocate(5, angle); - minute_point_trace[1] = coordinate_relocate(31, angle); + minute_point_trace[0] = CoordinateRelocate(5, angle); + minute_point_trace[1] = CoordinateRelocate(31, angle); lv_line_set_points(minute_body, minute_point, 2); lv_line_set_points(minute_body_trace, minute_point_trace, 2); @@ -156,11 +153,11 @@ void WatchFaceAnalog::UpdateClock() { sMinute = minute; auto const angle = (hour * 30 + minute / 2); - hour_point[0] = coordinate_relocate(30, angle); - hour_point[1] = coordinate_relocate(HOUR_LENGTH, angle); + hour_point[0] = CoordinateRelocate(30, angle); + hour_point[1] = CoordinateRelocate(HourLength, angle); - hour_point_trace[0] = coordinate_relocate(5, angle); - hour_point_trace[1] = coordinate_relocate(31, angle); + hour_point_trace[0] = CoordinateRelocate(5, angle); + hour_point_trace[1] = CoordinateRelocate(31, angle); lv_line_set_points(hour_body, hour_point, 2); lv_line_set_points(hour_body_trace, hour_point_trace, 2); @@ -170,8 +167,8 @@ void WatchFaceAnalog::UpdateClock() { sSecond = second; auto const angle = second * 6; - second_point[0] = coordinate_relocate(-20, angle); - second_point[1] = coordinate_relocate(SECOND_LENGTH, angle); + second_point[0] = CoordinateRelocate(-20, angle); + second_point[1] = CoordinateRelocate(SecondLength, angle); lv_line_set_points(second_body, second_point, 2); } } @@ -186,16 +183,12 @@ bool WatchFaceAnalog::Refresh() { notificationState = notificationManager.AreNewNotificationsAvailable(); if (notificationState.IsUpdated()) { - if (notificationState.Get() == true) - lv_label_set_text(notificationIcon, NotificationIcon::GetIcon(true)); - else - lv_label_set_text(notificationIcon, NotificationIcon::GetIcon(false)); + lv_label_set_text(notificationIcon, NotificationIcon::GetIcon(notificationState.Get())); } currentDateTime = dateTimeController.CurrentDateTime(); if (currentDateTime.IsUpdated()) { - month = dateTimeController.Month(); day = dateTimeController.Day(); dayOfWeek = dateTimeController.DayOfWeek(); @@ -203,7 +196,6 @@ bool WatchFaceAnalog::Refresh() { UpdateClock(); if ((month != currentMonth) || (dayOfWeek != currentDayOfWeek) || (day != currentDay)) { - lv_label_set_text_fmt(label_date_day, "%s\n%02i", dateTimeController.DayOfWeekShortToString(), day); currentMonth = month; diff --git a/src/displayapp/screens/WatchFaceAnalog.h b/src/displayapp/screens/WatchFaceAnalog.h index ac7f0ac51f..5d8c6a248b 100644 --- a/src/displayapp/screens/WatchFaceAnalog.h +++ b/src/displayapp/screens/WatchFaceAnalog.h @@ -58,14 +58,12 @@ namespace Pinetime { lv_obj_t* minute_body_trace; lv_obj_t* second_body; - // ## lv_point_t hour_point[2]; lv_point_t hour_point_trace[2]; lv_point_t minute_point[2]; lv_point_t minute_point_trace[2]; lv_point_t second_point[2]; - // ## lv_style_t hour_line_style; lv_style_t hour_line_style_trace; lv_style_t minute_line_style; diff --git a/src/displayapp/screens/WatchFaceDigital.cpp b/src/displayapp/screens/WatchFaceDigital.cpp index f1285eaf35..7a240f1f10 100644 --- a/src/displayapp/screens/WatchFaceDigital.cpp +++ b/src/displayapp/screens/WatchFaceDigital.cpp @@ -12,9 +12,6 @@ #include "components/ble/NotificationManager.h" #include "components/heartrate/HeartRateController.h" #include "components/motion/MotionController.h" -#include "components/settings/Settings.h" -#include "../DisplayApp.h" - using namespace Pinetime::Applications::Screens; WatchFaceDigital::WatchFaceDigital(DisplayApp* app, @@ -36,12 +33,6 @@ WatchFaceDigital::WatchFaceDigital(DisplayApp* app, motionController {motionController} { settingsController.SetClockFace(0); - displayedChar[0] = 0; - displayedChar[1] = 0; - displayedChar[2] = 0; - displayedChar[3] = 0; - displayedChar[4] = 0; - batteryIcon = lv_label_create(lv_scr_act(), nullptr); lv_label_set_text(batteryIcon, Symbols::batteryFull); lv_obj_align(batteryIcon, lv_scr_act(), LV_ALIGN_IN_TOP_RIGHT, -5, 2); @@ -56,7 +47,7 @@ WatchFaceDigital::WatchFaceDigital(DisplayApp* app, lv_label_set_text(bleIcon, Symbols::bluetooth); lv_obj_align(bleIcon, batteryPlug, LV_ALIGN_OUT_LEFT_MID, -5, 0); - notificationIcon = lv_label_create(lv_scr_act(), NULL); + notificationIcon = lv_label_create(lv_scr_act(), nullptr); lv_obj_set_style_local_text_color(notificationIcon, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x00FF00)); lv_label_set_text(notificationIcon, NotificationIcon::GetIcon(false)); lv_obj_align(notificationIcon, nullptr, LV_ALIGN_IN_TOP_LEFT, 10, 0); @@ -111,17 +102,13 @@ bool WatchFaceDigital::Refresh() { if (batteryPercentRemaining.IsUpdated()) { auto batteryPercent = batteryPercentRemaining.Get(); lv_label_set_text(batteryIcon, BatteryIcon::GetBatteryIcon(batteryPercent)); - auto isCharging = batteryController.IsCharging() || batteryController.IsPowerPresent(); + auto isCharging = batteryController.IsCharging() or batteryController.IsPowerPresent(); lv_label_set_text(batteryPlug, BatteryIcon::GetPlugIcon(isCharging)); } bleState = bleController.IsConnected(); if (bleState.IsUpdated()) { - if (bleState.Get() == true) { - lv_label_set_text(bleIcon, BleIcon::GetIcon(true)); - } else { - lv_label_set_text(bleIcon, BleIcon::GetIcon(false)); - } + lv_label_set_text(bleIcon, BleIcon::GetIcon(bleState.Get())); } lv_obj_align(batteryIcon, lv_scr_act(), LV_ALIGN_IN_TOP_RIGHT, -5, 5); lv_obj_align(batteryPlug, batteryIcon, LV_ALIGN_OUT_LEFT_MID, -5, 0); @@ -129,10 +116,7 @@ bool WatchFaceDigital::Refresh() { notificationState = notificatioManager.AreNewNotificationsAvailable(); if (notificationState.IsUpdated()) { - if (notificationState.Get() == true) - lv_label_set_text(notificationIcon, NotificationIcon::GetIcon(true)); - else - lv_label_set_text(notificationIcon, NotificationIcon::GetIcon(false)); + lv_label_set_text(notificationIcon, NotificationIcon::GetIcon(notificationState.Get())); } currentDateTime = dateTimeController.CurrentDateTime(); @@ -144,9 +128,9 @@ bool WatchFaceDigital::Refresh() { auto time = date::make_time(newDateTime - dp); auto yearMonthDay = date::year_month_day(dp); - auto year = (int) yearMonthDay.year(); - auto month = static_cast((unsigned) yearMonthDay.month()); - auto day = (unsigned) yearMonthDay.day(); + auto year = static_cast(yearMonthDay.year()); + auto month = static_cast(static_cast(yearMonthDay.month())); + auto day = static_cast(yearMonthDay.day()); auto dayOfWeek = static_cast(date::weekday(yearMonthDay).iso_encoding()); int hour = time.hours().count(); @@ -175,15 +159,13 @@ bool WatchFaceDigital::Refresh() { sprintf(hoursChar, "%02d", hour); } - if (hoursChar[0] != displayedChar[0] || hoursChar[1] != displayedChar[1] || minutesChar[0] != displayedChar[2] || - minutesChar[1] != displayedChar[3]) { + if ((hoursChar[0] != displayedChar[0]) or (hoursChar[1] != displayedChar[1]) or (minutesChar[0] != displayedChar[2]) or + (minutesChar[1] != displayedChar[3])) { displayedChar[0] = hoursChar[0]; displayedChar[1] = hoursChar[1]; displayedChar[2] = minutesChar[0]; displayedChar[3] = minutesChar[1]; - char timeStr[6]; - if (settingsController.GetClockType() == Controllers::Settings::ClockType::H12) { lv_label_set_text(label_time_ampm, ampmChar); if (hoursChar[0] == '0') { @@ -191,8 +173,7 @@ bool WatchFaceDigital::Refresh() { } } - sprintf(timeStr, "%c%c:%c%c", hoursChar[0], hoursChar[1], minutesChar[0], minutesChar[1]); - lv_label_set_text(label_time, timeStr); + lv_label_set_text_fmt(label_time, "%s:%s", hoursChar, minutesChar); if (settingsController.GetClockType() == Controllers::Settings::ClockType::H12) { lv_obj_align(label_time, lv_scr_act(), LV_ALIGN_IN_RIGHT_MID, 0, 0); @@ -202,13 +183,11 @@ bool WatchFaceDigital::Refresh() { } if ((year != currentYear) || (month != currentMonth) || (dayOfWeek != currentDayOfWeek) || (day != currentDay)) { - char dateStr[22]; if (settingsController.GetClockType() == Controllers::Settings::ClockType::H24) { - sprintf(dateStr, "%s %d %s %d", dateTimeController.DayOfWeekShortToString(), day, dateTimeController.MonthShortToString(), year); + lv_label_set_text_fmt(label_date, "%s %d %s %d", dateTimeController.DayOfWeekShortToString(), day, dateTimeController.MonthShortToString(), year); } else { - sprintf(dateStr, "%s %s %d %d", dateTimeController.DayOfWeekShortToString(), dateTimeController.MonthShortToString(), day, year); + lv_label_set_text_fmt(label_date, "%s %s %d %d", dateTimeController.DayOfWeekShortToString(), dateTimeController.MonthShortToString(), day, year); } - lv_label_set_text(label_date, dateStr); lv_obj_align(label_date, lv_scr_act(), LV_ALIGN_CENTER, 0, 60); currentYear = year; diff --git a/src/displayapp/screens/WatchFaceDigital.h b/src/displayapp/screens/WatchFaceDigital.h index 76c8d3dcce..6a6e1ac6c8 100644 --- a/src/displayapp/screens/WatchFaceDigital.h +++ b/src/displayapp/screens/WatchFaceDigital.h @@ -35,10 +35,8 @@ namespace Pinetime { bool Refresh() override; - void OnObjectEvent(lv_obj_t* pObj, lv_event_t i); - private: - char displayedChar[5]; + char displayedChar[5] {}; uint16_t currentYear = 1970; Pinetime::Controllers::DateTime::Months currentMonth = Pinetime::Controllers::DateTime::Months::Unknown; @@ -63,7 +61,6 @@ namespace Pinetime { lv_obj_t* batteryPlug; lv_obj_t* heartbeatIcon; lv_obj_t* heartbeatValue; - lv_obj_t* heartbeatBpm; lv_obj_t* stepIcon; lv_obj_t* stepValue; lv_obj_t* notificationIcon; From 7e92577c14895f57f5adda27ad54adbbc4b7ffe9 Mon Sep 17 00:00:00 2001 From: Riku Isokoski Date: Tue, 10 Aug 2021 21:02:51 +0300 Subject: [PATCH 100/173] Revert "Merge branch 'unblock_i2c' into develop" This reverts commit 275a84b3238874d213271f4287e6c1c5bfcb4353, reversing changes made to 9fb37550886f09f6510e99a5b452262c53c3987c. --- src/main.cpp | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 9a5b0cfe65..62e4446f32 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -5,7 +5,6 @@ #include #include #include -#include // nimble #define min // workaround: nimble's min/max macros conflict with libstdc++ @@ -306,20 +305,6 @@ int main(void) { nrf_drv_clock_init(); - // Unblock i2c? - nrf_gpio_cfg(pinTwiScl, - NRF_GPIO_PIN_DIR_OUTPUT, - NRF_GPIO_PIN_INPUT_DISCONNECT, - NRF_GPIO_PIN_NOPULL, - NRF_GPIO_PIN_S0D1, - NRF_GPIO_PIN_NOSENSE); - nrf_gpio_pin_set(pinTwiScl); - for (uint8_t i = 0; i < 16; i++) { - nrf_gpio_pin_toggle(pinTwiScl); - nrf_delay_us(5); - } - nrf_gpio_cfg_default(pinTwiScl); - debounceTimer = xTimerCreate("debounceTimer", 200, pdFALSE, (void*) 0, DebounceTimerCallback); debounceChargeTimer = xTimerCreate("debounceTimerCharge", 200, pdFALSE, (void*) 0, DebounceTimerChargeCallback); From 8a694adb0979339664da0af6d51c480d26c5527b Mon Sep 17 00:00:00 2001 From: Riku Isokoski Date: Tue, 10 Aug 2021 22:03:34 +0300 Subject: [PATCH 101/173] Rework TouchHandler into not a task --- src/drivers/TwiMaster.cpp | 12 ++--- src/drivers/TwiMaster.h | 3 +- src/main.cpp | 3 +- src/systemtask/SystemTask.cpp | 8 ++-- src/touchhandler/TouchHandler.cpp | 80 +++++++++++++------------------ src/touchhandler/TouchHandler.h | 9 ++-- 6 files changed, 47 insertions(+), 68 deletions(-) diff --git a/src/drivers/TwiMaster.cpp b/src/drivers/TwiMaster.cpp index 456c3e64b8..fc9edf810f 100644 --- a/src/drivers/TwiMaster.cpp +++ b/src/drivers/TwiMaster.cpp @@ -12,10 +12,9 @@ TwiMaster::TwiMaster(const Modules module, const Parameters& params) : module {m } void TwiMaster::Init() { - sleeping = false; if(mutex == nullptr) mutex = xSemaphoreCreateBinary(); - + NRF_GPIO->PIN_CNF[params.pinScl] = ((uint32_t) GPIO_PIN_CNF_DIR_Input << GPIO_PIN_CNF_DIR_Pos) | ((uint32_t) GPIO_PIN_CNF_INPUT_Connect << GPIO_PIN_CNF_INPUT_Pos) | ((uint32_t) GPIO_PIN_CNF_PULL_Pullup << GPIO_PIN_CNF_PULL_Pos) | ((uint32_t) GPIO_PIN_CNF_DRIVE_S0D1 << GPIO_PIN_CNF_DRIVE_Pos) | @@ -177,14 +176,11 @@ void TwiMaster::Sleep() { nrf_gpio_cfg_default(6); nrf_gpio_cfg_default(7); NRF_LOG_INFO("[TWIMASTER] Sleep"); - sleeping = true; } void TwiMaster::Wakeup() { - if (sleeping) { - Init(); - NRF_LOG_INFO("[TWIMASTER] Wakeup"); - } + Init(); + NRF_LOG_INFO("[TWIMASTER] Wakeup"); } /* Sometimes, the TWIM device just freeze and never set the event EVENTS_LASTTX. @@ -210,4 +206,4 @@ void TwiMaster::FixHwFreezed() { // Re-enable I²C twiBaseAddress->ENABLE = twi_state; -} +} \ No newline at end of file diff --git a/src/drivers/TwiMaster.h b/src/drivers/TwiMaster.h index 5748ec65f8..6175b99b44 100644 --- a/src/drivers/TwiMaster.h +++ b/src/drivers/TwiMaster.h @@ -39,7 +39,6 @@ namespace Pinetime { uint8_t internalBuffer[maxDataSize + registerSize]; uint32_t txStartedCycleCount = 0; static constexpr uint32_t HwFreezedDelay {161000}; - bool sleeping; }; } -} +} \ No newline at end of file diff --git a/src/main.cpp b/src/main.cpp index 62e4446f32..dffec28a9a 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -166,8 +166,7 @@ Pinetime::System::SystemTask systemTask(spi, void nrfx_gpiote_evt_handler(nrfx_gpiote_pin_t pin, nrf_gpiote_polarity_t action) { if (pin == pinTouchIrq) { - twiMaster.Wakeup(); - touchHandler.WakeUp(); + systemTask.OnTouchEvent(); return; } diff --git a/src/systemtask/SystemTask.cpp b/src/systemtask/SystemTask.cpp index 7ba7cf69a7..5f363130af 100644 --- a/src/systemtask/SystemTask.cpp +++ b/src/systemtask/SystemTask.cpp @@ -150,9 +150,6 @@ void SystemTask::Work() { heartRateSensor.Disable(); heartRateApp.Start(); - touchHandler.Register(this); - touchHandler.Start(); - nrf_gpio_cfg_sense_input(pinButton, (nrf_gpio_pin_pull_t) GPIO_PIN_CNF_PULL_Pulldown, (nrf_gpio_pin_sense_t) GPIO_PIN_CNF_SENSE_High); nrf_gpio_cfg_output(15); nrf_gpio_pin_set(15); @@ -244,6 +241,8 @@ void SystemTask::Work() { isDimmed = false; break; case Messages::TouchWakeUp: { + twiMaster.Wakeup(); + touchHandler.GetNewTouchInfo(); auto gesture = touchHandler.GestureGet(); if ((gesture == Pinetime::Drivers::Cst816S::Gestures::DoubleTap && settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::DoubleTap)) || @@ -299,6 +298,9 @@ void SystemTask::Work() { xTimerStart(dimTimer, 0); break; case Messages::OnTouchEvent: + if (touchHandler.GetNewTouchInfo()) { + touchHandler.UpdateLvglTouchPoint(); + } ReloadIdleTimer(); break; case Messages::OnButtonEvent: diff --git a/src/touchhandler/TouchHandler.cpp b/src/touchhandler/TouchHandler.cpp index 187aa6966c..c1a3c0d0ee 100644 --- a/src/touchhandler/TouchHandler.cpp +++ b/src/touchhandler/TouchHandler.cpp @@ -18,61 +18,47 @@ Pinetime::Drivers::Cst816S::Gestures TouchHandler::GestureGet() { return returnGesture; } -void TouchHandler::Start() { - if (pdPASS != xTaskCreate(TouchHandler::Process, "Touch", 100, this, 0, &taskHandle)) { - APP_ERROR_HANDLER(NRF_ERROR_NO_MEM); - } -} - -void TouchHandler::Process(void* instance) { - auto* app = static_cast(instance); - app->Work(); -} - -void TouchHandler::Work() { - bool slideReleased = true; - while (true) { - vTaskSuspend(taskHandle); +bool TouchHandler::GetNewTouchInfo() { + info = touchPanel.GetTouchInfo(); - info = touchPanel.GetTouchInfo(); - - if (info.isValid) { - if (info.gesture != Pinetime::Drivers::Cst816S::Gestures::None) { - if (slideReleased) { - if (info.gesture == Pinetime::Drivers::Cst816S::Gestures::SlideDown || - info.gesture == Pinetime::Drivers::Cst816S::Gestures::SlideLeft || - info.gesture == Pinetime::Drivers::Cst816S::Gestures::SlideUp || - info.gesture == Pinetime::Drivers::Cst816S::Gestures::SlideRight) { - slideReleased = false; - } - gesture = info.gesture; - } - } + if (!info.isValid) { + return false; + } - if (!systemTask->IsSleeping()) { + if (info.gesture != Pinetime::Drivers::Cst816S::Gestures::None) { + if (slideReleased) { + if (info.gesture == Pinetime::Drivers::Cst816S::Gestures::SlideDown || + info.gesture == Pinetime::Drivers::Cst816S::Gestures::SlideLeft || + info.gesture == Pinetime::Drivers::Cst816S::Gestures::SlideUp || + info.gesture == Pinetime::Drivers::Cst816S::Gestures::SlideRight) { if (info.touching) { - if (!isCancelled) { - lvgl.SetNewTouchPoint(info.x, info.y, true); - } - } else { - if (isCancelled) { - lvgl.SetNewTouchPoint(-1, -1, false); - isCancelled = false; - } else { - lvgl.SetNewTouchPoint(info.x, info.y, false); - } - slideReleased = true; + gesture = info.gesture; + slideReleased = false; } + } else { + gesture = info.gesture; } - systemTask->OnTouchEvent(); } } -} -void TouchHandler::Register(Pinetime::System::SystemTask* systemTask) { - this->systemTask = systemTask; + if (!info.touching) { + slideReleased = true; + } + + return true; } -void TouchHandler::WakeUp() { - vTaskResume(taskHandle); +void TouchHandler::UpdateLvglTouchPoint() { + if (info.touching) { + if (!isCancelled) { + lvgl.SetNewTouchPoint(info.x, info.y, true); + } + } else { + if (isCancelled) { + lvgl.SetNewTouchPoint(-1, -1, false); + isCancelled = false; + } else { + lvgl.SetNewTouchPoint(info.x, info.y, false); + } + } } diff --git a/src/touchhandler/TouchHandler.h b/src/touchhandler/TouchHandler.h index 6b8189f52b..38cb36cbde 100644 --- a/src/touchhandler/TouchHandler.h +++ b/src/touchhandler/TouchHandler.h @@ -19,9 +19,9 @@ namespace Pinetime { public: explicit TouchHandler(Drivers::Cst816S&, Components::LittleVgl&); void CancelTap(); + bool GetNewTouchInfo(); + void UpdateLvglTouchPoint(); void Register(Pinetime::System::SystemTask* systemTask); - void Start(); - void WakeUp(); bool IsTouching() const { return info.touching; @@ -34,16 +34,13 @@ namespace Pinetime { } Drivers::Cst816S::Gestures GestureGet(); private: - static void Process(void* instance); - void Work(); Pinetime::Drivers::Cst816S::TouchInfos info; - Pinetime::System::SystemTask* systemTask = nullptr; - TaskHandle_t taskHandle; Pinetime::Drivers::Cst816S& touchPanel; Pinetime::Components::LittleVgl& lvgl; Pinetime::Drivers::Cst816S::Gestures gesture; bool isCancelled = false; + bool slideReleased = true; }; } } From 6776776421bd73c8e8f927af3ffc45ce77fe0e0d Mon Sep 17 00:00:00 2001 From: Riku Isokoski Date: Tue, 10 Aug 2021 22:18:21 +0300 Subject: [PATCH 102/173] Make diff smaller and revert some changes in DisplayApp --- src/displayapp/DisplayApp.cpp | 117 +++++++++++++++++----------------- src/displayapp/Messages.h | 1 + src/systemtask/SystemTask.cpp | 1 + 3 files changed, 62 insertions(+), 57 deletions(-) diff --git a/src/displayapp/DisplayApp.cpp b/src/displayapp/DisplayApp.cpp index b4fc885bee..e26a96f270 100644 --- a/src/displayapp/DisplayApp.cpp +++ b/src/displayapp/DisplayApp.cpp @@ -52,6 +52,28 @@ namespace { static inline bool in_isr(void) { return (SCB->ICSR & SCB_ICSR_VECTACTIVE_Msk) != 0; } + + TouchEvents ConvertGesture(Pinetime::Drivers::Cst816S::Gestures gesture) { + switch (gesture) { + case Pinetime::Drivers::Cst816S::Gestures::SingleTap: + return TouchEvents::Tap; + case Pinetime::Drivers::Cst816S::Gestures::LongPress: + return TouchEvents::LongTap; + case Pinetime::Drivers::Cst816S::Gestures::DoubleTap: + return TouchEvents::DoubleTap; + case Pinetime::Drivers::Cst816S::Gestures::SlideRight: + return TouchEvents::SwipeRight; + case Pinetime::Drivers::Cst816S::Gestures::SlideLeft: + return TouchEvents::SwipeLeft; + case Pinetime::Drivers::Cst816S::Gestures::SlideDown: + return TouchEvents::SwipeDown; + case Pinetime::Drivers::Cst816S::Gestures::SlideUp: + return TouchEvents::SwipeUp; + case Pinetime::Drivers::Cst816S::Gestures::None: + default: + return TouchEvents::None; + } + } } DisplayApp::DisplayApp(Drivers::St7789& lcd, @@ -185,6 +207,41 @@ void DisplayApp::Refresh() { LoadApp(Apps::Timer, DisplayApp::FullRefreshDirections::Down); } break; + case Messages::TouchEvent: { + if (state != States::Running) { + break; + } + auto gesture = ConvertGesture(touchHandler.GestureGet()); + if (gesture == TouchEvents::None) { + break; + } + if (!currentScreen->OnTouchEvent(gesture)) { + if (currentApp == Apps::Clock) { + switch (gesture) { + case TouchEvents::SwipeUp: + LoadApp(Apps::Launcher, DisplayApp::FullRefreshDirections::Up); + break; + case TouchEvents::SwipeDown: + LoadApp(Apps::Notifications, DisplayApp::FullRefreshDirections::Down); + break; + case TouchEvents::SwipeRight: + LoadApp(Apps::QuickSettings, DisplayApp::FullRefreshDirections::RightAnim); + break; + case TouchEvents::DoubleTap: + PushMessageToSystemTask(System::Messages::GoToSleep); + break; + default: + break; + } + } else if (returnTouchEvent == gesture) { + LoadApp(returnToApp, returnDirection); + brightnessController.Set(settingsController.GetBrightness()); + brightnessController.Backup(); + } + } else { + touchHandler.CancelTap(); + } + } break; case Messages::ButtonPushed: if (currentApp == Apps::Clock) { PushMessageToSystemTask(System::Messages::GoToSleep); @@ -207,44 +264,14 @@ void DisplayApp::Refresh() { } } - auto gesture = GetGesture(); - if (gesture != TouchEvents::None) { - if (!currentScreen->OnTouchEvent(gesture)) { - if (currentApp == Apps::Clock) { - switch (gesture) { - case TouchEvents::SwipeUp: - LoadApp(Apps::Launcher, DisplayApp::FullRefreshDirections::Up); - break; - case TouchEvents::SwipeDown: - LoadApp(Apps::Notifications, DisplayApp::FullRefreshDirections::Down); - break; - case TouchEvents::SwipeRight: - LoadApp(Apps::QuickSettings, DisplayApp::FullRefreshDirections::RightAnim); - break; - case TouchEvents::DoubleTap: - PushMessageToSystemTask(System::Messages::GoToSleep); - break; - default: - break; - } - } else if (returnTouchEvent == gesture) { - LoadApp(returnToApp, returnDirection); - brightnessController.Set(settingsController.GetBrightness()); - brightnessController.Backup(); - } - } else { - touchHandler.CancelTap(); - } + if (nextApp != Apps::None) { + LoadApp(nextApp, nextDirection); + nextApp = Apps::None; } if (touchHandler.IsTouching()) { currentScreen->OnTouchEvent(touchHandler.GetX(), touchHandler.GetY()); } - - if (nextApp != Apps::None) { - LoadApp(nextApp, nextDirection); - nextApp = Apps::None; - } } void DisplayApp::RunningState() { @@ -407,30 +434,6 @@ void DisplayApp::PushMessage(Messages msg) { } } -TouchEvents DisplayApp::GetGesture() { - auto gesture = touchHandler.GestureGet(); - switch (gesture) { - case Pinetime::Drivers::Cst816S::Gestures::SingleTap: - return TouchEvents::Tap; - case Pinetime::Drivers::Cst816S::Gestures::LongPress: - return TouchEvents::LongTap; - case Pinetime::Drivers::Cst816S::Gestures::DoubleTap: - return TouchEvents::DoubleTap; - case Pinetime::Drivers::Cst816S::Gestures::SlideRight: - return TouchEvents::SwipeRight; - case Pinetime::Drivers::Cst816S::Gestures::SlideLeft: - return TouchEvents::SwipeLeft; - case Pinetime::Drivers::Cst816S::Gestures::SlideDown: - return TouchEvents::SwipeDown; - case Pinetime::Drivers::Cst816S::Gestures::SlideUp: - return TouchEvents::SwipeUp; - case Pinetime::Drivers::Cst816S::Gestures::None: - default: - return TouchEvents::None; - } - return TouchEvents::None; -} - void DisplayApp::SetFullRefresh(DisplayApp::FullRefreshDirections direction) { switch (direction) { case DisplayApp::FullRefreshDirections::Down: diff --git a/src/displayapp/Messages.h b/src/displayapp/Messages.h index 26480987ac..322505e6fe 100644 --- a/src/displayapp/Messages.h +++ b/src/displayapp/Messages.h @@ -8,6 +8,7 @@ namespace Pinetime { UpdateDateTime, UpdateBleConnection, UpdateBatteryLevel, + TouchEvent, ButtonPushed, NewNotification, TimerDone, diff --git a/src/systemtask/SystemTask.cpp b/src/systemtask/SystemTask.cpp index 5f363130af..3ee26c5fd3 100644 --- a/src/systemtask/SystemTask.cpp +++ b/src/systemtask/SystemTask.cpp @@ -302,6 +302,7 @@ void SystemTask::Work() { touchHandler.UpdateLvglTouchPoint(); } ReloadIdleTimer(); + displayApp.PushMessage(Pinetime::Applications::Display::Messages::TouchEvent); break; case Messages::OnButtonEvent: ReloadIdleTimer(); From cd7ca458fa959ba6d60b2cf107b198e462315abd Mon Sep 17 00:00:00 2001 From: Riku Isokoski Date: Tue, 10 Aug 2021 22:37:41 +0300 Subject: [PATCH 103/173] Remove leftover --- src/touchhandler/TouchHandler.h | 1 - 1 file changed, 1 deletion(-) diff --git a/src/touchhandler/TouchHandler.h b/src/touchhandler/TouchHandler.h index 38cb36cbde..e2140cae5d 100644 --- a/src/touchhandler/TouchHandler.h +++ b/src/touchhandler/TouchHandler.h @@ -21,7 +21,6 @@ namespace Pinetime { void CancelTap(); bool GetNewTouchInfo(); void UpdateLvglTouchPoint(); - void Register(Pinetime::System::SystemTask* systemTask); bool IsTouching() const { return info.touching; From fe33c756b7326cbf0a6c70822b70cff4dc2e3401 Mon Sep 17 00:00:00 2001 From: Riku Isokoski Date: Wed, 11 Aug 2021 18:31:40 +0300 Subject: [PATCH 104/173] Fix longpress gesture --- src/touchhandler/TouchHandler.cpp | 9 +++++---- src/touchhandler/TouchHandler.h | 2 +- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/touchhandler/TouchHandler.cpp b/src/touchhandler/TouchHandler.cpp index c1a3c0d0ee..735b311a1a 100644 --- a/src/touchhandler/TouchHandler.cpp +++ b/src/touchhandler/TouchHandler.cpp @@ -26,14 +26,15 @@ bool TouchHandler::GetNewTouchInfo() { } if (info.gesture != Pinetime::Drivers::Cst816S::Gestures::None) { - if (slideReleased) { + if (gestureReleased) { if (info.gesture == Pinetime::Drivers::Cst816S::Gestures::SlideDown || info.gesture == Pinetime::Drivers::Cst816S::Gestures::SlideLeft || info.gesture == Pinetime::Drivers::Cst816S::Gestures::SlideUp || - info.gesture == Pinetime::Drivers::Cst816S::Gestures::SlideRight) { + info.gesture == Pinetime::Drivers::Cst816S::Gestures::SlideRight || + info.gesture == Pinetime::Drivers::Cst816S::Gestures::LongPress) { if (info.touching) { gesture = info.gesture; - slideReleased = false; + gestureReleased = false; } } else { gesture = info.gesture; @@ -42,7 +43,7 @@ bool TouchHandler::GetNewTouchInfo() { } if (!info.touching) { - slideReleased = true; + gestureReleased = true; } return true; diff --git a/src/touchhandler/TouchHandler.h b/src/touchhandler/TouchHandler.h index e2140cae5d..f5442939af 100644 --- a/src/touchhandler/TouchHandler.h +++ b/src/touchhandler/TouchHandler.h @@ -39,7 +39,7 @@ namespace Pinetime { Pinetime::Components::LittleVgl& lvgl; Pinetime::Drivers::Cst816S::Gestures gesture; bool isCancelled = false; - bool slideReleased = true; + bool gestureReleased = true; }; } } From 1d341a7aeb16acb45f25b16590630efd655ecd30 Mon Sep 17 00:00:00 2001 From: Riku Isokoski Date: Thu, 12 Aug 2021 14:06:58 +0300 Subject: [PATCH 105/173] Don't reconfigure pins --- src/drivers/TwiMaster.cpp | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/src/drivers/TwiMaster.cpp b/src/drivers/TwiMaster.cpp index 52f93d8596..429a6eb722 100644 --- a/src/drivers/TwiMaster.cpp +++ b/src/drivers/TwiMaster.cpp @@ -180,15 +180,10 @@ TwiMaster::ErrorCodes TwiMaster::Write(uint8_t deviceAddress, const uint8_t* dat } void TwiMaster::Sleep() { - while (twiBaseAddress->ENABLE != 0) { - twiBaseAddress->ENABLE = (TWIM_ENABLE_ENABLE_Disabled << TWIM_ENABLE_ENABLE_Pos); - } - nrf_gpio_cfg_default(6); - nrf_gpio_cfg_default(7); + twiBaseAddress->ENABLE = (TWIM_ENABLE_ENABLE_Disabled << TWIM_ENABLE_ENABLE_Pos); } void TwiMaster::Wakeup() { - ConfigurePins(); twiBaseAddress->ENABLE = (TWIM_ENABLE_ENABLE_Enabled << TWIM_ENABLE_ENABLE_Pos); } From 6bffc7d52840affc5c037d1bb783172b99d4731a Mon Sep 17 00:00:00 2001 From: Kieran Cawthray Date: Thu, 12 Aug 2021 21:28:41 +0200 Subject: [PATCH 106/173] Tidying --- src/displayapp/screens/PineTimeStyle.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/displayapp/screens/PineTimeStyle.cpp b/src/displayapp/screens/PineTimeStyle.cpp index 04128b2190..6b0cc59af3 100644 --- a/src/displayapp/screens/PineTimeStyle.cpp +++ b/src/displayapp/screens/PineTimeStyle.cpp @@ -62,7 +62,6 @@ PineTimeStyle::PineTimeStyle(DisplayApp* app, displayedChar[4] = 0; //Create a 200px wide background rectangle - timebar = lv_obj_create(lv_scr_act(), nullptr); lv_obj_set_style_local_bg_color(timebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, pts_colors[settingsController.GetPTSColorBG()]); lv_obj_set_style_local_radius(timebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, 0); From fbb4e8c6ae461697e7151927205ce134eb26de53 Mon Sep 17 00:00:00 2001 From: mabuch Date: Sat, 14 Aug 2021 14:47:00 +0200 Subject: [PATCH 107/173] fix Github Action build Firmware --- .github/workflows/main.yml | 29 ++++++++++++++--------------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 4a71b7e08e..f25fd31190 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -44,7 +44,7 @@ jobs: - name: Install Embedded Arm Toolchain arm-none-eabi-gcc if: steps.cache-toolchain.outputs.cache-hit != 'true' # Install toolchain if not found in cache - uses: fiam/arm-none-eabi-gcc@v1.0.2 + uses: fiam/arm-none-eabi-gcc@v1.0.4 with: # GNU Embedded Toolchain for Arm release name, in the V-YYYY-qZ format (e.g. "9-2019-q4") release: 9-2020-q2 @@ -83,10 +83,16 @@ jobs: if: steps.cache-mcuboot.outputs.cache-hit != 'true' # Install MCUBoot if not found in cache run: | cd ${{ runner.temp }} - git clone --branch v1.5.0 https://github.com/JuulLabs-OSS/mcuboot + git clone --branch v1.5.0 https://github.com/mcu-tools/mcuboot - name: Install imgtool dependencies - run: pip3 install --user -r ${{ runner.temp }}/mcuboot/scripts/requirements.txt + run: | + pip3 install --user -r ${{ runner.temp }}/mcuboot/scripts/requirements.txt + + # cbor is a dependency that is not currently included in mcuboot requirements.txt + - name: Install imgtool dependencies (cbor) + run: | + pip3 install --user cbor - name: Install adafruit-nrfutil run: | @@ -99,6 +105,8 @@ jobs: - name: Checkout source files uses: actions/checkout@v2 + with: + submodules: recursive - name: Show files run: set ; pwd ; ls -l @@ -110,7 +118,7 @@ jobs: run: | mkdir -p build cd build - cmake -DARM_NONE_EABI_TOOLCHAIN_PATH=${{ runner.temp }}/arm-none-eabi -DNRF5_SDK_PATH=${{ runner.temp }}/nrf5_sdk -DUSE_OPENOCD=1 ../ + cmake -DARM_NONE_EABI_TOOLCHAIN_PATH=${{ runner.temp }}/arm-none-eabi -DNRF5_SDK_PATH=${{ runner.temp }}/nrf5_sdk -DUSE_OPENOCD=1 -DBUILD_DFU=1 ../ ######################################################################################### # Make and Upload DFU Package @@ -125,19 +133,10 @@ jobs: cd build make pinetime-mcuboot-app - - name: Create firmware image - run: | - # The generated firmware binary looks like "pinetime-mcuboot-app-0.8.2.bin" - ls -l build/src/pinetime-mcuboot-app*.bin - ${{ runner.temp }}/mcuboot/scripts/imgtool.py create --align 4 --version 1.0.0 --header-size 32 --slot-size 475136 --pad-header build/src/pinetime-mcuboot-app*.bin build/src/pinetime-mcuboot-app-img.bin - ${{ runner.temp }}/mcuboot/scripts/imgtool.py verify build/src/pinetime-mcuboot-app-img.bin - - - name: Create DFU package + - name: Unzip DFU package run: | - ~/.local/bin/adafruit-nrfutil dfu genpkg --dev-type 0x0052 --application build/src/pinetime-mcuboot-app-img.bin build/src/pinetime-mcuboot-app-dfu.zip - unzip -v build/src/pinetime-mcuboot-app-dfu.zip # Unzip the package because Upload Artifact will zip up the files - unzip build/src/pinetime-mcuboot-app-dfu.zip -d build/src/pinetime-mcuboot-app-dfu + unzip build/src/pinetime-mcuboot-app-dfu*.zip -d build/src/pinetime-mcuboot-app-dfu - name: Upload DFU package uses: actions/upload-artifact@v2 From 23bde0d18e99a344b95b5f1507350e186659eec2 Mon Sep 17 00:00:00 2001 From: Riku Isokoski Date: Sat, 14 Aug 2021 21:18:11 +0300 Subject: [PATCH 108/173] Make battery reading periodic. Add events. Disable pullup --- src/components/battery/BatteryController.cpp | 11 +++--- src/components/battery/BatteryController.h | 7 ++-- src/displayapp/DisplayApp.cpp | 3 -- src/displayapp/Messages.h | 1 - src/displayapp/screens/BatteryInfo.cpp | 3 -- src/systemtask/Messages.h | 4 ++- src/systemtask/SystemTask.cpp | 35 +++++++++++--------- src/systemtask/SystemTask.h | 6 ++-- 8 files changed, 38 insertions(+), 32 deletions(-) diff --git a/src/components/battery/BatteryController.cpp b/src/components/battery/BatteryController.cpp index f8a64ecd18..aa038c5ded 100644 --- a/src/components/battery/BatteryController.cpp +++ b/src/components/battery/BatteryController.cpp @@ -9,10 +9,7 @@ Battery* Battery::instance = nullptr; Battery::Battery() { instance = this; -} - -void Battery::Init() { - nrf_gpio_cfg_input(chargingPin, static_cast GPIO_PIN_CNF_PULL_Pullup); + nrf_gpio_cfg_input(chargingPin, static_cast GPIO_PIN_CNF_PULL_Disabled); } void Battery::Update() { @@ -75,5 +72,11 @@ void Battery::SaadcEventHandler(nrfx_saadc_evt_t const* p_event) { nrfx_saadc_uninit(); isReading = false; + + systemTask->PushMessage(System::Messages::BatteryMeasurementDone); } } + +void Battery::Register(Pinetime::System::SystemTask* systemTask) { + this->systemTask = systemTask; +} diff --git a/src/components/battery/BatteryController.h b/src/components/battery/BatteryController.h index 6f09b737a3..ad304eba41 100644 --- a/src/components/battery/BatteryController.h +++ b/src/components/battery/BatteryController.h @@ -1,8 +1,7 @@ #pragma once #include #include -#include -#include +#include namespace Pinetime { namespace Controllers { @@ -11,8 +10,8 @@ namespace Pinetime { public: Battery(); - void Init(); void Update(); + void Register(System::SystemTask* systemTask); uint8_t PercentRemaining() const { return percentRemaining; @@ -49,6 +48,8 @@ namespace Pinetime { static void AdcCallbackStatic(nrfx_saadc_evt_t const* event); bool isReading = false; + + Pinetime::System::SystemTask* systemTask = nullptr; }; } } diff --git a/src/displayapp/DisplayApp.cpp b/src/displayapp/DisplayApp.cpp index d4a73f5ee7..c6e9466814 100644 --- a/src/displayapp/DisplayApp.cpp +++ b/src/displayapp/DisplayApp.cpp @@ -194,9 +194,6 @@ void DisplayApp::Refresh() { // clockScreen.SetBleConnectionState(bleController.IsConnected() ? Screens::Clock::BleConnectionStates::Connected : // Screens::Clock::BleConnectionStates::NotConnected); break; - case Messages::UpdateBatteryLevel: - batteryController.Update(); - break; case Messages::NewNotification: LoadApp(Apps::NotificationsPreview, DisplayApp::FullRefreshDirections::Down); break; diff --git a/src/displayapp/Messages.h b/src/displayapp/Messages.h index 322505e6fe..8e4884db08 100644 --- a/src/displayapp/Messages.h +++ b/src/displayapp/Messages.h @@ -7,7 +7,6 @@ namespace Pinetime { GoToRunning, UpdateDateTime, UpdateBleConnection, - UpdateBatteryLevel, TouchEvent, ButtonPushed, NewNotification, diff --git a/src/displayapp/screens/BatteryInfo.cpp b/src/displayapp/screens/BatteryInfo.cpp index 0ab47ebfff..31cde071ee 100644 --- a/src/displayapp/screens/BatteryInfo.cpp +++ b/src/displayapp/screens/BatteryInfo.cpp @@ -59,9 +59,6 @@ BatteryInfo::~BatteryInfo() { } void BatteryInfo::UpdateScreen() { - - batteryController.Update(); - batteryPercent = batteryController.PercentRemaining(); batteryVoltage = batteryController.Voltage(); diff --git a/src/systemtask/Messages.h b/src/systemtask/Messages.h index 3a195e2d41..ebe6a2b14f 100644 --- a/src/systemtask/Messages.h +++ b/src/systemtask/Messages.h @@ -20,7 +20,9 @@ namespace Pinetime { EnableSleeping, DisableSleeping, OnNewDay, - OnChargingEvent + OnChargingEvent, + MeasureBatteryTimerExpired, + BatteryMeasurementDone, }; } } diff --git a/src/systemtask/SystemTask.cpp b/src/systemtask/SystemTask.cpp index 8915ce7448..7ef6fc61f3 100644 --- a/src/systemtask/SystemTask.cpp +++ b/src/systemtask/SystemTask.cpp @@ -47,6 +47,11 @@ void IdleTimerCallback(TimerHandle_t xTimer) { sysTask->OnIdle(); } +void MeasureBatteryTimerCallback(TimerHandle_t xTimer) { + auto* sysTask = static_cast(pvTimerGetTimerID(xTimer)); + sysTask->PushMessage(Pinetime::System::Messages::MeasureBatteryTimerExpired); +} + SystemTask::SystemTask(Drivers::SpiMaster& spi, Drivers::St7789& lcd, Pinetime::Drivers::SpiNorFlash& spiNorFlash, @@ -126,7 +131,8 @@ void SystemTask::Work() { twiMaster.Init(); touchPanel.Init(); dateTimeController.Register(this); - batteryController.Init(); + batteryController.Register(this); + batteryController.Update(); motorController.Init(); motionSensor.SoftReset(); timerController.Register(this); @@ -143,8 +149,6 @@ void SystemTask::Work() { displayApp.Register(this); displayApp.Start(); - displayApp.PushMessage(Pinetime::Applications::Display::Messages::UpdateBatteryLevel); - heartRateSensor.Init(); heartRateSensor.Disable(); heartRateApp.Start(); @@ -187,7 +191,9 @@ void SystemTask::Work() { idleTimer = xTimerCreate("idleTimer", pdMS_TO_TICKS(2000), pdFALSE, this, IdleTimerCallback); dimTimer = xTimerCreate("dimTimer", pdMS_TO_TICKS(settingsController.GetScreenTimeOut() - 2000), pdFALSE, this, DimTimerCallback); + measureBatteryTimer = xTimerCreate("measureBattery", batteryMeasurementPeriod, pdTRUE, this, MeasureBatteryTimerCallback); xTimerStart(dimTimer, 0); + xTimerStart(measureBatteryTimer, portMAX_DELAY); // Suppress endless loop diagnostic #pragma clang diagnostic push @@ -197,11 +203,6 @@ void SystemTask::Work() { uint8_t msg; if (xQueueReceive(systemTasksMsgQueue, &msg, 100)) { - - batteryController.Update(); - // the battery does not emit events when changing charge levels, so we piggyback - // on any system event to read and update the current values - Messages message = static_cast(msg); switch (message) { case Messages::EnableSleeping: @@ -232,7 +233,6 @@ void SystemTask::Work() { lcd.Wakeup(); displayApp.PushMessage(Pinetime::Applications::Display::Messages::GoToRunning); - displayApp.PushMessage(Pinetime::Applications::Display::Messages::UpdateBatteryLevel); heartRateApp.PushMessage(Pinetime::Applications::HeartRateTask::Messages::WakeUp); isSleeping = false; @@ -326,8 +326,18 @@ void SystemTask::Work() { stepCounterMustBeReset = true; break; case Messages::OnChargingEvent: + batteryController.Update(); motorController.SetDuration(15); - // Battery level is updated on every message - there's no need to do anything + break; + case Messages::MeasureBatteryTimerExpired: + sendBatteryNotification = true; + batteryController.Update(); + break; + case Messages::BatteryMeasurementDone: + if (sendBatteryNotification) { + sendBatteryNotification = false; + nimbleController.NotifyBatteryLevel(batteryController.PercentRemaining()); + } break; default: @@ -346,11 +356,6 @@ void SystemTask::Work() { } } - if (xTaskGetTickCount() - batteryNotificationTick > batteryNotificationPeriod) { - nimbleController.NotifyBatteryLevel(batteryController.PercentRemaining()); - batteryNotificationTick = xTaskGetTickCount(); - } - monitor.Process(); uint32_t systick_counter = nrf_rtc_counter_get(portNRF_RTC_REG); dateTimeController.UpdateTime(systick_counter); diff --git a/src/systemtask/SystemTask.h b/src/systemtask/SystemTask.h index ba4342987b..14c7ec71df 100644 --- a/src/systemtask/SystemTask.h +++ b/src/systemtask/SystemTask.h @@ -131,13 +131,15 @@ namespace Pinetime { uint8_t bleDiscoveryTimer = 0; TimerHandle_t dimTimer; TimerHandle_t idleTimer; + TimerHandle_t measureBatteryTimer; + bool sendBatteryNotification = false; bool doNotGoToSleep = false; void GoToRunning(); void UpdateMotion(); bool stepCounterMustBeReset = false; - static constexpr TickType_t batteryNotificationPeriod = 1000 * 60 * 10; // 1 tick ~= 1ms. 1ms * 60 * 10 = 10 minutes - TickType_t batteryNotificationTick = 0; + static constexpr TickType_t batteryMeasurementPeriod = pdMS_TO_TICKS(10 * 60 * 1000); + TickType_t lastBatteryNotificationTime = 0; #if configUSE_TRACE_FACILITY == 1 SystemMonitor monitor; From 40afae3833efd2220bac168467d82e3ca6c350be Mon Sep 17 00:00:00 2001 From: mabuch Date: Sat, 14 Aug 2021 20:46:29 +0200 Subject: [PATCH 109/173] Github Action - update mcuboot version --- .github/workflows/main.yml | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index f25fd31190..4744eaef7d 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -83,17 +83,12 @@ jobs: if: steps.cache-mcuboot.outputs.cache-hit != 'true' # Install MCUBoot if not found in cache run: | cd ${{ runner.temp }} - git clone --branch v1.5.0 https://github.com/mcu-tools/mcuboot + git clone --branch v1.7.2 https://github.com/mcu-tools/mcuboot - name: Install imgtool dependencies run: | pip3 install --user -r ${{ runner.temp }}/mcuboot/scripts/requirements.txt - # cbor is a dependency that is not currently included in mcuboot requirements.txt - - name: Install imgtool dependencies (cbor) - run: | - pip3 install --user cbor - - name: Install adafruit-nrfutil run: | pip3 install --user wheel From f0e9d13329f5647a8e55b89d167f8306d58cb518 Mon Sep 17 00:00:00 2001 From: Riku Isokoski Date: Sat, 14 Aug 2021 21:58:38 +0300 Subject: [PATCH 110/173] Update contribute.md (#475) * Update contribute.md * Add newlines and remove spaces * Replace CONTRIBUTING.md with doc/contribute.md --- CONTRIBUTING.md | 34 +--------------------------- doc/contribute.md | 57 ++++++++++++++++++++++++++++++++--------------- 2 files changed, 40 insertions(+), 51 deletions(-) mode change 100644 => 120000 CONTRIBUTING.md diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md deleted file mode 100644 index a6fa682812..0000000000 --- a/CONTRIBUTING.md +++ /dev/null @@ -1,33 +0,0 @@ -This contribution guide is in progress, improvements are welcome. - -### Code style - -Any C++ code PRs should aim to follow the style of existing code in the project. - -Using an autoformatter is heavily recommended, but make sure it's configured properly. - -There's currently preconfigured autoformatter rules for: - - * CLion (IntelliJ) in .idea/codeStyles/Project.xml - -You can use those to configure your own IDE if it's not already on the list. - -#### Linting errors and compiler warnings - -Try to avoid any currently enabled warnings and try to reduce the amount of linter errors. - -#### Spelling - -Make sure you spellcheck your code before commiting it. - -#### TODO, FIXME - -Check before commiting that you haven't forgotten anything, preferably don't leave these in your commits. - -#### Licence headers - -You should add your name to the comma-space separated list of contributors if there's a license header. - -### License - -By contributing you agree to licence your code under the repository's general license (which is currently GPL-v3+). diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 120000 index 0000000000..15e2c684bf --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1 @@ +doc/contribute.md \ No newline at end of file diff --git a/doc/contribute.md b/doc/contribute.md index 9f4c21547b..0c34e2a501 100644 --- a/doc/contribute.md +++ b/doc/contribute.md @@ -1,68 +1,89 @@ # How to contribute? + ## Report bugs -You use your Pinetime and find a bug in the firmware? [Create an issue on Github](https://github.com/JF002/InfiniTime/issues) explaining the bug, how to reproduce it, the version of the firmware you use... + +Have you found a bug in the firmware? [Create an issue on Github](https://github.com/JF002/InfiniTime/issues) explaining the bug, how to reproduce it, the version of the firmware you use... + ## Write and improve documentation + Documentation might be incomplete, or not clear enough, and it is always possible to improve it with better wording, pictures, photo, video,... As the documentation is part of the source code, you can submit your improvements to the documentation by submitting a pull request (see below). + ## Fix bugs, add functionalities and improve the code + You want to fix a bug, add a cool new functionality or improve the code? See *How to submit a pull request below*. + ## Spread the word -The Pinetime is a cool open source project that deserves to be known. Talk about it around you, on social networks, on your blog,... and let people know that we are working on an open-source firmware for a smartwatch! + +The Pinetime is a cool open source project that deserves to be known. Talk about it around you, on social networks, on your blog,... and let people know that we are working on an open source firmware for a smartwatch! # How to submit a pull request ? ## TL;DR + - Create a branch from develop; - Work on a single subject in this branch. Create multiple branches/pulls-requests if you want to work on multiple subjects (bugs, features,...); - Test your modifications on the actual hardware; - Check the code formatting against our coding conventions and [clang-format](../.clang-format) and [clang-tidy](../.clang-tidy); - Clean your code and remove files that are not needed; - - Write documentation related to your new feature is applicable; - - Create the pull-request and write a great description about it : what does your PR do, why, how,... Add pictures and video if possible; + - Write documentation related to your new feature if applicable; + - Create a pull request and write a great description about it : what does your PR do, why, how,... Add pictures and video if possible; - Wait for someone to review your PR and take part in the review process; - Your PR will eventually be merged :) -Your contribution is more than welcome! +Your contributions are more than welcome! -If you want to fix a bug, add a functionality or improve the code, you'll first need to create a branch from the **develop** branch (see [this page about the branching model](./branches.md)). This branch is called a feature branch, and you should choose a name that explains what you are working on (ex: "add-doc-about-contributions"). In this branch, **focus on only one topic, bug or feature**. For example, if you created this branch to work on the UI of a specific application, do not commit modifications about the SPI driver. If you want to work on multiple topics, create one branch per topic. +If you want to fix a bug, add functionality or improve the code, you'll first need to create a branch from the **develop** branch (see [this page about the branching model](./branches.md)). This branch is called a feature branch, and you should choose a name that explains what you are working on (ex: "add-doc-about-contributions"). In this branch, **focus on only one topic, bug or feature**. For example, if you created this branch to work on the UI of a specific application, do not commit modifications about the SPI driver. If you want to work on multiple topics, create one branch for each topic. When your feature branch is ready, **make sure it actually works** and **do not forget to write documentation** about it if it's relevant. -I **strongly discourage to create a PR containing modifications that haven't been tested**. If, for any reason, you cannot test your modifications but want to publish them anyway, **please mention it in the description**. This way, other contributors might be willing to test it and provide feedback about your code. +**Creating a pull request containing modifications that haven't been tested is strongly discouraged.** If, for any reason, you cannot test your modifications but want to publish them anyway, **please mention it in the description**. This way, other contributors might be willing to test it and provide feedback about your code. Also, before submitting your PR, check the coding style of your code against the **coding conventions** detailed below. This project also provides [clang-format](../.clang-format) and [clang-tidy](../.clang-tidy) configuration files. You can use them to ensure correct formatting of your code. -Do not forget to check the files you are going to commit and remove those who are not necessary (config files from your IDE, for example). Remove old comments, commented code,... +Don't forget to check the files you are going to commit and remove those which aren't necessary (config files from your IDE, for example). Remove old comments, commented code,... -Then, you can submit a pull-request for review. Try to **describe your pull request as much as possible**: what did you do in this branch, how does it work, how is it designed, are there any limitations,... This will help the contributors to understand and review your code easily. You can add pictures and video to the description so that contributors will have a quick overview of your work. +Then, you can submit a pull request for review. Try to **describe your pull request as much as possible**: what did you do in this branch, how does it work, how it is designed, are there any limitations,... This will help the contributors to understand and review your code easily. You can add pictures and video to the description so that contributors will have a quick overview of your work. Other contributors can post comments about the pull request, maybe ask for more info or adjustments in the code. -Once the pull request is reviewed and accepted, it'll be merge in **develop** and will be released in the next release version of the firmware. +Once the pull request is reviewed and accepted, it'll be merged into **develop** and will be released in the next version of the firmware. ## Why all these rules? -Reviewing pull-requests is a **very time consuming task** for the creator of this project ([JF002](https://github.com/JF002)) and for other contributors who take the time to review them. Every little thing you do to make their lives easier will **increase the chances your PR will be merge quickly**. -When reviewing PR, the author and contributors will first look at the **description**. If it's easy to understand what the PR does, why the modification is needed or interesting and how it's done, a good part of the work is already done : we understand the PR and its context. +Reviewing pull requests is a **very time consuming task** for the creator of this project ([JF002](https://github.com/JF002)) and for other contributors who take the time to review them. Everything you do to make reviewing easier will **get your PR merged faster**. -Then, reviewing **a few files that were modified for a single purpose** is a lot more easier than to review 30 files modified for many reasons (bug fix, UI improvements, typos in doc,...), even if all these changes make sense. Also, it's possible that we agree on some modification but not on some other, and we won't be able to merge the PR because of the changes that are not accepted. +When reviewing PRs, the author and contributors will first look at the **description**. If it's easy to understand what the PR does, why the modification is needed or interesting and how it's done, a good part of the work is already done : we understand the PR and its context. -We do our best to keep the code as consistent as possible, and that means we pay attention to the **formatting** of the code. If the code formatting is not consistent with our code base, we'll ask you to review it, which will take more time. +Then, reviewing **a few files that were modified for a single purpose** is a lot more easier than to review 30 files modified for many reasons (bug fix, UI improvements, typos in doc,...), even if all these changes make sense. Also, it's possible that we agree on some modification but not on some other, so we won't be able to merge the PR because of the changes that are not accepted. -The last step of the review consists in **testing** the modification. If it doesn't work out of the box, we'll ask your to review your code and to ensure that it works as expected. +We do our best to keep the code as consistent as possible. If the formatting of the code in your PR is not consistent with our code base, we'll ask you to review it, which will take more time. -It's totally normal for a PR to need some more work even after it was created, that's why we review them. But every round trip takes time, and it's good practice to try to reduce them as much as possible by following those simple rules. +The last step of the review consists of **testing** the modification. If it doesn't work out of the box, we'll ask your to review your code and to ensure that it works as expected. + +It's totally normal for a PR to need some more work even after it was created, that's why we review them. But every round trip takes time, so it's good practice to try to reduce them as much as possible by following those simple rules. # Coding convention + ## Language -The language of this project is **C++**, and all new code must be written in C++. (Modern) C++ provides a lot of useful tools and functionalities that are beneficial for embedded software development like `constexpr`, `template` and anything that provides zero-cost abstraction. -It's OK to include C code if this code comes from another library like FreeRTOS, NimBLE, LVGL or the NRF-SDK. +The language of this project is **C++**, and all new code must be written in C++. (Modern) C++ provides a lot of useful tools and functionalities that are beneficial for embedded software development like `constexpr`, `template` and anything that provides zero-cost abstraction. + +C code is accepted if it comes from another library like FreeRTOS, NimBLE, LVGL or the NRF-SDK. ## Coding style + The most important rule to follow is to try to keep the code as easy to read and maintain as possible. +Using an autoformatter is highly recommended, but make sure it's configured properly. + +There are preconfigured autoformatter rules for: + + * CLion (IntelliJ) in .idea/codeStyles/Project.xml + +If there are no preconfigured rules for your IDE, you can use one of the existing ones to configure your IDE. + - **Indentation** : 2 spaces, no tabulation - **Opening brace** at the end of the line - **Naming** : Choose self-describing variable name From e51c3eee4ed50ccec55c105fd93a46b7715601b3 Mon Sep 17 00:00:00 2001 From: Riku Isokoski Date: Mon, 9 Aug 2021 21:49:35 +0300 Subject: [PATCH 111/173] Try to fix bootloop --- src/main.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/main.cpp b/src/main.cpp index ffbba5e765..a18c39424f 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -5,6 +5,7 @@ #include #include #include +#include // nimble #define min // workaround: nimble's min/max macros conflict with libstdc++ @@ -300,6 +301,14 @@ int main(void) { nrf_drv_clock_init(); + // Unblock i2c? + nrf_gpio_cfg_output(pinTwiScl); + for (uint8_t i = 0; i < 16; i++) { + nrf_gpio_pin_toggle(pinTwiScl); + nrf_delay_us(5); + } + nrf_gpio_cfg_default(pinTwiScl); + debounceTimer = xTimerCreate("debounceTimer", 200, pdFALSE, (void*) 0, DebounceTimerCallback); debounceChargeTimer = xTimerCreate("debounceTimerCharge", 200, pdFALSE, (void*) 0, DebounceTimerChargeCallback); From 10f610b2191ed0783a2f36a5e869019fc548aa24 Mon Sep 17 00:00:00 2001 From: Riku Isokoski Date: Mon, 9 Aug 2021 22:07:06 +0300 Subject: [PATCH 112/173] Better pin configuration --- src/main.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/main.cpp b/src/main.cpp index a18c39424f..39d8906c1d 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -302,7 +302,12 @@ int main(void) { nrf_drv_clock_init(); // Unblock i2c? - nrf_gpio_cfg_output(pinTwiScl); + nrf_gpio_cfg(pinTwiScl, + NRF_GPIO_PIN_DIR_OUTPUT, + NRF_GPIO_PIN_INPUT_DISCONNECT, + NRF_GPIO_PIN_NOPULL, + NRF_GPIO_PIN_S0D1, + NRF_GPIO_PIN_NOSENSE); for (uint8_t i = 0; i < 16; i++) { nrf_gpio_pin_toggle(pinTwiScl); nrf_delay_us(5); From 7c28de0b6fa7fa33ff10d09847742a35de26cf2b Mon Sep 17 00:00:00 2001 From: Riku Isokoski Date: Mon, 9 Aug 2021 22:11:35 +0300 Subject: [PATCH 113/173] Set pin before loop --- src/main.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main.cpp b/src/main.cpp index 39d8906c1d..d301be6711 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -308,6 +308,7 @@ int main(void) { NRF_GPIO_PIN_NOPULL, NRF_GPIO_PIN_S0D1, NRF_GPIO_PIN_NOSENSE); + nrf_gpio_pin_set(pinTwiScl); for (uint8_t i = 0; i < 16; i++) { nrf_gpio_pin_toggle(pinTwiScl); nrf_delay_us(5); From 61927751612a9dc8e53fe7882c1e576a90843bc4 Mon Sep 17 00:00:00 2001 From: Riku Isokoski Date: Fri, 13 Aug 2021 22:03:27 +0300 Subject: [PATCH 114/173] Improve metronome --- src/displayapp/DisplayApp.cpp | 1 + src/displayapp/screens/Metronome.cpp | 119 ++++++++++----------------- src/displayapp/screens/Metronome.h | 48 +++++------ 3 files changed, 69 insertions(+), 99 deletions(-) diff --git a/src/displayapp/DisplayApp.cpp b/src/displayapp/DisplayApp.cpp index d4a73f5ee7..49a56a077c 100644 --- a/src/displayapp/DisplayApp.cpp +++ b/src/displayapp/DisplayApp.cpp @@ -414,6 +414,7 @@ void DisplayApp::LoadApp(Apps app, DisplayApp::FullRefreshDirections direction) break; case Apps::Metronome: currentScreen = std::make_unique(this, motorController, *systemTask); + ReturnApp(Apps::Launcher, FullRefreshDirections::Down, TouchEvents::None); break; case Apps::Motion: currentScreen = std::make_unique(this, motionController); diff --git a/src/displayapp/screens/Metronome.cpp b/src/displayapp/screens/Metronome.cpp index 7bfbccb761..ce23cc3e5d 100644 --- a/src/displayapp/screens/Metronome.cpp +++ b/src/displayapp/screens/Metronome.cpp @@ -1,35 +1,15 @@ #include "Metronome.h" - -#include "Screen.h" #include "Symbols.h" -#include "lvgl/lvgl.h" -#include "FreeRTOSConfig.h" -#include "task.h" - -#include -#include using namespace Pinetime::Applications::Screens; namespace { - float calculateDelta(const TickType_t startTime, const TickType_t currentTime) { - TickType_t delta = 0; - // Take care of overflow - if (startTime > currentTime) { - delta = 0xffffffff - startTime; - delta += (currentTime + 1); - } else { - delta = currentTime - startTime; - } - return static_cast(delta) / static_cast(configTICK_RATE_HZ); - } - - static void eventHandler(lv_obj_t* obj, lv_event_t event) { - Metronome* screen = static_cast(obj->user_data); + void eventHandler(lv_obj_t* obj, lv_event_t event) { + auto* screen = static_cast(obj->user_data); screen->OnEvent(obj, event); } - lv_obj_t* createLabel(const char* name, lv_obj_t* reference, lv_align_t align, lv_font_t* font, uint8_t x = 0, uint8_t y = 0) { + lv_obj_t* createLabel(const char* name, lv_obj_t* reference, lv_align_t align, lv_font_t* font, uint8_t x, uint8_t y) { lv_obj_t* label = lv_label_create(lv_scr_act(), nullptr); lv_obj_set_style_local_text_font(label, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, font); lv_obj_set_style_local_text_color(label, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_GRAY); @@ -41,7 +21,7 @@ namespace { } Metronome::Metronome(DisplayApp* app, Controllers::MotorController& motorController, System::SystemTask& systemTask) - : Screen(app), running {true}, currentState {States::Stopped}, startTime {}, motorController {motorController}, systemTask {systemTask} { + : Screen(app), motorController {motorController}, systemTask {systemTask} { bpmArc = lv_arc_create(lv_scr_act(), nullptr); bpmArc->user_data = this; @@ -52,10 +32,10 @@ Metronome::Metronome(DisplayApp* app, Controllers::MotorController& motorControl lv_arc_set_value(bpmArc, bpm); lv_obj_set_size(bpmArc, 210, 210); lv_arc_set_adjustable(bpmArc, true); - lv_obj_align(bpmArc, lv_scr_act(), LV_ALIGN_IN_TOP_MID, 0, 7); + lv_obj_align(bpmArc, lv_scr_act(), LV_ALIGN_IN_TOP_MID, 0, 0); - bpmValue = createLabel(std::to_string(lv_arc_get_value(bpmArc)).c_str(), bpmArc, LV_ALIGN_IN_TOP_MID, &jetbrains_mono_76, 0, 55); - bpmLegend = createLabel("bpm", bpmValue, LV_ALIGN_OUT_BOTTOM_MID, &jetbrains_mono_bold_20, 0, 0); + bpmValue = createLabel("120", bpmArc, LV_ALIGN_IN_TOP_MID, &jetbrains_mono_76, 0, 55); + createLabel("bpm", bpmValue, LV_ALIGN_OUT_BOTTOM_MID, &jetbrains_mono_bold_20, 0, 0); bpmTap = lv_btn_create(lv_scr_act(), nullptr); bpmTap->user_data = this; @@ -69,20 +49,23 @@ Metronome::Metronome(DisplayApp* app, Controllers::MotorController& motorControl lv_obj_set_event_cb(bpbDropdown, eventHandler); lv_obj_set_style_local_pad_left(bpbDropdown, LV_DROPDOWN_PART_MAIN, LV_STATE_DEFAULT, 20); lv_obj_set_style_local_pad_left(bpbDropdown, LV_DROPDOWN_PART_LIST, LV_STATE_DEFAULT, 20); - lv_obj_align(bpbDropdown, lv_scr_act(), LV_ALIGN_IN_BOTTOM_LEFT, 15, -4); + lv_obj_set_size(bpbDropdown, 115, 50); + lv_obj_align(bpbDropdown, lv_scr_act(), LV_ALIGN_IN_BOTTOM_LEFT, 0, 0); lv_dropdown_set_options(bpbDropdown, "1\n2\n3\n4\n5\n6\n7\n8\n9"); lv_dropdown_set_selected(bpbDropdown, bpb - 1); - bpbLegend = lv_label_create(bpbDropdown, nullptr); - lv_label_set_text(bpbLegend, "bpb"); - lv_obj_align(bpbLegend, bpbDropdown, LV_ALIGN_IN_RIGHT_MID, -15, 0); + lv_dropdown_set_show_selected(bpbDropdown, false); + lv_dropdown_set_text(bpbDropdown, ""); + + currentBpbText = lv_label_create(bpbDropdown, nullptr); + lv_label_set_text_fmt(currentBpbText, "%d bpb", bpb); + lv_obj_align(currentBpbText, bpbDropdown, LV_ALIGN_CENTER, 0, 0); playPause = lv_btn_create(lv_scr_act(), nullptr); playPause->user_data = this; lv_obj_set_event_cb(playPause, eventHandler); - lv_obj_align(playPause, lv_scr_act(), LV_ALIGN_IN_BOTTOM_RIGHT, -15, -10); - lv_obj_set_height(playPause, 39); - playPauseLabel = lv_label_create(playPause, nullptr); - lv_label_set_text(playPauseLabel, Symbols::play); + lv_obj_set_size(playPause, 115, 50); + lv_obj_align(playPause, lv_scr_act(), LV_ALIGN_IN_BOTTOM_RIGHT, 0, 0); + lv_obj_set_style_local_value_str(playPause, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, Symbols::play); app->SetTouchMode(DisplayApp::TouchModes::Polling); } @@ -93,28 +76,17 @@ Metronome::~Metronome() { lv_obj_clean(lv_scr_act()); } -bool Metronome::OnTouchEvent(Pinetime::Applications::TouchEvents event) { - return true; -} - bool Metronome::Refresh() { - switch (currentState) { - case States::Stopped: { - break; - } - case States::Running: { - if (calculateDelta(startTime, xTaskGetTickCount()) >= (60.0 / bpm)) { - counter--; - startTime -= 60.0 / bpm; - startTime = xTaskGetTickCount(); - if (counter == 0) { - counter = bpb; - motorController.SetDuration(90); - } else { - motorController.SetDuration(30); - } + if (metronomeStarted) { + if (xTaskGetTickCount() - startTime > 60 * configTICK_RATE_HZ / bpm) { + startTime += 60 * configTICK_RATE_HZ / bpm; + counter--; + if (counter == 0) { + counter = bpb; + motorController.SetDuration(90); + } else { + motorController.SetDuration(30); } - break; } } return running; @@ -128,42 +100,39 @@ void Metronome::OnEvent(lv_obj_t* obj, lv_event_t event) { lv_label_set_text_fmt(bpmValue, "%03d", bpm); } else if (obj == bpbDropdown) { bpb = lv_dropdown_get_selected(obj) + 1; + lv_label_set_text_fmt(currentBpbText, "%d bpb", bpb); + lv_obj_realign(currentBpbText); } break; } case LV_EVENT_PRESSED: { if (obj == bpmTap) { - float timeDelta = calculateDelta(tappedTime, xTaskGetTickCount()); - if (tappedTime == 0 || timeDelta > 3) { - tappedTime = xTaskGetTickCount(); - } else { - bpm = ceil(60.0 / timeDelta); + TickType_t delta = xTaskGetTickCount() - tappedTime; + if (tappedTime != 0 && delta < configTICK_RATE_HZ * 3) { + bpm = configTICK_RATE_HZ * 60 / delta; lv_arc_set_value(bpmArc, bpm); lv_label_set_text_fmt(bpmValue, "%03d", bpm); - tappedTime = xTaskGetTickCount(); } + tappedTime = xTaskGetTickCount(); } break; } case LV_EVENT_CLICKED: { if (obj == playPause) { - currentState = (currentState == States::Stopped ? States::Running : States::Stopped); - switch (currentState) { - case States::Stopped: { - lv_label_set_text(playPauseLabel, Symbols::play); - systemTask.PushMessage(System::Messages::EnableSleeping); - break; - } - case States::Running: { - lv_label_set_text(playPauseLabel, Symbols::pause); - systemTask.PushMessage(System::Messages::DisableSleeping); - startTime = xTaskGetTickCount(); - counter = 1; - break; - } + metronomeStarted = !metronomeStarted; + if (metronomeStarted) { + lv_obj_set_style_local_value_str(playPause, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, Symbols::pause); + systemTask.PushMessage(System::Messages::DisableSleeping); + startTime = xTaskGetTickCount(); + counter = 1; + } else { + lv_obj_set_style_local_value_str(playPause, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, Symbols::play); + systemTask.PushMessage(System::Messages::EnableSleeping); } } break; } + default: + break; } } diff --git a/src/displayapp/screens/Metronome.h b/src/displayapp/screens/Metronome.h index 3a1f1084b6..a4baa09699 100644 --- a/src/displayapp/screens/Metronome.h +++ b/src/displayapp/screens/Metronome.h @@ -3,32 +3,32 @@ #include "systemtask/SystemTask.h" #include "components/motor/MotorController.h" -#include +namespace Pinetime { + namespace Applications { + namespace Screens { -namespace Pinetime::Applications::Screens { + class Metronome : public Screen { + public: + Metronome(DisplayApp* app, Controllers::MotorController& motorController, System::SystemTask& systemTask); + ~Metronome() override; + bool Refresh() override; + void OnEvent(lv_obj_t* obj, lv_event_t event); - class Metronome : public Screen { - public: - Metronome(DisplayApp* app, Controllers::MotorController& motorController, System::SystemTask& systemTask); - ~Metronome() override; - bool Refresh() override; - bool OnTouchEvent(TouchEvents event) override; - void OnEvent(lv_obj_t* obj, lv_event_t event); - enum class States { Running, Stopped }; + private: + TickType_t startTime = 0; + TickType_t tappedTime = 0; + Controllers::MotorController& motorController; + System::SystemTask& systemTask; + int16_t bpm = 120; + uint8_t bpb = 4; + uint8_t counter = 1; - private: - bool running; - States currentState; - TickType_t startTime; - TickType_t tappedTime = 0; - Controllers::MotorController& motorController; - System::SystemTask& systemTask; - uint16_t bpm = 120; - uint8_t bpb = 4; - uint8_t counter = 1; + bool metronomeStarted = false; - lv_obj_t *bpmArc, *bpmTap, *bpmValue, *bpmLegend; - lv_obj_t *bpbDropdown, *bpbLegend; - lv_obj_t *playPause, *playPauseLabel; - }; + lv_obj_t *bpmArc, *bpmTap, *bpmValue; + lv_obj_t *bpbDropdown, *currentBpbText; + lv_obj_t *playPause; + }; + } + } } From dec4bab33496527e43850742a4b3dafd753eab83 Mon Sep 17 00:00:00 2001 From: Martin Hub Date: Sat, 14 Aug 2021 21:24:26 +0200 Subject: [PATCH 115/173] Add VSCode ST-link debug config (#567) --- .vscode/launch.json | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/.vscode/launch.json b/.vscode/launch.json index 7cf3acd183..3d9aa78921 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -40,7 +40,25 @@ "break main", "continue" ] + }, + { + "cwd": "${workspaceRoot}", + // TODO: find better way to get latest build filename + "executable": "./build/src/pinetime-app-1.3.0.out", + "name": "Debug OpenOCD ST-LINK pinetime-app-1.3.0.out", + "request": "launch", + "type": "cortex-debug", + "showDevDebugOutput": false, + "servertype": "openocd", + "runToMain": true, + // Only use armToolchainPath if your arm-none-eabi-gdb is not in your path (some GCC packages does not contain arm-none-eabi-gdb) + "armToolchainPath": "${workspaceRoot}/../gcc-arm-none-eabi-9-2020-q2-update/bin", + "svdFile": "${workspaceRoot}/nrf52.svd", + "configFiles": [ + "interface/stlink.cfg", + "target/nrf52.cfg" + ], } ] -} \ No newline at end of file +} From 477ff32edc3bc0997f45d943f90f68f8f0608468 Mon Sep 17 00:00:00 2001 From: Kieran Cawthray Date: Sun, 15 Aug 2021 10:41:00 +0200 Subject: [PATCH 116/173] Add randomise button to color picker --- .../screens/settings/SettingPineTimeStyle.cpp | 21 +++++++++++++++++++ .../screens/settings/SettingPineTimeStyle.h | 1 + 2 files changed, 22 insertions(+) diff --git a/src/displayapp/screens/settings/SettingPineTimeStyle.cpp b/src/displayapp/screens/settings/SettingPineTimeStyle.cpp index ae66546418..a32ce34dc1 100644 --- a/src/displayapp/screens/settings/SettingPineTimeStyle.cpp +++ b/src/displayapp/screens/settings/SettingPineTimeStyle.cpp @@ -203,6 +203,14 @@ SettingPineTimeStyle::SettingPineTimeStyle( lv_obj_set_style_local_bg_opa(btnReset, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, LV_OPA_30); lv_obj_set_style_local_value_str(btnReset, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, "Rst"); lv_obj_set_event_cb(btnReset, event_handler); + + btnRandom = lv_btn_create(lv_scr_act(), nullptr); + btnRandom->user_data = this; + lv_obj_set_size(btnRandom, 60, 60); + lv_obj_align(btnRandom, lv_scr_act(), LV_ALIGN_CENTER, 0, 0); + lv_obj_set_style_local_bg_opa(btnRandom, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, LV_OPA_30); + lv_obj_set_style_local_value_str(btnRandom, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, "Rnd"); + lv_obj_set_event_cb(btnRandom, event_handler); } SettingPineTimeStyle::~SettingPineTimeStyle() { @@ -303,4 +311,17 @@ void SettingPineTimeStyle::UpdateSelected(lv_obj_t *object, lv_event_t event) { settingsController.SetPTSColorBG(3); lv_obj_set_style_local_bg_color(timebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, pts_colors[3]); } + if((object == btnRandom) && (event == LV_EVENT_PRESSED)) { + uint8_t randTime = rand() % 17; + uint8_t randBar = rand() % 17; + uint8_t randBG = rand() % 17; + settingsController.SetPTSColorTime(randTime); + lv_obj_set_style_local_text_color(timeDD1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, pts_colors[randTime]); + lv_obj_set_style_local_text_color(timeDD2, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, pts_colors[randTime]); + lv_obj_set_style_local_text_color(timeAMPM, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, pts_colors[randTime]); + settingsController.SetPTSColorBar(randBar); + lv_obj_set_style_local_bg_color(sidebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, pts_colors[randBar]); + settingsController.SetPTSColorBG(randBG); + lv_obj_set_style_local_bg_color(timebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, pts_colors[randBG]); + } } \ No newline at end of file diff --git a/src/displayapp/screens/settings/SettingPineTimeStyle.h b/src/displayapp/screens/settings/SettingPineTimeStyle.h index fe449b2ec0..1a01ebbb4a 100644 --- a/src/displayapp/screens/settings/SettingPineTimeStyle.h +++ b/src/displayapp/screens/settings/SettingPineTimeStyle.h @@ -28,6 +28,7 @@ namespace Pinetime { lv_obj_t * btnNextBG; lv_obj_t * btnPrevBG; lv_obj_t * btnReset; + lv_obj_t * btnRandom; lv_obj_t * timeColor; lv_obj_t * barColor; lv_obj_t * bgColor; From e0d01411d7124abc5ad099360057ba683287c428 Mon Sep 17 00:00:00 2001 From: Riku Isokoski Date: Sun, 13 Jun 2021 12:47:12 +0300 Subject: [PATCH 117/173] Ui update --- doc/ui_guidelines.md | 14 ++++ src/displayapp/screens/FirmwareValidation.cpp | 4 +- src/displayapp/screens/List.cpp | 34 ++++------ src/displayapp/screens/Music.cpp | 68 +++++++++---------- src/displayapp/screens/Music.h | 3 +- src/displayapp/screens/Tile.cpp | 30 ++++---- src/displayapp/screens/WatchFaceAnalog.cpp | 4 +- src/displayapp/screens/WatchFaceDigital.cpp | 14 ++-- .../screens/settings/QuickSettings.cpp | 47 ++++++------- .../screens/settings/QuickSettings.h | 2 + 10 files changed, 113 insertions(+), 107 deletions(-) create mode 100644 doc/ui_guidelines.md diff --git a/doc/ui_guidelines.md b/doc/ui_guidelines.md new file mode 100644 index 0000000000..9b05ce64db --- /dev/null +++ b/doc/ui_guidelines.md @@ -0,0 +1,14 @@ +# UI design guidelines + +- Align objects all the way to the edge or corner +- Buttons should generally be at least 50px high +- Buttons should generally be on the bottom edge +- Make interactable objects **big** +- Recommendations for inner padding, aka distance between buttons: + - When aligning 4 objects: 4px, e.g. Settings + - When aligning 3 objects: 6px, e.g. App list + - When aligning 2 objects: 10px, e.g. Quick settings +- When using a page indicator, leave 8px for it on the right side + - It is acceptable to leave 8px on the left side as well to center the content +- Top bar takes at least 20px + padding + - Top bar right icons move 8px to the left when using a page indicator diff --git a/src/displayapp/screens/FirmwareValidation.cpp b/src/displayapp/screens/FirmwareValidation.cpp index 1d05be8d39..da9d04f2aa 100644 --- a/src/displayapp/screens/FirmwareValidation.cpp +++ b/src/displayapp/screens/FirmwareValidation.cpp @@ -38,8 +38,9 @@ FirmwareValidation::FirmwareValidation(Pinetime::Applications::DisplayApp* app, lv_label_set_text(labelIsValidated, "Please #00ff00 Validate# this version or\n#ff0000 Reset# to rollback to the previous version."); buttonValidate = lv_btn_create(lv_scr_act(), nullptr); - lv_obj_align(buttonValidate, NULL, LV_ALIGN_IN_BOTTOM_LEFT, 0, 0); buttonValidate->user_data = this; + lv_obj_set_height(buttonValidate, 50); + lv_obj_align(buttonValidate, NULL, LV_ALIGN_IN_BOTTOM_LEFT, 0, 0); lv_obj_set_event_cb(buttonValidate, ButtonEventHandler); lv_obj_set_style_local_bg_color(buttonValidate, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x009900)); @@ -48,6 +49,7 @@ FirmwareValidation::FirmwareValidation(Pinetime::Applications::DisplayApp* app, buttonReset = lv_btn_create(lv_scr_act(), nullptr); buttonReset->user_data = this; + lv_obj_set_height(buttonReset, 50); lv_obj_align(buttonReset, nullptr, LV_ALIGN_IN_BOTTOM_RIGHT, 0, 0); lv_obj_set_style_local_bg_color(buttonReset, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x990000)); lv_obj_set_event_cb(buttonReset, ButtonEventHandler); diff --git a/src/displayapp/screens/List.cpp b/src/displayapp/screens/List.cpp index b4f4d2cfff..eb53820b3d 100644 --- a/src/displayapp/screens/List.cpp +++ b/src/displayapp/screens/List.cpp @@ -25,42 +25,38 @@ List::List(uint8_t screenID, settingsController.SetSettingsMenu(screenID); if (numScreens > 1) { - pageIndicatorBasePoints[0].x = 240 - 1; - pageIndicatorBasePoints[0].y = 6; - pageIndicatorBasePoints[1].x = 240 - 1; - pageIndicatorBasePoints[1].y = 240 - 6; + pageIndicatorBasePoints[0].x = LV_HOR_RES - 1; + pageIndicatorBasePoints[0].y = 0; + pageIndicatorBasePoints[1].x = LV_HOR_RES - 1; + pageIndicatorBasePoints[1].y = LV_VER_RES; pageIndicatorBase = lv_line_create(lv_scr_act(), NULL); lv_obj_set_style_local_line_width(pageIndicatorBase, LV_LINE_PART_MAIN, LV_STATE_DEFAULT, 3); lv_obj_set_style_local_line_color(pageIndicatorBase, LV_LINE_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x111111)); - lv_obj_set_style_local_line_rounded(pageIndicatorBase, LV_LINE_PART_MAIN, LV_STATE_DEFAULT, true); lv_line_set_points(pageIndicatorBase, pageIndicatorBasePoints, 2); - uint16_t indicatorSize = 228 / numScreens; - uint16_t indicatorPos = indicatorSize * screenID; + const uint16_t indicatorSize = LV_VER_RES / numScreens; + const uint16_t indicatorPos = indicatorSize * screenID; - pageIndicatorPoints[0].x = 240 - 1; - pageIndicatorPoints[0].y = 6 + indicatorPos; - pageIndicatorPoints[1].x = 240 - 1; - pageIndicatorPoints[1].y = 6 + indicatorPos + indicatorSize; + pageIndicatorPoints[0].x = LV_HOR_RES - 1; + pageIndicatorPoints[0].y = indicatorPos; + pageIndicatorPoints[1].x = LV_HOR_RES - 1; + pageIndicatorPoints[1].y = indicatorPos + indicatorSize; pageIndicator = lv_line_create(lv_scr_act(), NULL); lv_obj_set_style_local_line_width(pageIndicator, LV_LINE_PART_MAIN, LV_STATE_DEFAULT, 3); lv_obj_set_style_local_line_color(pageIndicator, LV_LINE_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_GRAY); - lv_obj_set_style_local_line_rounded(pageIndicator, LV_LINE_PART_MAIN, LV_STATE_DEFAULT, true); lv_line_set_points(pageIndicator, pageIndicatorPoints, 2); } lv_obj_t* container1 = lv_cont_create(lv_scr_act(), nullptr); - // lv_obj_set_style_local_bg_color(container1, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x111111)); lv_obj_set_style_local_bg_opa(container1, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, LV_OPA_TRANSP); - lv_obj_set_style_local_pad_all(container1, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, 10); - lv_obj_set_style_local_pad_inner(container1, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, 5); + lv_obj_set_style_local_pad_inner(container1, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, 4); lv_obj_set_style_local_border_width(container1, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, 0); lv_obj_set_pos(container1, 0, 0); - lv_obj_set_width(container1, LV_HOR_RES - 15); + lv_obj_set_width(container1, LV_HOR_RES - 8); lv_obj_set_height(container1, LV_VER_RES); lv_cont_set_layout(container1, LV_LAYOUT_COLUMN_LEFT); @@ -73,11 +69,11 @@ List::List(uint8_t screenID, itemApps[i] = lv_btn_create(container1, nullptr); lv_obj_set_style_local_bg_opa(itemApps[i], LV_BTN_PART_MAIN, LV_STATE_DEFAULT, LV_OPA_20); - lv_obj_set_style_local_radius(itemApps[i], LV_BTN_PART_MAIN, LV_STATE_DEFAULT, 20); + lv_obj_set_style_local_radius(itemApps[i], LV_BTN_PART_MAIN, LV_STATE_DEFAULT, 57); lv_obj_set_style_local_bg_color(itemApps[i], LV_BTN_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_AQUA); - lv_obj_set_width(itemApps[i], LV_HOR_RES - 25); - lv_obj_set_height(itemApps[i], 52); + lv_obj_set_width(itemApps[i], LV_HOR_RES - 8); + lv_obj_set_height(itemApps[i], 57); lv_obj_set_event_cb(itemApps[i], ButtonEventHandler); lv_btn_set_layout(itemApps[i], LV_LAYOUT_ROW_MID); itemApps[i]->user_data = this; diff --git a/src/displayapp/screens/Music.cpp b/src/displayapp/screens/Music.cpp index c8d5e4b084..99a1518e48 100644 --- a/src/displayapp/screens/Music.cpp +++ b/src/displayapp/screens/Music.cpp @@ -50,60 +50,55 @@ inline void lv_img_set_src_arr(lv_obj_t* img, const lv_img_dsc_t* src_img) { Music::Music(Pinetime::Applications::DisplayApp* app, Pinetime::Controllers::MusicService& music) : Screen(app), musicService(music) { lv_obj_t* label; + lv_style_init(&btn_style); + lv_style_set_radius(&btn_style, LV_STATE_DEFAULT, 20); + lv_style_set_bg_color(&btn_style, LV_STATE_DEFAULT, LV_COLOR_AQUA); + lv_style_set_bg_opa(&btn_style, LV_STATE_DEFAULT, LV_OPA_20); + btnVolDown = lv_btn_create(lv_scr_act(), nullptr); btnVolDown->user_data = this; lv_obj_set_event_cb(btnVolDown, event_handler); - lv_obj_set_size(btnVolDown, 65, 75); - lv_obj_align(btnVolDown, nullptr, LV_ALIGN_IN_BOTTOM_LEFT, 15, -10); - lv_obj_set_style_local_radius(btnVolDown, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, 20); - lv_obj_set_style_local_bg_color(btnVolDown, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_AQUA); - lv_obj_set_style_local_bg_opa(btnVolDown, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, LV_OPA_20); + lv_obj_set_size(btnVolDown, 76, 76); + lv_obj_align(btnVolDown, nullptr, LV_ALIGN_IN_BOTTOM_LEFT, 0, 0); + lv_obj_add_style(btnVolDown, LV_STATE_DEFAULT, &btn_style); label = lv_label_create(btnVolDown, nullptr); lv_label_set_text(label, Symbols::volumDown); - lv_obj_set_hidden(btnVolDown, !displayVolumeButtons); + lv_obj_set_hidden(btnVolDown, true); btnVolUp = lv_btn_create(lv_scr_act(), nullptr); btnVolUp->user_data = this; lv_obj_set_event_cb(btnVolUp, event_handler); - lv_obj_set_size(btnVolUp, 65, 75); - lv_obj_align(btnVolUp, nullptr, LV_ALIGN_IN_BOTTOM_RIGHT, -15, -10); - lv_obj_set_style_local_radius(btnVolUp, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, 20); - lv_obj_set_style_local_bg_color(btnVolUp, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_AQUA); - lv_obj_set_style_local_bg_opa(btnVolUp, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, LV_OPA_20); + lv_obj_set_size(btnVolUp, 76, 76); + lv_obj_align(btnVolUp, nullptr, LV_ALIGN_IN_BOTTOM_RIGHT, 0, 0); + lv_obj_add_style(btnVolUp, LV_STATE_DEFAULT, &btn_style); label = lv_label_create(btnVolUp, nullptr); lv_label_set_text(label, Symbols::volumUp); - lv_obj_set_hidden(btnVolUp, !displayVolumeButtons); + lv_obj_set_hidden(btnVolUp, true); btnPrev = lv_btn_create(lv_scr_act(), nullptr); btnPrev->user_data = this; lv_obj_set_event_cb(btnPrev, event_handler); - lv_obj_set_size(btnPrev, 65, 75); - lv_obj_align(btnPrev, nullptr, LV_ALIGN_IN_BOTTOM_LEFT, 15, -10); - lv_obj_set_style_local_radius(btnPrev, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, 20); - lv_obj_set_style_local_bg_color(btnPrev, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_AQUA); - lv_obj_set_style_local_bg_opa(btnPrev, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, LV_OPA_20); + lv_obj_set_size(btnPrev, 76, 76); + lv_obj_align(btnPrev, nullptr, LV_ALIGN_IN_BOTTOM_LEFT, 0, 0); + lv_obj_add_style(btnPrev, LV_STATE_DEFAULT, &btn_style); label = lv_label_create(btnPrev, nullptr); lv_label_set_text(label, Symbols::stepBackward); btnNext = lv_btn_create(lv_scr_act(), nullptr); btnNext->user_data = this; lv_obj_set_event_cb(btnNext, event_handler); - lv_obj_set_size(btnNext, 65, 75); - lv_obj_align(btnNext, nullptr, LV_ALIGN_IN_BOTTOM_RIGHT, -15, -10); - lv_obj_set_style_local_radius(btnNext, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, 20); - lv_obj_set_style_local_bg_color(btnNext, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_AQUA); - lv_obj_set_style_local_bg_opa(btnNext, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, LV_OPA_20); + lv_obj_set_size(btnNext, 76, 76); + lv_obj_align(btnNext, nullptr, LV_ALIGN_IN_BOTTOM_RIGHT, 0, 0); + lv_obj_add_style(btnNext, LV_STATE_DEFAULT, &btn_style); label = lv_label_create(btnNext, nullptr); lv_label_set_text(label, Symbols::stepForward); btnPlayPause = lv_btn_create(lv_scr_act(), nullptr); btnPlayPause->user_data = this; lv_obj_set_event_cb(btnPlayPause, event_handler); - lv_obj_set_size(btnPlayPause, 65, 75); - lv_obj_align(btnPlayPause, nullptr, LV_ALIGN_IN_BOTTOM_MID, 0, -10); - lv_obj_set_style_local_radius(btnPlayPause, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, 20); - lv_obj_set_style_local_bg_color(btnPlayPause, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_AQUA); - lv_obj_set_style_local_bg_opa(btnPlayPause, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, LV_OPA_20); + lv_obj_set_size(btnPlayPause, 76, 76); + lv_obj_align(btnPlayPause, nullptr, LV_ALIGN_IN_BOTTOM_MID, 0, 0); + lv_obj_add_style(btnPlayPause, LV_STATE_DEFAULT, &btn_style); txtPlayPause = lv_label_create(btnPlayPause, nullptr); lv_label_set_text(txtPlayPause, Symbols::play); @@ -147,6 +142,7 @@ Music::Music(Pinetime::Applications::DisplayApp* app, Pinetime::Controllers::Mus } Music::~Music() { + lv_style_reset(&btn_style); lv_obj_clean(lv_scr_act()); } @@ -272,21 +268,19 @@ void Music::OnObjectEvent(lv_obj_t* obj, lv_event_t event) { bool Music::OnTouchEvent(Pinetime::Applications::TouchEvents event) { switch (event) { case TouchEvents::SwipeUp: { - displayVolumeButtons = true; - lv_obj_set_hidden(btnVolDown, !displayVolumeButtons); - lv_obj_set_hidden(btnVolUp, !displayVolumeButtons); + lv_obj_set_hidden(btnVolDown, false); + lv_obj_set_hidden(btnVolUp, false); - lv_obj_set_hidden(btnNext, displayVolumeButtons); - lv_obj_set_hidden(btnPrev, displayVolumeButtons); + lv_obj_set_hidden(btnNext, true); + lv_obj_set_hidden(btnPrev, true); return true; } case TouchEvents::SwipeDown: { - displayVolumeButtons = false; - lv_obj_set_hidden(btnNext, displayVolumeButtons); - lv_obj_set_hidden(btnPrev, displayVolumeButtons); + lv_obj_set_hidden(btnNext, false); + lv_obj_set_hidden(btnPrev, false); - lv_obj_set_hidden(btnVolDown, !displayVolumeButtons); - lv_obj_set_hidden(btnVolUp, !displayVolumeButtons); + lv_obj_set_hidden(btnVolDown, true); + lv_obj_set_hidden(btnVolUp, true); return true; } case TouchEvents::SwipeLeft: { diff --git a/src/displayapp/screens/Music.h b/src/displayapp/screens/Music.h index ef8f1fec7f..00d3ad9275 100644 --- a/src/displayapp/screens/Music.h +++ b/src/displayapp/screens/Music.h @@ -57,10 +57,11 @@ namespace Pinetime { lv_obj_t* imgDiscAnim; lv_obj_t* txtTrackDuration; + lv_style_t btn_style; + /** For the spinning disc animation */ bool frameB; - bool displayVolumeButtons = false; Pinetime::Controllers::MusicService& musicService; std::string artist; diff --git a/src/displayapp/screens/Tile.cpp b/src/displayapp/screens/Tile.cpp index d5d6cb80c6..a64320e6fb 100644 --- a/src/displayapp/screens/Tile.cpp +++ b/src/displayapp/screens/Tile.cpp @@ -35,37 +35,35 @@ Tile::Tile(uint8_t screenID, label_time = lv_label_create(lv_scr_act(), nullptr); lv_label_set_text_fmt(label_time, "%02i:%02i", dateTimeController.Hours(), dateTimeController.Minutes()); lv_label_set_align(label_time, LV_LABEL_ALIGN_CENTER); - lv_obj_align(label_time, nullptr, LV_ALIGN_IN_TOP_LEFT, 15, 6); + lv_obj_align(label_time, nullptr, LV_ALIGN_IN_TOP_LEFT, 0, 0); // Battery batteryIcon = lv_label_create(lv_scr_act(), nullptr); lv_label_set_text(batteryIcon, BatteryIcon::GetBatteryIcon(batteryController.PercentRemaining())); - lv_obj_align(batteryIcon, nullptr, LV_ALIGN_IN_TOP_RIGHT, -15, 6); + lv_obj_align(batteryIcon, nullptr, LV_ALIGN_IN_TOP_RIGHT, -8, 0); if (numScreens > 1) { - pageIndicatorBasePoints[0].x = 240 - 1; - pageIndicatorBasePoints[0].y = 6; - pageIndicatorBasePoints[1].x = 240 - 1; - pageIndicatorBasePoints[1].y = 240 - 6; + pageIndicatorBasePoints[0].x = LV_HOR_RES - 1; + pageIndicatorBasePoints[0].y = 0; + pageIndicatorBasePoints[1].x = LV_HOR_RES - 1; + pageIndicatorBasePoints[1].y = LV_VER_RES; pageIndicatorBase = lv_line_create(lv_scr_act(), nullptr); lv_obj_set_style_local_line_width(pageIndicatorBase, LV_LINE_PART_MAIN, LV_STATE_DEFAULT, 3); lv_obj_set_style_local_line_color(pageIndicatorBase, LV_LINE_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x111111)); - lv_obj_set_style_local_line_rounded(pageIndicatorBase, LV_LINE_PART_MAIN, LV_STATE_DEFAULT, true); lv_line_set_points(pageIndicatorBase, pageIndicatorBasePoints, 2); - uint16_t indicatorSize = 228 / numScreens; - uint16_t indicatorPos = indicatorSize * screenID; + const uint16_t indicatorSize = LV_VER_RES / numScreens; + const uint16_t indicatorPos = indicatorSize * screenID; - pageIndicatorPoints[0].x = 240 - 1; - pageIndicatorPoints[0].y = 6 + indicatorPos; - pageIndicatorPoints[1].x = 240 - 1; - pageIndicatorPoints[1].y = 6 + indicatorPos + indicatorSize; + pageIndicatorPoints[0].x = LV_HOR_RES - 1; + pageIndicatorPoints[0].y = indicatorPos; + pageIndicatorPoints[1].x = LV_HOR_RES - 1; + pageIndicatorPoints[1].y = indicatorPos + indicatorSize; pageIndicator = lv_line_create(lv_scr_act(), nullptr); lv_obj_set_style_local_line_width(pageIndicator, LV_LINE_PART_MAIN, LV_STATE_DEFAULT, 3); lv_obj_set_style_local_line_color(pageIndicator, LV_LINE_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_GRAY); - lv_obj_set_style_local_line_rounded(pageIndicator, LV_LINE_PART_MAIN, LV_STATE_DEFAULT, true); lv_line_set_points(pageIndicator, pageIndicatorPoints, 2); } @@ -85,7 +83,7 @@ Tile::Tile(uint8_t screenID, btnm1 = lv_btnmatrix_create(lv_scr_act(), nullptr); lv_btnmatrix_set_map(btnm1, btnmMap); - lv_obj_set_size(btnm1, LV_HOR_RES - 10, LV_VER_RES - 60); + lv_obj_set_size(btnm1, LV_HOR_RES - 16, LV_VER_RES - 60); lv_obj_align(btnm1, NULL, LV_ALIGN_CENTER, 0, 10); lv_obj_set_style_local_radius(btnm1, LV_BTNMATRIX_PART_BTN, LV_STATE_DEFAULT, 20); @@ -93,6 +91,8 @@ Tile::Tile(uint8_t screenID, lv_obj_set_style_local_bg_color(btnm1, LV_BTNMATRIX_PART_BTN, LV_STATE_DEFAULT, LV_COLOR_AQUA); lv_obj_set_style_local_bg_opa(btnm1, LV_BTNMATRIX_PART_BTN, LV_STATE_DISABLED, LV_OPA_20); lv_obj_set_style_local_bg_color(btnm1, LV_BTNMATRIX_PART_BTN, LV_STATE_DISABLED, lv_color_hex(0x111111)); + lv_obj_set_style_local_pad_all(btnm1, LV_BTNMATRIX_PART_BG, LV_STATE_DEFAULT, 0); + lv_obj_set_style_local_pad_inner(btnm1, LV_BTNMATRIX_PART_BG, LV_STATE_DEFAULT, 6); for (uint8_t i = 0; i < 6; i++) { if (applications[i].application == Apps::None) { diff --git a/src/displayapp/screens/WatchFaceAnalog.cpp b/src/displayapp/screens/WatchFaceAnalog.cpp index 621929b83e..1410fc2893 100644 --- a/src/displayapp/screens/WatchFaceAnalog.cpp +++ b/src/displayapp/screens/WatchFaceAnalog.cpp @@ -67,12 +67,12 @@ WatchFaceAnalog::WatchFaceAnalog(Pinetime::Applications::DisplayApp* app, batteryIcon = lv_label_create(lv_scr_act(), nullptr); lv_label_set_text(batteryIcon, Symbols::batteryHalf); - lv_obj_align(batteryIcon, NULL, LV_ALIGN_IN_BOTTOM_RIGHT, -8, -4); + lv_obj_align(batteryIcon, NULL, LV_ALIGN_IN_TOP_RIGHT, 0, 0); notificationIcon = lv_label_create(lv_scr_act(), NULL); lv_obj_set_style_local_text_color(notificationIcon, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x00FF00)); lv_label_set_text(notificationIcon, NotificationIcon::GetIcon(false)); - lv_obj_align(notificationIcon, NULL, LV_ALIGN_IN_BOTTOM_LEFT, 8, -4); + lv_obj_align(notificationIcon, NULL, LV_ALIGN_IN_BOTTOM_LEFT, 0, 0); // Date - Day / Week day diff --git a/src/displayapp/screens/WatchFaceDigital.cpp b/src/displayapp/screens/WatchFaceDigital.cpp index 7a240f1f10..2b902b3b6f 100644 --- a/src/displayapp/screens/WatchFaceDigital.cpp +++ b/src/displayapp/screens/WatchFaceDigital.cpp @@ -35,7 +35,7 @@ WatchFaceDigital::WatchFaceDigital(DisplayApp* app, batteryIcon = lv_label_create(lv_scr_act(), nullptr); lv_label_set_text(batteryIcon, Symbols::batteryFull); - lv_obj_align(batteryIcon, lv_scr_act(), LV_ALIGN_IN_TOP_RIGHT, -5, 2); + lv_obj_align(batteryIcon, lv_scr_act(), LV_ALIGN_IN_TOP_RIGHT, 0, 0); batteryPlug = lv_label_create(lv_scr_act(), nullptr); lv_obj_set_style_local_text_color(batteryPlug, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0xFF0000)); @@ -50,7 +50,7 @@ WatchFaceDigital::WatchFaceDigital(DisplayApp* app, notificationIcon = lv_label_create(lv_scr_act(), nullptr); lv_obj_set_style_local_text_color(notificationIcon, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x00FF00)); lv_label_set_text(notificationIcon, NotificationIcon::GetIcon(false)); - lv_obj_align(notificationIcon, nullptr, LV_ALIGN_IN_TOP_LEFT, 10, 0); + lv_obj_align(notificationIcon, nullptr, LV_ALIGN_IN_TOP_LEFT, 0, 0); label_date = lv_label_create(lv_scr_act(), nullptr); lv_obj_align(label_date, lv_scr_act(), LV_ALIGN_CENTER, 0, 60); @@ -75,7 +75,7 @@ WatchFaceDigital::WatchFaceDigital(DisplayApp* app, heartbeatIcon = lv_label_create(lv_scr_act(), nullptr); lv_label_set_text(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, 5, -2); + lv_obj_align(heartbeatIcon, lv_scr_act(), 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)); @@ -85,7 +85,7 @@ WatchFaceDigital::WatchFaceDigital(DisplayApp* app, stepValue = lv_label_create(lv_scr_act(), nullptr); lv_obj_set_style_local_text_color(stepValue, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x00FFE7)); lv_label_set_text(stepValue, "0"); - lv_obj_align(stepValue, lv_scr_act(), LV_ALIGN_IN_BOTTOM_RIGHT, -5, -2); + lv_obj_align(stepValue, lv_scr_act(), LV_ALIGN_IN_BOTTOM_RIGHT, 0, 0); stepIcon = lv_label_create(lv_scr_act(), nullptr); lv_obj_set_style_local_text_color(stepIcon, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x00FFE7)); @@ -110,7 +110,7 @@ bool WatchFaceDigital::Refresh() { if (bleState.IsUpdated()) { lv_label_set_text(bleIcon, BleIcon::GetIcon(bleState.Get())); } - lv_obj_align(batteryIcon, lv_scr_act(), LV_ALIGN_IN_TOP_RIGHT, -5, 5); + lv_obj_align(batteryIcon, lv_scr_act(), LV_ALIGN_IN_TOP_RIGHT, 0, 0); lv_obj_align(batteryPlug, batteryIcon, LV_ALIGN_OUT_LEFT_MID, -5, 0); lv_obj_align(bleIcon, batteryPlug, LV_ALIGN_OUT_LEFT_MID, -5, 0); @@ -208,7 +208,7 @@ bool WatchFaceDigital::Refresh() { lv_label_set_text_static(heartbeatValue, ""); } - lv_obj_align(heartbeatIcon, lv_scr_act(), LV_ALIGN_IN_BOTTOM_LEFT, 5, -2); + lv_obj_align(heartbeatIcon, lv_scr_act(), LV_ALIGN_IN_BOTTOM_LEFT, 0, 0); lv_obj_align(heartbeatValue, heartbeatIcon, LV_ALIGN_OUT_RIGHT_MID, 5, 0); } @@ -216,7 +216,7 @@ bool WatchFaceDigital::Refresh() { motionSensorOk = motionController.IsSensorOk(); if (stepCount.IsUpdated() || motionSensorOk.IsUpdated()) { lv_label_set_text_fmt(stepValue, "%lu", stepCount.Get()); - lv_obj_align(stepValue, lv_scr_act(), LV_ALIGN_IN_BOTTOM_RIGHT, -5, -2); + lv_obj_align(stepValue, lv_scr_act(), LV_ALIGN_IN_BOTTOM_RIGHT, 0, 0); lv_obj_align(stepIcon, stepValue, LV_ALIGN_OUT_LEFT_MID, -5, 0); } diff --git a/src/displayapp/screens/settings/QuickSettings.cpp b/src/displayapp/screens/settings/QuickSettings.cpp index 0421d10370..2d76d2dd6e 100644 --- a/src/displayapp/screens/settings/QuickSettings.cpp +++ b/src/displayapp/screens/settings/QuickSettings.cpp @@ -30,27 +30,29 @@ QuickSettings::QuickSettings(Pinetime::Applications::DisplayApp* app, motorController {motorController}, settingsController {settingsController} { + // This is the distance (padding) between all objects on this screen. + const int innerDistance = 10; + // Time label_time = lv_label_create(lv_scr_act(), nullptr); lv_label_set_text_fmt(label_time, "%02i:%02i", dateTimeController.Hours(), dateTimeController.Minutes()); lv_label_set_align(label_time, LV_LABEL_ALIGN_CENTER); - lv_obj_align(label_time, lv_scr_act(), LV_ALIGN_IN_TOP_LEFT, 15, 4); + lv_obj_align(label_time, lv_scr_act(), LV_ALIGN_IN_TOP_LEFT, 0, 0); batteryIcon = lv_label_create(lv_scr_act(), nullptr); lv_label_set_text(batteryIcon, BatteryIcon::GetBatteryIcon(batteryController.PercentRemaining())); - lv_obj_align(batteryIcon, nullptr, LV_ALIGN_IN_TOP_RIGHT, -15, 4); + lv_obj_align(batteryIcon, nullptr, LV_ALIGN_IN_TOP_RIGHT, 0, 0); - lv_obj_t* lbl_btn; + lv_style_init(&btn_style); + lv_style_set_radius(&btn_style, LV_STATE_DEFAULT, (LV_VER_RES - 20 - 2 * innerDistance) / 8); + lv_style_set_bg_color(&btn_style, LV_STATE_DEFAULT, lv_color_hex(0x111111)); btn1 = lv_btn_create(lv_scr_act(), nullptr); btn1->user_data = this; lv_obj_set_event_cb(btn1, ButtonEventHandler); - lv_obj_align(btn1, nullptr, LV_ALIGN_CENTER, -50, -30); - lv_obj_set_style_local_radius(btn1, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, 20); - lv_obj_set_style_local_bg_color(btn1, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x111111)); - lv_obj_set_style_local_bg_grad_dir(btn1, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, LV_GRAD_DIR_NONE); - - lv_btn_set_fit2(btn1, LV_FIT_TIGHT, LV_FIT_TIGHT); + lv_obj_add_style(btn1, LV_BTN_PART_MAIN, &btn_style); + lv_obj_set_size(btn1, (LV_HOR_RES - innerDistance) / 2, (LV_VER_RES - 20 - 2 * innerDistance) / 2); + lv_obj_align(btn1, nullptr, LV_ALIGN_IN_TOP_LEFT, 0, 20 + innerDistance); btn1_lvl = lv_label_create(btn1, nullptr); lv_obj_set_style_local_text_font(btn1_lvl, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, &lv_font_sys_48); @@ -59,12 +61,11 @@ QuickSettings::QuickSettings(Pinetime::Applications::DisplayApp* app, btn2 = lv_btn_create(lv_scr_act(), nullptr); btn2->user_data = this; lv_obj_set_event_cb(btn2, ButtonEventHandler); - lv_obj_align(btn2, nullptr, LV_ALIGN_CENTER, 50, -30); - lv_obj_set_style_local_radius(btn2, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, 20); - lv_obj_set_style_local_bg_color(btn2, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x111111)); - lv_obj_set_style_local_bg_grad_dir(btn2, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, LV_GRAD_DIR_NONE); - lv_btn_set_fit2(btn2, LV_FIT_TIGHT, LV_FIT_TIGHT); + lv_obj_add_style(btn2, LV_BTN_PART_MAIN, &btn_style); + lv_obj_set_size(btn2, (LV_HOR_RES - innerDistance) / 2, (LV_VER_RES - 20 - 2 * innerDistance) / 2); + lv_obj_align(btn2, nullptr, LV_ALIGN_IN_TOP_RIGHT, 0, 20 + innerDistance); + lv_obj_t* lbl_btn; lbl_btn = lv_label_create(btn2, nullptr); lv_obj_set_style_local_text_font(lbl_btn, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, &lv_font_sys_48); lv_label_set_text_static(lbl_btn, Symbols::highlight); @@ -72,14 +73,11 @@ QuickSettings::QuickSettings(Pinetime::Applications::DisplayApp* app, btn3 = lv_btn_create(lv_scr_act(), nullptr); btn3->user_data = this; lv_obj_set_event_cb(btn3, ButtonEventHandler); - lv_obj_align(btn3, nullptr, LV_ALIGN_CENTER, -50, 60); lv_btn_set_checkable(btn3, true); - lv_obj_set_style_local_radius(btn3, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, 20); - lv_obj_set_style_local_bg_color(btn3, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x111111)); - lv_obj_set_style_local_bg_grad_dir(btn3, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, LV_GRAD_DIR_NONE); + lv_obj_add_style(btn3, LV_BTN_PART_MAIN, &btn_style); lv_obj_set_style_local_bg_color(btn3, LV_BTN_PART_MAIN, LV_STATE_CHECKED, LV_COLOR_GREEN); - lv_obj_set_style_local_bg_grad_dir(btn1, LV_BTN_PART_MAIN, LV_STATE_CHECKED, LV_GRAD_DIR_NONE); - lv_btn_set_fit2(btn3, LV_FIT_TIGHT, LV_FIT_TIGHT); + lv_obj_set_size(btn3, (LV_HOR_RES - innerDistance) / 2, (LV_VER_RES - 20 - 2 * innerDistance) / 2); + lv_obj_align(btn3, nullptr, LV_ALIGN_IN_BOTTOM_LEFT, 0, 0); btn3_lvl = lv_label_create(btn3, nullptr); lv_obj_set_style_local_text_font(btn3_lvl, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, &lv_font_sys_48); @@ -94,11 +92,9 @@ QuickSettings::QuickSettings(Pinetime::Applications::DisplayApp* app, btn4 = lv_btn_create(lv_scr_act(), nullptr); btn4->user_data = this; lv_obj_set_event_cb(btn4, ButtonEventHandler); - lv_obj_align(btn4, nullptr, LV_ALIGN_CENTER, 50, 60); - lv_obj_set_style_local_radius(btn4, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, 20); - lv_obj_set_style_local_bg_color(btn4, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x111111)); - lv_obj_set_style_local_bg_grad_dir(btn4, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, LV_GRAD_DIR_NONE); - lv_btn_set_fit2(btn4, LV_FIT_TIGHT, LV_FIT_TIGHT); + lv_obj_add_style(btn4, LV_BTN_PART_MAIN, &btn_style); + lv_obj_set_size(btn4, (LV_HOR_RES - innerDistance) / 2, (LV_VER_RES - 20 - 2 * innerDistance) / 2); + lv_obj_align(btn4, nullptr, LV_ALIGN_IN_BOTTOM_RIGHT, 0, 0); lbl_btn = lv_label_create(btn4, nullptr); lv_obj_set_style_local_text_font(lbl_btn, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, &lv_font_sys_48); @@ -114,6 +110,7 @@ QuickSettings::QuickSettings(Pinetime::Applications::DisplayApp* app, } QuickSettings::~QuickSettings() { + lv_style_reset(&btn_style); lv_task_del(taskUpdate); lv_obj_clean(lv_scr_act()); settingsController.SaveSettings(); diff --git a/src/displayapp/screens/settings/QuickSettings.h b/src/displayapp/screens/settings/QuickSettings.h index e0fc0a87b3..2eefe1a728 100644 --- a/src/displayapp/screens/settings/QuickSettings.h +++ b/src/displayapp/screens/settings/QuickSettings.h @@ -44,6 +44,8 @@ namespace Pinetime { lv_obj_t* batteryIcon; lv_obj_t* label_time; + lv_style_t btn_style; + lv_obj_t* btn1; lv_obj_t* btn1_lvl; lv_obj_t* btn2; From fc6458a35c2260fe152fe84bcd06174cec6d3b92 Mon Sep 17 00:00:00 2001 From: Riku Isokoski Date: Sun, 13 Jun 2021 17:21:03 +0300 Subject: [PATCH 118/173] Add image with example layouts --- doc/ui/example.png | Bin 0 -> 10642 bytes doc/ui_guidelines.md | 2 ++ 2 files changed, 2 insertions(+) create mode 100644 doc/ui/example.png diff --git a/doc/ui/example.png b/doc/ui/example.png new file mode 100644 index 0000000000000000000000000000000000000000..2f6cb789212631bdf4378085a401272b40ab6ca3 GIT binary patch literal 10642 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 Date: Sat, 24 Jul 2021 21:46:55 +0300 Subject: [PATCH 119/173] Adjust previously missed scrollbar and firmware validation buttons --- src/displayapp/screens/FirmwareValidation.cpp | 4 ++-- src/displayapp/screens/Label.cpp | 18 +++++++++--------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/displayapp/screens/FirmwareValidation.cpp b/src/displayapp/screens/FirmwareValidation.cpp index da9d04f2aa..233ebd5b5f 100644 --- a/src/displayapp/screens/FirmwareValidation.cpp +++ b/src/displayapp/screens/FirmwareValidation.cpp @@ -39,7 +39,7 @@ FirmwareValidation::FirmwareValidation(Pinetime::Applications::DisplayApp* app, buttonValidate = lv_btn_create(lv_scr_act(), nullptr); buttonValidate->user_data = this; - lv_obj_set_height(buttonValidate, 50); + lv_obj_set_size(buttonValidate, 115, 50); lv_obj_align(buttonValidate, NULL, LV_ALIGN_IN_BOTTOM_LEFT, 0, 0); lv_obj_set_event_cb(buttonValidate, ButtonEventHandler); lv_obj_set_style_local_bg_color(buttonValidate, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x009900)); @@ -49,7 +49,7 @@ FirmwareValidation::FirmwareValidation(Pinetime::Applications::DisplayApp* app, buttonReset = lv_btn_create(lv_scr_act(), nullptr); buttonReset->user_data = this; - lv_obj_set_height(buttonReset, 50); + lv_obj_set_size(buttonReset, 115, 50); lv_obj_align(buttonReset, nullptr, LV_ALIGN_IN_BOTTOM_RIGHT, 0, 0); lv_obj_set_style_local_bg_color(buttonReset, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x990000)); lv_obj_set_event_cb(buttonReset, ButtonEventHandler); diff --git a/src/displayapp/screens/Label.cpp b/src/displayapp/screens/Label.cpp index 0132dbd223..f724fd48f8 100644 --- a/src/displayapp/screens/Label.cpp +++ b/src/displayapp/screens/Label.cpp @@ -6,10 +6,10 @@ Label::Label(uint8_t screenID, uint8_t numScreens, Pinetime::Applications::Displ : Screen(app), labelText {labelText} { if (numScreens > 1) { - pageIndicatorBasePoints[0].x = 240 - 1; - pageIndicatorBasePoints[0].y = 6; - pageIndicatorBasePoints[1].x = 240 - 1; - pageIndicatorBasePoints[1].y = 240 - 6; + pageIndicatorBasePoints[0].x = LV_HOR_RES - 1; + pageIndicatorBasePoints[0].y = 0; + pageIndicatorBasePoints[1].x = LV_HOR_RES - 1; + pageIndicatorBasePoints[1].y = LV_VER_RES; pageIndicatorBase = lv_line_create(lv_scr_act(), NULL); lv_obj_set_style_local_line_width(pageIndicatorBase, LV_LINE_PART_MAIN, LV_STATE_DEFAULT, 3); @@ -17,13 +17,13 @@ Label::Label(uint8_t screenID, uint8_t numScreens, Pinetime::Applications::Displ lv_obj_set_style_local_line_rounded(pageIndicatorBase, LV_LINE_PART_MAIN, LV_STATE_DEFAULT, true); lv_line_set_points(pageIndicatorBase, pageIndicatorBasePoints, 2); - uint16_t indicatorSize = 228 / numScreens; + uint16_t indicatorSize = LV_VER_RES / numScreens; uint16_t indicatorPos = indicatorSize * screenID; - pageIndicatorPoints[0].x = 240 - 1; - pageIndicatorPoints[0].y = (6 + indicatorPos); - pageIndicatorPoints[1].x = 240 - 1; - pageIndicatorPoints[1].y = (6 + indicatorPos) + indicatorSize; + pageIndicatorPoints[0].x = LV_HOR_RES - 1; + pageIndicatorPoints[0].y = indicatorPos; + pageIndicatorPoints[1].x = LV_HOR_RES - 1; + pageIndicatorPoints[1].y = indicatorPos + indicatorSize; pageIndicator = lv_line_create(lv_scr_act(), NULL); lv_obj_set_style_local_line_width(pageIndicator, LV_LINE_PART_MAIN, LV_STATE_DEFAULT, 3); From bc829053718f925662ca1dcdc9856426dabef573 Mon Sep 17 00:00:00 2001 From: Riku Isokoski Date: Thu, 29 Jul 2021 21:25:03 +0300 Subject: [PATCH 120/173] Clean up using variables --- .../screens/settings/QuickSettings.cpp | 26 ++++++++++++------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/src/displayapp/screens/settings/QuickSettings.cpp b/src/displayapp/screens/settings/QuickSettings.cpp index 2d76d2dd6e..54e2f3e22e 100644 --- a/src/displayapp/screens/settings/QuickSettings.cpp +++ b/src/displayapp/screens/settings/QuickSettings.cpp @@ -31,7 +31,7 @@ QuickSettings::QuickSettings(Pinetime::Applications::DisplayApp* app, settingsController {settingsController} { // This is the distance (padding) between all objects on this screen. - const int innerDistance = 10; + static constexpr uint8_t innerDistance = 10; // Time label_time = lv_label_create(lv_scr_act(), nullptr); @@ -43,16 +43,22 @@ QuickSettings::QuickSettings(Pinetime::Applications::DisplayApp* app, lv_label_set_text(batteryIcon, BatteryIcon::GetBatteryIcon(batteryController.PercentRemaining())); lv_obj_align(batteryIcon, nullptr, LV_ALIGN_IN_TOP_RIGHT, 0, 0); + static constexpr uint8_t barHeight = 20 + innerDistance; + static constexpr uint8_t buttonHeight = (LV_VER_RES_MAX - barHeight - innerDistance) / 2; + static constexpr uint8_t buttonWidth = (LV_HOR_RES_MAX - innerDistance) / 2; // wide buttons + //static constexpr uint8_t buttonWidth = buttonHeight; // square buttons + static constexpr uint8_t buttonXOffset = (LV_HOR_RES_MAX - buttonWidth * 2 - innerDistance) / 2; + lv_style_init(&btn_style); - lv_style_set_radius(&btn_style, LV_STATE_DEFAULT, (LV_VER_RES - 20 - 2 * innerDistance) / 8); + lv_style_set_radius(&btn_style, LV_STATE_DEFAULT, buttonHeight / 4); lv_style_set_bg_color(&btn_style, LV_STATE_DEFAULT, lv_color_hex(0x111111)); btn1 = lv_btn_create(lv_scr_act(), nullptr); btn1->user_data = this; lv_obj_set_event_cb(btn1, ButtonEventHandler); lv_obj_add_style(btn1, LV_BTN_PART_MAIN, &btn_style); - lv_obj_set_size(btn1, (LV_HOR_RES - innerDistance) / 2, (LV_VER_RES - 20 - 2 * innerDistance) / 2); - lv_obj_align(btn1, nullptr, LV_ALIGN_IN_TOP_LEFT, 0, 20 + innerDistance); + lv_obj_set_size(btn1, buttonWidth, buttonHeight); + lv_obj_align(btn1, nullptr, LV_ALIGN_IN_TOP_LEFT, buttonXOffset, barHeight); btn1_lvl = lv_label_create(btn1, nullptr); lv_obj_set_style_local_text_font(btn1_lvl, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, &lv_font_sys_48); @@ -62,8 +68,8 @@ QuickSettings::QuickSettings(Pinetime::Applications::DisplayApp* app, btn2->user_data = this; lv_obj_set_event_cb(btn2, ButtonEventHandler); lv_obj_add_style(btn2, LV_BTN_PART_MAIN, &btn_style); - lv_obj_set_size(btn2, (LV_HOR_RES - innerDistance) / 2, (LV_VER_RES - 20 - 2 * innerDistance) / 2); - lv_obj_align(btn2, nullptr, LV_ALIGN_IN_TOP_RIGHT, 0, 20 + innerDistance); + lv_obj_set_size(btn2, buttonWidth, buttonHeight); + lv_obj_align(btn2, nullptr, LV_ALIGN_IN_TOP_RIGHT, - buttonXOffset, barHeight); lv_obj_t* lbl_btn; lbl_btn = lv_label_create(btn2, nullptr); @@ -76,8 +82,8 @@ QuickSettings::QuickSettings(Pinetime::Applications::DisplayApp* app, lv_btn_set_checkable(btn3, true); lv_obj_add_style(btn3, LV_BTN_PART_MAIN, &btn_style); lv_obj_set_style_local_bg_color(btn3, LV_BTN_PART_MAIN, LV_STATE_CHECKED, LV_COLOR_GREEN); - lv_obj_set_size(btn3, (LV_HOR_RES - innerDistance) / 2, (LV_VER_RES - 20 - 2 * innerDistance) / 2); - lv_obj_align(btn3, nullptr, LV_ALIGN_IN_BOTTOM_LEFT, 0, 0); + lv_obj_set_size(btn3, buttonWidth, buttonHeight); + lv_obj_align(btn3, nullptr, LV_ALIGN_IN_BOTTOM_LEFT, buttonXOffset, 0); btn3_lvl = lv_label_create(btn3, nullptr); lv_obj_set_style_local_text_font(btn3_lvl, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, &lv_font_sys_48); @@ -93,8 +99,8 @@ QuickSettings::QuickSettings(Pinetime::Applications::DisplayApp* app, btn4->user_data = this; lv_obj_set_event_cb(btn4, ButtonEventHandler); lv_obj_add_style(btn4, LV_BTN_PART_MAIN, &btn_style); - lv_obj_set_size(btn4, (LV_HOR_RES - innerDistance) / 2, (LV_VER_RES - 20 - 2 * innerDistance) / 2); - lv_obj_align(btn4, nullptr, LV_ALIGN_IN_BOTTOM_RIGHT, 0, 0); + lv_obj_set_size(btn4, buttonWidth, buttonHeight); + lv_obj_align(btn4, nullptr, LV_ALIGN_IN_BOTTOM_RIGHT, - buttonXOffset, 0); lbl_btn = lv_label_create(btn4, nullptr); lv_obj_set_style_local_text_font(lbl_btn, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, &lv_font_sys_48); From ee44b6ff4998d6f4d0672c05c1f65c0a9692dc0d Mon Sep 17 00:00:00 2001 From: Riku Isokoski Date: Thu, 29 Jul 2021 21:49:06 +0300 Subject: [PATCH 121/173] Adjust inner padding in applist --- src/displayapp/screens/Tile.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/displayapp/screens/Tile.cpp b/src/displayapp/screens/Tile.cpp index a64320e6fb..777b5bb7f8 100644 --- a/src/displayapp/screens/Tile.cpp +++ b/src/displayapp/screens/Tile.cpp @@ -92,7 +92,7 @@ Tile::Tile(uint8_t screenID, lv_obj_set_style_local_bg_opa(btnm1, LV_BTNMATRIX_PART_BTN, LV_STATE_DISABLED, LV_OPA_20); lv_obj_set_style_local_bg_color(btnm1, LV_BTNMATRIX_PART_BTN, LV_STATE_DISABLED, lv_color_hex(0x111111)); lv_obj_set_style_local_pad_all(btnm1, LV_BTNMATRIX_PART_BG, LV_STATE_DEFAULT, 0); - lv_obj_set_style_local_pad_inner(btnm1, LV_BTNMATRIX_PART_BG, LV_STATE_DEFAULT, 6); + lv_obj_set_style_local_pad_inner(btnm1, LV_BTNMATRIX_PART_BG, LV_STATE_DEFAULT, 10); for (uint8_t i = 0; i < 6; i++) { if (applications[i].application == Apps::None) { From c0bb88799c2de0ab8de5d38b3eb511f4f80029d7 Mon Sep 17 00:00:00 2001 From: Kieran Cawthray Date: Sun, 15 Aug 2021 12:33:32 +0200 Subject: [PATCH 122/173] Add check for randomise button in case colors clash --- src/displayapp/screens/settings/SettingPineTimeStyle.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/displayapp/screens/settings/SettingPineTimeStyle.cpp b/src/displayapp/screens/settings/SettingPineTimeStyle.cpp index a32ce34dc1..007c1cffcf 100644 --- a/src/displayapp/screens/settings/SettingPineTimeStyle.cpp +++ b/src/displayapp/screens/settings/SettingPineTimeStyle.cpp @@ -315,6 +315,11 @@ void SettingPineTimeStyle::UpdateSelected(lv_obj_t *object, lv_event_t event) { uint8_t randTime = rand() % 17; uint8_t randBar = rand() % 17; uint8_t randBG = rand() % 17; + // Check if the time color is the same as its background, or if the sidebar is black. If so, change them to more useful values. + if ((randTime == randBG) || (randBar == 3)) { + randBG += 1; + randBar = randTime; + } settingsController.SetPTSColorTime(randTime); lv_obj_set_style_local_text_color(timeDD1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, pts_colors[randTime]); lv_obj_set_style_local_text_color(timeDD2, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, pts_colors[randTime]); From 16ea069d55e4bcbba097cf499901eddf1a3828db Mon Sep 17 00:00:00 2001 From: Kieran Cawthray Date: Sun, 15 Aug 2021 14:05:21 +0200 Subject: [PATCH 123/173] Remove duplicate code, minor fixes --- .../screens/settings/SettingPineTimeStyle.cpp | 52 +++++++------------ 1 file changed, 19 insertions(+), 33 deletions(-) diff --git a/src/displayapp/screens/settings/SettingPineTimeStyle.cpp b/src/displayapp/screens/settings/SettingPineTimeStyle.cpp index 007c1cffcf..dfa806a352 100644 --- a/src/displayapp/screens/settings/SettingPineTimeStyle.cpp +++ b/src/displayapp/screens/settings/SettingPineTimeStyle.cpp @@ -230,76 +230,60 @@ void SettingPineTimeStyle::UpdateSelected(lv_obj_t *object, lv_event_t event) { if((object == btnNextTime) && (event == LV_EVENT_PRESSED)) { if ( valueTime < 16 ) { valueTime += 1; - settingsController.SetPTSColorTime(valueTime); - lv_obj_set_style_local_text_color(timeDD1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, pts_colors[valueTime]); - lv_obj_set_style_local_text_color(timeDD2, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, pts_colors[valueTime]); - lv_obj_set_style_local_text_color(timeAMPM, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, pts_colors[valueTime]); } else { valueTime = 0; - settingsController.SetPTSColorTime(valueTime); - lv_obj_set_style_local_text_color(timeDD1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, pts_colors[valueTime]); - lv_obj_set_style_local_text_color(timeDD2, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, pts_colors[valueTime]); - lv_obj_set_style_local_text_color(timeAMPM, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, pts_colors[valueTime]); } + settingsController.SetPTSColorTime(valueTime); + lv_obj_set_style_local_text_color(timeDD1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, pts_colors[valueTime]); + lv_obj_set_style_local_text_color(timeDD2, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, pts_colors[valueTime]); + lv_obj_set_style_local_text_color(timeAMPM, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, pts_colors[valueTime]); } if((object == btnPrevTime) && (event == LV_EVENT_PRESSED)) { if ( valueTime > 0 ) { valueTime -= 1; - settingsController.SetPTSColorTime(valueTime); - lv_obj_set_style_local_text_color(timeDD1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, pts_colors[valueTime]); - lv_obj_set_style_local_text_color(timeDD2, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, pts_colors[valueTime]); - lv_obj_set_style_local_text_color(timeAMPM, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, pts_colors[valueTime]); } else { valueTime = 16; - settingsController.SetPTSColorTime(valueTime); - lv_obj_set_style_local_text_color(timeDD1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, pts_colors[valueTime]); - lv_obj_set_style_local_text_color(timeDD2, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, pts_colors[valueTime]); - lv_obj_set_style_local_text_color(timeAMPM, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, pts_colors[valueTime]); } + settingsController.SetPTSColorTime(valueTime); + lv_obj_set_style_local_text_color(timeDD1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, pts_colors[valueTime]); + lv_obj_set_style_local_text_color(timeDD2, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, pts_colors[valueTime]); + lv_obj_set_style_local_text_color(timeAMPM, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, pts_colors[valueTime]); } if((object == btnNextBar) && (event == LV_EVENT_PRESSED)) { if ( valueBar < 16 ) { valueBar += 1; - settingsController.SetPTSColorBar(valueBar); - lv_obj_set_style_local_bg_color(sidebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, pts_colors[valueBar]); } else { valueBar = 0; - settingsController.SetPTSColorBar(valueBar); - lv_obj_set_style_local_bg_color(sidebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, pts_colors[valueBar]); } + settingsController.SetPTSColorBar(valueBar); + lv_obj_set_style_local_bg_color(sidebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, pts_colors[valueBar]); } if((object == btnPrevBar) && (event == LV_EVENT_PRESSED)) { if ( valueBar > 0 ) { valueBar -= 1; - settingsController.SetPTSColorBar(valueBar); - lv_obj_set_style_local_bg_color(sidebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, pts_colors[valueBar]); } else { valueBar = 16; - settingsController.SetPTSColorBar(valueBar); - lv_obj_set_style_local_bg_color(sidebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, pts_colors[valueBar]); } + settingsController.SetPTSColorBar(valueBar); + lv_obj_set_style_local_bg_color(sidebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, pts_colors[valueBar]); } if((object == btnNextBG) && (event == LV_EVENT_PRESSED)) { if ( valueBG < 16 ) { valueBG += 1; - settingsController.SetPTSColorBG(valueBG); - lv_obj_set_style_local_bg_color(timebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, pts_colors[valueBG]); } else { valueBG = 0; - settingsController.SetPTSColorBG(valueBG); - lv_obj_set_style_local_bg_color(timebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, pts_colors[valueBG]); } + settingsController.SetPTSColorBG(valueBG); + lv_obj_set_style_local_bg_color(timebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, pts_colors[valueBG]); } if((object == btnPrevBG) && (event == LV_EVENT_PRESSED)) { if ( valueBG > 0 ) { valueBG -= 1; - settingsController.SetPTSColorBG(valueBG); - lv_obj_set_style_local_bg_color(timebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, pts_colors[valueBG]); } else { valueBG = 16; - settingsController.SetPTSColorBG(valueBG); - lv_obj_set_style_local_bg_color(timebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, pts_colors[valueBG]); } + settingsController.SetPTSColorBG(valueBG); + lv_obj_set_style_local_bg_color(timebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, pts_colors[valueBG]); } if((object == btnReset) && (event == LV_EVENT_PRESSED)) { settingsController.SetPTSColorTime(11); @@ -316,8 +300,10 @@ void SettingPineTimeStyle::UpdateSelected(lv_obj_t *object, lv_event_t event) { uint8_t randBar = rand() % 17; uint8_t randBG = rand() % 17; // Check if the time color is the same as its background, or if the sidebar is black. If so, change them to more useful values. - if ((randTime == randBG) || (randBar == 3)) { + if (randTime == randBG) { randBG += 1; + } + if (randBar == 3) { randBar = randTime; } settingsController.SetPTSColorTime(randTime); From 5789f1527c5c8d1c31e78a6a88c6a2b6158eb671 Mon Sep 17 00:00:00 2001 From: Kieran Cawthray Date: Sun, 15 Aug 2021 14:42:30 +0200 Subject: [PATCH 124/173] Avoid setting the sidebar black --- src/displayapp/screens/settings/SettingPineTimeStyle.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/displayapp/screens/settings/SettingPineTimeStyle.cpp b/src/displayapp/screens/settings/SettingPineTimeStyle.cpp index dfa806a352..96b87800d3 100644 --- a/src/displayapp/screens/settings/SettingPineTimeStyle.cpp +++ b/src/displayapp/screens/settings/SettingPineTimeStyle.cpp @@ -252,6 +252,8 @@ void SettingPineTimeStyle::UpdateSelected(lv_obj_t *object, lv_event_t event) { if((object == btnNextBar) && (event == LV_EVENT_PRESSED)) { if ( valueBar < 16 ) { valueBar += 1; + // Avoid setting the sidebar black + if ( valueBar == 3 ) { valueBar += 1; } } else { valueBar = 0; } @@ -261,6 +263,8 @@ void SettingPineTimeStyle::UpdateSelected(lv_obj_t *object, lv_event_t event) { if((object == btnPrevBar) && (event == LV_EVENT_PRESSED)) { if ( valueBar > 0 ) { valueBar -= 1; + // Avoid setting the sidebar black + if ( valueBar == 3 ) { valueBar -= 1; } } else { valueBar = 16; } From 639fd3a9bd9f4a1ada36a4b812b7199543d47457 Mon Sep 17 00:00:00 2001 From: Kieran Cawthray Date: Sun, 15 Aug 2021 15:00:54 +0200 Subject: [PATCH 125/173] More tidying following review --- .../screens/settings/SettingPineTimeStyle.cpp | 173 +++++++++--------- 1 file changed, 88 insertions(+), 85 deletions(-) diff --git a/src/displayapp/screens/settings/SettingPineTimeStyle.cpp b/src/displayapp/screens/settings/SettingPineTimeStyle.cpp index 96b87800d3..979e4b66a5 100644 --- a/src/displayapp/screens/settings/SettingPineTimeStyle.cpp +++ b/src/displayapp/screens/settings/SettingPineTimeStyle.cpp @@ -6,17 +6,14 @@ using namespace Pinetime::Applications::Screens; namespace { - static void event_handler(lv_obj_t * obj, lv_event_t event) { - SettingPineTimeStyle* screen = static_cast(obj->user_data); + static void event_handler(lv_obj_t* obj, lv_event_t event) { + SettingPineTimeStyle* screen = static_cast(obj->user_data); screen->UpdateSelected(obj, event); } } -SettingPineTimeStyle::SettingPineTimeStyle( - Pinetime::Applications::DisplayApp *app, Pinetime::Controllers::Settings &settingsController) : - Screen(app), - settingsController{settingsController} -{ +SettingPineTimeStyle::SettingPineTimeStyle(Pinetime::Applications::DisplayApp* app, Pinetime::Controllers::Settings& settingsController) + : Screen(app), settingsController {settingsController} { timebar = lv_obj_create(lv_scr_act(), nullptr); lv_obj_set_style_local_bg_color(timebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, pts_colors[settingsController.GetPTSColorBG()]); lv_obj_set_style_local_radius(timebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, 0); @@ -140,7 +137,7 @@ SettingPineTimeStyle::SettingPineTimeStyle( lv_obj_set_style_local_line_opa(stepGauge, LV_GAUGE_PART_NEEDLE, LV_STATE_DEFAULT, LV_OPA_COVER); lv_obj_set_style_local_line_width(stepGauge, LV_GAUGE_PART_NEEDLE, LV_STATE_DEFAULT, 3); lv_obj_set_style_local_pad_inner(stepGauge, LV_GAUGE_PART_NEEDLE, LV_STATE_DEFAULT, 4); - + backgroundLabel = lv_label_create(lv_scr_act(), nullptr); lv_obj_set_click(backgroundLabel, true); lv_label_set_long_mode(backgroundLabel, LV_LABEL_LONG_CROP); @@ -222,74 +219,79 @@ bool SettingPineTimeStyle::Refresh() { return running; } -void SettingPineTimeStyle::UpdateSelected(lv_obj_t *object, lv_event_t event) { +void SettingPineTimeStyle::UpdateSelected(lv_obj_t* object, lv_event_t event) { uint8_t valueTime = settingsController.GetPTSColorTime(); uint8_t valueBar = settingsController.GetPTSColorBar(); uint8_t valueBG = settingsController.GetPTSColorBG(); - - if((object == btnNextTime) && (event == LV_EVENT_PRESSED)) { - if ( valueTime < 16 ) { - valueTime += 1; - } else { - valueTime = 0; + + if (event == LV_EVENT_CLICKED) { + if (object == btnNextTime) { + if (valueTime < 16) { + valueTime += 1; + } else { + valueTime = 0; + } + settingsController.SetPTSColorTime(valueTime); + lv_obj_set_style_local_text_color(timeDD1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, pts_colors[valueTime]); + lv_obj_set_style_local_text_color(timeDD2, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, pts_colors[valueTime]); + lv_obj_set_style_local_text_color(timeAMPM, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, pts_colors[valueTime]); } - settingsController.SetPTSColorTime(valueTime); - lv_obj_set_style_local_text_color(timeDD1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, pts_colors[valueTime]); - lv_obj_set_style_local_text_color(timeDD2, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, pts_colors[valueTime]); - lv_obj_set_style_local_text_color(timeAMPM, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, pts_colors[valueTime]); - } - if((object == btnPrevTime) && (event == LV_EVENT_PRESSED)) { - if ( valueTime > 0 ) { - valueTime -= 1; - } else { - valueTime = 16; + if (object == btnPrevTime) { + if (valueTime > 0) { + valueTime -= 1; + } else { + valueTime = 16; + } + settingsController.SetPTSColorTime(valueTime); + lv_obj_set_style_local_text_color(timeDD1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, pts_colors[valueTime]); + lv_obj_set_style_local_text_color(timeDD2, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, pts_colors[valueTime]); + lv_obj_set_style_local_text_color(timeAMPM, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, pts_colors[valueTime]); } - settingsController.SetPTSColorTime(valueTime); - lv_obj_set_style_local_text_color(timeDD1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, pts_colors[valueTime]); - lv_obj_set_style_local_text_color(timeDD2, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, pts_colors[valueTime]); - lv_obj_set_style_local_text_color(timeAMPM, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, pts_colors[valueTime]); - } - if((object == btnNextBar) && (event == LV_EVENT_PRESSED)) { - if ( valueBar < 16 ) { - valueBar += 1; - // Avoid setting the sidebar black - if ( valueBar == 3 ) { valueBar += 1; } - } else { - valueBar = 0; + if (object == btnNextBar) { + if (valueBar < 16) { + valueBar += 1; + // Avoid setting the sidebar black + if (valueBar == 3) { + valueBar += 1; + } + } else { + valueBar = 0; + } + settingsController.SetPTSColorBar(valueBar); + lv_obj_set_style_local_bg_color(sidebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, pts_colors[valueBar]); } - settingsController.SetPTSColorBar(valueBar); - lv_obj_set_style_local_bg_color(sidebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, pts_colors[valueBar]); - } - if((object == btnPrevBar) && (event == LV_EVENT_PRESSED)) { - if ( valueBar > 0 ) { - valueBar -= 1; - // Avoid setting the sidebar black - if ( valueBar == 3 ) { valueBar -= 1; } - } else { - valueBar = 16; + if (object == btnPrevBar) { + if (valueBar > 0) { + valueBar -= 1; + // Avoid setting the sidebar black + if (valueBar == 3) { + valueBar -= 1; + } + } else { + valueBar = 16; + } + settingsController.SetPTSColorBar(valueBar); + lv_obj_set_style_local_bg_color(sidebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, pts_colors[valueBar]); } - settingsController.SetPTSColorBar(valueBar); - lv_obj_set_style_local_bg_color(sidebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, pts_colors[valueBar]); - } - if((object == btnNextBG) && (event == LV_EVENT_PRESSED)) { - if ( valueBG < 16 ) { - valueBG += 1; - } else { - valueBG = 0; + if (object == btnNextBG) { + if (valueBG < 16) { + valueBG += 1; + } else { + valueBG = 0; + } + settingsController.SetPTSColorBG(valueBG); + lv_obj_set_style_local_bg_color(timebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, pts_colors[valueBG]); } - settingsController.SetPTSColorBG(valueBG); - lv_obj_set_style_local_bg_color(timebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, pts_colors[valueBG]); - } - if((object == btnPrevBG) && (event == LV_EVENT_PRESSED)) { - if ( valueBG > 0 ) { - valueBG -= 1; - } else { - valueBG = 16; + if (object == btnPrevBG) { + if (valueBG > 0) { + valueBG -= 1; + } else { + valueBG = 16; + } + settingsController.SetPTSColorBG(valueBG); + lv_obj_set_style_local_bg_color(timebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, pts_colors[valueBG]); } - settingsController.SetPTSColorBG(valueBG); - lv_obj_set_style_local_bg_color(timebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, pts_colors[valueBG]); - } - if((object == btnReset) && (event == LV_EVENT_PRESSED)) { + if (object == btnReset) { settingsController.SetPTSColorTime(11); lv_obj_set_style_local_text_color(timeDD1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, pts_colors[11]); lv_obj_set_style_local_text_color(timeDD2, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, pts_colors[11]); @@ -298,25 +300,26 @@ void SettingPineTimeStyle::UpdateSelected(lv_obj_t *object, lv_event_t event) { lv_obj_set_style_local_bg_color(sidebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, pts_colors[11]); settingsController.SetPTSColorBG(3); lv_obj_set_style_local_bg_color(timebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, pts_colors[3]); - } - if((object == btnRandom) && (event == LV_EVENT_PRESSED)) { - uint8_t randTime = rand() % 17; - uint8_t randBar = rand() % 17; - uint8_t randBG = rand() % 17; - // Check if the time color is the same as its background, or if the sidebar is black. If so, change them to more useful values. - if (randTime == randBG) { - randBG += 1; } - if (randBar == 3) { - randBar = randTime; + if (object == btnRandom) { + uint8_t randTime = rand() % 17; + uint8_t randBar = rand() % 17; + uint8_t randBG = rand() % 17; + // Check if the time color is the same as its background, or if the sidebar is black. If so, change them to more useful values. + if (randTime == randBG) { + randBG += 1; + } + if (randBar == 3) { + randBar = randTime; + } + settingsController.SetPTSColorTime(randTime); + lv_obj_set_style_local_text_color(timeDD1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, pts_colors[randTime]); + lv_obj_set_style_local_text_color(timeDD2, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, pts_colors[randTime]); + lv_obj_set_style_local_text_color(timeAMPM, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, pts_colors[randTime]); + settingsController.SetPTSColorBar(randBar); + lv_obj_set_style_local_bg_color(sidebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, pts_colors[randBar]); + settingsController.SetPTSColorBG(randBG); + lv_obj_set_style_local_bg_color(timebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, pts_colors[randBG]); } - settingsController.SetPTSColorTime(randTime); - lv_obj_set_style_local_text_color(timeDD1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, pts_colors[randTime]); - lv_obj_set_style_local_text_color(timeDD2, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, pts_colors[randTime]); - lv_obj_set_style_local_text_color(timeAMPM, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, pts_colors[randTime]); - settingsController.SetPTSColorBar(randBar); - lv_obj_set_style_local_bg_color(sidebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, pts_colors[randBar]); - settingsController.SetPTSColorBG(randBG); - lv_obj_set_style_local_bg_color(timebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, pts_colors[randBG]); } } \ No newline at end of file From 9851ed33d84aa242dfb98c2c3714a20ddbc53f45 Mon Sep 17 00:00:00 2001 From: Kieran Cawthray Date: Sun, 15 Aug 2021 15:28:40 +0200 Subject: [PATCH 126/173] Fix potential edge case of sidebar being set black --- src/displayapp/screens/settings/SettingPineTimeStyle.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/displayapp/screens/settings/SettingPineTimeStyle.cpp b/src/displayapp/screens/settings/SettingPineTimeStyle.cpp index 979e4b66a5..e125c8a2fd 100644 --- a/src/displayapp/screens/settings/SettingPineTimeStyle.cpp +++ b/src/displayapp/screens/settings/SettingPineTimeStyle.cpp @@ -310,7 +310,7 @@ void SettingPineTimeStyle::UpdateSelected(lv_obj_t* object, lv_event_t event) { randBG += 1; } if (randBar == 3) { - randBar = randTime; + randBar -= 1; } settingsController.SetPTSColorTime(randTime); lv_obj_set_style_local_text_color(timeDD1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, pts_colors[randTime]); From 81a36dc31ed22237e3cc06c8f4ba2a5cbcf07f8e Mon Sep 17 00:00:00 2001 From: Riku Isokoski Date: Mon, 16 Aug 2021 18:26:10 +0300 Subject: [PATCH 127/173] Simplify parameters and cleanup --- src/drivers/TwiMaster.cpp | 43 +++++++++------------------------------ src/drivers/TwiMaster.h | 19 +++++++---------- src/main.cpp | 5 ++--- 3 files changed, 19 insertions(+), 48 deletions(-) diff --git a/src/drivers/TwiMaster.cpp b/src/drivers/TwiMaster.cpp index 429a6eb722..f17d716831 100644 --- a/src/drivers/TwiMaster.cpp +++ b/src/drivers/TwiMaster.cpp @@ -8,19 +8,20 @@ using namespace Pinetime::Drivers; // TODO use shortcut to automatically send STOP when receive LastTX, for example // TODO use DMA/IRQ -TwiMaster::TwiMaster(const Modules module, const Parameters& params) : module {module}, params {params} { +TwiMaster::TwiMaster(NRF_TWIM_Type* module, uint32_t frequency, uint8_t pinSda, uint8_t pinScl) + : module {module}, frequency {frequency}, pinSda {pinSda}, pinScl {pinScl} { mutex = xSemaphoreCreateBinary(); } void TwiMaster::ConfigurePins() const { - NRF_GPIO->PIN_CNF[params.pinScl] = + NRF_GPIO->PIN_CNF[pinScl] = (GPIO_PIN_CNF_DIR_Input << GPIO_PIN_CNF_DIR_Pos) | (GPIO_PIN_CNF_INPUT_Connect << GPIO_PIN_CNF_INPUT_Pos) | (GPIO_PIN_CNF_PULL_Disabled << GPIO_PIN_CNF_PULL_Pos) | (GPIO_PIN_CNF_DRIVE_S0D1 << GPIO_PIN_CNF_DRIVE_Pos) | (GPIO_PIN_CNF_SENSE_Disabled << GPIO_PIN_CNF_SENSE_Pos); - NRF_GPIO->PIN_CNF[params.pinSda] = + NRF_GPIO->PIN_CNF[pinSda] = (GPIO_PIN_CNF_DIR_Input << GPIO_PIN_CNF_DIR_Pos) | (GPIO_PIN_CNF_INPUT_Connect << GPIO_PIN_CNF_INPUT_Pos) | (GPIO_PIN_CNF_PULL_Disabled << GPIO_PIN_CNF_PULL_Pos) | @@ -31,28 +32,12 @@ void TwiMaster::ConfigurePins() const { void TwiMaster::Init() { ConfigurePins(); - switch (module) { - case Modules::TWIM1: - twiBaseAddress = NRF_TWIM1; - break; - default: - return; - } + twiBaseAddress = module; - switch (static_cast(params.frequency)) { - case Frequencies::Khz100: - twiBaseAddress->FREQUENCY = TWIM_FREQUENCY_FREQUENCY_K100; - break; - case Frequencies::Khz250: - twiBaseAddress->FREQUENCY = TWIM_FREQUENCY_FREQUENCY_K250; - break; - case Frequencies::Khz400: - twiBaseAddress->FREQUENCY = TWIM_FREQUENCY_FREQUENCY_K400; - break; - } + twiBaseAddress->FREQUENCY = frequency; - twiBaseAddress->PSEL.SCL = params.pinScl; - twiBaseAddress->PSEL.SDA = params.pinSda; + twiBaseAddress->PSEL.SCL = pinScl; + twiBaseAddress->PSEL.SDA = pinSda; twiBaseAddress->EVENTS_LASTRX = 0; twiBaseAddress->EVENTS_STOPPED = 0; twiBaseAddress->EVENTS_LASTTX = 0; @@ -63,12 +48,6 @@ void TwiMaster::Init() { twiBaseAddress->ENABLE = (TWIM_ENABLE_ENABLE_Enabled << TWIM_ENABLE_ENABLE_Pos); - /* // IRQ - NVIC_ClearPendingIRQ(_IRQn); - NVIC_SetPriority(_IRQn, 2); - NVIC_EnableIRQ(_IRQn); - */ - xSemaphoreGive(mutex); } @@ -194,12 +173,10 @@ void TwiMaster::Wakeup() { * */ void TwiMaster::FixHwFreezed() { NRF_LOG_INFO("I2C device frozen, reinitializing it!"); - // Disable I²C + uint32_t twi_state = NRF_TWI1->ENABLE; - twiBaseAddress->ENABLE = TWIM_ENABLE_ENABLE_Disabled << TWI_ENABLE_ENABLE_Pos; - ConfigurePins(); + Sleep(); - // Re-enable I²C twiBaseAddress->ENABLE = twi_state; } diff --git a/src/drivers/TwiMaster.h b/src/drivers/TwiMaster.h index b8d36d59eb..30ac6c5f92 100644 --- a/src/drivers/TwiMaster.h +++ b/src/drivers/TwiMaster.h @@ -8,16 +8,9 @@ namespace Pinetime { namespace Drivers { class TwiMaster { public: - enum class Modules { TWIM1 }; - enum class Frequencies { Khz100, Khz250, Khz400 }; enum class ErrorCodes { NoError, TransactionFailed }; - struct Parameters { - uint32_t frequency; - uint8_t pinSda; - uint8_t pinScl; - }; - TwiMaster(const Modules module, const Parameters& params); + TwiMaster(NRF_TWIM_Type* module, uint32_t frequency, uint8_t pinSda, uint8_t pinScl); void Init(); ErrorCodes Read(uint8_t deviceAddress, uint8_t registerAddress, uint8_t* buffer, size_t size); @@ -26,16 +19,18 @@ namespace Pinetime { void Sleep(); void Wakeup(); - void ConfigurePins() const; - private: ErrorCodes Read(uint8_t deviceAddress, uint8_t* buffer, size_t size, bool stop); ErrorCodes Write(uint8_t deviceAddress, const uint8_t* data, size_t size, bool stop); void FixHwFreezed(); + void ConfigurePins() const; + NRF_TWIM_Type* twiBaseAddress; SemaphoreHandle_t mutex = nullptr; - const Modules module; - const Parameters params; + NRF_TWIM_Type* module; + uint32_t frequency; + uint8_t pinSda; + uint8_t pinScl; static constexpr uint8_t maxDataSize {16}; static constexpr uint8_t registerSize {1}; uint8_t internalBuffer[maxDataSize + registerSize]; diff --git a/src/main.cpp b/src/main.cpp index ffbba5e765..4e94ab192c 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -81,9 +81,8 @@ Pinetime::Drivers::SpiNorFlash spiNorFlash {flashSpi}; // The TWI device should work @ up to 400Khz but there is a HW bug which prevent it from // respecting correct timings. According to erratas heet, this magic value makes it run // at ~390Khz with correct timings. -static constexpr uint32_t MaxTwiFrequencyWithoutHardwareBug {0x06200000}; -Pinetime::Drivers::TwiMaster twiMaster {Pinetime::Drivers::TwiMaster::Modules::TWIM1, - Pinetime::Drivers::TwiMaster::Parameters {MaxTwiFrequencyWithoutHardwareBug, pinTwiSda, pinTwiScl}}; +//static constexpr uint32_t MaxTwiFrequencyWithoutHardwareBug {0x06200000}; +Pinetime::Drivers::TwiMaster twiMaster {NRF_TWIM1, TWI_FREQUENCY_FREQUENCY_K250, pinTwiSda, pinTwiScl}; Pinetime::Drivers::Cst816S touchPanel {twiMaster, touchPanelTwiAddress}; #ifdef PINETIME_IS_RECOVERY static constexpr bool isFactory = true; From 55f8908769aab970413b249cb26acdaf22c79ada Mon Sep 17 00:00:00 2001 From: Tim Keller Date: Tue, 17 Aug 2021 23:53:57 +0000 Subject: [PATCH 128/173] Make Clock Persistant. --- gcc_nrf52.ld | 11 ++++++++++- src/components/datetime/DateTimeController.cpp | 7 ++++++- src/components/datetime/DateTimeController.h | 2 ++ src/main.cpp | 11 ++++++++++- 4 files changed, 28 insertions(+), 3 deletions(-) diff --git a/gcc_nrf52.ld b/gcc_nrf52.ld index 98e133aa72..b40dc06b33 100644 --- a/gcc_nrf52.ld +++ b/gcc_nrf52.ld @@ -3,14 +3,23 @@ SEARCH_DIR(.) GROUP(-lgcc -lc -lnosys) +NO_INIT_SIZE = 0x100; +RAM_MAX = 64K; MEMORY { FLASH (rx) : ORIGIN = 0x00000, LENGTH = 0x78000 - RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x10000 + RAM (rwx) : ORIGIN = 0x20000000, LENGTH = RAM_MAX - NO_INIT_SIZE + NOINIT (rwx): ORIGIN = ORIGIN(RAM) + LENGTH(RAM), LENGTH = NO_INIT_SIZE } SECTIONS { + noinit (NOLOAD): + { + PROVIDE(__start_noinit_data = .); + KEEP(*(.noinit)) + PROVIDE(__stop_noinit_data = .); + } >NOINIT } SECTIONS diff --git a/src/components/datetime/DateTimeController.cpp b/src/components/datetime/DateTimeController.cpp index d6aa83c844..77c5be4e4c 100644 --- a/src/components/datetime/DateTimeController.cpp +++ b/src/components/datetime/DateTimeController.cpp @@ -5,6 +5,10 @@ using namespace Pinetime::Controllers; +void DateTime::SetCurrentTime(std::chrono::time_point t) { + this->currentDateTime = t; +} + void DateTime::SetTime( uint16_t year, uint8_t month, uint8_t day, uint8_t dayOfWeek, uint8_t hour, uint8_t minute, uint8_t second, uint32_t systickCounter) { std::tm tm = { @@ -67,11 +71,12 @@ void DateTime::UpdateTime(uint32_t systickCounter) { // Notify new day to SystemTask if (hour == 0 and not isMidnightAlreadyNotified) { isMidnightAlreadyNotified = true; - if(systemTask != nullptr) + if (systemTask != nullptr) systemTask->PushMessage(System::Messages::OnNewDay); } else if (hour != 0) { isMidnightAlreadyNotified = false; } + BackUpTime = currentDateTime; } const char* DateTime::MonthShortToString() { diff --git a/src/components/datetime/DateTimeController.h b/src/components/datetime/DateTimeController.h index 265d6e9def..ed7b0861ca 100644 --- a/src/components/datetime/DateTimeController.h +++ b/src/components/datetime/DateTimeController.h @@ -2,6 +2,7 @@ #include #include +extern std::chrono::time_point BackUpTime; namespace Pinetime { namespace System { @@ -74,6 +75,7 @@ namespace Pinetime { } void Register(System::SystemTask* systemTask); + void SetCurrentTime(std::chrono::time_point t); private: uint16_t year = 0; diff --git a/src/main.cpp b/src/main.cpp index d301be6711..9c384a8b6e 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -124,7 +124,6 @@ Pinetime::Controllers::FS fs {spiNorFlash}; Pinetime::Controllers::Settings settingsController {fs}; Pinetime::Controllers::MotorController motorController {settingsController}; - Pinetime::Applications::DisplayApp displayApp(lcd, lvgl, touchPanel, @@ -161,6 +160,9 @@ Pinetime::System::SystemTask systemTask(spi, heartRateApp, fs); +uint32_t MAGIC_RAM __attribute__((section(".noinit"))); +std::chrono::time_point BackUpTime __attribute__((section(".noinit"))); + void nrfx_gpiote_evt_handler(nrfx_gpiote_pin_t pin, nrf_gpiote_polarity_t action) { if (pin == pinTouchIrq) { systemTask.OnTouchEvent(); @@ -321,6 +323,13 @@ int main(void) { // retrieve version stored by bootloader Pinetime::BootloaderVersion::SetVersion(NRF_TIMER2->CC[0]); + // Check Magic Ram and reset lost variables + if (MAGIC_RAM == 0xDEADBEEF) { + dateTimeController.SetCurrentTime(BackUpTime); + } else { + MAGIC_RAM = 0xDEADBEEF; + } + lvgl.Init(); systemTask.Start(); From b91100573e474d6bf4aa324b982d190d035dd232 Mon Sep 17 00:00:00 2001 From: Riku Isokoski Date: Wed, 18 Aug 2021 19:20:25 +0300 Subject: [PATCH 129/173] Fix music app buttons --- src/displayapp/screens/Music.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/displayapp/screens/Music.cpp b/src/displayapp/screens/Music.cpp index 99a1518e48..257e9aea5d 100644 --- a/src/displayapp/screens/Music.cpp +++ b/src/displayapp/screens/Music.cpp @@ -292,7 +292,7 @@ bool Music::OnTouchEvent(Pinetime::Applications::TouchEvents event) { return true; } default: { - return true; + return false; } } } From df8ea7fe523bb9ec0ac3e24f0b1bebe5743d90cc Mon Sep 17 00:00:00 2001 From: hubmartin Date: Mon, 16 Aug 2021 16:42:42 +0200 Subject: [PATCH 130/173] Add memory print usage --- src/CMakeLists.txt | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 40e1f2a554..f72f50c9a4 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -839,7 +839,7 @@ target_compile_options(${EXECUTABLE_NAME} PUBLIC set_target_properties(${EXECUTABLE_NAME} PROPERTIES SUFFIX ".out" - LINK_FLAGS "-mthumb -mabi=aapcs -L ${NRF5_SDK_PATH}/modules/nrfx/mdk -T${NRF5_LINKER_SCRIPT} -mcpu=cortex-m4 -mfloat-abi=hard -mfpu=fpv4-sp-d16 -Wl,--gc-sections --specs=nano.specs -lc -lnosys -lm -Wl,-Map=${EXECUTABLE_FILE_NAME}.map" + LINK_FLAGS "-mthumb -mabi=aapcs -L ${NRF5_SDK_PATH}/modules/nrfx/mdk -T${NRF5_LINKER_SCRIPT} -mcpu=cortex-m4 -mfloat-abi=hard -mfpu=fpv4-sp-d16 -Wl,--gc-sections -Wl,--print-memory-usage --specs=nano.specs -lc -lnosys -lm -Wl,-Map=${EXECUTABLE_FILE_NAME}.map" ) add_custom_command(TARGET ${EXECUTABLE_NAME} @@ -869,7 +869,7 @@ target_compile_options(${EXECUTABLE_MCUBOOT_NAME} PUBLIC set_target_properties(${EXECUTABLE_MCUBOOT_NAME} PROPERTIES SUFFIX ".out" - LINK_FLAGS "-mthumb -mabi=aapcs -L ${NRF5_SDK_PATH}/modules/nrfx/mdk -T${NRF5_LINKER_SCRIPT_MCUBOOT} -mcpu=cortex-m4 -mfloat-abi=hard -mfpu=fpv4-sp-d16 -Wl,--gc-sections --specs=nano.specs -lc -lnosys -lm -Wl,-Map=${EXECUTABLE_MCUBOOT_FILE_NAME}.map" + LINK_FLAGS "-mthumb -mabi=aapcs -L ${NRF5_SDK_PATH}/modules/nrfx/mdk -T${NRF5_LINKER_SCRIPT_MCUBOOT} -mcpu=cortex-m4 -mfloat-abi=hard -mfpu=fpv4-sp-d16 -Wl,--gc-sections -Wl,--print-memory-usage --specs=nano.specs -lc -lnosys -lm -Wl,-Map=${EXECUTABLE_MCUBOOT_FILE_NAME}.map" ) add_custom_command(TARGET ${EXECUTABLE_MCUBOOT_NAME} @@ -906,7 +906,7 @@ target_compile_options(${EXECUTABLE_RECOVERY_NAME} PUBLIC set_target_properties(${EXECUTABLE_RECOVERY_NAME} PROPERTIES SUFFIX ".out" - LINK_FLAGS "-mthumb -mabi=aapcs -L ${NRF5_SDK_PATH}/modules/nrfx/mdk -T${NRF5_LINKER_SCRIPT} -mcpu=cortex-m4 -mfloat-abi=hard -mfpu=fpv4-sp-d16 -Wl,--gc-sections --specs=nano.specs -lc -lnosys -lm -Wl,-Map=${EXECUTABLE_RECOVERY_FILE_NAME}.map" + LINK_FLAGS "-mthumb -mabi=aapcs -L ${NRF5_SDK_PATH}/modules/nrfx/mdk -T${NRF5_LINKER_SCRIPT} -mcpu=cortex-m4 -mfloat-abi=hard -mfpu=fpv4-sp-d16 -Wl,--gc-sections -Wl,--print-memory-usage --specs=nano.specs -lc -lnosys -lm -Wl,-Map=${EXECUTABLE_RECOVERY_FILE_NAME}.map" ) add_custom_command(TARGET ${EXECUTABLE_RECOVERY_NAME} @@ -936,7 +936,7 @@ target_compile_options(${EXECUTABLE_RECOVERY_MCUBOOT_NAME} PUBLIC set_target_properties(${EXECUTABLE_RECOVERY_MCUBOOT_NAME} PROPERTIES SUFFIX ".out" - LINK_FLAGS "-mthumb -mabi=aapcs -L ${NRF5_SDK_PATH}/modules/nrfx/mdk -T${NRF5_LINKER_SCRIPT} -mcpu=cortex-m4 -mfloat-abi=hard -mfpu=fpv4-sp-d16 -Wl,--gc-sections --specs=nano.specs -lc -lnosys -lm -Wl,-Map=${EXECUTABLE_GRAPHICS_FILE_NAME}.map" + LINK_FLAGS "-mthumb -mabi=aapcs -L ${NRF5_SDK_PATH}/modules/nrfx/mdk -T${NRF5_LINKER_SCRIPT} -mcpu=cortex-m4 -mfloat-abi=hard -mfpu=fpv4-sp-d16 -Wl,--gc-sections -Wl,--print-memory-usage --specs=nano.specs -lc -lnosys -lm -Wl,-Map=${EXECUTABLE_GRAPHICS_FILE_NAME}.map" ) add_custom_command(TARGET ${EXECUTABLE_RECOVERY_MCUBOOT_NAME} @@ -977,7 +977,7 @@ add_dependencies(${EXECUTABLE_RECOVERYLOADER_NAME} ${EXECUTABLE_RECOVERY_MCUBOOT set_target_properties(${EXECUTABLE_RECOVERYLOADER_NAME} PROPERTIES SUFFIX ".out" - LINK_FLAGS "-mthumb -mabi=aapcs -L ${NRF5_SDK_PATH}/modules/nrfx/mdk -T${NRF5_LINKER_SCRIPT} -mcpu=cortex-m4 -mfloat-abi=hard -mfpu=fpv4-sp-d16 -Wl,--gc-sections --specs=nano.specs -lc -lnosys -lm -Wl,-Map=${EXECUTABLE_RECOVERYLOADER_FILE_NAME}.map" + LINK_FLAGS "-mthumb -mabi=aapcs -L ${NRF5_SDK_PATH}/modules/nrfx/mdk -T${NRF5_LINKER_SCRIPT} -mcpu=cortex-m4 -mfloat-abi=hard -mfpu=fpv4-sp-d16 -Wl,--gc-sections -Wl,--print-memory-usage --specs=nano.specs -lc -lnosys -lm -Wl,-Map=${EXECUTABLE_RECOVERYLOADER_FILE_NAME}.map" ) add_custom_command(TARGET ${EXECUTABLE_RECOVERYLOADER_NAME} @@ -1010,7 +1010,7 @@ add_dependencies(${EXECUTABLE_MCUBOOT_RECOVERYLOADER_NAME} ${EXECUTABLE_RECOVERY set_target_properties(${EXECUTABLE_MCUBOOT_RECOVERYLOADER_NAME} PROPERTIES SUFFIX ".out" - LINK_FLAGS "-mthumb -mabi=aapcs -std=gnu++98 -std=c99 -L ${NRF5_SDK_PATH}/modules/nrfx/mdk -T${NRF5_LINKER_SCRIPT_MCUBOOT} -mcpu=cortex-m4 -mfloat-abi=hard -mfpu=fpv4-sp-d16 -Wl,--gc-sections --specs=nano.specs -lc -lnosys -lm -Wl,-Map=${EXECUTABLE_MCUBOOT_RECOVERYLOADER_FILE_NAME}.map" + LINK_FLAGS "-mthumb -mabi=aapcs -std=gnu++98 -std=c99 -L ${NRF5_SDK_PATH}/modules/nrfx/mdk -T${NRF5_LINKER_SCRIPT_MCUBOOT} -mcpu=cortex-m4 -mfloat-abi=hard -mfpu=fpv4-sp-d16 -Wl,--gc-sections -Wl,--print-memory-usage --specs=nano.specs -lc -lnosys -lm -Wl,-Map=${EXECUTABLE_MCUBOOT_RECOVERYLOADER_FILE_NAME}.map" ) add_custom_command(TARGET ${EXECUTABLE_MCUBOOT_RECOVERYLOADER_NAME} From 40392d7b9199c87de9784cacb1dee5476e5a5b6f Mon Sep 17 00:00:00 2001 From: Riku Isokoski Date: Wed, 18 Aug 2021 21:40:27 +0300 Subject: [PATCH 131/173] Use highest frequency and move mutex creation to Init --- src/drivers/TwiMaster.cpp | 5 ++++- src/main.cpp | 4 ++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/drivers/TwiMaster.cpp b/src/drivers/TwiMaster.cpp index f17d716831..76009278e2 100644 --- a/src/drivers/TwiMaster.cpp +++ b/src/drivers/TwiMaster.cpp @@ -10,7 +10,6 @@ using namespace Pinetime::Drivers; TwiMaster::TwiMaster(NRF_TWIM_Type* module, uint32_t frequency, uint8_t pinSda, uint8_t pinScl) : module {module}, frequency {frequency}, pinSda {pinSda}, pinScl {pinScl} { - mutex = xSemaphoreCreateBinary(); } void TwiMaster::ConfigurePins() const { @@ -30,6 +29,10 @@ void TwiMaster::ConfigurePins() const { } void TwiMaster::Init() { + if (mutex == nullptr) { + mutex = xSemaphoreCreateBinary(); + } + ConfigurePins(); twiBaseAddress = module; diff --git a/src/main.cpp b/src/main.cpp index 4e94ab192c..524035fc14 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -81,8 +81,8 @@ Pinetime::Drivers::SpiNorFlash spiNorFlash {flashSpi}; // The TWI device should work @ up to 400Khz but there is a HW bug which prevent it from // respecting correct timings. According to erratas heet, this magic value makes it run // at ~390Khz with correct timings. -//static constexpr uint32_t MaxTwiFrequencyWithoutHardwareBug {0x06200000}; -Pinetime::Drivers::TwiMaster twiMaster {NRF_TWIM1, TWI_FREQUENCY_FREQUENCY_K250, pinTwiSda, pinTwiScl}; +static constexpr uint32_t MaxTwiFrequencyWithoutHardwareBug {0x06200000}; +Pinetime::Drivers::TwiMaster twiMaster {NRF_TWIM1, MaxTwiFrequencyWithoutHardwareBug, pinTwiSda, pinTwiScl}; Pinetime::Drivers::Cst816S touchPanel {twiMaster, touchPanelTwiAddress}; #ifdef PINETIME_IS_RECOVERY static constexpr bool isFactory = true; From 16502b788f19458b472de74173d92f01aba30b5f Mon Sep 17 00:00:00 2001 From: Tim Keller Date: Thu, 19 Aug 2021 00:14:42 +0000 Subject: [PATCH 132/173] Add MCUBOOT linker changes use better linker constant names --- gcc_nrf52-mcuboot.ld | 12 +++++++++++- gcc_nrf52.ld | 9 +++++---- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/gcc_nrf52-mcuboot.ld b/gcc_nrf52-mcuboot.ld index 0746f4911f..b1413f16c2 100644 --- a/gcc_nrf52-mcuboot.ld +++ b/gcc_nrf52-mcuboot.ld @@ -3,14 +3,24 @@ SEARCH_DIR(.) GROUP(-lgcc -lc -lnosys) +NOINIT_SIZE = 0x100; +RAM_SIZE = 64K; + MEMORY { FLASH (rx) : ORIGIN = 0x08020, LENGTH = 0x78000 - RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x10000 + RAM (rwx) : ORIGIN = 0x20000000, LENGTH = RAM_SIZE - NOINIT_SIZE + NOINIT (rwx): ORIGIN = ORIGIN(RAM) + LENGTH(RAM), LENGTH = NOINIT_SIZE } SECTIONS { + noinit (NOLOAD): + { + PROVIDE(__start_noinit_data = .); + KEEP(*(.noinit)) + PROVIDE(__stop_noinit_data = .); + } >NOINIT } SECTIONS diff --git a/gcc_nrf52.ld b/gcc_nrf52.ld index b40dc06b33..705c3d3b9c 100644 --- a/gcc_nrf52.ld +++ b/gcc_nrf52.ld @@ -3,13 +3,14 @@ SEARCH_DIR(.) GROUP(-lgcc -lc -lnosys) -NO_INIT_SIZE = 0x100; -RAM_MAX = 64K; +NOINIT_SIZE = 0x100; +RAM_SIZE = 64K; + MEMORY { FLASH (rx) : ORIGIN = 0x00000, LENGTH = 0x78000 - RAM (rwx) : ORIGIN = 0x20000000, LENGTH = RAM_MAX - NO_INIT_SIZE - NOINIT (rwx): ORIGIN = ORIGIN(RAM) + LENGTH(RAM), LENGTH = NO_INIT_SIZE + RAM (rwx) : ORIGIN = 0x20000000, LENGTH = RAM_SIZE - NOINIT_SIZE + NOINIT (rwx): ORIGIN = ORIGIN(RAM) + LENGTH(RAM), LENGTH = NOINIT_SIZE } SECTIONS From 2dd7b8ba2c0c8f756eddd9c86a40497f1b7f7537 Mon Sep 17 00:00:00 2001 From: Tim Keller Date: Thu, 19 Aug 2021 00:44:22 +0000 Subject: [PATCH 133/173] Add clearing of noinit segment on bad word Code readability cleanup --- src/components/datetime/DateTimeController.cpp | 2 +- src/components/datetime/DateTimeController.h | 2 +- src/main.cpp | 15 ++++++++++----- 3 files changed, 12 insertions(+), 7 deletions(-) diff --git a/src/components/datetime/DateTimeController.cpp b/src/components/datetime/DateTimeController.cpp index 77c5be4e4c..49953388c8 100644 --- a/src/components/datetime/DateTimeController.cpp +++ b/src/components/datetime/DateTimeController.cpp @@ -76,7 +76,7 @@ void DateTime::UpdateTime(uint32_t systickCounter) { } else if (hour != 0) { isMidnightAlreadyNotified = false; } - BackUpTime = currentDateTime; + NoInit_BackUpTime = currentDateTime; } const char* DateTime::MonthShortToString() { diff --git a/src/components/datetime/DateTimeController.h b/src/components/datetime/DateTimeController.h index ed7b0861ca..a20f71c1b3 100644 --- a/src/components/datetime/DateTimeController.h +++ b/src/components/datetime/DateTimeController.h @@ -2,7 +2,7 @@ #include #include -extern std::chrono::time_point BackUpTime; +extern std::chrono::time_point NoInit_BackUpTime; namespace Pinetime { namespace System { diff --git a/src/main.cpp b/src/main.cpp index 9c384a8b6e..d5da4283bf 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -160,8 +160,12 @@ Pinetime::System::SystemTask systemTask(spi, heartRateApp, fs); -uint32_t MAGIC_RAM __attribute__((section(".noinit"))); -std::chrono::time_point BackUpTime __attribute__((section(".noinit"))); +extern uint32_t __start_noinit_data; +extern uint32_t __stop_noinit_data; +static constexpr uint32_t NoInit_MagicValue = 0xDEADBEEF; +uint32_t NoInit_MagicWord __attribute__((section(".noinit"))); +std::chrono::time_point NoInit_BackUpTime __attribute__((section(".noinit"))); + void nrfx_gpiote_evt_handler(nrfx_gpiote_pin_t pin, nrf_gpiote_polarity_t action) { if (pin == pinTouchIrq) { @@ -324,10 +328,11 @@ int main(void) { Pinetime::BootloaderVersion::SetVersion(NRF_TIMER2->CC[0]); // Check Magic Ram and reset lost variables - if (MAGIC_RAM == 0xDEADBEEF) { - dateTimeController.SetCurrentTime(BackUpTime); + if (NoInit_MagicWord == NoInit_MagicValue) { + dateTimeController.SetCurrentTime(NoInit_BackUpTime); } else { - MAGIC_RAM = 0xDEADBEEF; + memset(&__start_noinit_data,0,(uintptr_t)&__stop_noinit_data-(uintptr_t)&__start_noinit_data); + NoInit_MagicWord = NoInit_MagicValue; } lvgl.Init(); From 4f6d7e2c6386ed584a54a513c811cb77b5d320e1 Mon Sep 17 00:00:00 2001 From: Tim Keller Date: Thu, 19 Aug 2021 00:51:12 +0000 Subject: [PATCH 134/173] Move Backup to the system task. --- src/components/datetime/DateTimeController.cpp | 1 - src/components/datetime/DateTimeController.h | 1 - src/systemtask/SystemTask.cpp | 1 + src/systemtask/SystemTask.h | 1 + 4 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/datetime/DateTimeController.cpp b/src/components/datetime/DateTimeController.cpp index 49953388c8..6e426825c8 100644 --- a/src/components/datetime/DateTimeController.cpp +++ b/src/components/datetime/DateTimeController.cpp @@ -76,7 +76,6 @@ void DateTime::UpdateTime(uint32_t systickCounter) { } else if (hour != 0) { isMidnightAlreadyNotified = false; } - NoInit_BackUpTime = currentDateTime; } const char* DateTime::MonthShortToString() { diff --git a/src/components/datetime/DateTimeController.h b/src/components/datetime/DateTimeController.h index a20f71c1b3..061c303f99 100644 --- a/src/components/datetime/DateTimeController.h +++ b/src/components/datetime/DateTimeController.h @@ -2,7 +2,6 @@ #include #include -extern std::chrono::time_point NoInit_BackUpTime; namespace Pinetime { namespace System { diff --git a/src/systemtask/SystemTask.cpp b/src/systemtask/SystemTask.cpp index 3553f449fd..add591e7ad 100644 --- a/src/systemtask/SystemTask.cpp +++ b/src/systemtask/SystemTask.cpp @@ -353,6 +353,7 @@ void SystemTask::Work() { monitor.Process(); uint32_t systick_counter = nrf_rtc_counter_get(portNRF_RTC_REG); dateTimeController.UpdateTime(systick_counter); + NoInit_BackUpTime = dateTimeController.CurrentDateTime(); if (!nrf_gpio_pin_read(pinButton)) watchdog.Kick(); } diff --git a/src/systemtask/SystemTask.h b/src/systemtask/SystemTask.h index ba4342987b..9293fd7898 100644 --- a/src/systemtask/SystemTask.h +++ b/src/systemtask/SystemTask.h @@ -30,6 +30,7 @@ #include "drivers/Watchdog.h" #include "Messages.h" +extern std::chrono::time_point NoInit_BackUpTime; namespace Pinetime { namespace Drivers { class Cst816S; From c9dedfd402c67078ce53ad661889be841633f468 Mon Sep 17 00:00:00 2001 From: Tim Keller Date: Thu, 19 Aug 2021 00:51:42 +0000 Subject: [PATCH 135/173] Add some VSCODE stuff to gitignore... Allow settings to stop naggin me that it has added assosiation types --- .gitignore | 6 ++++- .vscode/settings.json | 52 ++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 56 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index 6de76a9e20..39fb672bc8 100644 --- a/.gitignore +++ b/.gitignore @@ -38,4 +38,8 @@ Testing/Temporary/ **/.DS_Store # Windows -**/thumbs.db \ No newline at end of file +**/thumbs.db + +#VSCODE +.vscode/.cortex-debug.registers.state.json +.vscode/.cortex-debug.peripherals.state.json diff --git a/.vscode/settings.json b/.vscode/settings.json index 8f0e63f460..f1cc3a8176 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -5,5 +5,55 @@ "-DNRF5_SDK_PATH=${env:NRF5_SDK_PATH}", ], "cmake.generator": "Unix Makefiles", - "clang-tidy.buildPath": "build/compile_commands.json" + "clang-tidy.buildPath": "build/compile_commands.json", + "files.associations": { + "array": "cpp", + "atomic": "cpp", + "bit": "cpp", + "*.tcc": "cpp", + "bitset": "cpp", + "cctype": "cpp", + "chrono": "cpp", + "clocale": "cpp", + "cmath": "cpp", + "cstdarg": "cpp", + "cstddef": "cpp", + "cstdint": "cpp", + "cstdio": "cpp", + "cstdlib": "cpp", + "ctime": "cpp", + "cwchar": "cpp", + "cwctype": "cpp", + "deque": "cpp", + "unordered_map": "cpp", + "vector": "cpp", + "exception": "cpp", + "algorithm": "cpp", + "functional": "cpp", + "iterator": "cpp", + "memory": "cpp", + "memory_resource": "cpp", + "numeric": "cpp", + "optional": "cpp", + "random": "cpp", + "ratio": "cpp", + "string": "cpp", + "string_view": "cpp", + "system_error": "cpp", + "tuple": "cpp", + "type_traits": "cpp", + "utility": "cpp", + "fstream": "cpp", + "initializer_list": "cpp", + "iosfwd": "cpp", + "istream": "cpp", + "limits": "cpp", + "new": "cpp", + "ostream": "cpp", + "sstream": "cpp", + "stdexcept": "cpp", + "streambuf": "cpp", + "cinttypes": "cpp", + "typeinfo": "cpp" + } } From 2b30ff4fc6a1835bdc5a94f8754cfd366885c4c0 Mon Sep 17 00:00:00 2001 From: Riku Isokoski Date: Thu, 19 Aug 2021 11:12:34 +0300 Subject: [PATCH 136/173] Remove unused variables --- src/displayapp/DisplayApp.cpp | 3 --- src/displayapp/screens/Notifications.cpp | 2 +- src/displayapp/screens/Notifications.h | 8 -------- src/main.cpp | 7 +------ 4 files changed, 2 insertions(+), 18 deletions(-) diff --git a/src/displayapp/DisplayApp.cpp b/src/displayapp/DisplayApp.cpp index 5150162a93..e79fa61a9f 100644 --- a/src/displayapp/DisplayApp.cpp +++ b/src/displayapp/DisplayApp.cpp @@ -136,9 +136,6 @@ void DisplayApp::InitHw() { brightnessController.Set(settingsController.GetBrightness()); } -uint32_t acc = 0; -uint32_t count = 0; -bool toggle = true; void DisplayApp::Refresh() { TickType_t queueTimeout; TickType_t delta; diff --git a/src/displayapp/screens/Notifications.cpp b/src/displayapp/screens/Notifications.cpp index c061c1469d..c95edb451e 100644 --- a/src/displayapp/screens/Notifications.cpp +++ b/src/displayapp/screens/Notifications.cpp @@ -150,7 +150,7 @@ Notifications::NotificationItem::NotificationItem(const char* title, uint8_t notifNb, Modes mode, Pinetime::Controllers::AlertNotificationService& alertNotificationService) - : notifNr {notifNr}, notifNb {notifNb}, mode {mode}, alertNotificationService {alertNotificationService} { + : mode {mode}, alertNotificationService {alertNotificationService} { lv_obj_t* container1 = lv_cont_create(lv_scr_act(), NULL); lv_obj_set_style_local_bg_color(container1, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x222222)); diff --git a/src/displayapp/screens/Notifications.h b/src/displayapp/screens/Notifications.h index a02d9b465a..ff9993435d 100644 --- a/src/displayapp/screens/Notifications.h +++ b/src/displayapp/screens/Notifications.h @@ -43,21 +43,13 @@ namespace Pinetime { void OnCallButtonEvent(lv_obj_t*, lv_event_t event); private: - uint8_t notifNr = 0; - uint8_t notifNb = 0; - char pageText[4]; - lv_obj_t* container1; - lv_obj_t* t1; - lv_obj_t* l1; - lv_obj_t* l2; lv_obj_t* bt_accept; lv_obj_t* bt_mute; lv_obj_t* bt_reject; lv_obj_t* label_accept; lv_obj_t* label_mute; lv_obj_t* label_reject; - lv_obj_t* bottomPlaceholder; Modes mode; Pinetime::Controllers::AlertNotificationService& alertNotificationService; bool running = true; diff --git a/src/main.cpp b/src/main.cpp index d301be6711..d420fcdf8b 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -87,16 +87,13 @@ Pinetime::Drivers::TwiMaster twiMaster {Pinetime::Drivers::TwiMaster::Modules::T Pinetime::Drivers::TwiMaster::Parameters {MaxTwiFrequencyWithoutHardwareBug, pinTwiSda, pinTwiScl}}; Pinetime::Drivers::Cst816S touchPanel {twiMaster, touchPanelTwiAddress}; #ifdef PINETIME_IS_RECOVERY -static constexpr bool isFactory = true; #include "displayapp/DummyLittleVgl.h" #include "displayapp/DisplayAppRecovery.h" -Pinetime::Components::LittleVgl lvgl {lcd, touchPanel}; #else -static constexpr bool isFactory = false; #include "displayapp/LittleVgl.h" #include "displayapp/DisplayApp.h" -Pinetime::Components::LittleVgl lvgl {lcd, touchPanel}; #endif +Pinetime::Components::LittleVgl lvgl {lcd, touchPanel}; Pinetime::Drivers::Bma421 motionSensor {twiMaster, motionSensorTwiAddress}; Pinetime::Drivers::Hrs3300 heartRateSensor {twiMaster, heartRateSensorTwiAddress}; @@ -105,8 +102,6 @@ TimerHandle_t debounceTimer; TimerHandle_t debounceChargeTimer; Pinetime::Controllers::Battery batteryController; Pinetime::Controllers::Ble bleController; -void ble_manager_set_ble_connection_callback(void (*connection)()); -void ble_manager_set_ble_disconnection_callback(void (*disconnection)()); static constexpr uint8_t pinTouchIrq = 28; static constexpr uint8_t pinPowerPresentIrq = 19; From 51c5257548efe678ec8e18d8cdea2476672f1238 Mon Sep 17 00:00:00 2001 From: hubmartin Date: Sun, 22 Aug 2021 22:17:57 +0200 Subject: [PATCH 137/173] Update startup SCL toggling pinmap definitions --- src/main.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 7131c680b8..4d16a6d5e5 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -45,6 +45,7 @@ #include "drivers/Cst816s.h" #include "drivers/PinMap.h" #include "systemtask/SystemTask.h" +#include "drivers/PinMap.h" #if NRF_LOG_ENABLED #include "logging/NrfLogger.h" @@ -293,18 +294,18 @@ int main(void) { nrf_drv_clock_init(); // Unblock i2c? - nrf_gpio_cfg(pinTwiScl, + nrf_gpio_cfg(Pinetime::PinMap::TwiScl, NRF_GPIO_PIN_DIR_OUTPUT, NRF_GPIO_PIN_INPUT_DISCONNECT, NRF_GPIO_PIN_NOPULL, NRF_GPIO_PIN_S0D1, NRF_GPIO_PIN_NOSENSE); - nrf_gpio_pin_set(pinTwiScl); + nrf_gpio_pin_set(Pinetime::PinMap::TwiScl); for (uint8_t i = 0; i < 16; i++) { - nrf_gpio_pin_toggle(pinTwiScl); + nrf_gpio_pin_toggle(Pinetime::PinMap::TwiScl); nrf_delay_us(5); } - nrf_gpio_cfg_default(pinTwiScl); + nrf_gpio_cfg_default(Pinetime::PinMap::TwiScl); debounceTimer = xTimerCreate("debounceTimer", 200, pdFALSE, (void*) 0, DebounceTimerCallback); debounceChargeTimer = xTimerCreate("debounceTimerCharge", 200, pdFALSE, (void*) 0, DebounceTimerChargeCallback); From 110c82c225c22685a3f0b7d1d75566a929516637 Mon Sep 17 00:00:00 2001 From: Tim Keller Date: Mon, 23 Aug 2021 20:13:26 +0000 Subject: [PATCH 138/173] Move noinit to after BSS segment, Now dynamically allocates noinit area size stores it after the bss before the heap and stack. --- gcc_nrf52-mcuboot.ld | 14 +++++--------- gcc_nrf52.ld | 15 ++++++--------- 2 files changed, 11 insertions(+), 18 deletions(-) diff --git a/gcc_nrf52-mcuboot.ld b/gcc_nrf52-mcuboot.ld index b1413f16c2..81b318c56b 100644 --- a/gcc_nrf52-mcuboot.ld +++ b/gcc_nrf52-mcuboot.ld @@ -3,25 +3,21 @@ SEARCH_DIR(.) GROUP(-lgcc -lc -lnosys) -NOINIT_SIZE = 0x100; -RAM_SIZE = 64K; - MEMORY { FLASH (rx) : ORIGIN = 0x08020, LENGTH = 0x78000 - RAM (rwx) : ORIGIN = 0x20000000, LENGTH = RAM_SIZE - NOINIT_SIZE - NOINIT (rwx): ORIGIN = ORIGIN(RAM) + LENGTH(RAM), LENGTH = NOINIT_SIZE + RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 64K } SECTIONS { - noinit (NOLOAD): + .noinit(NOLOAD): { PROVIDE(__start_noinit_data = .); - KEEP(*(.noinit)) + *(.noinit) PROVIDE(__stop_noinit_data = .); - } >NOINIT -} + } > RAM +} INSERT AFTER .bss SECTIONS { diff --git a/gcc_nrf52.ld b/gcc_nrf52.ld index 705c3d3b9c..f9bc5b681f 100644 --- a/gcc_nrf52.ld +++ b/gcc_nrf52.ld @@ -3,25 +3,21 @@ SEARCH_DIR(.) GROUP(-lgcc -lc -lnosys) -NOINIT_SIZE = 0x100; -RAM_SIZE = 64K; - MEMORY { FLASH (rx) : ORIGIN = 0x00000, LENGTH = 0x78000 - RAM (rwx) : ORIGIN = 0x20000000, LENGTH = RAM_SIZE - NOINIT_SIZE - NOINIT (rwx): ORIGIN = ORIGIN(RAM) + LENGTH(RAM), LENGTH = NOINIT_SIZE + RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 64K } SECTIONS { - noinit (NOLOAD): + .noinit(NOLOAD): { PROVIDE(__start_noinit_data = .); - KEEP(*(.noinit)) + *(.noinit) PROVIDE(__stop_noinit_data = .); - } >NOINIT -} + } > RAM +} INSERT AFTER .bss SECTIONS { @@ -54,6 +50,7 @@ SECTIONS PROVIDE(__stop_log_filter_data = .); } > RAM + } INSERT AFTER .data; SECTIONS From d7293a44dfa6de8cb6ad25c259d33ca07bde3426 Mon Sep 17 00:00:00 2001 From: Fabien Benetou Date: Thu, 26 Aug 2021 15:11:20 +0200 Subject: [PATCH 139/173] Infini-iOS --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 6549ece98d..86f1b9dda0 100644 --- a/README.md +++ b/README.md @@ -70,6 +70,7 @@ As of now, here is the list of achievements of this project: * [Amazfish](https://openrepos.net/content/piggz/amazfish) (on SailfishOS and Linux) * [Siglo](https://github.com/alexr4535/siglo) (on Linux) * **[Experimental]** [WebBLEWatch](https://hubmartin.github.io/WebBLEWatch/) Synchronize time directly from your web browser. [video](https://youtu.be/IakiuhVDdrY) + * **[Experimental]** [Infini-iOS](https://github.com/xan-m/Infini-iOS) (on iOS) - OTA (Over-the-air) update via BLE - [Bootloader](https://github.com/JF002/pinetime-mcuboot-bootloader) based on [MCUBoot](https://juullabs-oss.github.io/mcuboot/) From b45d7c372d960051d048e4123335af6dacf88297 Mon Sep 17 00:00:00 2001 From: Colin Kinloch Date: Thu, 26 Aug 2021 19:42:02 +0100 Subject: [PATCH 140/173] Correct change test for wake up mode setting --- src/components/settings/Settings.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/settings/Settings.h b/src/components/settings/Settings.h index 93d6d21760..0ff1cb8acc 100644 --- a/src/components/settings/Settings.h +++ b/src/components/settings/Settings.h @@ -78,7 +78,7 @@ namespace Pinetime { }; void setWakeUpMode(WakeUpMode wakeUp, bool enabled) { - if (!isWakeUpModeOn(wakeUp)) { + if (enabled != isWakeUpModeOn(wakeUp)) { settingsChanged = true; } settings.wakeUpMode.set(static_cast(wakeUp), enabled); From 0313277ae604bb46987cdfbef123b7edfeb8ab9e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-Fran=C3=A7ois=20Milants?= Date: Sat, 28 Aug 2021 15:10:14 +0200 Subject: [PATCH 141/173] Fix touchinfo typo in SystemTask. --- src/systemtask/SystemTask.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/systemtask/SystemTask.cpp b/src/systemtask/SystemTask.cpp index 08e21999a0..03bf670654 100644 --- a/src/systemtask/SystemTask.cpp +++ b/src/systemtask/SystemTask.cpp @@ -241,7 +241,7 @@ void SystemTask::Work() { break; case Messages::TouchWakeUp: { auto touchInfo = touchPanel.GetTouchInfo(); - if (touchInfo.isTouch and ((touchInfo.gesture == Pinetime::Drivers::Cst816S::Gestures::DoubleTap and + if (touchInfo.touching and ((touchInfo.gesture == Pinetime::Drivers::Cst816S::Gestures::DoubleTap and settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::DoubleTap)) or (touchInfo.gesture == Pinetime::Drivers::Cst816S::Gestures::SingleTap and settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::SingleTap)))) { From fab49f8557ef8ff38fe4f607e33b18fb5a1aeb9a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-Fran=C3=A7ois=20Milants?= Date: Sat, 28 Aug 2021 15:23:13 +0200 Subject: [PATCH 142/173] Fix recovery firmware since last changes in DisplayApp. --- src/displayapp/DisplayAppRecovery.cpp | 4 +++- src/displayapp/DisplayAppRecovery.h | 6 +++++- src/displayapp/DummyLittleVgl.h | 3 +++ 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/displayapp/DisplayAppRecovery.cpp b/src/displayapp/DisplayAppRecovery.cpp index fd517b11a0..17612ef057 100644 --- a/src/displayapp/DisplayAppRecovery.cpp +++ b/src/displayapp/DisplayAppRecovery.cpp @@ -3,6 +3,7 @@ #include #include #include +#include #include "displayapp/icons/infinitime/infinitime-nb.c" using namespace Pinetime::Applications; @@ -19,7 +20,8 @@ DisplayApp::DisplayApp(Drivers::St7789& lcd, Controllers::Settings& settingsController, Pinetime::Controllers::MotorController& motorController, Pinetime::Controllers::MotionController& motionController, - Pinetime::Controllers::TimerController& timerController) + Pinetime::Controllers::TimerController& timerController, + Pinetime::Controllers::TouchHandler& touchHandler) : lcd {lcd}, bleController {bleController} { } diff --git a/src/displayapp/DisplayAppRecovery.h b/src/displayapp/DisplayAppRecovery.h index 638c0071da..8b2bc7f515 100644 --- a/src/displayapp/DisplayAppRecovery.h +++ b/src/displayapp/DisplayAppRecovery.h @@ -29,6 +29,9 @@ namespace Pinetime { namespace System { class SystemTask; }; + namespace Controllers { + class TouchHandler; + } namespace Applications { class DisplayApp { public: @@ -44,7 +47,8 @@ namespace Pinetime { Controllers::Settings& settingsController, Pinetime::Controllers::MotorController& motorController, Pinetime::Controllers::MotionController& motionController, - Pinetime::Controllers::TimerController& timerController); + Pinetime::Controllers::TimerController& timerController, + Pinetime::Controllers::TouchHandler& touchHandler); void Start(); void PushMessage(Pinetime::Applications::Display::Messages msg); void Register(Pinetime::System::SystemTask* systemTask); diff --git a/src/displayapp/DummyLittleVgl.h b/src/displayapp/DummyLittleVgl.h index 016165b850..1db51343b0 100644 --- a/src/displayapp/DummyLittleVgl.h +++ b/src/displayapp/DummyLittleVgl.h @@ -32,6 +32,9 @@ namespace Pinetime { } void SetNewTapEvent(uint16_t x, uint16_t y) { } + void SetNewTouchPoint(uint16_t x, uint16_t y, bool contact) { + + } }; } } From 31bc47d1cb397f5de0275d0d95aac7ca29cc7392 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-Fran=C3=A7ois=20Milants?= Date: Sat, 28 Aug 2021 21:02:11 +0200 Subject: [PATCH 143/173] Settings : use enums instead of ints to store colors. Group all PTS settings into a struct. PTS/SettingsPTS : Convert to/from LVGL color and Settings::Color, add functions to reduce code duplication. Adapt SettingPineTimeStyle with the last Screen Interface --- src/CMakeLists.txt | 2 + src/components/settings/Settings.h | 46 +++--- src/displayapp/Colors.cpp | 27 ++++ src/displayapp/Colors.h | 10 ++ src/displayapp/screens/PineTimeStyle.cpp | 11 +- src/displayapp/screens/PineTimeStyle.h | 5 - .../screens/settings/SettingPineTimeStyle.cpp | 147 +++++++++--------- .../screens/settings/SettingPineTimeStyle.h | 12 +- 8 files changed, 144 insertions(+), 116 deletions(-) create mode 100644 src/displayapp/Colors.cpp create mode 100644 src/displayapp/Colors.h diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 69c19367cd..a7242903b8 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -418,6 +418,7 @@ list(APPEND SOURCE_FILES displayapp/screens/BatteryInfo.cpp displayapp/screens/Steps.cpp displayapp/screens/Timer.cpp + displayapp/Colors.cpp ## Settings displayapp/screens/settings/QuickSettings.cpp @@ -611,6 +612,7 @@ set(INCLUDE_FILES displayapp/screens/Metronome.h displayapp/screens/Motion.h displayapp/screens/Timer.h + displayapp/Colors.h drivers/St7789.h drivers/SpiNorFlash.h drivers/SpiMaster.h diff --git a/src/components/settings/Settings.h b/src/components/settings/Settings.h index 40cafe9a78..a294ab7840 100644 --- a/src/components/settings/Settings.h +++ b/src/components/settings/Settings.h @@ -17,6 +17,14 @@ namespace Pinetime { DoubleTap = 1, RaiseWrist = 2, }; + enum class Colors : uint8_t { + White, Silver, Gray, Black, Red, Maroon, Yellow, Olive, Lime, Green, Cyan, Teal, Blue, Navy, Magenta, Purple, Orange + }; + struct PineTimeStyle { + Colors ColorTime = Colors::Teal; + Colors ColorBar = Colors::Teal; + Colors ColorBG = Colors::Black; + }; Settings(Pinetime::Controllers::FS& fs); @@ -33,37 +41,38 @@ namespace Pinetime { return settings.clockFace; }; - void SetPTSColorTime(uint8_t colorTime) { - if (colorTime != settings.PTSColorTime) + void SetPTSColorTime(Colors colorTime) { + if (colorTime != settings.PTS.ColorTime) settingsChanged = true; - settings.PTSColorTime = colorTime; + settings.PTS.ColorTime = colorTime; }; - uint8_t GetPTSColorTime() const { - return settings.PTSColorTime; + Colors GetPTSColorTime() const { + return settings.PTS.ColorTime; }; - void SetPTSColorBar(uint8_t colorBar) { - if (colorBar != settings.PTSColorBar) + void SetPTSColorBar(Colors colorBar) { + if (colorBar != settings.PTS.ColorBar) settingsChanged = true; - settings.PTSColorBar = colorBar; + settings.PTS.ColorBar = colorBar; }; - uint8_t GetPTSColorBar() const { - return settings.PTSColorBar; + Colors GetPTSColorBar() const { + return settings.PTS.ColorBar; }; - void SetPTSColorBG(uint8_t colorBG) { - if (colorBG != settings.PTSColorBG) + void SetPTSColorBG(Colors colorBG) { + if (colorBG != settings.PTS.ColorBG) settingsChanged = true; - settings.PTSColorBG = colorBG; + settings.PTS.ColorBG = colorBG; }; - uint8_t GetPTSColorBG() const { - return settings.PTSColorBG; + Colors GetPTSColorBG() const { + return settings.PTS.ColorBG; }; void SetAppMenu(uint8_t menu) { appMenu = menu; }; - uint8_t GetAppMenu() { + + uint8_t GetAppMenu() const { return appMenu; }; @@ -156,7 +165,6 @@ namespace Pinetime { static constexpr uint32_t settingsVersion = 0x0002; struct SettingsData { - uint32_t version = settingsVersion; uint32_t stepsGoal = 10000; uint32_t screenTimeOut = 15000; @@ -166,9 +174,7 @@ namespace Pinetime { uint8_t clockFace = 0; - uint8_t PTSColorTime = 11; - uint8_t PTSColorBar = 11; - uint8_t PTSColorBG = 3; + PineTimeStyle PTS; std::bitset<3> wakeUpMode {0}; diff --git a/src/displayapp/Colors.cpp b/src/displayapp/Colors.cpp new file mode 100644 index 0000000000..f45f072257 --- /dev/null +++ b/src/displayapp/Colors.cpp @@ -0,0 +1,27 @@ +#include "Colors.h" + +using namespace Pinetime::Applications; +using namespace Pinetime::Controllers; + +lv_color_t Pinetime::Applications::Convert(Pinetime::Controllers::Settings::Colors color) { + switch (color) { + case Pinetime::Controllers::Settings::Colors::White: return LV_COLOR_WHITE; + case Pinetime::Controllers::Settings::Colors::Silver: return LV_COLOR_SILVER; + case Pinetime::Controllers::Settings::Colors::Gray: return LV_COLOR_GRAY; + case Pinetime::Controllers::Settings::Colors::Black: return LV_COLOR_BLACK; + case Pinetime::Controllers::Settings::Colors::Red: return LV_COLOR_RED; + case Pinetime::Controllers::Settings::Colors::Maroon: return LV_COLOR_MAROON; + case Pinetime::Controllers::Settings::Colors::Yellow: return LV_COLOR_YELLOW; + case Pinetime::Controllers::Settings::Colors::Olive: return LV_COLOR_OLIVE; + case Pinetime::Controllers::Settings::Colors::Lime: return LV_COLOR_LIME; + case Pinetime::Controllers::Settings::Colors::Green: return LV_COLOR_GREEN; + case Pinetime::Controllers::Settings::Colors::Cyan: return LV_COLOR_CYAN; + case Pinetime::Controllers::Settings::Colors::Teal: return LV_COLOR_TEAL; + case Pinetime::Controllers::Settings::Colors::Blue: return LV_COLOR_BLUE; + case Pinetime::Controllers::Settings::Colors::Navy: return LV_COLOR_NAVY; + case Pinetime::Controllers::Settings::Colors::Magenta: return LV_COLOR_MAGENTA; + case Pinetime::Controllers::Settings::Colors::Purple: return LV_COLOR_PURPLE; + case Pinetime::Controllers::Settings::Colors::Orange: return LV_COLOR_ORANGE; + default: return LV_COLOR_WHITE; + } +} diff --git a/src/displayapp/Colors.h b/src/displayapp/Colors.h new file mode 100644 index 0000000000..9db7dd20ca --- /dev/null +++ b/src/displayapp/Colors.h @@ -0,0 +1,10 @@ +#pragma once + +#include +#include + +namespace Pinetime { + namespace Applications { + lv_color_t Convert(Controllers::Settings::Colors color); + } +} \ No newline at end of file diff --git a/src/displayapp/screens/PineTimeStyle.cpp b/src/displayapp/screens/PineTimeStyle.cpp index 772e4612a0..7a712f43f1 100644 --- a/src/displayapp/screens/PineTimeStyle.cpp +++ b/src/displayapp/screens/PineTimeStyle.cpp @@ -23,6 +23,7 @@ #include #include #include +#include #include "BatteryIcon.h" #include "BleIcon.h" #include "NotificationIcon.h" @@ -63,7 +64,7 @@ PineTimeStyle::PineTimeStyle(DisplayApp* app, //Create a 200px wide background rectangle timebar = lv_obj_create(lv_scr_act(), nullptr); - lv_obj_set_style_local_bg_color(timebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, pts_colors[settingsController.GetPTSColorBG()]); + lv_obj_set_style_local_bg_color(timebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, Convert(settingsController.GetPTSColorBG())); lv_obj_set_style_local_radius(timebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, 0); lv_obj_set_size(timebar, 200, 240); lv_obj_align(timebar, lv_scr_act(), LV_ALIGN_IN_TOP_LEFT, 5, 0); @@ -71,25 +72,25 @@ PineTimeStyle::PineTimeStyle(DisplayApp* app, // Display the time timeDD1 = lv_label_create(lv_scr_act(), nullptr); lv_obj_set_style_local_text_font(timeDD1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, &open_sans_light); - lv_obj_set_style_local_text_color(timeDD1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, pts_colors[settingsController.GetPTSColorTime()]); + lv_obj_set_style_local_text_color(timeDD1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, Convert(settingsController.GetPTSColorTime())); lv_label_set_text(timeDD1, "12"); lv_obj_align(timeDD1, timebar, LV_ALIGN_IN_TOP_MID, 5, 5); timeDD2 = lv_label_create(lv_scr_act(), nullptr); lv_obj_set_style_local_text_font(timeDD2, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, &open_sans_light); - lv_obj_set_style_local_text_color(timeDD2, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, pts_colors[settingsController.GetPTSColorTime()]); + lv_obj_set_style_local_text_color(timeDD2, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, Convert(settingsController.GetPTSColorTime())); lv_label_set_text(timeDD2, "34"); lv_obj_align(timeDD2, timebar, LV_ALIGN_IN_BOTTOM_MID, 5, -5); timeAMPM = lv_label_create(lv_scr_act(), nullptr); - lv_obj_set_style_local_text_color(timeAMPM, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, pts_colors[settingsController.GetPTSColorTime()]); + lv_obj_set_style_local_text_color(timeAMPM, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, Convert(settingsController.GetPTSColorTime())); lv_obj_set_style_local_text_line_space(timeAMPM, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, -3); lv_label_set_text(timeAMPM, ""); lv_obj_align(timeAMPM, timebar, LV_ALIGN_IN_BOTTOM_LEFT, 2, -20); // Create a 40px wide bar down the right side of the screen sidebar = lv_obj_create(lv_scr_act(), nullptr); - lv_obj_set_style_local_bg_color(sidebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, pts_colors[settingsController.GetPTSColorBar()]); + lv_obj_set_style_local_bg_color(sidebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, Convert(settingsController.GetPTSColorBar())); lv_obj_set_style_local_radius(sidebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, 0); lv_obj_set_size(sidebar, 40, 240); lv_obj_align(sidebar, lv_scr_act(), LV_ALIGN_IN_TOP_RIGHT, 0, 0); diff --git a/src/displayapp/screens/PineTimeStyle.h b/src/displayapp/screens/PineTimeStyle.h index 16b6de19f7..cb74ead50c 100644 --- a/src/displayapp/screens/PineTimeStyle.h +++ b/src/displayapp/screens/PineTimeStyle.h @@ -68,11 +68,6 @@ namespace Pinetime { lv_obj_t* notificationIcon; lv_obj_t* stepGauge; lv_color_t needle_colors[1]; - lv_color_t pts_colors[17] = {LV_COLOR_WHITE, LV_COLOR_SILVER, LV_COLOR_GRAY, LV_COLOR_BLACK, - LV_COLOR_RED, LV_COLOR_MAROON, LV_COLOR_YELLOW, LV_COLOR_OLIVE, - LV_COLOR_LIME, LV_COLOR_GREEN, LV_COLOR_CYAN, LV_COLOR_TEAL, - LV_COLOR_BLUE, LV_COLOR_NAVY, LV_COLOR_MAGENTA, LV_COLOR_PURPLE, - LV_COLOR_ORANGE}; Controllers::DateTime& dateTimeController; Controllers::Battery& batteryController; diff --git a/src/displayapp/screens/settings/SettingPineTimeStyle.cpp b/src/displayapp/screens/settings/SettingPineTimeStyle.cpp index e125c8a2fd..c9af19b628 100644 --- a/src/displayapp/screens/settings/SettingPineTimeStyle.cpp +++ b/src/displayapp/screens/settings/SettingPineTimeStyle.cpp @@ -1,5 +1,6 @@ #include "SettingPineTimeStyle.h" #include +#include #include "displayapp/DisplayApp.h" #include "displayapp/screens/Symbols.h" @@ -15,7 +16,7 @@ namespace { SettingPineTimeStyle::SettingPineTimeStyle(Pinetime::Applications::DisplayApp* app, Pinetime::Controllers::Settings& settingsController) : Screen(app), settingsController {settingsController} { timebar = lv_obj_create(lv_scr_act(), nullptr); - lv_obj_set_style_local_bg_color(timebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, pts_colors[settingsController.GetPTSColorBG()]); + lv_obj_set_style_local_bg_color(timebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, Convert(settingsController.GetPTSColorBG())); lv_obj_set_style_local_radius(timebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, 0); lv_obj_set_size(timebar, 200, 240); lv_obj_align(timebar, lv_scr_act(), LV_ALIGN_IN_TOP_LEFT, 5, 0); @@ -24,18 +25,18 @@ SettingPineTimeStyle::SettingPineTimeStyle(Pinetime::Applications::DisplayApp* a timeDD1 = lv_label_create(lv_scr_act(), nullptr); lv_obj_set_style_local_text_font(timeDD1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, &open_sans_light); - lv_obj_set_style_local_text_color(timeDD1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, pts_colors[settingsController.GetPTSColorTime()]); + lv_obj_set_style_local_text_color(timeDD1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, Convert(settingsController.GetPTSColorTime())); lv_label_set_text(timeDD1, "12"); lv_obj_align(timeDD1, timebar, LV_ALIGN_IN_TOP_MID, 5, 5); timeDD2 = lv_label_create(lv_scr_act(), nullptr); lv_obj_set_style_local_text_font(timeDD2, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, &open_sans_light); - lv_obj_set_style_local_text_color(timeDD2, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, pts_colors[settingsController.GetPTSColorTime()]); + lv_obj_set_style_local_text_color(timeDD2, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, Convert(settingsController.GetPTSColorTime())); lv_label_set_text(timeDD2, "34"); lv_obj_align(timeDD2, timebar, LV_ALIGN_IN_BOTTOM_MID, 5, -5); timeAMPM = lv_label_create(lv_scr_act(), nullptr); - lv_obj_set_style_local_text_color(timeAMPM, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, pts_colors[settingsController.GetPTSColorTime()]); + lv_obj_set_style_local_text_color(timeAMPM, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, Convert(settingsController.GetPTSColorTime())); lv_obj_set_style_local_text_line_space(timeAMPM, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, -3); lv_label_set_text(timeAMPM, "A\nM"); lv_obj_align(timeAMPM, timebar, LV_ALIGN_IN_BOTTOM_LEFT, 2, -20); @@ -43,7 +44,7 @@ SettingPineTimeStyle::SettingPineTimeStyle(Pinetime::Applications::DisplayApp* a // Create a 40px wide bar down the right side of the screen sidebar = lv_obj_create(lv_scr_act(), nullptr); - lv_obj_set_style_local_bg_color(sidebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, pts_colors[settingsController.GetPTSColorBar()]); + lv_obj_set_style_local_bg_color(sidebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, Convert(settingsController.GetPTSColorBar())); lv_obj_set_style_local_radius(sidebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, 0); lv_obj_set_size(sidebar, 40, 240); lv_obj_align(sidebar, lv_scr_act(), LV_ALIGN_IN_TOP_RIGHT, 0, 0); @@ -215,91 +216,60 @@ SettingPineTimeStyle::~SettingPineTimeStyle() { settingsController.SaveSettings(); } -bool SettingPineTimeStyle::Refresh() { - return running; -} - void SettingPineTimeStyle::UpdateSelected(lv_obj_t* object, lv_event_t event) { - uint8_t valueTime = settingsController.GetPTSColorTime(); - uint8_t valueBar = settingsController.GetPTSColorBar(); - uint8_t valueBG = settingsController.GetPTSColorBG(); + auto valueTime = settingsController.GetPTSColorTime(); + auto valueBar = settingsController.GetPTSColorBar(); + auto valueBG = settingsController.GetPTSColorBG(); if (event == LV_EVENT_CLICKED) { if (object == btnNextTime) { - if (valueTime < 16) { - valueTime += 1; - } else { - valueTime = 0; - } + valueTime = GetNext(valueTime); + settingsController.SetPTSColorTime(valueTime); - lv_obj_set_style_local_text_color(timeDD1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, pts_colors[valueTime]); - lv_obj_set_style_local_text_color(timeDD2, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, pts_colors[valueTime]); - lv_obj_set_style_local_text_color(timeAMPM, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, pts_colors[valueTime]); + lv_obj_set_style_local_text_color(timeDD1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, Convert(valueTime)); + lv_obj_set_style_local_text_color(timeDD2, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, Convert(valueTime)); + lv_obj_set_style_local_text_color(timeAMPM, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, Convert(valueTime)); } if (object == btnPrevTime) { - if (valueTime > 0) { - valueTime -= 1; - } else { - valueTime = 16; - } + valueTime = GetPrevious(valueTime); settingsController.SetPTSColorTime(valueTime); - lv_obj_set_style_local_text_color(timeDD1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, pts_colors[valueTime]); - lv_obj_set_style_local_text_color(timeDD2, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, pts_colors[valueTime]); - lv_obj_set_style_local_text_color(timeAMPM, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, pts_colors[valueTime]); + lv_obj_set_style_local_text_color(timeDD1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, Convert(valueTime)); + lv_obj_set_style_local_text_color(timeDD2, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, Convert(valueTime)); + lv_obj_set_style_local_text_color(timeAMPM, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, Convert(valueTime)); } if (object == btnNextBar) { - if (valueBar < 16) { - valueBar += 1; - // Avoid setting the sidebar black - if (valueBar == 3) { - valueBar += 1; - } - } else { - valueBar = 0; - } + valueBar = GetNext(valueBar); + if(valueBar == Controllers::Settings::Colors::Black) + valueBar = GetNext(valueBar); settingsController.SetPTSColorBar(valueBar); - lv_obj_set_style_local_bg_color(sidebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, pts_colors[valueBar]); + lv_obj_set_style_local_bg_color(sidebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, Convert(valueBar)); } if (object == btnPrevBar) { - if (valueBar > 0) { - valueBar -= 1; - // Avoid setting the sidebar black - if (valueBar == 3) { - valueBar -= 1; - } - } else { - valueBar = 16; - } + valueBar = GetPrevious(valueBar); + if(valueBar == Controllers::Settings::Colors::Black) + valueBar = GetPrevious(valueBar); settingsController.SetPTSColorBar(valueBar); - lv_obj_set_style_local_bg_color(sidebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, pts_colors[valueBar]); + lv_obj_set_style_local_bg_color(sidebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, Convert(valueBar)); } if (object == btnNextBG) { - if (valueBG < 16) { - valueBG += 1; - } else { - valueBG = 0; - } + valueBG = GetNext(valueBG); settingsController.SetPTSColorBG(valueBG); - lv_obj_set_style_local_bg_color(timebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, pts_colors[valueBG]); + lv_obj_set_style_local_bg_color(timebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, Convert(valueBG)); } if (object == btnPrevBG) { - if (valueBG > 0) { - valueBG -= 1; - } else { - valueBG = 16; - } + valueBG = GetPrevious(valueBG); settingsController.SetPTSColorBG(valueBG); - lv_obj_set_style_local_bg_color(timebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, pts_colors[valueBG]); + lv_obj_set_style_local_bg_color(timebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, Convert(valueBG)); } if (object == btnReset) { - settingsController.SetPTSColorTime(11); - lv_obj_set_style_local_text_color(timeDD1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, pts_colors[11]); - lv_obj_set_style_local_text_color(timeDD2, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, pts_colors[11]); - lv_obj_set_style_local_text_color(timeAMPM, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, pts_colors[11]); - settingsController.SetPTSColorBar(11); - lv_obj_set_style_local_bg_color(sidebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, pts_colors[11]); - settingsController.SetPTSColorBG(3); - lv_obj_set_style_local_bg_color(timebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, pts_colors[3]); + settingsController.SetPTSColorTime(Controllers::Settings::Colors::Teal); + lv_obj_set_style_local_text_color(timeDD1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, Convert(Controllers::Settings::Colors::Teal)); + lv_obj_set_style_local_text_color(timeDD2, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, Convert(Controllers::Settings::Colors::Teal)); + lv_obj_set_style_local_text_color(timeAMPM, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, Convert(Controllers::Settings::Colors::Teal)); + settingsController.SetPTSColorBar(Controllers::Settings::Colors::Teal); + lv_obj_set_style_local_bg_color(sidebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, Convert(Controllers::Settings::Colors::Teal)); + settingsController.SetPTSColorBG(Controllers::Settings::Colors::Black); + lv_obj_set_style_local_bg_color(timebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, Convert(Controllers::Settings::Colors::Black)); } if (object == btnRandom) { uint8_t randTime = rand() % 17; @@ -312,14 +282,37 @@ void SettingPineTimeStyle::UpdateSelected(lv_obj_t* object, lv_event_t event) { if (randBar == 3) { randBar -= 1; } - settingsController.SetPTSColorTime(randTime); - lv_obj_set_style_local_text_color(timeDD1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, pts_colors[randTime]); - lv_obj_set_style_local_text_color(timeDD2, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, pts_colors[randTime]); - lv_obj_set_style_local_text_color(timeAMPM, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, pts_colors[randTime]); - settingsController.SetPTSColorBar(randBar); - lv_obj_set_style_local_bg_color(sidebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, pts_colors[randBar]); - settingsController.SetPTSColorBG(randBG); - lv_obj_set_style_local_bg_color(timebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, pts_colors[randBG]); + settingsController.SetPTSColorTime(static_cast(randTime)); + lv_obj_set_style_local_text_color(timeDD1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, Convert(static_cast(randTime))); + lv_obj_set_style_local_text_color(timeDD2, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, Convert(static_cast(randTime))); + lv_obj_set_style_local_text_color(timeAMPM, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, Convert(static_cast(randTime))); + settingsController.SetPTSColorBar(static_cast(randBar)); + lv_obj_set_style_local_bg_color(sidebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, Convert(static_cast(randBar))); + settingsController.SetPTSColorBG(static_cast(randBG)); + lv_obj_set_style_local_bg_color(timebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, Convert(static_cast(randBG))); } } -} \ No newline at end of file +} + +Pinetime::Controllers::Settings::Colors SettingPineTimeStyle::GetNext(Pinetime::Controllers::Settings::Colors color) { + auto colorAsInt = static_cast(color); + Pinetime::Controllers::Settings::Colors nextColor; + if (colorAsInt < 16) { + nextColor = static_cast(colorAsInt + 1); + } else { + nextColor = static_cast(0); + } + return nextColor; +} + +Pinetime::Controllers::Settings::Colors SettingPineTimeStyle::GetPrevious(Pinetime::Controllers::Settings::Colors color) { + auto colorAsInt = static_cast(color); + Pinetime::Controllers::Settings::Colors prevColor; + + if (colorAsInt > 0) { + prevColor = static_cast(colorAsInt - 1); + } else { + prevColor = static_cast(16); + } + return prevColor; +} diff --git a/src/displayapp/screens/settings/SettingPineTimeStyle.h b/src/displayapp/screens/settings/SettingPineTimeStyle.h index 1a01ebbb4a..397bd86d46 100644 --- a/src/displayapp/screens/settings/SettingPineTimeStyle.h +++ b/src/displayapp/screens/settings/SettingPineTimeStyle.h @@ -15,12 +15,14 @@ namespace Pinetime { SettingPineTimeStyle(DisplayApp* app, Pinetime::Controllers::Settings &settingsController); ~SettingPineTimeStyle() override; - bool Refresh() override; void UpdateSelected(lv_obj_t *object, lv_event_t event); private: Controllers::Settings& settingsController; + Pinetime::Controllers::Settings::Colors GetNext(Controllers::Settings::Colors color); + Pinetime::Controllers::Settings::Colors GetPrevious(Controllers::Settings::Colors color); + lv_obj_t * btnNextTime; lv_obj_t * btnPrevTime; lv_obj_t * btnNextBar; @@ -29,9 +31,6 @@ namespace Pinetime { lv_obj_t * btnPrevBG; lv_obj_t * btnReset; lv_obj_t * btnRandom; - lv_obj_t * timeColor; - lv_obj_t * barColor; - lv_obj_t * bgColor; lv_obj_t * timebar; lv_obj_t * sidebar; lv_obj_t * timeDD1; @@ -51,11 +50,6 @@ namespace Pinetime { lv_obj_t * calendarCrossBar2; lv_obj_t * stepGauge; lv_color_t needle_colors[1]; - lv_color_t pts_colors[17] = {LV_COLOR_WHITE, LV_COLOR_SILVER, LV_COLOR_GRAY, LV_COLOR_BLACK, - LV_COLOR_RED, LV_COLOR_MAROON, LV_COLOR_YELLOW, LV_COLOR_OLIVE, - LV_COLOR_LIME, LV_COLOR_GREEN, LV_COLOR_CYAN, LV_COLOR_TEAL, - LV_COLOR_BLUE, LV_COLOR_NAVY, LV_COLOR_MAGENTA, LV_COLOR_PURPLE, - LV_COLOR_ORANGE}; }; } } From 6c023785e53c507f7cb20703f5f3a221ea095068 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-Fran=C3=A7ois=20Milants?= Date: Sat, 28 Aug 2021 21:30:31 +0200 Subject: [PATCH 144/173] Fix wake on tap/double tap. --- src/systemtask/SystemTask.cpp | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/systemtask/SystemTask.cpp b/src/systemtask/SystemTask.cpp index 03bf670654..0617b0ced0 100644 --- a/src/systemtask/SystemTask.cpp +++ b/src/systemtask/SystemTask.cpp @@ -240,12 +240,14 @@ void SystemTask::Work() { isDimmed = false; break; case Messages::TouchWakeUp: { - auto touchInfo = touchPanel.GetTouchInfo(); - if (touchInfo.touching and ((touchInfo.gesture == Pinetime::Drivers::Cst816S::Gestures::DoubleTap and - settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::DoubleTap)) or - (touchInfo.gesture == Pinetime::Drivers::Cst816S::Gestures::SingleTap and - settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::SingleTap)))) { - GoToRunning(); + if(touchHandler.GetNewTouchInfo()) { + auto gesture = touchHandler.GestureGet(); + if (gesture != Pinetime::Drivers::Cst816S::Gestures::None and ((gesture == Pinetime::Drivers::Cst816S::Gestures::DoubleTap and + settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::DoubleTap)) or + (gesture == Pinetime::Drivers::Cst816S::Gestures::SingleTap and + settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::SingleTap)))) { + GoToRunning(); + } } } break; case Messages::GoToSleep: From be31f417db1937032ae440e1cf68cb2971284713 Mon Sep 17 00:00:00 2001 From: "James A. Jerkins" Date: Sun, 29 Aug 2021 15:50:04 -0500 Subject: [PATCH 145/173] WIP Refactor ble advertising Refactor ble advertising based on ble standards and conventions. Changes are based on the bleprph example code, bluetooth docs, and nimble docs. --- src/CMakeLists.txt | 11 ++- src/components/ble/NimbleController.cpp | 98 +++++++++++++++---------- src/components/ble/NimbleController.h | 2 + src/systemtask/SystemTask.cpp | 2 - 4 files changed, 67 insertions(+), 46 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index f72f50c9a4..c7eda52d74 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -92,6 +92,9 @@ set(SDK_SOURCE_FILES set(TINYCRYPT_SRC libs/mynewt-nimble/ext/tinycrypt/src/aes_encrypt.c libs/mynewt-nimble/ext/tinycrypt/src/utils.c + libs/mynewt-nimble/ext/tinycrypt/src/cmac_mode.c + libs/mynewt-nimble/ext/tinycrypt/src/ecc.c + libs/mynewt-nimble/ext/tinycrypt/src/ecc_dh.c ) set(NIMBLE_SRC @@ -104,6 +107,10 @@ set(NIMBLE_SRC libs/mynewt-nimble/nimble/host/src/ble_l2cap.c libs/mynewt-nimble/nimble/host/src/ble_hs_mbuf.c libs/mynewt-nimble/nimble/host/src/ble_sm.c + libs/mynewt-nimble/nimble/host/src/ble_sm_cmd.c + libs/mynewt-nimble/nimble/host/src/ble_sm_lgcy.c + libs/mynewt-nimble/nimble/host/src/ble_sm_alg.c + libs/mynewt-nimble/nimble/host/src/ble_sm_sc.c libs/mynewt-nimble/nimble/host/src/ble_gap.c libs/mynewt-nimble/nimble/host/src/ble_gatts.c libs/mynewt-nimble/nimble/host/src/ble_gattc.c @@ -127,10 +134,6 @@ set(NIMBLE_SRC libs/mynewt-nimble/nimble/host/src/ble_hs_atomic.c libs/mynewt-nimble/nimble/host/src/ble_hs_adv.c libs/mynewt-nimble/nimble/host/src/ble_hs_flow.c - libs/mynewt-nimble/nimble/host/src/ble_sm.c - libs/mynewt-nimble/nimble/host/src/ble_sm_cmd.c - libs/mynewt-nimble/nimble/host/src/ble_sm_lgcy.c - libs/mynewt-nimble/nimble/host/src/ble_sm_alg.c libs/mynewt-nimble/nimble/host/src/ble_hs_mqueue.c libs/mynewt-nimble/nimble/host/src/ble_hs_stop.c libs/mynewt-nimble/nimble/host/src/ble_hs_startup.c diff --git a/src/components/ble/NimbleController.cpp b/src/components/ble/NimbleController.cpp index 5eb227bf00..4de8fff9d1 100644 --- a/src/components/ble/NimbleController.cpp +++ b/src/components/ble/NimbleController.cpp @@ -42,6 +42,19 @@ NimbleController::NimbleController(Pinetime::System::SystemTask& systemTask, serviceDiscovery({¤tTimeClient, &alertNotificationClient}) { } +void nimble_on_reset(int reason) { + NRF_LOG_INFO("Resetting state; reason=%d\n", reason); +} + +void nimble_on_sync(void) { + int rc; + + rc = ble_hs_util_ensure_addr(0); + ASSERT(rc == 0); + + nptr->StartAdvertising(); +} + int GAPEventCallback(struct ble_gap_event* event, void* arg) { auto nimbleController = static_cast(arg); return nimbleController->OnGAPEvent(event); @@ -51,6 +64,10 @@ void NimbleController::Init() { while (!ble_hs_synced()) { } + nptr = this; + ble_hs_cfg.reset_cb = nimble_on_reset; + ble_hs_cfg.sync_cb = nimble_on_sync; + ble_svc_gap_init(); ble_svc_gatt_init(); @@ -64,28 +81,31 @@ void NimbleController::Init() { batteryInformationService.Init(); immediateAlertService.Init(); heartRateService.Init(); - int res; - res = ble_hs_util_ensure_addr(0); - ASSERT(res == 0); - res = ble_hs_id_infer_auto(0, &addrType); - ASSERT(res == 0); - res = ble_svc_gap_device_name_set(deviceName); - ASSERT(res == 0); + + int rc; + rc = ble_hs_util_ensure_addr(0); + ASSERT(rc == 0); + rc = ble_hs_id_infer_auto(0, &addrType); + ASSERT(rc == 0); + rc = ble_svc_gap_device_name_set(deviceName); + ASSERT(rc == 0); + rc = ble_svc_gap_device_appearance_set(0xC2); + ASSERT(rc == 0); Pinetime::Controllers::Ble::BleAddress address; - res = ble_hs_id_copy_addr(addrType, address.data(), nullptr); - ASSERT(res == 0); + rc = ble_hs_id_copy_addr(addrType, address.data(), nullptr); + ASSERT(rc == 0); bleController.AddressType((addrType == 0) ? Ble::AddressTypes::Public : Ble::AddressTypes::Random); bleController.Address(std::move(address)); - res = ble_gatts_start(); - ASSERT(res == 0); + rc = ble_gatts_start(); + ASSERT(rc == 0); + + if (!ble_gap_adv_active() && !bleController.IsConnected()) + StartAdvertising(); } void NimbleController::StartAdvertising() { - if (bleController.IsConnected() || ble_gap_conn_active() || ble_gap_adv_active()) - return; - - ble_svc_gap_device_name_set(deviceName); + int rc; /* set adv parameters */ struct ble_gap_adv_params adv_params; @@ -104,9 +124,6 @@ void NimbleController::StartAdvertising() { adv_params.disc_mode = BLE_GAP_DISC_MODE_GEN; fields.flags = BLE_HS_ADV_F_DISC_GEN | BLE_HS_ADV_F_BREDR_UNSUP; - // fields.uuids128 = BLE_UUID128(BLE_UUID128_DECLARE( - // 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, - // 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff)); fields.uuids128 = &dfuServiceUuid; fields.num_uuids128 = 1; fields.uuids128_is_complete = 1; @@ -116,27 +133,24 @@ void NimbleController::StartAdvertising() { rsp_fields.name_len = strlen(deviceName); rsp_fields.name_is_complete = 1; - ble_gap_adv_set_fields(&fields); - // ASSERT(res == 0); // TODO this one sometimes fails with error 22 (notsync) + rc = ble_gap_adv_set_fields(&fields); + ASSERT(rc == 0); - ble_gap_adv_rsp_set_fields(&rsp_fields); - // ASSERT(res == 0); + rc = ble_gap_adv_rsp_set_fields(&rsp_fields); + ASSERT(rc == 0); - ble_gap_adv_start(addrType, NULL, 180000, &adv_params, GAPEventCallback, this); - // ASSERT(res == 0);// TODO I've disabled these ASSERT as they sometime asserts and reset the mcu. - // For now, the advertising is restarted as soon as it ends. There may be a race condition - // that prevent the advertising from restarting reliably. - // I remove the assert to prevent this uncesseray crash, but in the long term, the management of - // the advertising should be improve (better error handling, and advertise for 3 minutes after - // the application has been woken up, for example. + rc = ble_gap_adv_start(addrType, NULL, 5000, &adv_params, GAPEventCallback, this); + ASSERT(rc == 0); } int NimbleController::OnGAPEvent(ble_gap_event* event) { switch (event->type) { case BLE_GAP_EVENT_ADV_COMPLETE: NRF_LOG_INFO("Advertising event : BLE_GAP_EVENT_ADV_COMPLETE"); - NRF_LOG_INFO("advertise complete; reason=%dn status=%d", event->adv_complete.reason, event->connect.status); + NRF_LOG_INFO("reason=%d; status=%d", event->adv_complete.reason, event->connect.status); + StartAdvertising(); break; + case BLE_GAP_EVENT_CONNECT: { NRF_LOG_INFO("Advertising event : BLE_GAP_EVENT_CONNECT"); @@ -145,18 +159,19 @@ int NimbleController::OnGAPEvent(ble_gap_event* event) { if (event->connect.status != 0) { /* Connection failed; resume advertising. */ - StartAdvertising(); bleController.Disconnect(); + StartAdvertising(); } else { + connectionHandle = event->connect.conn_handle; bleController.Connect(); systemTask.PushMessage(Pinetime::System::Messages::BleConnected); - connectionHandle = event->connect.conn_handle; - // Service discovery is deffered via systemtask + // Service discovery is deferred via systemtask } } break; + case BLE_GAP_EVENT_DISCONNECT: NRF_LOG_INFO("Advertising event : BLE_GAP_EVENT_DISCONNECT"); - NRF_LOG_INFO("disconnect; reason=%d", event->disconnect.reason); + NRF_LOG_INFO("disconnect reason=%d", event->disconnect.reason); /* Connection terminated; resume advertising. */ currentTimeClient.Reset(); @@ -165,15 +180,18 @@ int NimbleController::OnGAPEvent(ble_gap_event* event) { bleController.Disconnect(); StartAdvertising(); break; + case BLE_GAP_EVENT_CONN_UPDATE: NRF_LOG_INFO("Advertising event : BLE_GAP_EVENT_CONN_UPDATE"); /* The central has updated the connection parameters. */ - NRF_LOG_INFO("connection updated; status=%d ", event->conn_update.status); + NRF_LOG_INFO("update status=%d ", event->conn_update.status); break; + case BLE_GAP_EVENT_ENC_CHANGE: /* Encryption has been enabled or disabled for this connection. */ NRF_LOG_INFO("encryption change event; status=%d ", event->enc_change.status); - return 0; + break; + case BLE_GAP_EVENT_SUBSCRIBE: NRF_LOG_INFO("subscribe event; conn_handle=%d attr_handle=%d " "reason=%d prevn=%d curn=%d previ=%d curi=???\n", @@ -183,10 +201,11 @@ int NimbleController::OnGAPEvent(ble_gap_event* event) { event->subscribe.prev_notify, event->subscribe.cur_notify, event->subscribe.prev_indicate); - return 0; + break; + case BLE_GAP_EVENT_MTU: NRF_LOG_INFO("mtu update event; conn_handle=%d cid=%d mtu=%d\n", event->mtu.conn_handle, event->mtu.channel_id, event->mtu.value); - return 0; + break; case BLE_GAP_EVENT_REPEAT_PAIRING: { /* We already have a bond with the peer, but it is attempting to @@ -217,8 +236,7 @@ int NimbleController::OnGAPEvent(ble_gap_event* event) { notifSize); alertNotificationClient.OnNotification(event); - return 0; - } + } break; /* Attribute data is contained in event->notify_rx.attr_data. */ default: diff --git a/src/components/ble/NimbleController.h b/src/components/ble/NimbleController.h index 0cfe983c6b..078d6158a9 100644 --- a/src/components/ble/NimbleController.h +++ b/src/components/ble/NimbleController.h @@ -101,5 +101,7 @@ namespace Pinetime { ServiceDiscovery serviceDiscovery; }; + + static NimbleController* nptr; } } diff --git a/src/systemtask/SystemTask.cpp b/src/systemtask/SystemTask.cpp index 3553f449fd..2dff9254b9 100644 --- a/src/systemtask/SystemTask.cpp +++ b/src/systemtask/SystemTask.cpp @@ -120,7 +120,6 @@ void SystemTask::Work() { fs.Init(); nimbleController.Init(); - nimbleController.StartAdvertising(); lcd.Init(); twiMaster.Init(); @@ -226,7 +225,6 @@ void SystemTask::Work() { touchPanel.Wakeup(); } - nimbleController.StartAdvertising(); xTimerStart(dimTimer, 0); spiNorFlash.Wakeup(); lcd.Wakeup(); From 00a3f84ea764e5da5d982e7603ece1e574306850 Mon Sep 17 00:00:00 2001 From: "James A. Jerkins" Date: Mon, 30 Aug 2021 23:17:16 -0500 Subject: [PATCH 146/173] Completely reset connection state on fail --- src/components/ble/NimbleController.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/components/ble/NimbleController.cpp b/src/components/ble/NimbleController.cpp index 4de8fff9d1..8b4f3ea835 100644 --- a/src/components/ble/NimbleController.cpp +++ b/src/components/ble/NimbleController.cpp @@ -159,6 +159,9 @@ int NimbleController::OnGAPEvent(ble_gap_event* event) { if (event->connect.status != 0) { /* Connection failed; resume advertising. */ + currentTimeClient.Reset(); + alertNotificationClient.Reset(); + connectionHandle = BLE_HS_CONN_HANDLE_NONE; bleController.Disconnect(); StartAdvertising(); } else { From 1635bfafb3fe9dce1ab05102d1bfeac1eca81c66 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-Fran=C3=A7ois=20Milants?= Date: Tue, 31 Aug 2021 21:56:21 +0200 Subject: [PATCH 147/173] Fix notifications that wouldn't auto close when the timeout elapsed (in preview mode). --- src/displayapp/screens/Notifications.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/displayapp/screens/Notifications.cpp b/src/displayapp/screens/Notifications.cpp index fd0b86daf8..22eb290e8e 100644 --- a/src/displayapp/screens/Notifications.cpp +++ b/src/displayapp/screens/Notifications.cpp @@ -73,7 +73,6 @@ void Notifications::Refresh() { timeoutLinePoints[1].x = pos; lv_line_set_points(timeoutLine, timeoutLinePoints, 2); } - running = currentItem->IsRunning(); } bool Notifications::OnTouchEvent(Pinetime::Applications::TouchEvents event) { From d69a8e84fa1906a661738ea034eae5f5f37c25bf Mon Sep 17 00:00:00 2001 From: "James A. Jerkins" Date: Wed, 1 Sep 2021 22:48:01 -0500 Subject: [PATCH 148/173] Fix race condition, connect->disconnect->discovery --- src/components/ble/NimbleController.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/components/ble/NimbleController.cpp b/src/components/ble/NimbleController.cpp index 8b4f3ea835..0f48609546 100644 --- a/src/components/ble/NimbleController.cpp +++ b/src/components/ble/NimbleController.cpp @@ -250,7 +250,9 @@ int NimbleController::OnGAPEvent(ble_gap_event* event) { } void NimbleController::StartDiscovery() { - serviceDiscovery.StartDiscovery(connectionHandle); + if (connectionHandle != BLE_HS_CONN_HANDLE_NONE) { + serviceDiscovery.StartDiscovery(connectionHandle); + } } uint16_t NimbleController::connHandle() { From 3e1fe687b82d4df237b7b355fa31cb88713193fc Mon Sep 17 00:00:00 2001 From: "James A. Jerkins" Date: Wed, 1 Sep 2021 22:50:56 -0500 Subject: [PATCH 149/173] Fix styles issues - no change to functionality --- src/components/ble/NimbleController.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/components/ble/NimbleController.cpp b/src/components/ble/NimbleController.cpp index 0f48609546..8e0fe75656 100644 --- a/src/components/ble/NimbleController.cpp +++ b/src/components/ble/NimbleController.cpp @@ -151,7 +151,7 @@ int NimbleController::OnGAPEvent(ble_gap_event* event) { StartAdvertising(); break; - case BLE_GAP_EVENT_CONNECT: { + case BLE_GAP_EVENT_CONNECT: NRF_LOG_INFO("Advertising event : BLE_GAP_EVENT_CONNECT"); /* A new connection was established or a connection attempt failed. */ @@ -170,7 +170,7 @@ int NimbleController::OnGAPEvent(ble_gap_event* event) { systemTask.PushMessage(Pinetime::System::Messages::BleConnected); // Service discovery is deferred via systemtask } - } break; + break; case BLE_GAP_EVENT_DISCONNECT: NRF_LOG_INFO("Advertising event : BLE_GAP_EVENT_DISCONNECT"); @@ -207,7 +207,8 @@ int NimbleController::OnGAPEvent(ble_gap_event* event) { break; case BLE_GAP_EVENT_MTU: - NRF_LOG_INFO("mtu update event; conn_handle=%d cid=%d mtu=%d\n", event->mtu.conn_handle, event->mtu.channel_id, event->mtu.value); + NRF_LOG_INFO("mtu update event; conn_handle=%d cid=%d mtu=%d\n", + event->mtu.conn_handle, event->mtu.channel_id, event->mtu.value); break; case BLE_GAP_EVENT_REPEAT_PAIRING: { @@ -224,8 +225,7 @@ int NimbleController::OnGAPEvent(ble_gap_event* event) { /* Return BLE_GAP_REPEAT_PAIRING_RETRY to indicate that the host should * continue with the pairing operation. */ - } - return BLE_GAP_REPEAT_PAIRING_RETRY; + } return BLE_GAP_REPEAT_PAIRING_RETRY; case BLE_GAP_EVENT_NOTIFY_RX: { /* Peer sent us a notification or indication. */ @@ -260,7 +260,7 @@ uint16_t NimbleController::connHandle() { } void NimbleController::NotifyBatteryLevel(uint8_t level) { - if(connectionHandle != BLE_HS_CONN_HANDLE_NONE) { + if (connectionHandle != BLE_HS_CONN_HANDLE_NONE) { batteryInformationService.NotifyBatteryLevel(connectionHandle, level); } } From 6f9f0e8b0e42a5526d47ca664534fb6b0ccb6ace Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-Fran=C3=A7ois=20Milants?= Date: Thu, 2 Sep 2021 20:32:50 +0200 Subject: [PATCH 150/173] Set version to 1.4.0. --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index b442fc118f..cc41a08744 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,5 +1,5 @@ cmake_minimum_required(VERSION 3.10) -project(pinetime VERSION 1.3.0 LANGUAGES C CXX ASM) +project(pinetime VERSION 1.4.0 LANGUAGES C CXX ASM) set(CMAKE_C_STANDARD 99) set(CMAKE_CXX_STANDARD 14) From bd1a571399923014c6411dc7f4677078ee54d0f5 Mon Sep 17 00:00:00 2001 From: Itai Nelken <70802936+Itai-Nelken@users.noreply.github.com> Date: Thu, 2 Sep 2021 23:20:25 +0300 Subject: [PATCH 151/173] Update Settings.cpp --- src/displayapp/screens/settings/Settings.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/displayapp/screens/settings/Settings.cpp b/src/displayapp/screens/settings/Settings.cpp index f82b03c1a1..e3319f030a 100644 --- a/src/displayapp/screens/settings/Settings.cpp +++ b/src/displayapp/screens/settings/Settings.cpp @@ -50,8 +50,8 @@ std::unique_ptr Settings::CreateScreen2() { std::array applications {{ {Symbols::shoe, "Steps", Apps::SettingSteps}, {Symbols::batteryHalf, "Battery", Apps::BatteryInfo}, + {Symbols::paintbrush, "PTS Colors", Apps::SettingPineTimeStyle}, {Symbols::check, "Firmware", Apps::FirmwareValidation}, - {Symbols::list, "About", Apps::SysInfo}, }}; return std::make_unique(1, 3, app, settingsController, applications); @@ -60,7 +60,7 @@ std::unique_ptr Settings::CreateScreen2() { std::unique_ptr Settings::CreateScreen3() { std::array applications {{ - {Symbols::paintbrush, "PTS Colors", Apps::SettingPineTimeStyle}, + {Symbols::list, "About", Apps::SysInfo}, {Symbols::none, "None", Apps::None}, {Symbols::none, "None", Apps::None}, {Symbols::none, "None", Apps::None}, From 28fdc376b23ee2cd87a3ed8925b44a2f6e614ebf Mon Sep 17 00:00:00 2001 From: Tim Keller Date: Thu, 2 Sep 2021 23:01:12 +0000 Subject: [PATCH 152/173] Add some comments --- src/main.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index d5da4283bf..5d304bc4a6 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -160,9 +160,12 @@ Pinetime::System::SystemTask systemTask(spi, heartRateApp, fs); +/* Variable Declarations for variables in noinit SRAM + Increment NoInit_MagicValue upon adding variables to this area +*/ extern uint32_t __start_noinit_data; extern uint32_t __stop_noinit_data; -static constexpr uint32_t NoInit_MagicValue = 0xDEADBEEF; +static constexpr uint32_t NoInit_MagicValue = 0xDEAD0000; uint32_t NoInit_MagicWord __attribute__((section(".noinit"))); std::chrono::time_point NoInit_BackUpTime __attribute__((section(".noinit"))); @@ -327,10 +330,11 @@ int main(void) { // retrieve version stored by bootloader Pinetime::BootloaderVersion::SetVersion(NRF_TIMER2->CC[0]); - // Check Magic Ram and reset lost variables + if (NoInit_MagicWord == NoInit_MagicValue) { dateTimeController.SetCurrentTime(NoInit_BackUpTime); } else { + //Clear Memory to known state memset(&__start_noinit_data,0,(uintptr_t)&__stop_noinit_data-(uintptr_t)&__start_noinit_data); NoInit_MagicWord = NoInit_MagicValue; } From c32ba844e04017a3fd31444c384deb3542bd76be Mon Sep 17 00:00:00 2001 From: "James A. Jerkins" Date: Sat, 4 Sep 2021 15:26:50 -0500 Subject: [PATCH 153/173] Linear decrease of advert rate to conserve battery Start advertising aggressively when powered on then slow down linearly over 75 seconds. This will conserve battery by not advertising rapidly the whole time we are seeking a connection. The slowest rate is approximately once every 4.5 seconds to balance responsiveness and battery life. We use a fixed advertising duration of 5 seconds and start with a 62.5 ms advertising interval. Every 5 seconds (the advertising duration) we step up to a larger advertising interval (slower advertising). We continue to increase the advertising interval linearly for 75 seconds from the start of advertising. At 75 seconds we have an advertising interval of 4.44 seconds which we keep until connected. A reboot will restart the sequence. When we receive a disconnect event we restart the sequence with fast advertising and then slow down as described above. Note that we are not using the BLE high duty cycle setting to change the advertising rate. The rate is managed by repeatedly setting the minimum and maximum intervals. The linear rate of decrease and the slowest interval size were determined experimentally by the author. The 5.3 Core spec suggests that you not advertise slower than once every 1.2 seconds to preserve responsiveness but we ignored that suggestion. --- src/components/ble/NimbleController.cpp | 5 +++++ src/components/ble/NimbleController.h | 1 + 2 files changed, 6 insertions(+) diff --git a/src/components/ble/NimbleController.cpp b/src/components/ble/NimbleController.cpp index 8e0fe75656..bebca2d352 100644 --- a/src/components/ble/NimbleController.cpp +++ b/src/components/ble/NimbleController.cpp @@ -122,6 +122,8 @@ void NimbleController::StartAdvertising() { adv_params.conn_mode = BLE_GAP_CONN_MODE_UND; adv_params.disc_mode = BLE_GAP_DISC_MODE_GEN; + adv_params.itvl_min = advInterval; + adv_params.itvl_max = advInterval + 100; fields.flags = BLE_HS_ADV_F_DISC_GEN | BLE_HS_ADV_F_BREDR_UNSUP; fields.uuids128 = &dfuServiceUuid; @@ -148,6 +150,8 @@ int NimbleController::OnGAPEvent(ble_gap_event* event) { case BLE_GAP_EVENT_ADV_COMPLETE: NRF_LOG_INFO("Advertising event : BLE_GAP_EVENT_ADV_COMPLETE"); NRF_LOG_INFO("reason=%d; status=%d", event->adv_complete.reason, event->connect.status); + if (advInterval < 7100) + advInterval += 500; StartAdvertising(); break; @@ -181,6 +185,7 @@ int NimbleController::OnGAPEvent(ble_gap_event* event) { alertNotificationClient.Reset(); connectionHandle = BLE_HS_CONN_HANDLE_NONE; bleController.Disconnect(); + advInterval = 100; StartAdvertising(); break; diff --git a/src/components/ble/NimbleController.h b/src/components/ble/NimbleController.h index 078d6158a9..79761108dc 100644 --- a/src/components/ble/NimbleController.h +++ b/src/components/ble/NimbleController.h @@ -94,6 +94,7 @@ namespace Pinetime { uint8_t addrType; // 1 = Random, 0 = PUBLIC uint16_t connectionHandle = BLE_HS_CONN_HANDLE_NONE; + uint16_t advInterval = 100; // multiplied by 0.625ms, must be in 32..16384 ble_uuid128_t dfuServiceUuid { .u {.type = BLE_UUID_TYPE_128}, From 4820b2ffe8be0b8d1abefd307a4c0fe6d4d41a73 Mon Sep 17 00:00:00 2001 From: "James A. Jerkins" Date: Sun, 5 Sep 2021 15:52:01 -0500 Subject: [PATCH 154/173] Revert "Linear decrease of advert rate to conserve battery" This reverts commit c32ba844e04017a3fd31444c384deb3542bd76be. --- src/components/ble/NimbleController.cpp | 5 ----- src/components/ble/NimbleController.h | 1 - 2 files changed, 6 deletions(-) diff --git a/src/components/ble/NimbleController.cpp b/src/components/ble/NimbleController.cpp index bebca2d352..8e0fe75656 100644 --- a/src/components/ble/NimbleController.cpp +++ b/src/components/ble/NimbleController.cpp @@ -122,8 +122,6 @@ void NimbleController::StartAdvertising() { adv_params.conn_mode = BLE_GAP_CONN_MODE_UND; adv_params.disc_mode = BLE_GAP_DISC_MODE_GEN; - adv_params.itvl_min = advInterval; - adv_params.itvl_max = advInterval + 100; fields.flags = BLE_HS_ADV_F_DISC_GEN | BLE_HS_ADV_F_BREDR_UNSUP; fields.uuids128 = &dfuServiceUuid; @@ -150,8 +148,6 @@ int NimbleController::OnGAPEvent(ble_gap_event* event) { case BLE_GAP_EVENT_ADV_COMPLETE: NRF_LOG_INFO("Advertising event : BLE_GAP_EVENT_ADV_COMPLETE"); NRF_LOG_INFO("reason=%d; status=%d", event->adv_complete.reason, event->connect.status); - if (advInterval < 7100) - advInterval += 500; StartAdvertising(); break; @@ -185,7 +181,6 @@ int NimbleController::OnGAPEvent(ble_gap_event* event) { alertNotificationClient.Reset(); connectionHandle = BLE_HS_CONN_HANDLE_NONE; bleController.Disconnect(); - advInterval = 100; StartAdvertising(); break; diff --git a/src/components/ble/NimbleController.h b/src/components/ble/NimbleController.h index 79761108dc..078d6158a9 100644 --- a/src/components/ble/NimbleController.h +++ b/src/components/ble/NimbleController.h @@ -94,7 +94,6 @@ namespace Pinetime { uint8_t addrType; // 1 = Random, 0 = PUBLIC uint16_t connectionHandle = BLE_HS_CONN_HANDLE_NONE; - uint16_t advInterval = 100; // multiplied by 0.625ms, must be in 32..16384 ble_uuid128_t dfuServiceUuid { .u {.type = BLE_UUID_TYPE_128}, From 22571d4b384e40d647cd994202956f08ed32d925 Mon Sep 17 00:00:00 2001 From: "James A. Jerkins" Date: Sun, 5 Sep 2021 15:53:20 -0500 Subject: [PATCH 155/173] Advertise fast for at least 30 secs then slow down On power up, advertise aggressively for at least 30 seconds then switch to a longer interval to conserve battery life. This fast/slow pattern is designed to balance connection response time and battery life. When a disconnect event is received restart the fast/slow pattern. When a failed connect event is received, restart the fast/slow pattern. When the screen is activated and ble is not connected, restart the fast/slow pattern. This pattern is consistent with Apple's BLE developer standards (QA 1931). --- src/components/ble/NimbleController.cpp | 13 ++++++++++++- src/components/ble/NimbleController.h | 5 +++++ src/systemtask/SystemTask.cpp | 3 +++ 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/src/components/ble/NimbleController.cpp b/src/components/ble/NimbleController.cpp index 8e0fe75656..226f669440 100644 --- a/src/components/ble/NimbleController.cpp +++ b/src/components/ble/NimbleController.cpp @@ -122,6 +122,15 @@ void NimbleController::StartAdvertising() { adv_params.conn_mode = BLE_GAP_CONN_MODE_UND; adv_params.disc_mode = BLE_GAP_DISC_MODE_GEN; + /* fast advertise for 30 sec */ + if (fastAdvCount < 15) { + adv_params.itvl_min = 32; + adv_params.itvl_max = 47; + fastAdvCount++; + } else { + adv_params.itvl_min = 1636; + adv_params.itvl_max = 1651; + } fields.flags = BLE_HS_ADV_F_DISC_GEN | BLE_HS_ADV_F_BREDR_UNSUP; fields.uuids128 = &dfuServiceUuid; @@ -139,7 +148,7 @@ void NimbleController::StartAdvertising() { rc = ble_gap_adv_rsp_set_fields(&rsp_fields); ASSERT(rc == 0); - rc = ble_gap_adv_start(addrType, NULL, 5000, &adv_params, GAPEventCallback, this); + rc = ble_gap_adv_start(addrType, NULL, 2000, &adv_params, GAPEventCallback, this); ASSERT(rc == 0); } @@ -163,6 +172,7 @@ int NimbleController::OnGAPEvent(ble_gap_event* event) { alertNotificationClient.Reset(); connectionHandle = BLE_HS_CONN_HANDLE_NONE; bleController.Disconnect(); + fastAdvCount = 0; StartAdvertising(); } else { connectionHandle = event->connect.conn_handle; @@ -181,6 +191,7 @@ int NimbleController::OnGAPEvent(ble_gap_event* event) { alertNotificationClient.Reset(); connectionHandle = BLE_HS_CONN_HANDLE_NONE; bleController.Disconnect(); + fastAdvCount = 0; StartAdvertising(); break; diff --git a/src/components/ble/NimbleController.h b/src/components/ble/NimbleController.h index 078d6158a9..473bb1aff6 100644 --- a/src/components/ble/NimbleController.h +++ b/src/components/ble/NimbleController.h @@ -72,6 +72,10 @@ namespace Pinetime { uint16_t connHandle(); void NotifyBatteryLevel(uint8_t level); + void RestartFastAdv() { + fastAdvCount = 0; + } + private: static constexpr const char* deviceName = "InfiniTime"; Pinetime::System::SystemTask& systemTask; @@ -94,6 +98,7 @@ namespace Pinetime { uint8_t addrType; // 1 = Random, 0 = PUBLIC uint16_t connectionHandle = BLE_HS_CONN_HANDLE_NONE; + uint8_t fastAdvCount = 0; ble_uuid128_t dfuServiceUuid { .u {.type = BLE_UUID_TYPE_128}, diff --git a/src/systemtask/SystemTask.cpp b/src/systemtask/SystemTask.cpp index 2dff9254b9..41f346aecc 100644 --- a/src/systemtask/SystemTask.cpp +++ b/src/systemtask/SystemTask.cpp @@ -233,6 +233,9 @@ void SystemTask::Work() { displayApp.PushMessage(Pinetime::Applications::Display::Messages::UpdateBatteryLevel); heartRateApp.PushMessage(Pinetime::Applications::HeartRateTask::Messages::WakeUp); + if (!bleController.IsConnected()) + nimbleController.RestartFastAdv(); + isSleeping = false; isWakingUp = false; isDimmed = false; From 3cc00771fa6528433b2ec4d787dc6bfefd948390 Mon Sep 17 00:00:00 2001 From: NeroBurner Date: Fri, 10 Sep 2021 23:42:49 +0200 Subject: [PATCH 156/173] Run CI on master and develop branch The documentation https://github.com/JF002/InfiniTime/blob/develop/doc/contribute.md#how-to-submit-a-pull-request- tells us to make pull requests against `develop` branch. Update the CI to run on those pull requests to have a check if the PR breaks something unintentionally. --- .github/workflows/main.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 4744eaef7d..bd24359a56 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -9,13 +9,13 @@ name: Build PineTime Firmware # When to run this Workflow... on: - # Run this Workflow when files are updated (Pushed) in the "master" Branch + # Run this Workflow when files are updated (Pushed) in the "master" and "develop" Branch push: - branches: [ master ] + branches: [ master, develop ] - # Also run this Workflow when a Pull Request is created or updated in the "master" Branch + # Also run this Workflow when a Pull Request is created or updated in the "master" and "develop" Branch pull_request: - branches: [ master ] + branches: [ master, develop ] # Steps to run for the Workflow jobs: From 1fb5757655c1cdf0e93f03ad27869e8c043d69f0 Mon Sep 17 00:00:00 2001 From: Mark Russell Date: Fri, 10 Sep 2021 18:40:13 -0400 Subject: [PATCH 157/173] Created basic alarm app --- src/CMakeLists.txt | 5 + src/components/alarm/AlarmController.cpp | 118 +++++++++++ src/components/alarm/AlarmController.h | 50 +++++ src/components/motor/MotorController.cpp | 6 + src/components/motor/MotorController.h | 1 + src/displayapp/Apps.h | 1 + src/displayapp/DisplayApp.cpp | 13 ++ src/displayapp/DisplayApp.h | 4 + src/displayapp/Messages.h | 3 +- src/displayapp/screens/Alarm.cpp | 225 +++++++++++++++++++++ src/displayapp/screens/Alarm.h | 31 +++ src/displayapp/screens/ApplicationList.cpp | 2 +- src/main.cpp | 3 + src/systemtask/Messages.h | 4 +- src/systemtask/SystemTask.cpp | 14 ++ src/systemtask/SystemTask.h | 3 + 16 files changed, 480 insertions(+), 3 deletions(-) create mode 100644 src/components/alarm/AlarmController.cpp create mode 100644 src/components/alarm/AlarmController.h create mode 100644 src/displayapp/screens/Alarm.cpp create mode 100644 src/displayapp/screens/Alarm.h diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index a7242903b8..ccade83e30 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -418,6 +418,7 @@ list(APPEND SOURCE_FILES displayapp/screens/BatteryInfo.cpp displayapp/screens/Steps.cpp displayapp/screens/Timer.cpp + displayapp/screens/Alarm.cpp displayapp/Colors.cpp ## Settings @@ -474,6 +475,7 @@ list(APPEND SOURCE_FILES components/motor/MotorController.cpp components/settings/Settings.cpp components/timer/TimerController.cpp + components/alarm/AlarmController.cpp components/fs/FS.cpp drivers/Cst816s.cpp FreeRTOS/port.c @@ -540,6 +542,7 @@ list(APPEND RECOVERY_SOURCE_FILES components/firmwarevalidator/FirmwareValidator.cpp components/settings/Settings.cpp components/timer/TimerController.cpp + components/alarm/AlarmController.cpp drivers/Cst816s.cpp FreeRTOS/port.c FreeRTOS/port_cmsis_systick.c @@ -612,6 +615,7 @@ set(INCLUDE_FILES displayapp/screens/Metronome.h displayapp/screens/Motion.h displayapp/screens/Timer.h + displayapp/screens/Alarm.h displayapp/Colors.h drivers/St7789.h drivers/SpiNorFlash.h @@ -643,6 +647,7 @@ set(INCLUDE_FILES components/ble/HeartRateService.h components/settings/Settings.h components/timer/TimerController.h + components/alarm/AlarmController.h drivers/Cst816s.h FreeRTOS/portmacro.h FreeRTOS/portmacro_cmsis.h diff --git a/src/components/alarm/AlarmController.cpp b/src/components/alarm/AlarmController.cpp new file mode 100644 index 0000000000..5097936f59 --- /dev/null +++ b/src/components/alarm/AlarmController.cpp @@ -0,0 +1,118 @@ +// +// Created by mrussell on 30.08.21. +// +// Copied from Florian's Timer app + +#include "AlarmController.h" +#include "systemtask/SystemTask.h" +#include "app_timer.h" +#include "task.h" +#include + +using namespace Pinetime::Controllers; +using namespace std::chrono_literals; + +AlarmController::AlarmController(Controllers::DateTime& dateTimeController) : dateTimeController {dateTimeController} { +} + +APP_TIMER_DEF(alarmAppTimer); + +namespace { + void SetOffAlarm(void* p_context) { + auto* controller = static_cast(p_context); + if (controller != nullptr) + controller->SetOffAlarmNow(); + } +} + +void AlarmController::Init() { + app_timer_create(&alarmAppTimer, APP_TIMER_MODE_SINGLE_SHOT, SetOffAlarm); +} + +void AlarmController::SetAlarm(uint8_t alarmHr, uint8_t alarmMin) { + hours = alarmHr; + minutes = alarmMin; + state = AlarmState::Set; + scheduleAlarm(); +} + +void AlarmController::scheduleAlarm() { + // Determine the next time the alarm needs to go off and set the app_timer + app_timer_stop(alarmAppTimer); + + auto now = dateTimeController.CurrentDateTime(); + alarmTime = now; + time_t ttAlarmTime = std::chrono::system_clock::to_time_t(alarmTime); + tm* tmAlarmTime = std::localtime(&ttAlarmTime); + + // If the time being set has already passed today,the alarm should be set for tomorrow + if (hours < dateTimeController.Hours() || (hours == dateTimeController.Hours() && minutes <= dateTimeController.Minutes())) { + tmAlarmTime->tm_mday += 1; + // tm_wday doesn't update automatically + tmAlarmTime->tm_wday = (tmAlarmTime->tm_wday + 1) % 7; + } + + tmAlarmTime->tm_hour = hours; + tmAlarmTime->tm_min = minutes; + tmAlarmTime->tm_sec = 0; + + // if alarm is in weekday-only mode, make sure it shifts to the next weekday + if (recurrence == RecurType::Weekdays) { + if (tmAlarmTime->tm_wday == 0) { // Sunday, shift 1 day + tmAlarmTime->tm_mday += 1; + } else if (tmAlarmTime->tm_wday == 6) { // Saturday, shift 2 days + tmAlarmTime->tm_mday += 2; + } + } + tmAlarmTime->tm_isdst = -1; // use system timezone setting to determine DST + + // now can convert back to a time_point + alarmTime = std::chrono::system_clock::from_time_t(std::mktime(tmAlarmTime)); + auto mSecToAlarm = std::chrono::duration_cast(alarmTime - now).count(); + app_timer_start(alarmAppTimer, APP_TIMER_TICKS(mSecToAlarm), this); +} + +uint32_t AlarmController::SecondsToAlarm() { + return std::chrono::duration_cast(alarmTime - dateTimeController.CurrentDateTime()).count(); +} + +void AlarmController::DisableAlarm() { + app_timer_stop(alarmAppTimer); + state = AlarmState::Not_Set; +} + +void AlarmController::SetOffAlarmNow() { + state = AlarmState::Alerting; + if (systemTask != nullptr) { + systemTask->PushMessage(System::Messages::SetOffAlarm); + } +} + +void AlarmController::StopAlerting() { + if (systemTask != nullptr) { + systemTask->PushMessage(System::Messages::StopRinging); + } + + // Alarm state is off unless this is a recurring alarm + if (recurrence == RecurType::None) { + state = AlarmState::Not_Set; + } else { + state = AlarmState::Set; + // set next instance + scheduleAlarm(); + } +} + +void AlarmController::ToggleRecurrence() { + if (recurrence == AlarmController::RecurType::None) { + recurrence = AlarmController::RecurType::Daily; + } else if (recurrence == AlarmController::RecurType::Daily) { + recurrence = AlarmController::RecurType::Weekdays; + } else { + recurrence = AlarmController::RecurType::None; + } +} + +void AlarmController::Register(Pinetime::System::SystemTask* systemTask) { + this->systemTask = systemTask; +} diff --git a/src/components/alarm/AlarmController.h b/src/components/alarm/AlarmController.h new file mode 100644 index 0000000000..22259da820 --- /dev/null +++ b/src/components/alarm/AlarmController.h @@ -0,0 +1,50 @@ +#pragma once + +#include +#include "app_timer.h" +#include "components/datetime/DateTimeController.h" + +namespace Pinetime { + namespace System { + class SystemTask; + } + namespace Controllers { + class AlarmController { + public: + AlarmController(Controllers::DateTime& dateTimeController); + + void Init(); + void SetAlarm(uint8_t alarmHr, uint8_t alarmMin); + void DisableAlarm(); + void SetOffAlarmNow(); + uint32_t SecondsToAlarm(); + void StopAlerting(); + void Register(System::SystemTask* systemTask); + enum class AlarmState { Not_Set, Set, Alerting }; + enum class RecurType { None, Daily, Weekdays }; + void ToggleRecurrence(); + uint8_t Hours() const { + return hours; + } + uint8_t Minutes() const { + return minutes; + } + AlarmState State() const { + return state; + } + RecurType Recurrence() const { + return recurrence; + } + + private: + Controllers::DateTime& dateTimeController; + System::SystemTask* systemTask = nullptr; + uint8_t hours; + uint8_t minutes; + std::chrono::time_point alarmTime; + AlarmState state = AlarmState::Not_Set; + RecurType recurrence = RecurType::None; + void scheduleAlarm(); + }; + } +} \ No newline at end of file diff --git a/src/components/motor/MotorController.cpp b/src/components/motor/MotorController.cpp index b25e6bc829..5ade19e44a 100644 --- a/src/components/motor/MotorController.cpp +++ b/src/components/motor/MotorController.cpp @@ -42,6 +42,12 @@ void MotorController::StartRinging() { app_timer_start(longVibTimer, APP_TIMER_TICKS(1000), this); } +// This function is the same as StartRinging(), but will ring even if notifications are turned off in Settings +void MotorController::StartRingingDisregardSettings() { + Ring(this); + app_timer_start(longVibTimer, APP_TIMER_TICKS(1000), this); +} + void MotorController::StopRinging() { app_timer_stop(longVibTimer); nrf_gpio_pin_set(pinMotor); diff --git a/src/components/motor/MotorController.h b/src/components/motor/MotorController.h index d2c9fe5f2c..d3b96b07c2 100644 --- a/src/components/motor/MotorController.h +++ b/src/components/motor/MotorController.h @@ -15,6 +15,7 @@ namespace Pinetime { void RunForDuration(uint8_t motorDuration); void StartRinging(); static void StopRinging(); + void StartRingingDisregardSettings(); private: static void Ring(void* p_context); diff --git a/src/displayapp/Apps.h b/src/displayapp/Apps.h index dd51fdb4a0..e3aca8cf00 100644 --- a/src/displayapp/Apps.h +++ b/src/displayapp/Apps.h @@ -12,6 +12,7 @@ namespace Pinetime { NotificationsPreview, Notifications, Timer, + Alarm, FlashLight, BatteryInfo, Music, diff --git a/src/displayapp/DisplayApp.cpp b/src/displayapp/DisplayApp.cpp index d6100ececd..33c67e229c 100644 --- a/src/displayapp/DisplayApp.cpp +++ b/src/displayapp/DisplayApp.cpp @@ -3,6 +3,7 @@ #include #include #include +#include #include "components/battery/BatteryController.h" #include "components/ble/BleController.h" #include "components/datetime/DateTimeController.h" @@ -90,6 +91,7 @@ DisplayApp::DisplayApp(Drivers::St7789& lcd, Pinetime::Controllers::MotorController& motorController, Pinetime::Controllers::MotionController& motionController, Pinetime::Controllers::TimerController& timerController, + Pinetime::Controllers::AlarmController& alarmController, Pinetime::Controllers::TouchHandler& touchHandler) : lcd {lcd}, lvgl {lvgl}, @@ -104,6 +106,7 @@ DisplayApp::DisplayApp(Drivers::St7789& lcd, motorController {motorController}, motionController {motionController}, timerController {timerController}, + alarmController {alarmController}, touchHandler {touchHandler} { } @@ -208,6 +211,13 @@ void DisplayApp::Refresh() { LoadApp(Apps::Timer, DisplayApp::FullRefreshDirections::Down); } break; + case Messages::AlarmTriggered: + if (currentApp == Apps::Alarm) { + auto* alarm = static_cast(currentScreen.get()); + alarm->SetAlerting(); + } else { + LoadApp(Apps::Alarm, DisplayApp::FullRefreshDirections::None); + } case Messages::TouchEvent: { if (state != States::Running) { break; @@ -340,6 +350,9 @@ void DisplayApp::LoadApp(Apps app, DisplayApp::FullRefreshDirections direction) case Apps::Timer: currentScreen = std::make_unique(this, timerController); break; + case Apps::Alarm: + currentScreen = std::make_unique(this, alarmController); + break; // Settings case Apps::QuickSettings: diff --git a/src/displayapp/DisplayApp.h b/src/displayapp/DisplayApp.h index 96951d1c5d..4254523ad9 100644 --- a/src/displayapp/DisplayApp.h +++ b/src/displayapp/DisplayApp.h @@ -14,7 +14,9 @@ #include "components/settings/Settings.h" #include "displayapp/screens/Screen.h" #include "components/timer/TimerController.h" +#include "components/alarm/AlarmController.h" #include "touchhandler/TouchHandler.h" + #include "Messages.h" namespace Pinetime { @@ -57,6 +59,7 @@ namespace Pinetime { Pinetime::Controllers::MotorController& motorController, Pinetime::Controllers::MotionController& motionController, Pinetime::Controllers::TimerController& timerController, + Pinetime::Controllers::AlarmController& alarmController, Pinetime::Controllers::TouchHandler& touchHandler); void Start(); void PushMessage(Display::Messages msg); @@ -82,6 +85,7 @@ namespace Pinetime { Pinetime::Controllers::MotorController& motorController; Pinetime::Controllers::MotionController& motionController; Pinetime::Controllers::TimerController& timerController; + Pinetime::Controllers::AlarmController& alarmController; Pinetime::Controllers::TouchHandler& touchHandler; Pinetime::Controllers::FirmwareValidator validator; diff --git a/src/displayapp/Messages.h b/src/displayapp/Messages.h index 322505e6fe..c23cdfe3f7 100644 --- a/src/displayapp/Messages.h +++ b/src/displayapp/Messages.h @@ -15,7 +15,8 @@ namespace Pinetime { BleFirmwareUpdateStarted, UpdateTimeOut, DimScreen, - RestoreBrightness + RestoreBrightness, + AlarmTriggered }; } } diff --git a/src/displayapp/screens/Alarm.cpp b/src/displayapp/screens/Alarm.cpp new file mode 100644 index 0000000000..e122cabd02 --- /dev/null +++ b/src/displayapp/screens/Alarm.cpp @@ -0,0 +1,225 @@ +#include "Alarm.h" +#include "Screen.h" +#include "Symbols.h" + +using namespace Pinetime::Applications::Screens; +using Pinetime::Controllers::AlarmController; + +static void btnEventHandler(lv_obj_t* obj, lv_event_t event) { + Alarm* screen = static_cast(obj->user_data); + screen->OnButtonEvent(obj, event); +} + +Alarm::Alarm(DisplayApp* app, Controllers::AlarmController& alarmController) + : Screen(app), running {true}, alarmController {alarmController} { + + time = lv_label_create(lv_scr_act(), nullptr); + lv_obj_set_style_local_text_font(time, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, &jetbrains_mono_76); + lv_obj_set_style_local_text_color(time, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_GRAY); + + alarmHours = alarmController.Hours(); + alarmMinutes = alarmController.Minutes(); + lv_label_set_text_fmt(time, "%02lu:%02lu", alarmHours, alarmMinutes); + + lv_obj_align(time, lv_scr_act(), LV_ALIGN_IN_LEFT_MID, 0, -20); + + btnHoursUp = lv_btn_create(lv_scr_act(), nullptr); + btnHoursUp->user_data = this; + lv_obj_set_event_cb(btnHoursUp, btnEventHandler); + lv_obj_align(btnHoursUp, lv_scr_act(), LV_ALIGN_IN_LEFT_MID, 20, -80); + lv_obj_set_height(btnHoursUp, 40); + lv_obj_set_width(btnHoursUp, 60); + txtHrUp = lv_label_create(btnHoursUp, nullptr); + lv_label_set_text(txtHrUp, "+"); + + btnHoursDown = lv_btn_create(lv_scr_act(), nullptr); + btnHoursDown->user_data = this; + lv_obj_set_event_cb(btnHoursDown, btnEventHandler); + lv_obj_align(btnHoursDown, lv_scr_act(), LV_ALIGN_IN_LEFT_MID, 20, +40); + lv_obj_set_height(btnHoursDown, 40); + lv_obj_set_width(btnHoursDown, 60); + txtHrDown = lv_label_create(btnHoursDown, nullptr); + lv_label_set_text(txtHrDown, "-"); + + btnMinutesUp = lv_btn_create(lv_scr_act(), nullptr); + btnMinutesUp->user_data = this; + lv_obj_set_event_cb(btnMinutesUp, btnEventHandler); + lv_obj_align(btnMinutesUp, lv_scr_act(), LV_ALIGN_IN_RIGHT_MID, 10, -80); + lv_obj_set_height(btnMinutesUp, 40); + lv_obj_set_width(btnMinutesUp, 60); + txtMinUp = lv_label_create(btnMinutesUp, nullptr); + lv_label_set_text(txtMinUp, "+"); + + btnMinutesDown = lv_btn_create(lv_scr_act(), nullptr); + btnMinutesDown->user_data = this; + lv_obj_set_event_cb(btnMinutesDown, btnEventHandler); + lv_obj_align(btnMinutesDown, lv_scr_act(), LV_ALIGN_IN_RIGHT_MID, 10, +40); + lv_obj_set_height(btnMinutesDown, 40); + lv_obj_set_width(btnMinutesDown, 60); + txtMinDown = lv_label_create(btnMinutesDown, nullptr); + lv_label_set_text(txtMinDown, "-"); + + btnEnable = lv_btn_create(lv_scr_act(), nullptr); + btnEnable->user_data = this; + lv_obj_set_event_cb(btnEnable, btnEventHandler); + lv_obj_align(btnEnable, lv_scr_act(), LV_ALIGN_IN_BOTTOM_LEFT, 3, -10); + lv_obj_set_height(btnEnable, 40); + txtEnable = lv_label_create(btnEnable, nullptr); + setEnableButtonState(); + + btnRecur = lv_btn_create(lv_scr_act(), nullptr); + btnRecur->user_data = this; + lv_obj_set_event_cb(btnRecur, btnEventHandler); + lv_obj_align(btnRecur, lv_scr_act(), LV_ALIGN_IN_BOTTOM_RIGHT, -3, -10); + lv_obj_set_height(btnRecur, 40); + txtRecur = lv_label_create(btnRecur, nullptr); + setRecurButtonState(); + + btnInfo = lv_btn_create(lv_scr_act(), nullptr); + btnInfo->user_data = this; + lv_obj_set_event_cb(btnInfo, btnEventHandler); + lv_obj_align(btnInfo, lv_scr_act(), LV_ALIGN_CENTER, 30, -80); + lv_obj_set_height(btnInfo, 40); + lv_obj_set_width(btnInfo, 30); + txtInfo = lv_label_create(btnInfo, nullptr); + lv_label_set_text(txtInfo, "i"); +} + +Alarm::~Alarm() { + lv_obj_clean(lv_scr_act()); +} + +void Alarm::OnButtonEvent(lv_obj_t* obj, lv_event_t event) { + using Pinetime::Controllers::AlarmController; + if (event == LV_EVENT_CLICKED) { + if (obj == btnEnable) { + if (alarmController.State() == AlarmController::AlarmState::Alerting) { + alarmController.StopAlerting(); + } else if (alarmController.State() == AlarmController::AlarmState::Set) { + alarmController.DisableAlarm(); + } else { + alarmController.SetAlarm(alarmHours, alarmMinutes); + } + setEnableButtonState(); + return; + } + if (obj == btnInfo) { + showInfo(); + return; + } + if (obj == btnMessage) { + lv_obj_del(txtMessage); + lv_obj_del(btnMessage); + txtMessage = nullptr; + btnMessage = nullptr; + return; + } + // If any other button was pressed, disable the alarm + // this is to make it clear that the alarm won't be set until it is turned back on + // this avoids calling the AlarmController to change the alarm time every time the user hits minute-up or minute-down; + // can just do it once when the alarm is re-enabled + if (alarmController.State() == AlarmController::AlarmState::Set) { + alarmController.DisableAlarm(); + setEnableButtonState(); + } + if (obj == btnMinutesUp) { + if (alarmMinutes >= 59) { + alarmMinutes = 0; + } else { + alarmMinutes++; + } + lv_label_set_text_fmt(time, "%02d:%02d", alarmHours, alarmMinutes); + return; + } + if (obj == btnMinutesDown) { + if (alarmMinutes == 0) { + alarmMinutes = 59; + } else { + alarmMinutes--; + } + lv_label_set_text_fmt(time, "%02d:%02d", alarmHours, alarmMinutes); + return; + } + if (obj == btnHoursUp) { + if (alarmHours >= 23) { + alarmHours = 0; + } else { + alarmHours++; + } + lv_label_set_text_fmt(time, "%02d:%02d", alarmHours, alarmMinutes); + return; + } + if (obj == btnHoursDown) { + if (alarmHours == 0) { + alarmHours = 23; + } else { + alarmHours--; + } + lv_label_set_text_fmt(time, "%02d:%02d", alarmHours, alarmMinutes); + return; + } + if (obj == btnRecur) { + alarmController.ToggleRecurrence(); + setRecurButtonState(); + } + } +} + +void Alarm::SetAlerting() { + setEnableButtonState(); +} + +void Alarm::setEnableButtonState() { + switch (alarmController.State()) { + case AlarmController::AlarmState::Set: + lv_label_set_text(txtEnable, "ON"); + lv_obj_set_style_local_bg_color(btnEnable, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_GREEN); + break; + case AlarmController::AlarmState::Not_Set: + lv_label_set_text(txtEnable, "OFF"); + lv_obj_set_style_local_bg_color(btnEnable, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_GRAY); + break; + case AlarmController::AlarmState::Alerting: + lv_label_set_text(txtEnable, Symbols::stop); + lv_obj_set_style_local_bg_color(btnEnable, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_RED); + } +} + +void Alarm::showInfo() { + btnMessage = lv_btn_create(lv_scr_act(), nullptr); + btnMessage->user_data = this; + lv_obj_set_event_cb(btnMessage, btnEventHandler); + lv_obj_set_height(btnMessage, 200); + lv_obj_set_width(btnMessage, 150); + lv_obj_align(btnMessage, lv_scr_act(), LV_ALIGN_CENTER, 0, 0); + txtMessage = lv_label_create(btnMessage, nullptr); + lv_obj_set_style_local_bg_color(btnMessage, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_NAVY); + + if (alarmController.State() == AlarmController::AlarmState::Set) { + auto timeToAlarm = alarmController.SecondsToAlarm(); + + auto daysToAlarm = timeToAlarm / 86400; + auto hrsToAlarm = (timeToAlarm % 86400) / 3600; + auto minToAlarm = (timeToAlarm % 3600) / 60; + auto secToAlarm = timeToAlarm % 60; + + lv_label_set_text_fmt( + txtMessage, "Time to\nalarm:\n%2d Days\n%2d Hours\n%2d Minutes\n%2d Seconds", daysToAlarm, hrsToAlarm, minToAlarm, secToAlarm); + } else { + lv_label_set_text(txtMessage, "Alarm\nis not\nset."); + } +} + +void Alarm::setRecurButtonState() { + using Pinetime::Controllers::AlarmController; + switch (alarmController.Recurrence()) { + case AlarmController::RecurType::None: + lv_label_set_text(txtRecur, "ONCE"); + break; + case AlarmController::RecurType::Daily: + lv_label_set_text(txtRecur, "DAILY"); + break; + case AlarmController::RecurType::Weekdays: + lv_label_set_text(txtRecur, "WKDAYS"); + } +} \ No newline at end of file diff --git a/src/displayapp/screens/Alarm.h b/src/displayapp/screens/Alarm.h new file mode 100644 index 0000000000..30bcb73eed --- /dev/null +++ b/src/displayapp/screens/Alarm.h @@ -0,0 +1,31 @@ +#pragma once + +#include "Screen.h" +#include "systemtask/SystemTask.h" +#include "../LittleVgl.h" +#include "components/alarm/AlarmController.h" + +namespace Pinetime::Applications::Screens { + class Alarm : public Screen { + public: + Alarm(DisplayApp* app, Controllers::AlarmController& alarmController); + ~Alarm() override; + void SetAlerting(); + void OnButtonEvent(lv_obj_t* obj, lv_event_t event); + + private: + bool running; + uint8_t alarmHours = 0; + uint8_t alarmMinutes = 0; + Controllers::AlarmController& alarmController; + + lv_obj_t *time, *btnEnable, *txtEnable, *btnMinutesUp, *btnMinutesDown, *btnHoursUp, *btnHoursDown, *txtMinUp, *txtMinDown, *txtHrUp, + *txtHrDown, *btnRecur, *txtRecur, *btnMessage, *txtMessage, *btnInfo, *txtInfo; + + enum class EnableButtonState { On, Off, Alerting }; + void setEnableButtonState(); + void setRecurButtonState(); + void setAlarm(); + void showInfo(); + }; +} \ No newline at end of file diff --git a/src/displayapp/screens/ApplicationList.cpp b/src/displayapp/screens/ApplicationList.cpp index 6e7bbb74d1..5c582f6014 100644 --- a/src/displayapp/screens/ApplicationList.cpp +++ b/src/displayapp/screens/ApplicationList.cpp @@ -58,7 +58,7 @@ std::unique_ptr ApplicationList::CreateScreen2() { {"2", Apps::Twos}, {Symbols::chartLine, Apps::Motion}, {Symbols::drum, Apps::Metronome}, - {"", Apps::None}, + {Symbols::clock, Apps::Alarm}, }}; return std::make_unique(1, 2, app, settingsController, batteryController, dateTimeController, applications); diff --git a/src/main.cpp b/src/main.cpp index 79e2ad8692..6a7f5eb342 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -119,6 +119,7 @@ Pinetime::Drivers::WatchdogView watchdogView(watchdog); Pinetime::Controllers::NotificationManager notificationManager; Pinetime::Controllers::MotionController motionController; Pinetime::Controllers::TimerController timerController; +Pinetime::Controllers::AlarmController alarmController {dateTimeController}; Pinetime::Controllers::TouchHandler touchHandler(touchPanel, lvgl); Pinetime::Controllers::FS fs {spiNorFlash}; @@ -139,6 +140,7 @@ Pinetime::Applications::DisplayApp displayApp(lcd, motorController, motionController, timerController, + alarmController, touchHandler); Pinetime::System::SystemTask systemTask(spi, @@ -151,6 +153,7 @@ Pinetime::System::SystemTask systemTask(spi, bleController, dateTimeController, timerController, + alarmController, watchdog, notificationManager, motorController, diff --git a/src/systemtask/Messages.h b/src/systemtask/Messages.h index 3a195e2d41..93fcf9407a 100644 --- a/src/systemtask/Messages.h +++ b/src/systemtask/Messages.h @@ -20,7 +20,9 @@ namespace Pinetime { EnableSleeping, DisableSleeping, OnNewDay, - OnChargingEvent + OnChargingEvent, + SetOffAlarm, + StopRinging }; } } diff --git a/src/systemtask/SystemTask.cpp b/src/systemtask/SystemTask.cpp index 0617b0ced0..98685c316f 100644 --- a/src/systemtask/SystemTask.cpp +++ b/src/systemtask/SystemTask.cpp @@ -57,6 +57,7 @@ SystemTask::SystemTask(Drivers::SpiMaster& spi, Controllers::Ble& bleController, Controllers::DateTime& dateTimeController, Controllers::TimerController& timerController, + Controllers::AlarmController& alarmController, Drivers::Watchdog& watchdog, Pinetime::Controllers::NotificationManager& notificationManager, Pinetime::Controllers::MotorController& motorController, @@ -79,6 +80,7 @@ SystemTask::SystemTask(Drivers::SpiMaster& spi, bleController {bleController}, dateTimeController {dateTimeController}, timerController {timerController}, + alarmController {alarmController}, watchdog {watchdog}, notificationManager {notificationManager}, motorController {motorController}, @@ -132,6 +134,8 @@ void SystemTask::Work() { motionSensor.SoftReset(); timerController.Register(this); timerController.Init(); + alarmController.Register(this); + alarmController.Init(); // Reset the TWI device because the motion sensor chip most probably crashed it... twiMaster.Sleep(); @@ -275,6 +279,16 @@ void SystemTask::Work() { motorController.RunForDuration(35); displayApp.PushMessage(Pinetime::Applications::Display::Messages::TimerDone); break; + case Messages::SetOffAlarm: + if (isSleeping && !isWakingUp) { + GoToRunning(); + } + motorController.StartRingingDisregardSettings(); + displayApp.PushMessage(Pinetime::Applications::Display::Messages::AlarmTriggered); + break; + case Messages::StopRinging: + motorController.StopRinging(); + break; case Messages::BleConnected: ReloadIdleTimer(); isBleDiscoveryTimerRunning = true; diff --git a/src/systemtask/SystemTask.h b/src/systemtask/SystemTask.h index 0266ba8a06..cbd98d26cd 100644 --- a/src/systemtask/SystemTask.h +++ b/src/systemtask/SystemTask.h @@ -16,6 +16,7 @@ #include "components/ble/NotificationManager.h" #include "components/motor/MotorController.h" #include "components/timer/TimerController.h" +#include "components/alarm/AlarmController.h" #include "components/fs/FS.h" #include "touchhandler/TouchHandler.h" @@ -56,6 +57,7 @@ namespace Pinetime { Controllers::Ble& bleController, Controllers::DateTime& dateTimeController, Controllers::TimerController& timerController, + Controllers::AlarmController& alarmController, Drivers::Watchdog& watchdog, Pinetime::Controllers::NotificationManager& notificationManager, Pinetime::Controllers::MotorController& motorController, @@ -100,6 +102,7 @@ namespace Pinetime { Pinetime::Controllers::Ble& bleController; Pinetime::Controllers::DateTime& dateTimeController; Pinetime::Controllers::TimerController& timerController; + Pinetime::Controllers::AlarmController& alarmController; QueueHandle_t systemTasksMsgQueue; std::atomic isSleeping {false}; std::atomic isGoingToSleep {false}; From 3ee4876214b70c107cabbb54f865e646e99f0d73 Mon Sep 17 00:00:00 2001 From: Riku Isokoski Date: Sun, 12 Sep 2021 11:08:25 +0300 Subject: [PATCH 158/173] Toggle notifications only, keep vibrations. --- src/components/ble/NotificationManager.cpp | 8 -------- src/components/ble/NotificationManager.h | 5 +---- src/components/motor/MotorController.cpp | 10 ---------- src/components/motor/MotorController.h | 5 ++--- src/components/settings/Settings.h | 14 +++++++------- src/displayapp/screens/Notifications.cpp | 4 ---- src/displayapp/screens/settings/QuickSettings.cpp | 6 +++--- src/main.cpp | 2 +- src/systemtask/SystemTask.cpp | 8 +++++--- 9 files changed, 19 insertions(+), 43 deletions(-) diff --git a/src/components/ble/NotificationManager.cpp b/src/components/ble/NotificationManager.cpp index b1b0e6b262..7ffed3006e 100644 --- a/src/components/ble/NotificationManager.cpp +++ b/src/components/ble/NotificationManager.cpp @@ -79,14 +79,6 @@ bool NotificationManager::AreNewNotificationsAvailable() { return newNotification; } -bool NotificationManager::IsVibrationEnabled() { - return vibrationEnabled; -} - -void NotificationManager::ToggleVibrations() { - vibrationEnabled = !vibrationEnabled; -} - bool NotificationManager::ClearNewNotificationFlag() { return newNotification.exchange(false); } diff --git a/src/components/ble/NotificationManager.h b/src/components/ble/NotificationManager.h index d4072cc2ed..40f174ea25 100644 --- a/src/components/ble/NotificationManager.h +++ b/src/components/ble/NotificationManager.h @@ -44,8 +44,6 @@ namespace Pinetime { Notification GetPrevious(Notification::Id id); bool ClearNewNotificationFlag(); bool AreNewNotificationsAvailable(); - bool IsVibrationEnabled(); - void ToggleVibrations(); static constexpr size_t MaximumMessageSize() { return MessageSize; @@ -60,7 +58,6 @@ namespace Pinetime { uint8_t writeIndex = 0; bool empty = true; std::atomic newNotification {false}; - bool vibrationEnabled = true; }; } -} \ No newline at end of file +} diff --git a/src/components/motor/MotorController.cpp b/src/components/motor/MotorController.cpp index b25e6bc829..c79ecdd2af 100644 --- a/src/components/motor/MotorController.cpp +++ b/src/components/motor/MotorController.cpp @@ -8,9 +8,6 @@ APP_TIMER_DEF(longVibTimer); using namespace Pinetime::Controllers; -MotorController::MotorController(Controllers::Settings& settingsController) : settingsController {settingsController} { -} - void MotorController::Init() { nrf_gpio_cfg_output(pinMotor); nrf_gpio_pin_set(pinMotor); @@ -26,18 +23,11 @@ void MotorController::Ring(void* p_context) { } void MotorController::RunForDuration(uint8_t motorDuration) { - if (settingsController.GetVibrationStatus() == Controllers::Settings::Vibration::OFF) { - return; - } - nrf_gpio_pin_clear(pinMotor); app_timer_start(shortVibTimer, APP_TIMER_TICKS(motorDuration), nullptr); } void MotorController::StartRinging() { - if (settingsController.GetVibrationStatus() == Controllers::Settings::Vibration::OFF) { - return; - } Ring(this); app_timer_start(longVibTimer, APP_TIMER_TICKS(1000), this); } diff --git a/src/components/motor/MotorController.h b/src/components/motor/MotorController.h index d2c9fe5f2c..574b86c8fc 100644 --- a/src/components/motor/MotorController.h +++ b/src/components/motor/MotorController.h @@ -2,7 +2,6 @@ #include #include "app_timer.h" -#include "components/settings/Settings.h" namespace Pinetime { namespace Controllers { @@ -10,7 +9,8 @@ namespace Pinetime { class MotorController { public: - MotorController(Controllers::Settings& settingsController); + MotorController() = default; + void Init(); void RunForDuration(uint8_t motorDuration); void StartRinging(); @@ -18,7 +18,6 @@ namespace Pinetime { private: static void Ring(void* p_context); - Controllers::Settings& settingsController; static void StopMotor(void* p_context); }; } diff --git a/src/components/settings/Settings.h b/src/components/settings/Settings.h index a294ab7840..cb7555f33f 100644 --- a/src/components/settings/Settings.h +++ b/src/components/settings/Settings.h @@ -11,7 +11,7 @@ namespace Pinetime { class Settings { public: enum class ClockType : uint8_t { H24, H12 }; - enum class Vibration : uint8_t { ON, OFF }; + enum class Notification : uint8_t { ON, OFF }; enum class WakeUpMode : uint8_t { SingleTap = 0, DoubleTap = 1, @@ -93,14 +93,14 @@ namespace Pinetime { return settings.clockType; }; - void SetVibrationStatus(Vibration status) { - if (status != settings.vibrationStatus) { + void SetNotificationStatus(Notification status) { + if (status != settings.notificationStatus) { settingsChanged = true; } - settings.vibrationStatus = status; + settings.notificationStatus = status; }; - Vibration GetVibrationStatus() const { - return settings.vibrationStatus; + Notification GetNotificationStatus() const { + return settings.notificationStatus; }; void SetScreenTimeOut(uint32_t timeout) { @@ -170,7 +170,7 @@ namespace Pinetime { uint32_t screenTimeOut = 15000; ClockType clockType = ClockType::H24; - Vibration vibrationStatus = Vibration::ON; + Notification notificationStatus = Notification::ON; uint8_t clockFace = 0; diff --git a/src/displayapp/screens/Notifications.cpp b/src/displayapp/screens/Notifications.cpp index 22eb290e8e..3f20d38abb 100644 --- a/src/displayapp/screens/Notifications.cpp +++ b/src/displayapp/screens/Notifications.cpp @@ -129,10 +129,6 @@ bool Notifications::OnTouchEvent(Pinetime::Applications::TouchEvents event) { alertNotificationService); } return true; - case Pinetime::Applications::TouchEvents::LongTap: { - // notificationManager.ToggleVibrations(); - return true; - } default: return false; } diff --git a/src/displayapp/screens/settings/QuickSettings.cpp b/src/displayapp/screens/settings/QuickSettings.cpp index 22b5636054..691c40c848 100644 --- a/src/displayapp/screens/settings/QuickSettings.cpp +++ b/src/displayapp/screens/settings/QuickSettings.cpp @@ -88,7 +88,7 @@ QuickSettings::QuickSettings(Pinetime::Applications::DisplayApp* app, btn3_lvl = lv_label_create(btn3, nullptr); lv_obj_set_style_local_text_font(btn3_lvl, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, &lv_font_sys_48); - if (settingsController.GetVibrationStatus() == Controllers::Settings::Vibration::ON) { + if (settingsController.GetNotificationStatus() == Controllers::Settings::Notification::ON) { lv_obj_add_state(btn3, LV_STATE_CHECKED); lv_label_set_text_static(btn3_lvl, Symbols::notificationsOn); } else { @@ -142,11 +142,11 @@ void QuickSettings::OnButtonEvent(lv_obj_t* object, lv_event_t event) { } else if (object == btn3 && event == LV_EVENT_VALUE_CHANGED) { if (lv_obj_get_state(btn3, LV_BTN_PART_MAIN) & LV_STATE_CHECKED) { - settingsController.SetVibrationStatus(Controllers::Settings::Vibration::ON); + settingsController.SetNotificationStatus(Controllers::Settings::Notification::ON); motorController.RunForDuration(35); lv_label_set_text_static(btn3_lvl, Symbols::notificationsOn); } else { - settingsController.SetVibrationStatus(Controllers::Settings::Vibration::OFF); + settingsController.SetNotificationStatus(Controllers::Settings::Notification::OFF); lv_label_set_text_static(btn3_lvl, Symbols::notificationsOff); } diff --git a/src/main.cpp b/src/main.cpp index 79e2ad8692..cea66bf35b 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -123,7 +123,7 @@ Pinetime::Controllers::TouchHandler touchHandler(touchPanel, lvgl); Pinetime::Controllers::FS fs {spiNorFlash}; Pinetime::Controllers::Settings settingsController {fs}; -Pinetime::Controllers::MotorController motorController {settingsController}; +Pinetime::Controllers::MotorController motorController {}; Pinetime::Applications::DisplayApp displayApp(lcd, diff --git a/src/systemtask/SystemTask.cpp b/src/systemtask/SystemTask.cpp index 0617b0ced0..fcff223cba 100644 --- a/src/systemtask/SystemTask.cpp +++ b/src/systemtask/SystemTask.cpp @@ -263,10 +263,12 @@ void SystemTask::Work() { displayApp.PushMessage(Pinetime::Applications::Display::Messages::UpdateDateTime); break; case Messages::OnNewNotification: - if (isSleeping && !isWakingUp) { - GoToRunning(); + if (settingsController.GetNotificationStatus() == Pinetime::Controllers::Settings::Notification::ON) { + if (isSleeping && !isWakingUp) { + GoToRunning(); + } + displayApp.PushMessage(Pinetime::Applications::Display::Messages::NewNotification); } - displayApp.PushMessage(Pinetime::Applications::Display::Messages::NewNotification); break; case Messages::OnTimerDone: if (isSleeping && !isWakingUp) { From e614af1c4a53e943256b3b2acee4bfe7d7204bbf Mon Sep 17 00:00:00 2001 From: hubmartin Date: Mon, 13 Sep 2021 11:41:51 +0200 Subject: [PATCH 159/173] Add WATCH_COLMI_P8 option to cmake & docs --- CMakeLists.txt | 9 +++++++++ doc/buildAndProgram.md | 1 + 2 files changed, 10 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index cc41a08744..f2402e5790 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -51,6 +51,14 @@ if(BUILD_DFU) set(BUILD_DFU true) endif() +option(WATCH_COLMI_P8 "Build for the Colmi P8" OFF) +set(TARGET_DEVICE "PineTime") + +if(WATCH_COLMI_P8) + set(TARGET_DEVICE "Colmi P8") + add_definitions(-DWATCH_P8) +endif() + set(PROJECT_GIT_COMMIT_HASH "") execute_process(COMMAND git rev-parse --short HEAD @@ -68,6 +76,7 @@ message(" * Version : " ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${P message(" * Toolchain : " ${ARM_NONE_EABI_TOOLCHAIN_PATH}) message(" * GitRef(S) : " ${PROJECT_GIT_COMMIT_HASH}) message(" * NRF52 SDK : " ${NRF5_SDK_PATH}) +message(" * Target device : " ${TARGET_DEVICE}) set(PROGRAMMER "???") if(USE_JLINK) message(" * Programmer/debugger : JLINK") diff --git a/doc/buildAndProgram.md b/doc/buildAndProgram.md index 87b6dd9a5d..e97bb30d51 100644 --- a/doc/buildAndProgram.md +++ b/doc/buildAndProgram.md @@ -28,6 +28,7 @@ CMake configures the project according to variables you specify the command line **GDB_CLIENT_BIN_PATH**|Path to arm-none-eabi-gdb executable. Used only if `USE_GDB_CLIENT` is 1.|`-DGDB_CLIENT_BIN_PATH=/home/jf/nrf52/gcc-arm-none-eabi-9-2019-q4-major/bin/arm-none-eabi-gdb` **GDB_CLIENT_TARGET_REMOTE**|Target remote connection string. Used only if `USE_GDB_CLIENT` is 1.|`-DGDB_CLIENT_TARGET_REMOTE=/dev/ttyACM0` **BUILD_DFU (\*\*)**|Build DFU files while building (needs [adafruit-nrfutil](https://github.com/adafruit/Adafruit_nRF52_nrfutil)).|`-DBUILD_DFU=1` +**WATCH_COLMI_P8**|Use pin configuration for Colmi P8 watch|`-DWATCH_COLMI_P8=1` ####(**) Note about **CMAKE_BUILD_TYPE**: By default, this variable is set to *Release*. It compiles the code with size and speed optimizations. We use this value for all the binaries we publish when we [release](https://github.com/JF002/InfiniTime/releases) new versions of InfiniTime. From 84a93b54410681ce1aaae80ba7a7e6d3300dcfa1 Mon Sep 17 00:00:00 2001 From: Tim Gates Date: Tue, 14 Sep 2021 04:02:53 +1000 Subject: [PATCH 160/173] docs: Fix a few typos (#606) * docs: Fix a few typos There are small typos in: - doc/versioning.md - src/components/ble/NimbleController.cpp - src/libs/mynewt-nimble/CODING_STANDARDS.md - src/libs/mynewt-nimble/docs/btshell/btshell_GAP.rst - src/systemtask/SystemTask.cpp Fixes: - Should read `milliseconds` rather than `miliseconds`. - Should read `unnecessary` rather than `uncesseray`. - Should read `target` rather than `tharget`. - Should read `project` rather than `projct`. - Should read `preferred` rather than `prefered`. - Should read `functioning` rather than `functionning`. - Should read `forever` rather than `forver`. - Should read `existing` rather than `exisiting`. --- cmake-nRF5x/readme.md | 2 +- doc/versioning.md | 2 +- src/components/ble/NimbleController.cpp | 2 +- src/systemtask/SystemTask.cpp | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/cmake-nRF5x/readme.md b/cmake-nRF5x/readme.md index 2ce76892db..0127a2e6e5 100755 --- a/cmake-nRF5x/readme.md +++ b/cmake-nRF5x/readme.md @@ -98,7 +98,7 @@ The script makes use of the following tools: After setup you can use cmake as usual: -1. Generate the actual build files (out-of-source builds are strongly recomended): +1. Generate the actual build files (out-of-source builds are strongly recommended): ```commandline cmake -H. -B"cmake-build" -G "Unix Makefiles" diff --git a/doc/versioning.md b/doc/versioning.md index b08af71479..48e05043f0 100644 --- a/doc/versioning.md +++ b/doc/versioning.md @@ -3,4 +3,4 @@ The versioning of this project is based on [Semantic versionning](https://semver - The **patch** is incremented when we fix a bug on a **released** version (most of the time using a **hotfix** branch). - The **minor** is incremented when we release a new version with new features. It corresponds to a merge of **develop** into **master**. - - The **major** should be incremented when a breaking change is made to the application. We still have to define what is a breaking change in the context of this project. For now, I suggest that it stays **0** until we have a fully functionning firmware suited for the final user. \ No newline at end of file + - The **major** should be incremented when a breaking change is made to the application. We still have to define what is a breaking change in the context of this project. For now, I suggest that it stays **0** until we have a fully functioning firmware suited for the final user. \ No newline at end of file diff --git a/src/components/ble/NimbleController.cpp b/src/components/ble/NimbleController.cpp index 5eb227bf00..bde9b076cb 100644 --- a/src/components/ble/NimbleController.cpp +++ b/src/components/ble/NimbleController.cpp @@ -126,7 +126,7 @@ void NimbleController::StartAdvertising() { // ASSERT(res == 0);// TODO I've disabled these ASSERT as they sometime asserts and reset the mcu. // For now, the advertising is restarted as soon as it ends. There may be a race condition // that prevent the advertising from restarting reliably. - // I remove the assert to prevent this uncesseray crash, but in the long term, the management of + // I remove the assert to prevent this unnecessary crash, but in the long term, the management of // the advertising should be improve (better error handling, and advertise for 3 minutes after // the application has been woken up, for example. } diff --git a/src/systemtask/SystemTask.cpp b/src/systemtask/SystemTask.cpp index d9434b3496..690a453da4 100644 --- a/src/systemtask/SystemTask.cpp +++ b/src/systemtask/SystemTask.cpp @@ -350,7 +350,7 @@ void SystemTask::Work() { if (bleDiscoveryTimer == 0) { isBleDiscoveryTimerRunning = false; // Services discovery is deffered from 3 seconds to avoid the conflicts between the host communicating with the - // tharget and vice-versa. I'm not sure if this is the right way to handle this... + // target and vice-versa. I'm not sure if this is the right way to handle this... nimbleController.StartDiscovery(); } else { bleDiscoveryTimer--; From 6356c7f276d09ab32d6f1c1338dac0b00a602232 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-Fran=C3=A7ois=20Milants?= Date: Mon, 13 Sep 2021 20:35:51 +0200 Subject: [PATCH 161/173] Fix DisplayAppRecovery : fix include error by forward declaring Controllers in header file. --- src/displayapp/DisplayAppRecovery.cpp | 1 + src/displayapp/DisplayAppRecovery.h | 32 ++++++++++++++++----------- 2 files changed, 20 insertions(+), 13 deletions(-) diff --git a/src/displayapp/DisplayAppRecovery.cpp b/src/displayapp/DisplayAppRecovery.cpp index 17612ef057..7a20262988 100644 --- a/src/displayapp/DisplayAppRecovery.cpp +++ b/src/displayapp/DisplayAppRecovery.cpp @@ -5,6 +5,7 @@ #include #include #include "displayapp/icons/infinitime/infinitime-nb.c" +#include "components/ble/BleController.h" using namespace Pinetime::Applications; diff --git a/src/displayapp/DisplayAppRecovery.h b/src/displayapp/DisplayAppRecovery.h index 8b2bc7f515..4184ea49da 100644 --- a/src/displayapp/DisplayAppRecovery.h +++ b/src/displayapp/DisplayAppRecovery.h @@ -6,32 +6,38 @@ #include #include #include "components/gfx/Gfx.h" -#include "components/battery/BatteryController.h" -#include "components/brightness/BrightnessController.h" -#include "components/ble/BleController.h" -#include "components/datetime/DateTimeController.h" -#include "components/ble/NotificationManager.h" -#include "components/firmwarevalidator/FirmwareValidator.h" #include "drivers/Cst816s.h" #include #include -#include -#include #include -#include #include "TouchEvents.h" #include "Apps.h" #include "Messages.h" #include "DummyLittleVgl.h" -#include "components/timer/TimerController.h" namespace Pinetime { - namespace System { - class SystemTask; - }; + namespace Drivers { + class St7789; + class Cst816S; + class WatchdogView; + } namespace Controllers { + class Settings; + class Battery; + class Ble; + class DateTime; + class NotificationManager; + class HeartRateController; + class MotionController; class TouchHandler; + class MotorController; + class TimerController; } + + namespace System { + class SystemTask; + }; + namespace Applications { class DisplayApp { public: From bfe13d9d6849cf37f2d5a011990af85a1b503672 Mon Sep 17 00:00:00 2001 From: Mark Russell Date: Mon, 13 Sep 2021 15:26:28 -0400 Subject: [PATCH 162/173] Fixes based on code reviews (formatting, UI code) --- src/components/alarm/AlarmController.cpp | 49 ++++++------- src/components/alarm/AlarmController.h | 26 +++++-- src/displayapp/screens/Alarm.cpp | 88 +++++++++++++++--------- src/displayapp/screens/Alarm.h | 56 ++++++++++----- src/systemtask/SystemTask.cpp | 3 +- 5 files changed, 133 insertions(+), 89 deletions(-) diff --git a/src/components/alarm/AlarmController.cpp b/src/components/alarm/AlarmController.cpp index 5097936f59..31a3191263 100644 --- a/src/components/alarm/AlarmController.cpp +++ b/src/components/alarm/AlarmController.cpp @@ -1,8 +1,16 @@ -// -// Created by mrussell on 30.08.21. -// -// Copied from Florian's Timer app - +/* Copyright (C) 2021 JF, Adam Pigg, Avamander + This file is part of InfiniTime. + InfiniTime is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + InfiniTime is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ #include "AlarmController.h" #include "systemtask/SystemTask.h" #include "app_timer.h" @@ -25,18 +33,19 @@ namespace { } } -void AlarmController::Init() { +void AlarmController::Init(System::SystemTask* systemTask) { app_timer_create(&alarmAppTimer, APP_TIMER_MODE_SINGLE_SHOT, SetOffAlarm); + this->systemTask = systemTask; } void AlarmController::SetAlarm(uint8_t alarmHr, uint8_t alarmMin) { hours = alarmHr; minutes = alarmMin; state = AlarmState::Set; - scheduleAlarm(); + ScheduleAlarm(); } -void AlarmController::scheduleAlarm() { +void AlarmController::ScheduleAlarm() { // Determine the next time the alarm needs to go off and set the app_timer app_timer_stop(alarmAppTimer); @@ -83,15 +92,11 @@ void AlarmController::DisableAlarm() { void AlarmController::SetOffAlarmNow() { state = AlarmState::Alerting; - if (systemTask != nullptr) { - systemTask->PushMessage(System::Messages::SetOffAlarm); - } + systemTask->PushMessage(System::Messages::SetOffAlarm); } void AlarmController::StopAlerting() { - if (systemTask != nullptr) { - systemTask->PushMessage(System::Messages::StopRinging); - } + systemTask->PushMessage(System::Messages::StopRinging); // Alarm state is off unless this is a recurring alarm if (recurrence == RecurType::None) { @@ -99,20 +104,6 @@ void AlarmController::StopAlerting() { } else { state = AlarmState::Set; // set next instance - scheduleAlarm(); + ScheduleAlarm(); } } - -void AlarmController::ToggleRecurrence() { - if (recurrence == AlarmController::RecurType::None) { - recurrence = AlarmController::RecurType::Daily; - } else if (recurrence == AlarmController::RecurType::Daily) { - recurrence = AlarmController::RecurType::Weekdays; - } else { - recurrence = AlarmController::RecurType::None; - } -} - -void AlarmController::Register(Pinetime::System::SystemTask* systemTask) { - this->systemTask = systemTask; -} diff --git a/src/components/alarm/AlarmController.h b/src/components/alarm/AlarmController.h index 22259da820..140c9c8042 100644 --- a/src/components/alarm/AlarmController.h +++ b/src/components/alarm/AlarmController.h @@ -1,3 +1,16 @@ +/* Copyright (C) 2021 JF, Adam Pigg, Avamander + This file is part of InfiniTime. + InfiniTime is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + InfiniTime is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ #pragma once #include @@ -13,16 +26,14 @@ namespace Pinetime { public: AlarmController(Controllers::DateTime& dateTimeController); - void Init(); + void Init(System::SystemTask* systemTask); void SetAlarm(uint8_t alarmHr, uint8_t alarmMin); void DisableAlarm(); void SetOffAlarmNow(); uint32_t SecondsToAlarm(); void StopAlerting(); - void Register(System::SystemTask* systemTask); enum class AlarmState { Not_Set, Set, Alerting }; enum class RecurType { None, Daily, Weekdays }; - void ToggleRecurrence(); uint8_t Hours() const { return hours; } @@ -35,6 +46,9 @@ namespace Pinetime { RecurType Recurrence() const { return recurrence; } + void SetRecurrence(RecurType recurType) { + recurrence = recurType; + } private: Controllers::DateTime& dateTimeController; @@ -42,9 +56,9 @@ namespace Pinetime { uint8_t hours; uint8_t minutes; std::chrono::time_point alarmTime; - AlarmState state = AlarmState::Not_Set; + AlarmState state = AlarmState::Not_Set; RecurType recurrence = RecurType::None; - void scheduleAlarm(); + void ScheduleAlarm(); }; } -} \ No newline at end of file +} diff --git a/src/displayapp/screens/Alarm.cpp b/src/displayapp/screens/Alarm.cpp index e122cabd02..a2bb5c625a 100644 --- a/src/displayapp/screens/Alarm.cpp +++ b/src/displayapp/screens/Alarm.cpp @@ -1,3 +1,16 @@ +/* Copyright (C) 2021 JF, Adam Pigg, Avamander + This file is part of InfiniTime. + InfiniTime is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + InfiniTime is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ #include "Alarm.h" #include "Screen.h" #include "Symbols.h" @@ -21,66 +34,61 @@ Alarm::Alarm(DisplayApp* app, Controllers::AlarmController& alarmController) alarmMinutes = alarmController.Minutes(); lv_label_set_text_fmt(time, "%02lu:%02lu", alarmHours, alarmMinutes); - lv_obj_align(time, lv_scr_act(), LV_ALIGN_IN_LEFT_MID, 0, -20); + lv_obj_align(time, lv_scr_act(), LV_ALIGN_CENTER, 0, -25); btnHoursUp = lv_btn_create(lv_scr_act(), nullptr); btnHoursUp->user_data = this; lv_obj_set_event_cb(btnHoursUp, btnEventHandler); - lv_obj_align(btnHoursUp, lv_scr_act(), LV_ALIGN_IN_LEFT_MID, 20, -80); - lv_obj_set_height(btnHoursUp, 40); - lv_obj_set_width(btnHoursUp, 60); + lv_obj_set_size(btnHoursUp, 60, 40); + lv_obj_align(btnHoursUp, lv_scr_act(), LV_ALIGN_IN_LEFT_MID, 20, -85); txtHrUp = lv_label_create(btnHoursUp, nullptr); lv_label_set_text(txtHrUp, "+"); btnHoursDown = lv_btn_create(lv_scr_act(), nullptr); btnHoursDown->user_data = this; lv_obj_set_event_cb(btnHoursDown, btnEventHandler); - lv_obj_align(btnHoursDown, lv_scr_act(), LV_ALIGN_IN_LEFT_MID, 20, +40); - lv_obj_set_height(btnHoursDown, 40); - lv_obj_set_width(btnHoursDown, 60); + lv_obj_set_size(btnHoursDown, 60, 40); + lv_obj_align(btnHoursDown, lv_scr_act(), LV_ALIGN_IN_LEFT_MID, 20, 35); txtHrDown = lv_label_create(btnHoursDown, nullptr); lv_label_set_text(txtHrDown, "-"); btnMinutesUp = lv_btn_create(lv_scr_act(), nullptr); btnMinutesUp->user_data = this; lv_obj_set_event_cb(btnMinutesUp, btnEventHandler); - lv_obj_align(btnMinutesUp, lv_scr_act(), LV_ALIGN_IN_RIGHT_MID, 10, -80); - lv_obj_set_height(btnMinutesUp, 40); - lv_obj_set_width(btnMinutesUp, 60); + lv_obj_set_size(btnMinutesUp, 60, 40); + lv_obj_align(btnMinutesUp, lv_scr_act(), LV_ALIGN_IN_RIGHT_MID, -20, -85); txtMinUp = lv_label_create(btnMinutesUp, nullptr); lv_label_set_text(txtMinUp, "+"); btnMinutesDown = lv_btn_create(lv_scr_act(), nullptr); btnMinutesDown->user_data = this; lv_obj_set_event_cb(btnMinutesDown, btnEventHandler); - lv_obj_align(btnMinutesDown, lv_scr_act(), LV_ALIGN_IN_RIGHT_MID, 10, +40); - lv_obj_set_height(btnMinutesDown, 40); - lv_obj_set_width(btnMinutesDown, 60); + lv_obj_set_size(btnMinutesDown, 60, 40); + lv_obj_align(btnMinutesDown, lv_scr_act(), LV_ALIGN_IN_RIGHT_MID, -20, 35); txtMinDown = lv_label_create(btnMinutesDown, nullptr); lv_label_set_text(txtMinDown, "-"); btnEnable = lv_btn_create(lv_scr_act(), nullptr); btnEnable->user_data = this; lv_obj_set_event_cb(btnEnable, btnEventHandler); - lv_obj_align(btnEnable, lv_scr_act(), LV_ALIGN_IN_BOTTOM_LEFT, 3, -10); - lv_obj_set_height(btnEnable, 40); + lv_obj_set_size(btnEnable, 115, 50); + lv_obj_align(btnEnable, lv_scr_act(), LV_ALIGN_IN_BOTTOM_LEFT, 0, 0); txtEnable = lv_label_create(btnEnable, nullptr); - setEnableButtonState(); + SetEnableButtonState(); btnRecur = lv_btn_create(lv_scr_act(), nullptr); btnRecur->user_data = this; lv_obj_set_event_cb(btnRecur, btnEventHandler); - lv_obj_align(btnRecur, lv_scr_act(), LV_ALIGN_IN_BOTTOM_RIGHT, -3, -10); - lv_obj_set_height(btnRecur, 40); + lv_obj_set_size(btnRecur, 115, 50); + lv_obj_align(btnRecur, lv_scr_act(), LV_ALIGN_IN_BOTTOM_RIGHT, 0, 0); txtRecur = lv_label_create(btnRecur, nullptr); - setRecurButtonState(); + SetRecurButtonState(); btnInfo = lv_btn_create(lv_scr_act(), nullptr); btnInfo->user_data = this; lv_obj_set_event_cb(btnInfo, btnEventHandler); - lv_obj_align(btnInfo, lv_scr_act(), LV_ALIGN_CENTER, 30, -80); - lv_obj_set_height(btnInfo, 40); - lv_obj_set_width(btnInfo, 30); + lv_obj_set_size(btnInfo, 50, 40); + lv_obj_align(btnInfo, lv_scr_act(), LV_ALIGN_CENTER, 0, -85); txtInfo = lv_label_create(btnInfo, nullptr); lv_label_set_text(txtInfo, "i"); } @@ -100,11 +108,11 @@ void Alarm::OnButtonEvent(lv_obj_t* obj, lv_event_t event) { } else { alarmController.SetAlarm(alarmHours, alarmMinutes); } - setEnableButtonState(); + SetEnableButtonState(); return; } if (obj == btnInfo) { - showInfo(); + ShowInfo(); return; } if (obj == btnMessage) { @@ -120,7 +128,7 @@ void Alarm::OnButtonEvent(lv_obj_t* obj, lv_event_t event) { // can just do it once when the alarm is re-enabled if (alarmController.State() == AlarmController::AlarmState::Set) { alarmController.DisableAlarm(); - setEnableButtonState(); + SetEnableButtonState(); } if (obj == btnMinutesUp) { if (alarmMinutes >= 59) { @@ -159,17 +167,16 @@ void Alarm::OnButtonEvent(lv_obj_t* obj, lv_event_t event) { return; } if (obj == btnRecur) { - alarmController.ToggleRecurrence(); - setRecurButtonState(); + ToggleRecurrence(); } } } void Alarm::SetAlerting() { - setEnableButtonState(); + SetEnableButtonState(); } -void Alarm::setEnableButtonState() { +void Alarm::SetEnableButtonState() { switch (alarmController.State()) { case AlarmController::AlarmState::Set: lv_label_set_text(txtEnable, "ON"); @@ -185,7 +192,7 @@ void Alarm::setEnableButtonState() { } } -void Alarm::showInfo() { +void Alarm::ShowInfo() { btnMessage = lv_btn_create(lv_scr_act(), nullptr); btnMessage->user_data = this; lv_obj_set_event_cb(btnMessage, btnEventHandler); @@ -210,7 +217,7 @@ void Alarm::showInfo() { } } -void Alarm::setRecurButtonState() { +void Alarm::SetRecurButtonState() { using Pinetime::Controllers::AlarmController; switch (alarmController.Recurrence()) { case AlarmController::RecurType::None: @@ -220,6 +227,21 @@ void Alarm::setRecurButtonState() { lv_label_set_text(txtRecur, "DAILY"); break; case AlarmController::RecurType::Weekdays: - lv_label_set_text(txtRecur, "WKDAYS"); + lv_label_set_text(txtRecur, "MON-FRI"); } -} \ No newline at end of file +} + +void Alarm::ToggleRecurrence() { + using Pinetime::Controllers::AlarmController; + switch (alarmController.Recurrence()) { + case AlarmController::RecurType::None: + alarmController.SetRecurrence(AlarmController::RecurType::Daily); + break; + case AlarmController::RecurType::Daily: + alarmController.SetRecurrence(AlarmController::RecurType::Weekdays); + break; + case AlarmController::RecurType::Weekdays: + alarmController.SetRecurrence(AlarmController::RecurType::None); + } + SetRecurButtonState(); +} diff --git a/src/displayapp/screens/Alarm.h b/src/displayapp/screens/Alarm.h index 30bcb73eed..43bbc6f2b4 100644 --- a/src/displayapp/screens/Alarm.h +++ b/src/displayapp/screens/Alarm.h @@ -1,3 +1,16 @@ +/* Copyright (C) 2021 JF, Adam Pigg, Avamander + This file is part of InfiniTime. + InfiniTime is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + InfiniTime is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ #pragma once #include "Screen.h" @@ -5,27 +18,32 @@ #include "../LittleVgl.h" #include "components/alarm/AlarmController.h" -namespace Pinetime::Applications::Screens { - class Alarm : public Screen { - public: - Alarm(DisplayApp* app, Controllers::AlarmController& alarmController); - ~Alarm() override; - void SetAlerting(); - void OnButtonEvent(lv_obj_t* obj, lv_event_t event); +namespace Pinetime { + namespace Applications { + namespace Screens { + class Alarm : public Screen { + public: + Alarm(DisplayApp* app, Controllers::AlarmController& alarmController); + ~Alarm() override; + void SetAlerting(); + void OnButtonEvent(lv_obj_t* obj, lv_event_t event); - private: - bool running; - uint8_t alarmHours = 0; - uint8_t alarmMinutes = 0; - Controllers::AlarmController& alarmController; + private: + bool running; + uint8_t alarmHours = 0; + uint8_t alarmMinutes = 0; + Controllers::AlarmController& alarmController; - lv_obj_t *time, *btnEnable, *txtEnable, *btnMinutesUp, *btnMinutesDown, *btnHoursUp, *btnHoursDown, *txtMinUp, *txtMinDown, *txtHrUp, - *txtHrDown, *btnRecur, *txtRecur, *btnMessage, *txtMessage, *btnInfo, *txtInfo; + lv_obj_t *time, *btnEnable, *txtEnable, *btnMinutesUp, *btnMinutesDown, *btnHoursUp, *btnHoursDown, *txtMinUp, *txtMinDown, + *txtHrUp, *txtHrDown, *btnRecur, *txtRecur, *btnMessage, *txtMessage, *btnInfo, *txtInfo; - enum class EnableButtonState { On, Off, Alerting }; - void setEnableButtonState(); - void setRecurButtonState(); - void setAlarm(); - void showInfo(); + enum class EnableButtonState { On, Off, Alerting }; + void SetEnableButtonState(); + void SetRecurButtonState(); + void SetAlarm(); + void ShowInfo(); + void ToggleRecurrence(); + }; + }; }; } \ No newline at end of file diff --git a/src/systemtask/SystemTask.cpp b/src/systemtask/SystemTask.cpp index 98685c316f..9ec2059011 100644 --- a/src/systemtask/SystemTask.cpp +++ b/src/systemtask/SystemTask.cpp @@ -134,8 +134,7 @@ void SystemTask::Work() { motionSensor.SoftReset(); timerController.Register(this); timerController.Init(); - alarmController.Register(this); - alarmController.Init(); + alarmController.Init(this); // Reset the TWI device because the motion sensor chip most probably crashed it... twiMaster.Sleep(); From 2bf339a3f8319d68dfe657a53020c1f7977c4eb7 Mon Sep 17 00:00:00 2001 From: Mark Russell Date: Mon, 13 Sep 2021 16:05:35 -0400 Subject: [PATCH 163/173] License header fix, add missing braces --- src/components/alarm/AlarmController.cpp | 9 +++++++-- src/components/alarm/AlarmController.h | 6 +++++- src/displayapp/screens/Alarm.cpp | 6 +++++- src/displayapp/screens/Alarm.h | 6 +++++- 4 files changed, 22 insertions(+), 5 deletions(-) diff --git a/src/components/alarm/AlarmController.cpp b/src/components/alarm/AlarmController.cpp index 31a3191263..2532a4a1c3 100644 --- a/src/components/alarm/AlarmController.cpp +++ b/src/components/alarm/AlarmController.cpp @@ -1,13 +1,17 @@ -/* Copyright (C) 2021 JF, Adam Pigg, Avamander +/* Copyright (C) 2021 mruss77, Florian + This file is part of InfiniTime. + InfiniTime is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + InfiniTime is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + You should have received a copy of the GNU General Public License along with this program. If not, see . */ @@ -28,8 +32,9 @@ APP_TIMER_DEF(alarmAppTimer); namespace { void SetOffAlarm(void* p_context) { auto* controller = static_cast(p_context); - if (controller != nullptr) + if (controller != nullptr) { controller->SetOffAlarmNow(); + } } } diff --git a/src/components/alarm/AlarmController.h b/src/components/alarm/AlarmController.h index 140c9c8042..7c43b89e0c 100644 --- a/src/components/alarm/AlarmController.h +++ b/src/components/alarm/AlarmController.h @@ -1,13 +1,17 @@ -/* Copyright (C) 2021 JF, Adam Pigg, Avamander +/* Copyright (C) 2021 mruss77, Florian + This file is part of InfiniTime. + InfiniTime is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + InfiniTime is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + You should have received a copy of the GNU General Public License along with this program. If not, see . */ diff --git a/src/displayapp/screens/Alarm.cpp b/src/displayapp/screens/Alarm.cpp index a2bb5c625a..70d95fe823 100644 --- a/src/displayapp/screens/Alarm.cpp +++ b/src/displayapp/screens/Alarm.cpp @@ -1,13 +1,17 @@ -/* Copyright (C) 2021 JF, Adam Pigg, Avamander +/* Copyright (C) 2021 mruss77, Florian + This file is part of InfiniTime. + InfiniTime is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + InfiniTime is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + You should have received a copy of the GNU General Public License along with this program. If not, see . */ diff --git a/src/displayapp/screens/Alarm.h b/src/displayapp/screens/Alarm.h index 43bbc6f2b4..b36f7f98d5 100644 --- a/src/displayapp/screens/Alarm.h +++ b/src/displayapp/screens/Alarm.h @@ -1,13 +1,17 @@ -/* Copyright (C) 2021 JF, Adam Pigg, Avamander +/* Copyright (C) 2021 mruss77, Florian + This file is part of InfiniTime. + InfiniTime is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + InfiniTime is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + You should have received a copy of the GNU General Public License along with this program. If not, see . */ From f89780f3323042ce9a83f78aa9017c56f0fb62e9 Mon Sep 17 00:00:00 2001 From: Reinhold Gschweicher Date: Mon, 13 Sep 2021 22:32:22 +0200 Subject: [PATCH 164/173] Remove unused include in MotoController.h Remove the unused include `app_timer.h` in `MotorController.h` --- src/components/motor/MotorController.h | 1 - 1 file changed, 1 deletion(-) diff --git a/src/components/motor/MotorController.h b/src/components/motor/MotorController.h index 1d8fcc95a6..cf78088ec3 100644 --- a/src/components/motor/MotorController.h +++ b/src/components/motor/MotorController.h @@ -1,7 +1,6 @@ #pragma once #include -#include "app_timer.h" #include "components/settings/Settings.h" namespace Pinetime { From 63477fc09616b5f7df0af17dd5d990a760ba2ae4 Mon Sep 17 00:00:00 2001 From: Reinhold Gschweicher Date: Mon, 13 Sep 2021 22:33:21 +0200 Subject: [PATCH 165/173] Fix unsigned/signed comparison warning in Metronome.cpp `xTaskGetTickCount()` returns a `TickType_t`, which is defined as an `uint32_t`. This is compared to the `bpm` variable, which is a `int16_t` in the range of 40 to 220 as defined in the constructor. ```cpp lv_arc_set_range(bpmArc, 40, 220); ``` Just assume that `bpm` is greater than 0, as this would result in a divison by zero or negative values, which would unintentionally underflow to a very large number. --- src/displayapp/screens/Metronome.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/displayapp/screens/Metronome.cpp b/src/displayapp/screens/Metronome.cpp index 884a4a5140..52cb8519b7 100644 --- a/src/displayapp/screens/Metronome.cpp +++ b/src/displayapp/screens/Metronome.cpp @@ -78,7 +78,7 @@ Metronome::~Metronome() { void Metronome::Refresh() { if (metronomeStarted) { - if (xTaskGetTickCount() - startTime > 60 * configTICK_RATE_HZ / bpm) { + if (xTaskGetTickCount() - startTime > 60u * configTICK_RATE_HZ / static_cast(bpm)) { startTime += 60 * configTICK_RATE_HZ / bpm; counter--; if (counter == 0) { From f857a757a7184726093a7085cdb3d74b728a22e4 Mon Sep 17 00:00:00 2001 From: Mark Russell Date: Thu, 16 Sep 2021 15:38:31 -0400 Subject: [PATCH 166/173] Fixes per Riksu9000's feedback --- src/components/alarm/AlarmController.cpp | 6 +++--- src/components/alarm/AlarmController.h | 8 +++---- src/components/motor/MotorController.cpp | 6 ------ src/components/motor/MotorController.h | 1 - src/displayapp/screens/Alarm.cpp | 27 +++++++++++++----------- src/displayapp/screens/Alarm.h | 7 +++--- src/systemtask/SystemTask.cpp | 2 +- 7 files changed, 27 insertions(+), 30 deletions(-) diff --git a/src/components/alarm/AlarmController.cpp b/src/components/alarm/AlarmController.cpp index 2532a4a1c3..67ca05a968 100644 --- a/src/components/alarm/AlarmController.cpp +++ b/src/components/alarm/AlarmController.cpp @@ -43,11 +43,9 @@ void AlarmController::Init(System::SystemTask* systemTask) { this->systemTask = systemTask; } -void AlarmController::SetAlarm(uint8_t alarmHr, uint8_t alarmMin) { +void AlarmController::SetAlarmTime(uint8_t alarmHr, uint8_t alarmMin) { hours = alarmHr; minutes = alarmMin; - state = AlarmState::Set; - ScheduleAlarm(); } void AlarmController::ScheduleAlarm() { @@ -84,6 +82,8 @@ void AlarmController::ScheduleAlarm() { alarmTime = std::chrono::system_clock::from_time_t(std::mktime(tmAlarmTime)); auto mSecToAlarm = std::chrono::duration_cast(alarmTime - now).count(); app_timer_start(alarmAppTimer, APP_TIMER_TICKS(mSecToAlarm), this); + + state = AlarmState::Set; } uint32_t AlarmController::SecondsToAlarm() { diff --git a/src/components/alarm/AlarmController.h b/src/components/alarm/AlarmController.h index 7c43b89e0c..bf85d43140 100644 --- a/src/components/alarm/AlarmController.h +++ b/src/components/alarm/AlarmController.h @@ -31,7 +31,8 @@ namespace Pinetime { AlarmController(Controllers::DateTime& dateTimeController); void Init(System::SystemTask* systemTask); - void SetAlarm(uint8_t alarmHr, uint8_t alarmMin); + void SetAlarmTime(uint8_t alarmHr, uint8_t alarmMin); + void ScheduleAlarm(); void DisableAlarm(); void SetOffAlarmNow(); uint32_t SecondsToAlarm(); @@ -57,12 +58,11 @@ namespace Pinetime { private: Controllers::DateTime& dateTimeController; System::SystemTask* systemTask = nullptr; - uint8_t hours; - uint8_t minutes; + uint8_t hours = 7; + uint8_t minutes = 0; std::chrono::time_point alarmTime; AlarmState state = AlarmState::Not_Set; RecurType recurrence = RecurType::None; - void ScheduleAlarm(); }; } } diff --git a/src/components/motor/MotorController.cpp b/src/components/motor/MotorController.cpp index 5ade19e44a..b25e6bc829 100644 --- a/src/components/motor/MotorController.cpp +++ b/src/components/motor/MotorController.cpp @@ -42,12 +42,6 @@ void MotorController::StartRinging() { app_timer_start(longVibTimer, APP_TIMER_TICKS(1000), this); } -// This function is the same as StartRinging(), but will ring even if notifications are turned off in Settings -void MotorController::StartRingingDisregardSettings() { - Ring(this); - app_timer_start(longVibTimer, APP_TIMER_TICKS(1000), this); -} - void MotorController::StopRinging() { app_timer_stop(longVibTimer); nrf_gpio_pin_set(pinMotor); diff --git a/src/components/motor/MotorController.h b/src/components/motor/MotorController.h index d3b96b07c2..d2c9fe5f2c 100644 --- a/src/components/motor/MotorController.h +++ b/src/components/motor/MotorController.h @@ -15,7 +15,6 @@ namespace Pinetime { void RunForDuration(uint8_t motorDuration); void StartRinging(); static void StopRinging(); - void StartRingingDisregardSettings(); private: static void Ring(void* p_context); diff --git a/src/displayapp/screens/Alarm.cpp b/src/displayapp/screens/Alarm.cpp index 70d95fe823..959cb0b26d 100644 --- a/src/displayapp/screens/Alarm.cpp +++ b/src/displayapp/screens/Alarm.cpp @@ -46,7 +46,7 @@ Alarm::Alarm(DisplayApp* app, Controllers::AlarmController& alarmController) lv_obj_set_size(btnHoursUp, 60, 40); lv_obj_align(btnHoursUp, lv_scr_act(), LV_ALIGN_IN_LEFT_MID, 20, -85); txtHrUp = lv_label_create(btnHoursUp, nullptr); - lv_label_set_text(txtHrUp, "+"); + lv_label_set_text_static(txtHrUp, "+"); btnHoursDown = lv_btn_create(lv_scr_act(), nullptr); btnHoursDown->user_data = this; @@ -54,7 +54,7 @@ Alarm::Alarm(DisplayApp* app, Controllers::AlarmController& alarmController) lv_obj_set_size(btnHoursDown, 60, 40); lv_obj_align(btnHoursDown, lv_scr_act(), LV_ALIGN_IN_LEFT_MID, 20, 35); txtHrDown = lv_label_create(btnHoursDown, nullptr); - lv_label_set_text(txtHrDown, "-"); + lv_label_set_text_static(txtHrDown, "-"); btnMinutesUp = lv_btn_create(lv_scr_act(), nullptr); btnMinutesUp->user_data = this; @@ -62,7 +62,7 @@ Alarm::Alarm(DisplayApp* app, Controllers::AlarmController& alarmController) lv_obj_set_size(btnMinutesUp, 60, 40); lv_obj_align(btnMinutesUp, lv_scr_act(), LV_ALIGN_IN_RIGHT_MID, -20, -85); txtMinUp = lv_label_create(btnMinutesUp, nullptr); - lv_label_set_text(txtMinUp, "+"); + lv_label_set_text_static(txtMinUp, "+"); btnMinutesDown = lv_btn_create(lv_scr_act(), nullptr); btnMinutesDown->user_data = this; @@ -70,7 +70,7 @@ Alarm::Alarm(DisplayApp* app, Controllers::AlarmController& alarmController) lv_obj_set_size(btnMinutesDown, 60, 40); lv_obj_align(btnMinutesDown, lv_scr_act(), LV_ALIGN_IN_RIGHT_MID, -20, 35); txtMinDown = lv_label_create(btnMinutesDown, nullptr); - lv_label_set_text(txtMinDown, "-"); + lv_label_set_text_static(txtMinDown, "-"); btnEnable = lv_btn_create(lv_scr_act(), nullptr); btnEnable->user_data = this; @@ -94,7 +94,7 @@ Alarm::Alarm(DisplayApp* app, Controllers::AlarmController& alarmController) lv_obj_set_size(btnInfo, 50, 40); lv_obj_align(btnInfo, lv_scr_act(), LV_ALIGN_CENTER, 0, -85); txtInfo = lv_label_create(btnInfo, nullptr); - lv_label_set_text(txtInfo, "i"); + lv_label_set_text_static(txtInfo, "i"); } Alarm::~Alarm() { @@ -110,7 +110,7 @@ void Alarm::OnButtonEvent(lv_obj_t* obj, lv_event_t event) { } else if (alarmController.State() == AlarmController::AlarmState::Set) { alarmController.DisableAlarm(); } else { - alarmController.SetAlarm(alarmHours, alarmMinutes); + alarmController.ScheduleAlarm(); } SetEnableButtonState(); return; @@ -128,8 +128,6 @@ void Alarm::OnButtonEvent(lv_obj_t* obj, lv_event_t event) { } // If any other button was pressed, disable the alarm // this is to make it clear that the alarm won't be set until it is turned back on - // this avoids calling the AlarmController to change the alarm time every time the user hits minute-up or minute-down; - // can just do it once when the alarm is re-enabled if (alarmController.State() == AlarmController::AlarmState::Set) { alarmController.DisableAlarm(); SetEnableButtonState(); @@ -140,7 +138,7 @@ void Alarm::OnButtonEvent(lv_obj_t* obj, lv_event_t event) { } else { alarmMinutes++; } - lv_label_set_text_fmt(time, "%02d:%02d", alarmHours, alarmMinutes); + UpdateAlarmTime(); return; } if (obj == btnMinutesDown) { @@ -149,7 +147,7 @@ void Alarm::OnButtonEvent(lv_obj_t* obj, lv_event_t event) { } else { alarmMinutes--; } - lv_label_set_text_fmt(time, "%02d:%02d", alarmHours, alarmMinutes); + UpdateAlarmTime(); return; } if (obj == btnHoursUp) { @@ -158,7 +156,7 @@ void Alarm::OnButtonEvent(lv_obj_t* obj, lv_event_t event) { } else { alarmHours++; } - lv_label_set_text_fmt(time, "%02d:%02d", alarmHours, alarmMinutes); + UpdateAlarmTime(); return; } if (obj == btnHoursDown) { @@ -167,7 +165,7 @@ void Alarm::OnButtonEvent(lv_obj_t* obj, lv_event_t event) { } else { alarmHours--; } - lv_label_set_text_fmt(time, "%02d:%02d", alarmHours, alarmMinutes); + UpdateAlarmTime(); return; } if (obj == btnRecur) { @@ -176,6 +174,11 @@ void Alarm::OnButtonEvent(lv_obj_t* obj, lv_event_t event) { } } +void Alarm::UpdateAlarmTime() { + lv_label_set_text_fmt(time, "%02d:%02d", alarmHours, alarmMinutes); + alarmController.SetAlarmTime(alarmHours, alarmMinutes); +} + void Alarm::SetAlerting() { SetEnableButtonState(); } diff --git a/src/displayapp/screens/Alarm.h b/src/displayapp/screens/Alarm.h index b36f7f98d5..abf97ebaa1 100644 --- a/src/displayapp/screens/Alarm.h +++ b/src/displayapp/screens/Alarm.h @@ -34,8 +34,8 @@ namespace Pinetime { private: bool running; - uint8_t alarmHours = 0; - uint8_t alarmMinutes = 0; + uint8_t alarmHours; + uint8_t alarmMinutes; Controllers::AlarmController& alarmController; lv_obj_t *time, *btnEnable, *txtEnable, *btnMinutesUp, *btnMinutesDown, *btnHoursUp, *btnHoursDown, *txtMinUp, *txtMinDown, @@ -47,7 +47,8 @@ namespace Pinetime { void SetAlarm(); void ShowInfo(); void ToggleRecurrence(); + void UpdateAlarmTime(); }; }; }; -} \ No newline at end of file +} diff --git a/src/systemtask/SystemTask.cpp b/src/systemtask/SystemTask.cpp index 9ec2059011..534f551092 100644 --- a/src/systemtask/SystemTask.cpp +++ b/src/systemtask/SystemTask.cpp @@ -282,7 +282,7 @@ void SystemTask::Work() { if (isSleeping && !isWakingUp) { GoToRunning(); } - motorController.StartRingingDisregardSettings(); + motorController.StartRinging(); displayApp.PushMessage(Pinetime::Applications::Display::Messages::AlarmTriggered); break; case Messages::StopRinging: From 1d43adcdfa7bd15ba45c0c9d7c59c0ff99176b9c Mon Sep 17 00:00:00 2001 From: Mark Russell Date: Thu, 16 Sep 2021 16:01:25 -0400 Subject: [PATCH 167/173] Merge upstream --- .github/workflows/main.yml | 8 +- CMakeLists.txt | 9 ++ README.md | 25 ++-- cmake-nRF5x/readme.md | 2 +- doc/buildAndProgram.md | 1 + .../ota-gadgetbridge-nrfconnect.md | 8 ++ doc/versioning.md | 2 +- src/CMakeLists.txt | 12 +- src/components/battery/BatteryController.cpp | 16 ++- src/components/battery/BatteryController.h | 9 +- src/components/ble/NimbleController.cpp | 125 +++++++++++------- src/components/ble/NimbleController.h | 7 + .../brightness/BrightnessController.cpp | 32 ++--- .../brightness/BrightnessController.h | 3 - src/components/motor/MotorController.cpp | 11 +- src/components/motor/MotorController.h | 2 - src/components/settings/Settings.h | 2 +- src/displayapp/DisplayApp.cpp | 6 - src/displayapp/DisplayAppRecovery.cpp | 1 + src/displayapp/DisplayAppRecovery.h | 32 +++-- src/displayapp/Messages.h | 1 - src/displayapp/screens/BatteryInfo.cpp | 2 - src/displayapp/screens/Notifications.cpp | 2 +- src/displayapp/screens/Notifications.h | 8 -- src/displayapp/screens/settings/Settings.cpp | 4 +- src/drivers/Cst816s.cpp | 13 +- src/drivers/Cst816s.h | 3 - src/drivers/PinMap.h | 38 ++++++ src/main.cpp | 47 +++---- src/recoveryLoader.cpp | 19 +-- src/systemtask/Messages.h | 4 +- src/systemtask/SystemTask.cpp | 62 +++++---- src/systemtask/SystemTask.h | 16 +-- 33 files changed, 300 insertions(+), 232 deletions(-) create mode 100644 src/drivers/PinMap.h diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 4744eaef7d..bd24359a56 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -9,13 +9,13 @@ name: Build PineTime Firmware # When to run this Workflow... on: - # Run this Workflow when files are updated (Pushed) in the "master" Branch + # Run this Workflow when files are updated (Pushed) in the "master" and "develop" Branch push: - branches: [ master ] + branches: [ master, develop ] - # Also run this Workflow when a Pull Request is created or updated in the "master" Branch + # Also run this Workflow when a Pull Request is created or updated in the "master" and "develop" Branch pull_request: - branches: [ master ] + branches: [ master, develop ] # Steps to run for the Workflow jobs: diff --git a/CMakeLists.txt b/CMakeLists.txt index cc41a08744..f2402e5790 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -51,6 +51,14 @@ if(BUILD_DFU) set(BUILD_DFU true) endif() +option(WATCH_COLMI_P8 "Build for the Colmi P8" OFF) +set(TARGET_DEVICE "PineTime") + +if(WATCH_COLMI_P8) + set(TARGET_DEVICE "Colmi P8") + add_definitions(-DWATCH_P8) +endif() + set(PROJECT_GIT_COMMIT_HASH "") execute_process(COMMAND git rev-parse --short HEAD @@ -68,6 +76,7 @@ message(" * Version : " ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${P message(" * Toolchain : " ${ARM_NONE_EABI_TOOLCHAIN_PATH}) message(" * GitRef(S) : " ${PROJECT_GIT_COMMIT_HASH}) message(" * NRF52 SDK : " ${NRF5_SDK_PATH}) +message(" * Target device : " ${TARGET_DEVICE}) set(PROGRAMMER "???") if(USE_JLINK) message(" * Programmer/debugger : JLINK") diff --git a/README.md b/README.md index 6549ece98d..0d5cad934a 100644 --- a/README.md +++ b/README.md @@ -1,20 +1,10 @@ -# PineTime +# InfiniTime [![Build PineTime Firmware](https://github.com/JF002/InfiniTime/workflows/Build%20PineTime%20Firmware/badge.svg?branch=master)](https://github.com/JF002/InfiniTime/actions) -> The PineTime is a free and open source smartwatch capable of running custom-built open operating systems. Some of the notable features include a heart rate monitor, a week-long battery as well as a capacitive touch IPS display that is legible in direct sunlight. It is a fully community driven side-project, which means that it will ultimately be up to the developers and end-users to determine when they deem the PineTime ready to ship. - -> We envision the PineTime as a companion for not only your PinePhone but also for your favorite devices — any phone, tablet, or even PC. - -*https://www.pine64.org/pinetime/* - -The **Pinetime** smartwatch is built around the NRF52832 MCU (512KB Flash, 64KB RAM), a 240*240 LCD display driven by the ST7789 controller, an accelerometer, a heart rate sensor, and a vibration motor. - -# InfiniTime - ![InfiniTime logo](images/infinitime-logo.jpg "InfiniTime Logo") -The goal of this project is to design an open-source firmware for the Pinetime smartwatch : +The goal of this project is to design an open-source firmware for the [Pinetime smartwatch](https://www.pine64.org/pinetime/) : - Code written in **modern C++**; - Build system based on **CMake**; @@ -22,6 +12,11 @@ The goal of this project is to design an open-source firmware for the Pinetime s - Using **[LittleVGL/LVGL 7](https://lvgl.io/)** as UI library... - ... and **[NimBLE 1.3.0](https://github.com/apache/mynewt-nimble)** as BLE stack. +## New to InfiniTime? + + - [Getting started with InfiniTime 1.0 (quick user guide, update bootloader and InfiniTime,...)](doc/gettingStarted/gettingStarted-1.0.md) + - [Flash, upgrade (OTA), time synchronization,...](doc/gettingStarted/ota-gadgetbridge-nrfconnect.md) + ## Overview ![Pinetime screens](images/1.0.0/collage.png "PinetimeScreens") @@ -70,16 +65,12 @@ As of now, here is the list of achievements of this project: * [Amazfish](https://openrepos.net/content/piggz/amazfish) (on SailfishOS and Linux) * [Siglo](https://github.com/alexr4535/siglo) (on Linux) * **[Experimental]** [WebBLEWatch](https://hubmartin.github.io/WebBLEWatch/) Synchronize time directly from your web browser. [video](https://youtu.be/IakiuhVDdrY) + * **[Experimental]** [Infini-iOS](https://github.com/xan-m/Infini-iOS) (on iOS) - OTA (Over-the-air) update via BLE - [Bootloader](https://github.com/JF002/pinetime-mcuboot-bootloader) based on [MCUBoot](https://juullabs-oss.github.io/mcuboot/) ## Documentation -### Getting started - - - [Getting started with InfiniTime 1.0 (quick user guide, update bootloader and InfiniTime,...)](doc/gettingStarted/gettingStarted-1.0.md) - - [Flash, upgrade (OTA), time synchronization,...](doc/gettingStarted/ota-gadgetbridge-nrfconnect.md) - ### Develop - [Generate the fonts and symbols](src/displayapp/fonts/README.md) diff --git a/cmake-nRF5x/readme.md b/cmake-nRF5x/readme.md index 2ce76892db..0127a2e6e5 100755 --- a/cmake-nRF5x/readme.md +++ b/cmake-nRF5x/readme.md @@ -98,7 +98,7 @@ The script makes use of the following tools: After setup you can use cmake as usual: -1. Generate the actual build files (out-of-source builds are strongly recomended): +1. Generate the actual build files (out-of-source builds are strongly recommended): ```commandline cmake -H. -B"cmake-build" -G "Unix Makefiles" diff --git a/doc/buildAndProgram.md b/doc/buildAndProgram.md index 87b6dd9a5d..e97bb30d51 100644 --- a/doc/buildAndProgram.md +++ b/doc/buildAndProgram.md @@ -28,6 +28,7 @@ CMake configures the project according to variables you specify the command line **GDB_CLIENT_BIN_PATH**|Path to arm-none-eabi-gdb executable. Used only if `USE_GDB_CLIENT` is 1.|`-DGDB_CLIENT_BIN_PATH=/home/jf/nrf52/gcc-arm-none-eabi-9-2019-q4-major/bin/arm-none-eabi-gdb` **GDB_CLIENT_TARGET_REMOTE**|Target remote connection string. Used only if `USE_GDB_CLIENT` is 1.|`-DGDB_CLIENT_TARGET_REMOTE=/dev/ttyACM0` **BUILD_DFU (\*\*)**|Build DFU files while building (needs [adafruit-nrfutil](https://github.com/adafruit/Adafruit_nRF52_nrfutil)).|`-DBUILD_DFU=1` +**WATCH_COLMI_P8**|Use pin configuration for Colmi P8 watch|`-DWATCH_COLMI_P8=1` ####(**) Note about **CMAKE_BUILD_TYPE**: By default, this variable is set to *Release*. It compiles the code with size and speed optimizations. We use this value for all the binaries we publish when we [release](https://github.com/JF002/InfiniTime/releases) new versions of InfiniTime. diff --git a/doc/gettingStarted/ota-gadgetbridge-nrfconnect.md b/doc/gettingStarted/ota-gadgetbridge-nrfconnect.md index 1187a9b745..ffc27ed87b 100644 --- a/doc/gettingStarted/ota-gadgetbridge-nrfconnect.md +++ b/doc/gettingStarted/ota-gadgetbridge-nrfconnect.md @@ -47,6 +47,8 @@ Read carefully the warning and tap **Install**: Wait for the transfer to finish. Your PineTime should reset and reboot with the new version of InfiniTime! +Don't forget to **validate** your firmware. In the InfiniTime go to the settings (swipe right, select gear icon) and Firmware option and click **validate**. Otherwise after reboot the previous firmware will be used. + ![Gadgetbridge 5](gadgetbridge5.jpg) ### Using NRFConnect @@ -64,6 +66,8 @@ Select **Distribution packet (ZIP)**: Browse to the DFU file you downloaded previously, the DFU transfer will start automatically. When the transfer is finished, your PineTime will reset and restart on the new version of InfiniTime! +Don't forget to **validate** your firmware. In the InfiniTime go to the settings (swipe right, select gear icon) and Firmware option and click **validate**. Otherwise after reboot the previous firmware will be used. + ![NRFConnect 3](nrfconnect3.jpg) ## How to flash InfiniTime using the SWD interface @@ -88,6 +92,10 @@ If you are using OpenOCD with a STLinkV2, you can find more info [on this page]( ### Using Gadgetbridge Good news! Gadgetbridge **automatically** synchronizes the time when connecting to your PineTime! +### Using any Chromium-based web browser +You can use it from your PC, Mac, Android. Browsers now have BLE support. +https://hubmartin.github.io/WebBLEWatch/ + ### Using NRFConnect You must enable the **CTS** *GATT server* into NRFConnect so that InfiniTime can synchronize the time with your smartphone. diff --git a/doc/versioning.md b/doc/versioning.md index b08af71479..48e05043f0 100644 --- a/doc/versioning.md +++ b/doc/versioning.md @@ -3,4 +3,4 @@ The versioning of this project is based on [Semantic versionning](https://semver - The **patch** is incremented when we fix a bug on a **released** version (most of the time using a **hotfix** branch). - The **minor** is incremented when we release a new version with new features. It corresponds to a merge of **develop** into **master**. - - The **major** should be incremented when a breaking change is made to the application. We still have to define what is a breaking change in the context of this project. For now, I suggest that it stays **0** until we have a fully functionning firmware suited for the final user. \ No newline at end of file + - The **major** should be incremented when a breaking change is made to the application. We still have to define what is a breaking change in the context of this project. For now, I suggest that it stays **0** until we have a fully functioning firmware suited for the final user. \ No newline at end of file diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index ccade83e30..37ee0848bd 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -92,6 +92,9 @@ set(SDK_SOURCE_FILES set(TINYCRYPT_SRC libs/mynewt-nimble/ext/tinycrypt/src/aes_encrypt.c libs/mynewt-nimble/ext/tinycrypt/src/utils.c + libs/mynewt-nimble/ext/tinycrypt/src/cmac_mode.c + libs/mynewt-nimble/ext/tinycrypt/src/ecc.c + libs/mynewt-nimble/ext/tinycrypt/src/ecc_dh.c ) set(NIMBLE_SRC @@ -104,6 +107,10 @@ set(NIMBLE_SRC libs/mynewt-nimble/nimble/host/src/ble_l2cap.c libs/mynewt-nimble/nimble/host/src/ble_hs_mbuf.c libs/mynewt-nimble/nimble/host/src/ble_sm.c + libs/mynewt-nimble/nimble/host/src/ble_sm_cmd.c + libs/mynewt-nimble/nimble/host/src/ble_sm_lgcy.c + libs/mynewt-nimble/nimble/host/src/ble_sm_alg.c + libs/mynewt-nimble/nimble/host/src/ble_sm_sc.c libs/mynewt-nimble/nimble/host/src/ble_gap.c libs/mynewt-nimble/nimble/host/src/ble_gatts.c libs/mynewt-nimble/nimble/host/src/ble_gattc.c @@ -127,10 +134,6 @@ set(NIMBLE_SRC libs/mynewt-nimble/nimble/host/src/ble_hs_atomic.c libs/mynewt-nimble/nimble/host/src/ble_hs_adv.c libs/mynewt-nimble/nimble/host/src/ble_hs_flow.c - libs/mynewt-nimble/nimble/host/src/ble_sm.c - libs/mynewt-nimble/nimble/host/src/ble_sm_cmd.c - libs/mynewt-nimble/nimble/host/src/ble_sm_lgcy.c - libs/mynewt-nimble/nimble/host/src/ble_sm_alg.c libs/mynewt-nimble/nimble/host/src/ble_hs_mqueue.c libs/mynewt-nimble/nimble/host/src/ble_hs_stop.c libs/mynewt-nimble/nimble/host/src/ble_hs_startup.c @@ -625,6 +628,7 @@ set(INCLUDE_FILES drivers/DebugPins.h drivers/InternalFlash.h drivers/Hrs3300.h + drivers/PinMap.h drivers/Bma421.h drivers/Bma421_C/bma4.c drivers/Bma421_C/bma423.c diff --git a/src/components/battery/BatteryController.cpp b/src/components/battery/BatteryController.cpp index f8a64ecd18..4ef20a2452 100644 --- a/src/components/battery/BatteryController.cpp +++ b/src/components/battery/BatteryController.cpp @@ -1,4 +1,5 @@ #include "BatteryController.h" +#include "drivers/PinMap.h" #include #include #include @@ -9,15 +10,12 @@ Battery* Battery::instance = nullptr; Battery::Battery() { instance = this; -} - -void Battery::Init() { - nrf_gpio_cfg_input(chargingPin, static_cast GPIO_PIN_CNF_PULL_Pullup); + nrf_gpio_cfg_input(PinMap::Charging, static_cast GPIO_PIN_CNF_PULL_Disabled); } void Battery::Update() { - isCharging = !nrf_gpio_pin_read(chargingPin); - isPowerPresent = !nrf_gpio_pin_read(powerPresentPin); + isCharging = !nrf_gpio_pin_read(PinMap::Charging); + isPowerPresent = !nrf_gpio_pin_read(PinMap::PowerPresent); if (isReading) { return; @@ -75,5 +73,11 @@ void Battery::SaadcEventHandler(nrfx_saadc_evt_t const* p_event) { nrfx_saadc_uninit(); isReading = false; + + systemTask->PushMessage(System::Messages::BatteryMeasurementDone); } } + +void Battery::Register(Pinetime::System::SystemTask* systemTask) { + this->systemTask = systemTask; +} diff --git a/src/components/battery/BatteryController.h b/src/components/battery/BatteryController.h index 6f09b737a3..8af27ea8ae 100644 --- a/src/components/battery/BatteryController.h +++ b/src/components/battery/BatteryController.h @@ -1,8 +1,7 @@ #pragma once #include #include -#include -#include +#include namespace Pinetime { namespace Controllers { @@ -11,8 +10,8 @@ namespace Pinetime { public: Battery(); - void Init(); void Update(); + void Register(System::SystemTask* systemTask); uint8_t PercentRemaining() const { return percentRemaining; @@ -34,8 +33,6 @@ namespace Pinetime { static Battery* instance; nrf_saadc_value_t saadc_value; - static constexpr uint32_t chargingPin = 12; - static constexpr uint32_t powerPresentPin = 19; static constexpr nrf_saadc_input_t batteryVoltageAdcInput = NRF_SAADC_INPUT_AIN7; uint16_t voltage = 0; uint8_t percentRemaining = 0; @@ -49,6 +46,8 @@ namespace Pinetime { static void AdcCallbackStatic(nrfx_saadc_evt_t const* event); bool isReading = false; + + Pinetime::System::SystemTask* systemTask = nullptr; }; } } diff --git a/src/components/ble/NimbleController.cpp b/src/components/ble/NimbleController.cpp index 5eb227bf00..879421e7aa 100644 --- a/src/components/ble/NimbleController.cpp +++ b/src/components/ble/NimbleController.cpp @@ -42,6 +42,19 @@ NimbleController::NimbleController(Pinetime::System::SystemTask& systemTask, serviceDiscovery({¤tTimeClient, &alertNotificationClient}) { } +void nimble_on_reset(int reason) { + NRF_LOG_INFO("Resetting state; reason=%d\n", reason); +} + +void nimble_on_sync(void) { + int rc; + + rc = ble_hs_util_ensure_addr(0); + ASSERT(rc == 0); + + nptr->StartAdvertising(); +} + int GAPEventCallback(struct ble_gap_event* event, void* arg) { auto nimbleController = static_cast(arg); return nimbleController->OnGAPEvent(event); @@ -51,6 +64,10 @@ void NimbleController::Init() { while (!ble_hs_synced()) { } + nptr = this; + ble_hs_cfg.reset_cb = nimble_on_reset; + ble_hs_cfg.sync_cb = nimble_on_sync; + ble_svc_gap_init(); ble_svc_gatt_init(); @@ -64,28 +81,31 @@ void NimbleController::Init() { batteryInformationService.Init(); immediateAlertService.Init(); heartRateService.Init(); - int res; - res = ble_hs_util_ensure_addr(0); - ASSERT(res == 0); - res = ble_hs_id_infer_auto(0, &addrType); - ASSERT(res == 0); - res = ble_svc_gap_device_name_set(deviceName); - ASSERT(res == 0); + + int rc; + rc = ble_hs_util_ensure_addr(0); + ASSERT(rc == 0); + rc = ble_hs_id_infer_auto(0, &addrType); + ASSERT(rc == 0); + rc = ble_svc_gap_device_name_set(deviceName); + ASSERT(rc == 0); + rc = ble_svc_gap_device_appearance_set(0xC2); + ASSERT(rc == 0); Pinetime::Controllers::Ble::BleAddress address; - res = ble_hs_id_copy_addr(addrType, address.data(), nullptr); - ASSERT(res == 0); + rc = ble_hs_id_copy_addr(addrType, address.data(), nullptr); + ASSERT(rc == 0); bleController.AddressType((addrType == 0) ? Ble::AddressTypes::Public : Ble::AddressTypes::Random); bleController.Address(std::move(address)); - res = ble_gatts_start(); - ASSERT(res == 0); + rc = ble_gatts_start(); + ASSERT(rc == 0); + + if (!ble_gap_adv_active() && !bleController.IsConnected()) + StartAdvertising(); } void NimbleController::StartAdvertising() { - if (bleController.IsConnected() || ble_gap_conn_active() || ble_gap_adv_active()) - return; - - ble_svc_gap_device_name_set(deviceName); + int rc; /* set adv parameters */ struct ble_gap_adv_params adv_params; @@ -102,11 +122,17 @@ void NimbleController::StartAdvertising() { adv_params.conn_mode = BLE_GAP_CONN_MODE_UND; adv_params.disc_mode = BLE_GAP_DISC_MODE_GEN; + /* fast advertise for 30 sec */ + if (fastAdvCount < 15) { + adv_params.itvl_min = 32; + adv_params.itvl_max = 47; + fastAdvCount++; + } else { + adv_params.itvl_min = 1636; + adv_params.itvl_max = 1651; + } fields.flags = BLE_HS_ADV_F_DISC_GEN | BLE_HS_ADV_F_BREDR_UNSUP; - // fields.uuids128 = BLE_UUID128(BLE_UUID128_DECLARE( - // 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, - // 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff)); fields.uuids128 = &dfuServiceUuid; fields.num_uuids128 = 1; fields.uuids128_is_complete = 1; @@ -116,28 +142,25 @@ void NimbleController::StartAdvertising() { rsp_fields.name_len = strlen(deviceName); rsp_fields.name_is_complete = 1; - ble_gap_adv_set_fields(&fields); - // ASSERT(res == 0); // TODO this one sometimes fails with error 22 (notsync) + rc = ble_gap_adv_set_fields(&fields); + ASSERT(rc == 0); - ble_gap_adv_rsp_set_fields(&rsp_fields); - // ASSERT(res == 0); + rc = ble_gap_adv_rsp_set_fields(&rsp_fields); + ASSERT(rc == 0); - ble_gap_adv_start(addrType, NULL, 180000, &adv_params, GAPEventCallback, this); - // ASSERT(res == 0);// TODO I've disabled these ASSERT as they sometime asserts and reset the mcu. - // For now, the advertising is restarted as soon as it ends. There may be a race condition - // that prevent the advertising from restarting reliably. - // I remove the assert to prevent this uncesseray crash, but in the long term, the management of - // the advertising should be improve (better error handling, and advertise for 3 minutes after - // the application has been woken up, for example. + rc = ble_gap_adv_start(addrType, NULL, 2000, &adv_params, GAPEventCallback, this); + ASSERT(rc == 0); } int NimbleController::OnGAPEvent(ble_gap_event* event) { switch (event->type) { case BLE_GAP_EVENT_ADV_COMPLETE: NRF_LOG_INFO("Advertising event : BLE_GAP_EVENT_ADV_COMPLETE"); - NRF_LOG_INFO("advertise complete; reason=%dn status=%d", event->adv_complete.reason, event->connect.status); + NRF_LOG_INFO("reason=%d; status=%d", event->adv_complete.reason, event->connect.status); + StartAdvertising(); break; - case BLE_GAP_EVENT_CONNECT: { + + case BLE_GAP_EVENT_CONNECT: NRF_LOG_INFO("Advertising event : BLE_GAP_EVENT_CONNECT"); /* A new connection was established or a connection attempt failed. */ @@ -145,35 +168,44 @@ int NimbleController::OnGAPEvent(ble_gap_event* event) { if (event->connect.status != 0) { /* Connection failed; resume advertising. */ - StartAdvertising(); + currentTimeClient.Reset(); + alertNotificationClient.Reset(); + connectionHandle = BLE_HS_CONN_HANDLE_NONE; bleController.Disconnect(); + fastAdvCount = 0; + StartAdvertising(); } else { + connectionHandle = event->connect.conn_handle; bleController.Connect(); systemTask.PushMessage(Pinetime::System::Messages::BleConnected); - connectionHandle = event->connect.conn_handle; - // Service discovery is deffered via systemtask + // Service discovery is deferred via systemtask } - } break; + break; + case BLE_GAP_EVENT_DISCONNECT: NRF_LOG_INFO("Advertising event : BLE_GAP_EVENT_DISCONNECT"); - NRF_LOG_INFO("disconnect; reason=%d", event->disconnect.reason); + NRF_LOG_INFO("disconnect reason=%d", event->disconnect.reason); /* Connection terminated; resume advertising. */ currentTimeClient.Reset(); alertNotificationClient.Reset(); connectionHandle = BLE_HS_CONN_HANDLE_NONE; bleController.Disconnect(); + fastAdvCount = 0; StartAdvertising(); break; + case BLE_GAP_EVENT_CONN_UPDATE: NRF_LOG_INFO("Advertising event : BLE_GAP_EVENT_CONN_UPDATE"); /* The central has updated the connection parameters. */ - NRF_LOG_INFO("connection updated; status=%d ", event->conn_update.status); + NRF_LOG_INFO("update status=%d ", event->conn_update.status); break; + case BLE_GAP_EVENT_ENC_CHANGE: /* Encryption has been enabled or disabled for this connection. */ NRF_LOG_INFO("encryption change event; status=%d ", event->enc_change.status); - return 0; + break; + case BLE_GAP_EVENT_SUBSCRIBE: NRF_LOG_INFO("subscribe event; conn_handle=%d attr_handle=%d " "reason=%d prevn=%d curn=%d previ=%d curi=???\n", @@ -183,10 +215,12 @@ int NimbleController::OnGAPEvent(ble_gap_event* event) { event->subscribe.prev_notify, event->subscribe.cur_notify, event->subscribe.prev_indicate); - return 0; + break; + case BLE_GAP_EVENT_MTU: - NRF_LOG_INFO("mtu update event; conn_handle=%d cid=%d mtu=%d\n", event->mtu.conn_handle, event->mtu.channel_id, event->mtu.value); - return 0; + NRF_LOG_INFO("mtu update event; conn_handle=%d cid=%d mtu=%d\n", + event->mtu.conn_handle, event->mtu.channel_id, event->mtu.value); + break; case BLE_GAP_EVENT_REPEAT_PAIRING: { /* We already have a bond with the peer, but it is attempting to @@ -217,8 +251,7 @@ int NimbleController::OnGAPEvent(ble_gap_event* event) { notifSize); alertNotificationClient.OnNotification(event); - return 0; - } + } break; /* Attribute data is contained in event->notify_rx.attr_data. */ default: @@ -229,7 +262,9 @@ int NimbleController::OnGAPEvent(ble_gap_event* event) { } void NimbleController::StartDiscovery() { - serviceDiscovery.StartDiscovery(connectionHandle); + if (connectionHandle != BLE_HS_CONN_HANDLE_NONE) { + serviceDiscovery.StartDiscovery(connectionHandle); + } } uint16_t NimbleController::connHandle() { @@ -237,7 +272,7 @@ uint16_t NimbleController::connHandle() { } void NimbleController::NotifyBatteryLevel(uint8_t level) { - if(connectionHandle != BLE_HS_CONN_HANDLE_NONE) { + if (connectionHandle != BLE_HS_CONN_HANDLE_NONE) { batteryInformationService.NotifyBatteryLevel(connectionHandle, level); } } diff --git a/src/components/ble/NimbleController.h b/src/components/ble/NimbleController.h index 0cfe983c6b..473bb1aff6 100644 --- a/src/components/ble/NimbleController.h +++ b/src/components/ble/NimbleController.h @@ -72,6 +72,10 @@ namespace Pinetime { uint16_t connHandle(); void NotifyBatteryLevel(uint8_t level); + void RestartFastAdv() { + fastAdvCount = 0; + } + private: static constexpr const char* deviceName = "InfiniTime"; Pinetime::System::SystemTask& systemTask; @@ -94,6 +98,7 @@ namespace Pinetime { uint8_t addrType; // 1 = Random, 0 = PUBLIC uint16_t connectionHandle = BLE_HS_CONN_HANDLE_NONE; + uint8_t fastAdvCount = 0; ble_uuid128_t dfuServiceUuid { .u {.type = BLE_UUID_TYPE_128}, @@ -101,5 +106,7 @@ namespace Pinetime { ServiceDiscovery serviceDiscovery; }; + + static NimbleController* nptr; } } diff --git a/src/components/brightness/BrightnessController.cpp b/src/components/brightness/BrightnessController.cpp index 8ad987d1f4..6c524679c1 100644 --- a/src/components/brightness/BrightnessController.cpp +++ b/src/components/brightness/BrightnessController.cpp @@ -1,13 +1,13 @@ #include "BrightnessController.h" #include #include "displayapp/screens/Symbols.h" - +#include "drivers/PinMap.h" using namespace Pinetime::Controllers; void BrightnessController::Init() { - nrf_gpio_cfg_output(pinLcdBacklight1); - nrf_gpio_cfg_output(pinLcdBacklight2); - nrf_gpio_cfg_output(pinLcdBacklight3); + nrf_gpio_cfg_output(PinMap::LcdBacklightLow); + nrf_gpio_cfg_output(PinMap::LcdBacklightMedium); + nrf_gpio_cfg_output(PinMap::LcdBacklightHigh); Set(level); } @@ -16,24 +16,24 @@ void BrightnessController::Set(BrightnessController::Levels level) { switch (level) { default: case Levels::High: - nrf_gpio_pin_clear(pinLcdBacklight1); - nrf_gpio_pin_clear(pinLcdBacklight2); - nrf_gpio_pin_clear(pinLcdBacklight3); + nrf_gpio_pin_clear(PinMap::LcdBacklightLow); + nrf_gpio_pin_clear(PinMap::LcdBacklightMedium); + nrf_gpio_pin_clear(PinMap::LcdBacklightHigh); break; case Levels::Medium: - nrf_gpio_pin_clear(pinLcdBacklight1); - nrf_gpio_pin_clear(pinLcdBacklight2); - nrf_gpio_pin_set(pinLcdBacklight3); + nrf_gpio_pin_clear(PinMap::LcdBacklightLow); + nrf_gpio_pin_clear(PinMap::LcdBacklightMedium); + nrf_gpio_pin_set(PinMap::LcdBacklightHigh); break; case Levels::Low: - nrf_gpio_pin_clear(pinLcdBacklight1); - nrf_gpio_pin_set(pinLcdBacklight2); - nrf_gpio_pin_set(pinLcdBacklight3); + nrf_gpio_pin_clear(PinMap::LcdBacklightLow); + nrf_gpio_pin_set(PinMap::LcdBacklightMedium); + nrf_gpio_pin_set(PinMap::LcdBacklightHigh); break; case Levels::Off: - nrf_gpio_pin_set(pinLcdBacklight1); - nrf_gpio_pin_set(pinLcdBacklight2); - nrf_gpio_pin_set(pinLcdBacklight3); + nrf_gpio_pin_set(PinMap::LcdBacklightLow); + nrf_gpio_pin_set(PinMap::LcdBacklightMedium); + nrf_gpio_pin_set(PinMap::LcdBacklightHigh); break; } } diff --git a/src/components/brightness/BrightnessController.h b/src/components/brightness/BrightnessController.h index c47158a910..0d7ac2ffa6 100644 --- a/src/components/brightness/BrightnessController.h +++ b/src/components/brightness/BrightnessController.h @@ -22,9 +22,6 @@ namespace Pinetime { const char* ToString(); private: - static constexpr uint8_t pinLcdBacklight1 = 14; - static constexpr uint8_t pinLcdBacklight2 = 22; - static constexpr uint8_t pinLcdBacklight3 = 23; Levels level = Levels::High; Levels backupLevel = Levels::High; }; diff --git a/src/components/motor/MotorController.cpp b/src/components/motor/MotorController.cpp index b25e6bc829..42057a860d 100644 --- a/src/components/motor/MotorController.cpp +++ b/src/components/motor/MotorController.cpp @@ -2,6 +2,7 @@ #include #include "systemtask/SystemTask.h" #include "app_timer.h" +#include "drivers/PinMap.h" APP_TIMER_DEF(shortVibTimer); APP_TIMER_DEF(longVibTimer); @@ -12,8 +13,8 @@ MotorController::MotorController(Controllers::Settings& settingsController) : se } void MotorController::Init() { - nrf_gpio_cfg_output(pinMotor); - nrf_gpio_pin_set(pinMotor); + nrf_gpio_cfg_output(PinMap::Motor); + nrf_gpio_pin_set(PinMap::Motor); app_timer_init(); app_timer_create(&shortVibTimer, APP_TIMER_MODE_SINGLE_SHOT, StopMotor); @@ -30,7 +31,7 @@ void MotorController::RunForDuration(uint8_t motorDuration) { return; } - nrf_gpio_pin_clear(pinMotor); + nrf_gpio_pin_clear(PinMap::Motor); app_timer_start(shortVibTimer, APP_TIMER_TICKS(motorDuration), nullptr); } @@ -44,9 +45,9 @@ void MotorController::StartRinging() { void MotorController::StopRinging() { app_timer_stop(longVibTimer); - nrf_gpio_pin_set(pinMotor); + nrf_gpio_pin_set(PinMap::Motor); } void MotorController::StopMotor(void* p_context) { - nrf_gpio_pin_set(pinMotor); + nrf_gpio_pin_set(PinMap::Motor); } diff --git a/src/components/motor/MotorController.h b/src/components/motor/MotorController.h index d2c9fe5f2c..cf78088ec3 100644 --- a/src/components/motor/MotorController.h +++ b/src/components/motor/MotorController.h @@ -1,12 +1,10 @@ #pragma once #include -#include "app_timer.h" #include "components/settings/Settings.h" namespace Pinetime { namespace Controllers { - static constexpr uint8_t pinMotor = 16; class MotorController { public: diff --git a/src/components/settings/Settings.h b/src/components/settings/Settings.h index a294ab7840..a54ba9760e 100644 --- a/src/components/settings/Settings.h +++ b/src/components/settings/Settings.h @@ -114,7 +114,7 @@ namespace Pinetime { }; void setWakeUpMode(WakeUpMode wakeUp, bool enabled) { - if (!isWakeUpModeOn(wakeUp)) { + if (enabled != isWakeUpModeOn(wakeUp)) { settingsChanged = true; } settings.wakeUpMode.set(static_cast(wakeUp), enabled); diff --git a/src/displayapp/DisplayApp.cpp b/src/displayapp/DisplayApp.cpp index 33c67e229c..9d47310197 100644 --- a/src/displayapp/DisplayApp.cpp +++ b/src/displayapp/DisplayApp.cpp @@ -139,9 +139,6 @@ void DisplayApp::InitHw() { brightnessController.Set(settingsController.GetBrightness()); } -uint32_t acc = 0; -uint32_t count = 0; -bool toggle = true; void DisplayApp::Refresh() { TickType_t queueTimeout; TickType_t delta; @@ -197,9 +194,6 @@ void DisplayApp::Refresh() { // clockScreen.SetBleConnectionState(bleController.IsConnected() ? Screens::Clock::BleConnectionStates::Connected : // Screens::Clock::BleConnectionStates::NotConnected); break; - case Messages::UpdateBatteryLevel: - batteryController.Update(); - break; case Messages::NewNotification: LoadApp(Apps::NotificationsPreview, DisplayApp::FullRefreshDirections::Down); break; diff --git a/src/displayapp/DisplayAppRecovery.cpp b/src/displayapp/DisplayAppRecovery.cpp index 17612ef057..7a20262988 100644 --- a/src/displayapp/DisplayAppRecovery.cpp +++ b/src/displayapp/DisplayAppRecovery.cpp @@ -5,6 +5,7 @@ #include #include #include "displayapp/icons/infinitime/infinitime-nb.c" +#include "components/ble/BleController.h" using namespace Pinetime::Applications; diff --git a/src/displayapp/DisplayAppRecovery.h b/src/displayapp/DisplayAppRecovery.h index 8b2bc7f515..4184ea49da 100644 --- a/src/displayapp/DisplayAppRecovery.h +++ b/src/displayapp/DisplayAppRecovery.h @@ -6,32 +6,38 @@ #include #include #include "components/gfx/Gfx.h" -#include "components/battery/BatteryController.h" -#include "components/brightness/BrightnessController.h" -#include "components/ble/BleController.h" -#include "components/datetime/DateTimeController.h" -#include "components/ble/NotificationManager.h" -#include "components/firmwarevalidator/FirmwareValidator.h" #include "drivers/Cst816s.h" #include #include -#include -#include #include -#include #include "TouchEvents.h" #include "Apps.h" #include "Messages.h" #include "DummyLittleVgl.h" -#include "components/timer/TimerController.h" namespace Pinetime { - namespace System { - class SystemTask; - }; + namespace Drivers { + class St7789; + class Cst816S; + class WatchdogView; + } namespace Controllers { + class Settings; + class Battery; + class Ble; + class DateTime; + class NotificationManager; + class HeartRateController; + class MotionController; class TouchHandler; + class MotorController; + class TimerController; } + + namespace System { + class SystemTask; + }; + namespace Applications { class DisplayApp { public: diff --git a/src/displayapp/Messages.h b/src/displayapp/Messages.h index c23cdfe3f7..d48b646fe0 100644 --- a/src/displayapp/Messages.h +++ b/src/displayapp/Messages.h @@ -7,7 +7,6 @@ namespace Pinetime { GoToRunning, UpdateDateTime, UpdateBleConnection, - UpdateBatteryLevel, TouchEvent, ButtonPushed, NewNotification, diff --git a/src/displayapp/screens/BatteryInfo.cpp b/src/displayapp/screens/BatteryInfo.cpp index 91c2651236..ad9af15344 100644 --- a/src/displayapp/screens/BatteryInfo.cpp +++ b/src/displayapp/screens/BatteryInfo.cpp @@ -55,8 +55,6 @@ BatteryInfo::~BatteryInfo() { void BatteryInfo::Refresh() { - batteryController.Update(); - batteryPercent = batteryController.PercentRemaining(); batteryVoltage = batteryController.Voltage(); diff --git a/src/displayapp/screens/Notifications.cpp b/src/displayapp/screens/Notifications.cpp index 22eb290e8e..417dff00d2 100644 --- a/src/displayapp/screens/Notifications.cpp +++ b/src/displayapp/screens/Notifications.cpp @@ -152,7 +152,7 @@ Notifications::NotificationItem::NotificationItem(const char* title, uint8_t notifNb, Modes mode, Pinetime::Controllers::AlertNotificationService& alertNotificationService) - : notifNr {notifNr}, notifNb {notifNb}, mode {mode}, alertNotificationService {alertNotificationService} { + : mode {mode}, alertNotificationService {alertNotificationService} { lv_obj_t* container1 = lv_cont_create(lv_scr_act(), NULL); lv_obj_set_style_local_bg_color(container1, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x222222)); diff --git a/src/displayapp/screens/Notifications.h b/src/displayapp/screens/Notifications.h index f6f8b4c35b..0b5271e72f 100644 --- a/src/displayapp/screens/Notifications.h +++ b/src/displayapp/screens/Notifications.h @@ -43,21 +43,13 @@ namespace Pinetime { void OnCallButtonEvent(lv_obj_t*, lv_event_t event); private: - uint8_t notifNr = 0; - uint8_t notifNb = 0; - char pageText[4]; - lv_obj_t* container1; - lv_obj_t* t1; - lv_obj_t* l1; - lv_obj_t* l2; lv_obj_t* bt_accept; lv_obj_t* bt_mute; lv_obj_t* bt_reject; lv_obj_t* label_accept; lv_obj_t* label_mute; lv_obj_t* label_reject; - lv_obj_t* bottomPlaceholder; Modes mode; Pinetime::Controllers::AlertNotificationService& alertNotificationService; bool running = true; diff --git a/src/displayapp/screens/settings/Settings.cpp b/src/displayapp/screens/settings/Settings.cpp index f82b03c1a1..e3319f030a 100644 --- a/src/displayapp/screens/settings/Settings.cpp +++ b/src/displayapp/screens/settings/Settings.cpp @@ -50,8 +50,8 @@ std::unique_ptr Settings::CreateScreen2() { std::array applications {{ {Symbols::shoe, "Steps", Apps::SettingSteps}, {Symbols::batteryHalf, "Battery", Apps::BatteryInfo}, + {Symbols::paintbrush, "PTS Colors", Apps::SettingPineTimeStyle}, {Symbols::check, "Firmware", Apps::FirmwareValidation}, - {Symbols::list, "About", Apps::SysInfo}, }}; return std::make_unique(1, 3, app, settingsController, applications); @@ -60,7 +60,7 @@ std::unique_ptr Settings::CreateScreen2() { std::unique_ptr Settings::CreateScreen3() { std::array applications {{ - {Symbols::paintbrush, "PTS Colors", Apps::SettingPineTimeStyle}, + {Symbols::list, "About", Apps::SysInfo}, {Symbols::none, "None", Apps::None}, {Symbols::none, "None", Apps::None}, {Symbols::none, "None", Apps::None}, diff --git a/src/drivers/Cst816s.cpp b/src/drivers/Cst816s.cpp index b8f8e45df9..1ff163b0c2 100644 --- a/src/drivers/Cst816s.cpp +++ b/src/drivers/Cst816s.cpp @@ -3,6 +3,7 @@ #include #include #include +#include "drivers/PinMap.h" using namespace Pinetime::Drivers; @@ -18,12 +19,12 @@ Cst816S::Cst816S(TwiMaster& twiMaster, uint8_t twiAddress) : twiMaster {twiMaste } void Cst816S::Init() { - nrf_gpio_cfg_output(pinReset); - nrf_gpio_pin_set(pinReset); + nrf_gpio_cfg_output(PinMap::Cst816sReset); + nrf_gpio_pin_set(PinMap::Cst816sReset); vTaskDelay(50); - nrf_gpio_pin_clear(pinReset); + nrf_gpio_pin_clear(PinMap::Cst816sReset); vTaskDelay(5); - nrf_gpio_pin_set(pinReset); + nrf_gpio_pin_set(PinMap::Cst816sReset); vTaskDelay(50); // Wake the touchpanel up @@ -80,9 +81,9 @@ Cst816S::TouchInfos Cst816S::GetTouchInfo() { } void Cst816S::Sleep() { - nrf_gpio_pin_clear(pinReset); + nrf_gpio_pin_clear(PinMap::Cst816sReset); vTaskDelay(5); - nrf_gpio_pin_set(pinReset); + nrf_gpio_pin_set(PinMap::Cst816sReset); vTaskDelay(50); static constexpr uint8_t sleepValue = 0x03; twiMaster.Write(twiAddress, 0xA5, &sleepValue, 1); diff --git a/src/drivers/Cst816s.h b/src/drivers/Cst816s.h index d4c17bb823..7b46c5d582 100644 --- a/src/drivers/Cst816s.h +++ b/src/drivers/Cst816s.h @@ -36,9 +36,6 @@ namespace Pinetime { void Wakeup(); private: - static constexpr uint8_t pinIrq = 28; - static constexpr uint8_t pinReset = 10; - // Unused/Unavailable commented out static constexpr uint8_t gestureIndex = 1; static constexpr uint8_t touchPointNumIndex = 2; diff --git a/src/drivers/PinMap.h b/src/drivers/PinMap.h new file mode 100644 index 0000000000..57964020c6 --- /dev/null +++ b/src/drivers/PinMap.h @@ -0,0 +1,38 @@ +#pragma once + +namespace Pinetime { + namespace PinMap { + + #ifdef WATCH_P8 + // COLMI P8 + static constexpr uint8_t Charging = 19; + static constexpr uint8_t Cst816sReset = 13; + static constexpr uint8_t Button = 17; + #else + // Pinetime + static constexpr uint8_t Charging = 12; + static constexpr uint8_t Cst816sReset = 10; + static constexpr uint8_t Button = 13; + #endif + + static constexpr uint8_t Cst816sIrq = 28; + static constexpr uint8_t PowerPresent = 19; + + static constexpr uint8_t Motor = 16; + + static constexpr uint8_t LcdBacklightLow = 14; + static constexpr uint8_t LcdBacklightMedium = 22; + static constexpr uint8_t LcdBacklightHigh = 23; + + static constexpr uint8_t SpiSck = 2; + static constexpr uint8_t SpiMosi = 3; + static constexpr uint8_t SpiMiso = 4; + + static constexpr uint8_t SpiFlashCsn = 5; + static constexpr uint8_t SpiLcdCsn = 25; + static constexpr uint8_t LcdDataCommand = 18; + + static constexpr uint8_t TwiScl = 7; + static constexpr uint8_t TwiSda = 6; + } +} diff --git a/src/main.cpp b/src/main.cpp index 6a7f5eb342..7d4f0858c5 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -43,7 +43,9 @@ #include "drivers/St7789.h" #include "drivers/TwiMaster.h" #include "drivers/Cst816s.h" +#include "drivers/PinMap.h" #include "systemtask/SystemTask.h" +#include "drivers/PinMap.h" #include "touchhandler/TouchHandler.h" #if NRF_LOG_ENABLED @@ -54,14 +56,6 @@ Pinetime::Logging::NrfLogger logger; Pinetime::Logging::DummyLogger logger; #endif -static constexpr uint8_t pinSpiSck = 2; -static constexpr uint8_t pinSpiMosi = 3; -static constexpr uint8_t pinSpiMiso = 4; -static constexpr uint8_t pinSpiFlashCsn = 5; -static constexpr uint8_t pinLcdCsn = 25; -static constexpr uint8_t pinLcdDataCommand = 18; -static constexpr uint8_t pinTwiScl = 7; -static constexpr uint8_t pinTwiSda = 6; static constexpr uint8_t touchPanelTwiAddress = 0x15; static constexpr uint8_t motionSensorTwiAddress = 0x18; static constexpr uint8_t heartRateSensorTwiAddress = 0x44; @@ -70,33 +64,30 @@ Pinetime::Drivers::SpiMaster spi {Pinetime::Drivers::SpiMaster::SpiModule::SPI0, {Pinetime::Drivers::SpiMaster::BitOrder::Msb_Lsb, Pinetime::Drivers::SpiMaster::Modes::Mode3, Pinetime::Drivers::SpiMaster::Frequencies::Freq8Mhz, - pinSpiSck, - pinSpiMosi, - pinSpiMiso}}; + Pinetime::PinMap::SpiSck, + Pinetime::PinMap::SpiMosi, + Pinetime::PinMap::SpiMiso}}; -Pinetime::Drivers::Spi lcdSpi {spi, pinLcdCsn}; -Pinetime::Drivers::St7789 lcd {lcdSpi, pinLcdDataCommand}; +Pinetime::Drivers::Spi lcdSpi {spi, Pinetime::PinMap::SpiLcdCsn}; +Pinetime::Drivers::St7789 lcd {lcdSpi, Pinetime::PinMap::LcdDataCommand}; -Pinetime::Drivers::Spi flashSpi {spi, pinSpiFlashCsn}; +Pinetime::Drivers::Spi flashSpi {spi, Pinetime::PinMap::SpiFlashCsn}; Pinetime::Drivers::SpiNorFlash spiNorFlash {flashSpi}; // The TWI device should work @ up to 400Khz but there is a HW bug which prevent it from // respecting correct timings. According to erratas heet, this magic value makes it run // at ~390Khz with correct timings. static constexpr uint32_t MaxTwiFrequencyWithoutHardwareBug {0x06200000}; -Pinetime::Drivers::TwiMaster twiMaster {NRF_TWIM1, MaxTwiFrequencyWithoutHardwareBug, pinTwiSda, pinTwiScl}; +Pinetime::Drivers::TwiMaster twiMaster {NRF_TWIM1, MaxTwiFrequencyWithoutHardwareBug, Pinetime::PinMap::TwiSda, Pinetime::PinMap::TwiScl}; Pinetime::Drivers::Cst816S touchPanel {twiMaster, touchPanelTwiAddress}; #ifdef PINETIME_IS_RECOVERY -static constexpr bool isFactory = true; #include "displayapp/DummyLittleVgl.h" #include "displayapp/DisplayAppRecovery.h" -Pinetime::Components::LittleVgl lvgl {lcd, touchPanel}; #else -static constexpr bool isFactory = false; #include "displayapp/LittleVgl.h" #include "displayapp/DisplayApp.h" -Pinetime::Components::LittleVgl lvgl {lcd, touchPanel}; #endif +Pinetime::Components::LittleVgl lvgl {lcd, touchPanel}; Pinetime::Drivers::Bma421 motionSensor {twiMaster, motionSensorTwiAddress}; Pinetime::Drivers::Hrs3300 heartRateSensor {twiMaster, heartRateSensorTwiAddress}; @@ -105,10 +96,8 @@ TimerHandle_t debounceTimer; TimerHandle_t debounceChargeTimer; Pinetime::Controllers::Battery batteryController; Pinetime::Controllers::Ble bleController; -void ble_manager_set_ble_connection_callback(void (*connection)()); -void ble_manager_set_ble_disconnection_callback(void (*disconnection)()); -static constexpr uint8_t pinTouchIrq = 28; -static constexpr uint8_t pinPowerPresentIrq = 19; +static constexpr uint8_t pinTouchIrq = Pinetime::PinMap::Cst816sIrq; +static constexpr uint8_t pinPowerPresentIrq = Pinetime::PinMap::PowerPresent; Pinetime::Controllers::HeartRateController heartRateController; Pinetime::Applications::HeartRateTask heartRateApp(heartRateSensor, heartRateController); @@ -168,14 +157,14 @@ Pinetime::System::SystemTask systemTask(spi, touchHandler); void nrfx_gpiote_evt_handler(nrfx_gpiote_pin_t pin, nrf_gpiote_polarity_t action) { - if (pin == pinTouchIrq) { + if (pin == Pinetime::PinMap::Cst816sIrq) { systemTask.OnTouchEvent(); return; } BaseType_t xHigherPriorityTaskWoken = pdFALSE; - if (pin == pinPowerPresentIrq and action == NRF_GPIOTE_POLARITY_TOGGLE) { + if (pin == Pinetime::PinMap::PowerPresent and action == NRF_GPIOTE_POLARITY_TOGGLE) { xTimerStartFromISR(debounceChargeTimer, &xHigherPriorityTaskWoken); portYIELD_FROM_ISR(xHigherPriorityTaskWoken); return; @@ -308,18 +297,18 @@ int main(void) { nrf_drv_clock_init(); // Unblock i2c? - nrf_gpio_cfg(pinTwiScl, + nrf_gpio_cfg(Pinetime::PinMap::TwiScl, NRF_GPIO_PIN_DIR_OUTPUT, NRF_GPIO_PIN_INPUT_DISCONNECT, NRF_GPIO_PIN_NOPULL, NRF_GPIO_PIN_S0D1, NRF_GPIO_PIN_NOSENSE); - nrf_gpio_pin_set(pinTwiScl); + nrf_gpio_pin_set(Pinetime::PinMap::TwiScl); for (uint8_t i = 0; i < 16; i++) { - nrf_gpio_pin_toggle(pinTwiScl); + nrf_gpio_pin_toggle(Pinetime::PinMap::TwiScl); nrf_delay_us(5); } - nrf_gpio_cfg_default(pinTwiScl); + nrf_gpio_cfg_default(Pinetime::PinMap::TwiScl); debounceTimer = xTimerCreate("debounceTimer", 200, pdFALSE, (void*) 0, DebounceTimerCallback); debounceChargeTimer = xTimerCreate("debounceTimerCharge", 200, pdFALSE, (void*) 0, DebounceTimerChargeCallback); diff --git a/src/recoveryLoader.cpp b/src/recoveryLoader.cpp index 9818179dee..acec14c8ad 100644 --- a/src/recoveryLoader.cpp +++ b/src/recoveryLoader.cpp @@ -15,6 +15,7 @@ #include #include #include "recoveryImage.h" +#include "drivers/PinMap.h" #include "displayapp/icons/infinitime/infinitime-nb.c" #include "components/rle/RleDecoder.h" @@ -27,12 +28,6 @@ Pinetime::Logging::NrfLogger logger; Pinetime::Logging::DummyLogger logger; #endif -static constexpr uint8_t pinSpiSck = 2; -static constexpr uint8_t pinSpiMosi = 3; -static constexpr uint8_t pinSpiMiso = 4; -static constexpr uint8_t pinSpiFlashCsn = 5; -static constexpr uint8_t pinLcdCsn = 25; -static constexpr uint8_t pinLcdDataCommand = 18; static constexpr uint8_t displayWidth = 240; static constexpr uint8_t displayHeight = 240; @@ -45,14 +40,14 @@ Pinetime::Drivers::SpiMaster spi {Pinetime::Drivers::SpiMaster::SpiModule::SPI0, {Pinetime::Drivers::SpiMaster::BitOrder::Msb_Lsb, Pinetime::Drivers::SpiMaster::Modes::Mode3, Pinetime::Drivers::SpiMaster::Frequencies::Freq8Mhz, - pinSpiSck, - pinSpiMosi, - pinSpiMiso}}; -Pinetime::Drivers::Spi flashSpi {spi, pinSpiFlashCsn}; + Pinetime::PinMap::SpiSck, + Pinetime::PinMap::SpiMosi, + Pinetime::PinMap::SpiMiso}}; +Pinetime::Drivers::Spi flashSpi {spi, Pinetime::PinMap::SpiFlashCsn}; Pinetime::Drivers::SpiNorFlash spiNorFlash {flashSpi}; -Pinetime::Drivers::Spi lcdSpi {spi, pinLcdCsn}; -Pinetime::Drivers::St7789 lcd {lcdSpi, pinLcdDataCommand}; +Pinetime::Drivers::Spi lcdSpi {spi, Pinetime::PinMap::SpiLcdCsn}; +Pinetime::Drivers::St7789 lcd {lcdSpi, Pinetime::PinMap::LcdDataCommand}; Pinetime::Components::Gfx gfx {lcd}; Pinetime::Controllers::BrightnessController brightnessController; diff --git a/src/systemtask/Messages.h b/src/systemtask/Messages.h index 93fcf9407a..bd1de234c2 100644 --- a/src/systemtask/Messages.h +++ b/src/systemtask/Messages.h @@ -22,7 +22,9 @@ namespace Pinetime { OnNewDay, OnChargingEvent, SetOffAlarm, - StopRinging + StopRinging, + MeasureBatteryTimerExpired, + BatteryMeasurementDone, }; } } diff --git a/src/systemtask/SystemTask.cpp b/src/systemtask/SystemTask.cpp index 534f551092..24ee4bda3e 100644 --- a/src/systemtask/SystemTask.cpp +++ b/src/systemtask/SystemTask.cpp @@ -21,8 +21,10 @@ #include "drivers/SpiNorFlash.h" #include "drivers/TwiMaster.h" #include "drivers/Hrs3300.h" +#include "drivers/PinMap.h" #include "main.h" + #include using namespace Pinetime::System; @@ -47,6 +49,11 @@ void IdleTimerCallback(TimerHandle_t xTimer) { sysTask->OnIdle(); } +void MeasureBatteryTimerCallback(TimerHandle_t xTimer) { + auto* sysTask = static_cast(pvTimerGetTimerID(xTimer)); + sysTask->PushMessage(Pinetime::System::Messages::MeasureBatteryTimerExpired); +} + SystemTask::SystemTask(Drivers::SpiMaster& spi, Drivers::St7789& lcd, Pinetime::Drivers::SpiNorFlash& spiNorFlash, @@ -123,13 +130,13 @@ void SystemTask::Work() { fs.Init(); nimbleController.Init(); - nimbleController.StartAdvertising(); lcd.Init(); twiMaster.Init(); touchPanel.Init(); dateTimeController.Register(this); - batteryController.Init(); + batteryController.Register(this); + batteryController.Update(); motorController.Init(); motionSensor.SoftReset(); timerController.Register(this); @@ -147,13 +154,11 @@ void SystemTask::Work() { displayApp.Register(this); displayApp.Start(); - displayApp.PushMessage(Pinetime::Applications::Display::Messages::UpdateBatteryLevel); - heartRateSensor.Init(); heartRateSensor.Disable(); heartRateApp.Start(); - nrf_gpio_cfg_sense_input(pinButton, (nrf_gpio_pin_pull_t) GPIO_PIN_CNF_PULL_Pulldown, (nrf_gpio_pin_sense_t) GPIO_PIN_CNF_SENSE_High); + nrf_gpio_cfg_sense_input(PinMap::Button, (nrf_gpio_pin_pull_t) GPIO_PIN_CNF_PULL_Pulldown, (nrf_gpio_pin_sense_t) GPIO_PIN_CNF_SENSE_High); nrf_gpio_cfg_output(15); nrf_gpio_pin_set(15); @@ -164,9 +169,9 @@ void SystemTask::Work() { pinConfig.sense = (nrf_gpiote_polarity_t) NRF_GPIOTE_POLARITY_HITOLO; pinConfig.pull = (nrf_gpio_pin_pull_t) GPIO_PIN_CNF_PULL_Pulldown; - nrfx_gpiote_in_init(pinButton, &pinConfig, nrfx_gpiote_evt_handler); + nrfx_gpiote_in_init(PinMap::Button, &pinConfig, nrfx_gpiote_evt_handler); - nrf_gpio_cfg_sense_input(pinTouchIrq, (nrf_gpio_pin_pull_t) GPIO_PIN_CNF_PULL_Pullup, (nrf_gpio_pin_sense_t) GPIO_PIN_CNF_SENSE_Low); + nrf_gpio_cfg_sense_input(PinMap::Cst816sIrq, (nrf_gpio_pin_pull_t) GPIO_PIN_CNF_PULL_Pullup, (nrf_gpio_pin_sense_t) GPIO_PIN_CNF_SENSE_Low); pinConfig.skip_gpio_setup = true; pinConfig.hi_accuracy = false; @@ -174,24 +179,26 @@ void SystemTask::Work() { pinConfig.sense = (nrf_gpiote_polarity_t) NRF_GPIOTE_POLARITY_HITOLO; pinConfig.pull = (nrf_gpio_pin_pull_t) GPIO_PIN_CNF_PULL_Pullup; - nrfx_gpiote_in_init(pinTouchIrq, &pinConfig, nrfx_gpiote_evt_handler); + nrfx_gpiote_in_init(PinMap::Cst816sIrq, &pinConfig, nrfx_gpiote_evt_handler); pinConfig.sense = NRF_GPIOTE_POLARITY_TOGGLE; pinConfig.pull = NRF_GPIO_PIN_NOPULL; pinConfig.is_watcher = false; pinConfig.hi_accuracy = false; pinConfig.skip_gpio_setup = true; - nrfx_gpiote_in_init(pinPowerPresentIrq, &pinConfig, nrfx_gpiote_evt_handler); + nrfx_gpiote_in_init(PinMap::PowerPresent, &pinConfig, nrfx_gpiote_evt_handler); - if (nrf_gpio_pin_read(pinPowerPresentIrq)) { - nrf_gpio_cfg_sense_input(pinPowerPresentIrq, NRF_GPIO_PIN_NOPULL, NRF_GPIO_PIN_SENSE_LOW); + if (nrf_gpio_pin_read(PinMap::PowerPresent)) { + nrf_gpio_cfg_sense_input(PinMap::PowerPresent, NRF_GPIO_PIN_NOPULL, NRF_GPIO_PIN_SENSE_LOW); } else { - nrf_gpio_cfg_sense_input(pinPowerPresentIrq, NRF_GPIO_PIN_NOPULL, NRF_GPIO_PIN_SENSE_HIGH); + nrf_gpio_cfg_sense_input(PinMap::PowerPresent, NRF_GPIO_PIN_NOPULL, NRF_GPIO_PIN_SENSE_HIGH); } idleTimer = xTimerCreate("idleTimer", pdMS_TO_TICKS(2000), pdFALSE, this, IdleTimerCallback); dimTimer = xTimerCreate("dimTimer", pdMS_TO_TICKS(settingsController.GetScreenTimeOut() - 2000), pdFALSE, this, DimTimerCallback); + measureBatteryTimer = xTimerCreate("measureBattery", batteryMeasurementPeriod, pdTRUE, this, MeasureBatteryTimerCallback); xTimerStart(dimTimer, 0); + xTimerStart(measureBatteryTimer, portMAX_DELAY); // Suppress endless loop diagnostic #pragma clang diagnostic push @@ -201,11 +208,6 @@ void SystemTask::Work() { uint8_t msg; if (xQueueReceive(systemTasksMsgQueue, &msg, 100)) { - - batteryController.Update(); - // the battery does not emit events when changing charge levels, so we piggyback - // on any system event to read and update the current values - Messages message = static_cast(msg); switch (message) { case Messages::EnableSleeping: @@ -229,15 +231,16 @@ void SystemTask::Work() { touchPanel.Wakeup(); } - nimbleController.StartAdvertising(); xTimerStart(dimTimer, 0); spiNorFlash.Wakeup(); lcd.Wakeup(); displayApp.PushMessage(Pinetime::Applications::Display::Messages::GoToRunning); - displayApp.PushMessage(Pinetime::Applications::Display::Messages::UpdateBatteryLevel); heartRateApp.PushMessage(Pinetime::Applications::HeartRateTask::Messages::WakeUp); + if (!bleController.IsConnected()) + nimbleController.RestartFastAdv(); + isSleeping = false; isWakingUp = false; isDimmed = false; @@ -340,8 +343,18 @@ void SystemTask::Work() { stepCounterMustBeReset = true; break; case Messages::OnChargingEvent: + batteryController.Update(); motorController.RunForDuration(15); - // Battery level is updated on every message - there's no need to do anything + break; + case Messages::MeasureBatteryTimerExpired: + sendBatteryNotification = true; + batteryController.Update(); + break; + case Messages::BatteryMeasurementDone: + if (sendBatteryNotification) { + sendBatteryNotification = false; + nimbleController.NotifyBatteryLevel(batteryController.PercentRemaining()); + } break; default: @@ -353,22 +366,17 @@ void SystemTask::Work() { if (bleDiscoveryTimer == 0) { isBleDiscoveryTimerRunning = false; // Services discovery is deffered from 3 seconds to avoid the conflicts between the host communicating with the - // tharget and vice-versa. I'm not sure if this is the right way to handle this... + // target and vice-versa. I'm not sure if this is the right way to handle this... nimbleController.StartDiscovery(); } else { bleDiscoveryTimer--; } } - if (xTaskGetTickCount() - batteryNotificationTick > batteryNotificationPeriod) { - nimbleController.NotifyBatteryLevel(batteryController.PercentRemaining()); - batteryNotificationTick = xTaskGetTickCount(); - } - monitor.Process(); uint32_t systick_counter = nrf_rtc_counter_get(portNRF_RTC_REG); dateTimeController.UpdateTime(systick_counter); - if (!nrf_gpio_pin_read(pinButton)) + if (!nrf_gpio_pin_read(PinMap::Button)) watchdog.Kick(); } // Clear diagnostic suppression diff --git a/src/systemtask/SystemTask.h b/src/systemtask/SystemTask.h index cbd98d26cd..9e7e5e8ce5 100644 --- a/src/systemtask/SystemTask.h +++ b/src/systemtask/SystemTask.h @@ -8,6 +8,7 @@ #include #include #include +#include #include #include "SystemMonitor.h" @@ -123,15 +124,6 @@ namespace Pinetime { Pinetime::Controllers::TouchHandler& touchHandler; Pinetime::Controllers::NimbleController nimbleController; - static constexpr uint8_t pinSpiSck = 2; - static constexpr uint8_t pinSpiMosi = 3; - static constexpr uint8_t pinSpiMiso = 4; - static constexpr uint8_t pinSpiCsn = 25; - static constexpr uint8_t pinLcdDataCommand = 18; - static constexpr uint8_t pinButton = 13; - static constexpr uint8_t pinTouchIrq = 28; - static constexpr uint8_t pinPowerPresentIrq = 19; - static void Process(void* instance); void Work(); void ReloadIdleTimer(); @@ -139,13 +131,15 @@ namespace Pinetime { uint8_t bleDiscoveryTimer = 0; TimerHandle_t dimTimer; TimerHandle_t idleTimer; + TimerHandle_t measureBatteryTimer; + bool sendBatteryNotification = false; bool doNotGoToSleep = false; void GoToRunning(); void UpdateMotion(); bool stepCounterMustBeReset = false; - static constexpr TickType_t batteryNotificationPeriod = 1000 * 60 * 10; // 1 tick ~= 1ms. 1ms * 60 * 10 = 10 minutes - TickType_t batteryNotificationTick = 0; + static constexpr TickType_t batteryMeasurementPeriod = pdMS_TO_TICKS(10 * 60 * 1000); + TickType_t lastBatteryNotificationTime = 0; #if configUSE_TRACE_FACILITY == 1 SystemMonitor monitor; From cdf99b08f42c3826a8608d756bc7cda0a476ed98 Mon Sep 17 00:00:00 2001 From: Mark Russell Date: Thu, 16 Sep 2021 16:12:20 -0400 Subject: [PATCH 168/173] Revert "Merge upstream" This reverts commit 1d43adcdfa7bd15ba45c0c9d7c59c0ff99176b9c. --- .github/workflows/main.yml | 8 +- CMakeLists.txt | 9 -- README.md | 25 ++-- cmake-nRF5x/readme.md | 2 +- doc/buildAndProgram.md | 1 - .../ota-gadgetbridge-nrfconnect.md | 8 -- doc/versioning.md | 2 +- src/CMakeLists.txt | 12 +- src/components/battery/BatteryController.cpp | 16 +-- src/components/battery/BatteryController.h | 9 +- src/components/ble/NimbleController.cpp | 125 +++++++----------- src/components/ble/NimbleController.h | 7 - .../brightness/BrightnessController.cpp | 32 ++--- .../brightness/BrightnessController.h | 3 + src/components/motor/MotorController.cpp | 11 +- src/components/motor/MotorController.h | 2 + src/components/settings/Settings.h | 2 +- src/displayapp/DisplayApp.cpp | 6 + src/displayapp/DisplayAppRecovery.cpp | 1 - src/displayapp/DisplayAppRecovery.h | 32 ++--- src/displayapp/Messages.h | 1 + src/displayapp/screens/BatteryInfo.cpp | 2 + src/displayapp/screens/Notifications.cpp | 2 +- src/displayapp/screens/Notifications.h | 8 ++ src/displayapp/screens/settings/Settings.cpp | 4 +- src/drivers/Cst816s.cpp | 13 +- src/drivers/Cst816s.h | 3 + src/drivers/PinMap.h | 38 ------ src/main.cpp | 47 ++++--- src/recoveryLoader.cpp | 19 ++- src/systemtask/Messages.h | 4 +- src/systemtask/SystemTask.cpp | 62 ++++----- src/systemtask/SystemTask.h | 16 ++- 33 files changed, 232 insertions(+), 300 deletions(-) delete mode 100644 src/drivers/PinMap.h diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index bd24359a56..4744eaef7d 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -9,13 +9,13 @@ name: Build PineTime Firmware # When to run this Workflow... on: - # Run this Workflow when files are updated (Pushed) in the "master" and "develop" Branch + # Run this Workflow when files are updated (Pushed) in the "master" Branch push: - branches: [ master, develop ] + branches: [ master ] - # Also run this Workflow when a Pull Request is created or updated in the "master" and "develop" Branch + # Also run this Workflow when a Pull Request is created or updated in the "master" Branch pull_request: - branches: [ master, develop ] + branches: [ master ] # Steps to run for the Workflow jobs: diff --git a/CMakeLists.txt b/CMakeLists.txt index f2402e5790..cc41a08744 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -51,14 +51,6 @@ if(BUILD_DFU) set(BUILD_DFU true) endif() -option(WATCH_COLMI_P8 "Build for the Colmi P8" OFF) -set(TARGET_DEVICE "PineTime") - -if(WATCH_COLMI_P8) - set(TARGET_DEVICE "Colmi P8") - add_definitions(-DWATCH_P8) -endif() - set(PROJECT_GIT_COMMIT_HASH "") execute_process(COMMAND git rev-parse --short HEAD @@ -76,7 +68,6 @@ message(" * Version : " ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${P message(" * Toolchain : " ${ARM_NONE_EABI_TOOLCHAIN_PATH}) message(" * GitRef(S) : " ${PROJECT_GIT_COMMIT_HASH}) message(" * NRF52 SDK : " ${NRF5_SDK_PATH}) -message(" * Target device : " ${TARGET_DEVICE}) set(PROGRAMMER "???") if(USE_JLINK) message(" * Programmer/debugger : JLINK") diff --git a/README.md b/README.md index 0d5cad934a..6549ece98d 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,20 @@ -# InfiniTime +# PineTime [![Build PineTime Firmware](https://github.com/JF002/InfiniTime/workflows/Build%20PineTime%20Firmware/badge.svg?branch=master)](https://github.com/JF002/InfiniTime/actions) +> The PineTime is a free and open source smartwatch capable of running custom-built open operating systems. Some of the notable features include a heart rate monitor, a week-long battery as well as a capacitive touch IPS display that is legible in direct sunlight. It is a fully community driven side-project, which means that it will ultimately be up to the developers and end-users to determine when they deem the PineTime ready to ship. + +> We envision the PineTime as a companion for not only your PinePhone but also for your favorite devices — any phone, tablet, or even PC. + +*https://www.pine64.org/pinetime/* + +The **Pinetime** smartwatch is built around the NRF52832 MCU (512KB Flash, 64KB RAM), a 240*240 LCD display driven by the ST7789 controller, an accelerometer, a heart rate sensor, and a vibration motor. + +# InfiniTime + ![InfiniTime logo](images/infinitime-logo.jpg "InfiniTime Logo") -The goal of this project is to design an open-source firmware for the [Pinetime smartwatch](https://www.pine64.org/pinetime/) : +The goal of this project is to design an open-source firmware for the Pinetime smartwatch : - Code written in **modern C++**; - Build system based on **CMake**; @@ -12,11 +22,6 @@ The goal of this project is to design an open-source firmware for the [Pinetime - Using **[LittleVGL/LVGL 7](https://lvgl.io/)** as UI library... - ... and **[NimBLE 1.3.0](https://github.com/apache/mynewt-nimble)** as BLE stack. -## New to InfiniTime? - - - [Getting started with InfiniTime 1.0 (quick user guide, update bootloader and InfiniTime,...)](doc/gettingStarted/gettingStarted-1.0.md) - - [Flash, upgrade (OTA), time synchronization,...](doc/gettingStarted/ota-gadgetbridge-nrfconnect.md) - ## Overview ![Pinetime screens](images/1.0.0/collage.png "PinetimeScreens") @@ -65,12 +70,16 @@ As of now, here is the list of achievements of this project: * [Amazfish](https://openrepos.net/content/piggz/amazfish) (on SailfishOS and Linux) * [Siglo](https://github.com/alexr4535/siglo) (on Linux) * **[Experimental]** [WebBLEWatch](https://hubmartin.github.io/WebBLEWatch/) Synchronize time directly from your web browser. [video](https://youtu.be/IakiuhVDdrY) - * **[Experimental]** [Infini-iOS](https://github.com/xan-m/Infini-iOS) (on iOS) - OTA (Over-the-air) update via BLE - [Bootloader](https://github.com/JF002/pinetime-mcuboot-bootloader) based on [MCUBoot](https://juullabs-oss.github.io/mcuboot/) ## Documentation +### Getting started + + - [Getting started with InfiniTime 1.0 (quick user guide, update bootloader and InfiniTime,...)](doc/gettingStarted/gettingStarted-1.0.md) + - [Flash, upgrade (OTA), time synchronization,...](doc/gettingStarted/ota-gadgetbridge-nrfconnect.md) + ### Develop - [Generate the fonts and symbols](src/displayapp/fonts/README.md) diff --git a/cmake-nRF5x/readme.md b/cmake-nRF5x/readme.md index 0127a2e6e5..2ce76892db 100755 --- a/cmake-nRF5x/readme.md +++ b/cmake-nRF5x/readme.md @@ -98,7 +98,7 @@ The script makes use of the following tools: After setup you can use cmake as usual: -1. Generate the actual build files (out-of-source builds are strongly recommended): +1. Generate the actual build files (out-of-source builds are strongly recomended): ```commandline cmake -H. -B"cmake-build" -G "Unix Makefiles" diff --git a/doc/buildAndProgram.md b/doc/buildAndProgram.md index e97bb30d51..87b6dd9a5d 100644 --- a/doc/buildAndProgram.md +++ b/doc/buildAndProgram.md @@ -28,7 +28,6 @@ CMake configures the project according to variables you specify the command line **GDB_CLIENT_BIN_PATH**|Path to arm-none-eabi-gdb executable. Used only if `USE_GDB_CLIENT` is 1.|`-DGDB_CLIENT_BIN_PATH=/home/jf/nrf52/gcc-arm-none-eabi-9-2019-q4-major/bin/arm-none-eabi-gdb` **GDB_CLIENT_TARGET_REMOTE**|Target remote connection string. Used only if `USE_GDB_CLIENT` is 1.|`-DGDB_CLIENT_TARGET_REMOTE=/dev/ttyACM0` **BUILD_DFU (\*\*)**|Build DFU files while building (needs [adafruit-nrfutil](https://github.com/adafruit/Adafruit_nRF52_nrfutil)).|`-DBUILD_DFU=1` -**WATCH_COLMI_P8**|Use pin configuration for Colmi P8 watch|`-DWATCH_COLMI_P8=1` ####(**) Note about **CMAKE_BUILD_TYPE**: By default, this variable is set to *Release*. It compiles the code with size and speed optimizations. We use this value for all the binaries we publish when we [release](https://github.com/JF002/InfiniTime/releases) new versions of InfiniTime. diff --git a/doc/gettingStarted/ota-gadgetbridge-nrfconnect.md b/doc/gettingStarted/ota-gadgetbridge-nrfconnect.md index ffc27ed87b..1187a9b745 100644 --- a/doc/gettingStarted/ota-gadgetbridge-nrfconnect.md +++ b/doc/gettingStarted/ota-gadgetbridge-nrfconnect.md @@ -47,8 +47,6 @@ Read carefully the warning and tap **Install**: Wait for the transfer to finish. Your PineTime should reset and reboot with the new version of InfiniTime! -Don't forget to **validate** your firmware. In the InfiniTime go to the settings (swipe right, select gear icon) and Firmware option and click **validate**. Otherwise after reboot the previous firmware will be used. - ![Gadgetbridge 5](gadgetbridge5.jpg) ### Using NRFConnect @@ -66,8 +64,6 @@ Select **Distribution packet (ZIP)**: Browse to the DFU file you downloaded previously, the DFU transfer will start automatically. When the transfer is finished, your PineTime will reset and restart on the new version of InfiniTime! -Don't forget to **validate** your firmware. In the InfiniTime go to the settings (swipe right, select gear icon) and Firmware option and click **validate**. Otherwise after reboot the previous firmware will be used. - ![NRFConnect 3](nrfconnect3.jpg) ## How to flash InfiniTime using the SWD interface @@ -92,10 +88,6 @@ If you are using OpenOCD with a STLinkV2, you can find more info [on this page]( ### Using Gadgetbridge Good news! Gadgetbridge **automatically** synchronizes the time when connecting to your PineTime! -### Using any Chromium-based web browser -You can use it from your PC, Mac, Android. Browsers now have BLE support. -https://hubmartin.github.io/WebBLEWatch/ - ### Using NRFConnect You must enable the **CTS** *GATT server* into NRFConnect so that InfiniTime can synchronize the time with your smartphone. diff --git a/doc/versioning.md b/doc/versioning.md index 48e05043f0..b08af71479 100644 --- a/doc/versioning.md +++ b/doc/versioning.md @@ -3,4 +3,4 @@ The versioning of this project is based on [Semantic versionning](https://semver - The **patch** is incremented when we fix a bug on a **released** version (most of the time using a **hotfix** branch). - The **minor** is incremented when we release a new version with new features. It corresponds to a merge of **develop** into **master**. - - The **major** should be incremented when a breaking change is made to the application. We still have to define what is a breaking change in the context of this project. For now, I suggest that it stays **0** until we have a fully functioning firmware suited for the final user. \ No newline at end of file + - The **major** should be incremented when a breaking change is made to the application. We still have to define what is a breaking change in the context of this project. For now, I suggest that it stays **0** until we have a fully functionning firmware suited for the final user. \ No newline at end of file diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 37ee0848bd..ccade83e30 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -92,9 +92,6 @@ set(SDK_SOURCE_FILES set(TINYCRYPT_SRC libs/mynewt-nimble/ext/tinycrypt/src/aes_encrypt.c libs/mynewt-nimble/ext/tinycrypt/src/utils.c - libs/mynewt-nimble/ext/tinycrypt/src/cmac_mode.c - libs/mynewt-nimble/ext/tinycrypt/src/ecc.c - libs/mynewt-nimble/ext/tinycrypt/src/ecc_dh.c ) set(NIMBLE_SRC @@ -107,10 +104,6 @@ set(NIMBLE_SRC libs/mynewt-nimble/nimble/host/src/ble_l2cap.c libs/mynewt-nimble/nimble/host/src/ble_hs_mbuf.c libs/mynewt-nimble/nimble/host/src/ble_sm.c - libs/mynewt-nimble/nimble/host/src/ble_sm_cmd.c - libs/mynewt-nimble/nimble/host/src/ble_sm_lgcy.c - libs/mynewt-nimble/nimble/host/src/ble_sm_alg.c - libs/mynewt-nimble/nimble/host/src/ble_sm_sc.c libs/mynewt-nimble/nimble/host/src/ble_gap.c libs/mynewt-nimble/nimble/host/src/ble_gatts.c libs/mynewt-nimble/nimble/host/src/ble_gattc.c @@ -134,6 +127,10 @@ set(NIMBLE_SRC libs/mynewt-nimble/nimble/host/src/ble_hs_atomic.c libs/mynewt-nimble/nimble/host/src/ble_hs_adv.c libs/mynewt-nimble/nimble/host/src/ble_hs_flow.c + libs/mynewt-nimble/nimble/host/src/ble_sm.c + libs/mynewt-nimble/nimble/host/src/ble_sm_cmd.c + libs/mynewt-nimble/nimble/host/src/ble_sm_lgcy.c + libs/mynewt-nimble/nimble/host/src/ble_sm_alg.c libs/mynewt-nimble/nimble/host/src/ble_hs_mqueue.c libs/mynewt-nimble/nimble/host/src/ble_hs_stop.c libs/mynewt-nimble/nimble/host/src/ble_hs_startup.c @@ -628,7 +625,6 @@ set(INCLUDE_FILES drivers/DebugPins.h drivers/InternalFlash.h drivers/Hrs3300.h - drivers/PinMap.h drivers/Bma421.h drivers/Bma421_C/bma4.c drivers/Bma421_C/bma423.c diff --git a/src/components/battery/BatteryController.cpp b/src/components/battery/BatteryController.cpp index 4ef20a2452..f8a64ecd18 100644 --- a/src/components/battery/BatteryController.cpp +++ b/src/components/battery/BatteryController.cpp @@ -1,5 +1,4 @@ #include "BatteryController.h" -#include "drivers/PinMap.h" #include #include #include @@ -10,12 +9,15 @@ Battery* Battery::instance = nullptr; Battery::Battery() { instance = this; - nrf_gpio_cfg_input(PinMap::Charging, static_cast GPIO_PIN_CNF_PULL_Disabled); +} + +void Battery::Init() { + nrf_gpio_cfg_input(chargingPin, static_cast GPIO_PIN_CNF_PULL_Pullup); } void Battery::Update() { - isCharging = !nrf_gpio_pin_read(PinMap::Charging); - isPowerPresent = !nrf_gpio_pin_read(PinMap::PowerPresent); + isCharging = !nrf_gpio_pin_read(chargingPin); + isPowerPresent = !nrf_gpio_pin_read(powerPresentPin); if (isReading) { return; @@ -73,11 +75,5 @@ void Battery::SaadcEventHandler(nrfx_saadc_evt_t const* p_event) { nrfx_saadc_uninit(); isReading = false; - - systemTask->PushMessage(System::Messages::BatteryMeasurementDone); } } - -void Battery::Register(Pinetime::System::SystemTask* systemTask) { - this->systemTask = systemTask; -} diff --git a/src/components/battery/BatteryController.h b/src/components/battery/BatteryController.h index 8af27ea8ae..6f09b737a3 100644 --- a/src/components/battery/BatteryController.h +++ b/src/components/battery/BatteryController.h @@ -1,7 +1,8 @@ #pragma once #include #include -#include +#include +#include namespace Pinetime { namespace Controllers { @@ -10,8 +11,8 @@ namespace Pinetime { public: Battery(); + void Init(); void Update(); - void Register(System::SystemTask* systemTask); uint8_t PercentRemaining() const { return percentRemaining; @@ -33,6 +34,8 @@ namespace Pinetime { static Battery* instance; nrf_saadc_value_t saadc_value; + static constexpr uint32_t chargingPin = 12; + static constexpr uint32_t powerPresentPin = 19; static constexpr nrf_saadc_input_t batteryVoltageAdcInput = NRF_SAADC_INPUT_AIN7; uint16_t voltage = 0; uint8_t percentRemaining = 0; @@ -46,8 +49,6 @@ namespace Pinetime { static void AdcCallbackStatic(nrfx_saadc_evt_t const* event); bool isReading = false; - - Pinetime::System::SystemTask* systemTask = nullptr; }; } } diff --git a/src/components/ble/NimbleController.cpp b/src/components/ble/NimbleController.cpp index 879421e7aa..5eb227bf00 100644 --- a/src/components/ble/NimbleController.cpp +++ b/src/components/ble/NimbleController.cpp @@ -42,19 +42,6 @@ NimbleController::NimbleController(Pinetime::System::SystemTask& systemTask, serviceDiscovery({¤tTimeClient, &alertNotificationClient}) { } -void nimble_on_reset(int reason) { - NRF_LOG_INFO("Resetting state; reason=%d\n", reason); -} - -void nimble_on_sync(void) { - int rc; - - rc = ble_hs_util_ensure_addr(0); - ASSERT(rc == 0); - - nptr->StartAdvertising(); -} - int GAPEventCallback(struct ble_gap_event* event, void* arg) { auto nimbleController = static_cast(arg); return nimbleController->OnGAPEvent(event); @@ -64,10 +51,6 @@ void NimbleController::Init() { while (!ble_hs_synced()) { } - nptr = this; - ble_hs_cfg.reset_cb = nimble_on_reset; - ble_hs_cfg.sync_cb = nimble_on_sync; - ble_svc_gap_init(); ble_svc_gatt_init(); @@ -81,31 +64,28 @@ void NimbleController::Init() { batteryInformationService.Init(); immediateAlertService.Init(); heartRateService.Init(); - - int rc; - rc = ble_hs_util_ensure_addr(0); - ASSERT(rc == 0); - rc = ble_hs_id_infer_auto(0, &addrType); - ASSERT(rc == 0); - rc = ble_svc_gap_device_name_set(deviceName); - ASSERT(rc == 0); - rc = ble_svc_gap_device_appearance_set(0xC2); - ASSERT(rc == 0); + int res; + res = ble_hs_util_ensure_addr(0); + ASSERT(res == 0); + res = ble_hs_id_infer_auto(0, &addrType); + ASSERT(res == 0); + res = ble_svc_gap_device_name_set(deviceName); + ASSERT(res == 0); Pinetime::Controllers::Ble::BleAddress address; - rc = ble_hs_id_copy_addr(addrType, address.data(), nullptr); - ASSERT(rc == 0); + res = ble_hs_id_copy_addr(addrType, address.data(), nullptr); + ASSERT(res == 0); bleController.AddressType((addrType == 0) ? Ble::AddressTypes::Public : Ble::AddressTypes::Random); bleController.Address(std::move(address)); - rc = ble_gatts_start(); - ASSERT(rc == 0); - - if (!ble_gap_adv_active() && !bleController.IsConnected()) - StartAdvertising(); + res = ble_gatts_start(); + ASSERT(res == 0); } void NimbleController::StartAdvertising() { - int rc; + if (bleController.IsConnected() || ble_gap_conn_active() || ble_gap_adv_active()) + return; + + ble_svc_gap_device_name_set(deviceName); /* set adv parameters */ struct ble_gap_adv_params adv_params; @@ -122,17 +102,11 @@ void NimbleController::StartAdvertising() { adv_params.conn_mode = BLE_GAP_CONN_MODE_UND; adv_params.disc_mode = BLE_GAP_DISC_MODE_GEN; - /* fast advertise for 30 sec */ - if (fastAdvCount < 15) { - adv_params.itvl_min = 32; - adv_params.itvl_max = 47; - fastAdvCount++; - } else { - adv_params.itvl_min = 1636; - adv_params.itvl_max = 1651; - } fields.flags = BLE_HS_ADV_F_DISC_GEN | BLE_HS_ADV_F_BREDR_UNSUP; + // fields.uuids128 = BLE_UUID128(BLE_UUID128_DECLARE( + // 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, + // 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff)); fields.uuids128 = &dfuServiceUuid; fields.num_uuids128 = 1; fields.uuids128_is_complete = 1; @@ -142,25 +116,28 @@ void NimbleController::StartAdvertising() { rsp_fields.name_len = strlen(deviceName); rsp_fields.name_is_complete = 1; - rc = ble_gap_adv_set_fields(&fields); - ASSERT(rc == 0); + ble_gap_adv_set_fields(&fields); + // ASSERT(res == 0); // TODO this one sometimes fails with error 22 (notsync) - rc = ble_gap_adv_rsp_set_fields(&rsp_fields); - ASSERT(rc == 0); + ble_gap_adv_rsp_set_fields(&rsp_fields); + // ASSERT(res == 0); - rc = ble_gap_adv_start(addrType, NULL, 2000, &adv_params, GAPEventCallback, this); - ASSERT(rc == 0); + ble_gap_adv_start(addrType, NULL, 180000, &adv_params, GAPEventCallback, this); + // ASSERT(res == 0);// TODO I've disabled these ASSERT as they sometime asserts and reset the mcu. + // For now, the advertising is restarted as soon as it ends. There may be a race condition + // that prevent the advertising from restarting reliably. + // I remove the assert to prevent this uncesseray crash, but in the long term, the management of + // the advertising should be improve (better error handling, and advertise for 3 minutes after + // the application has been woken up, for example. } int NimbleController::OnGAPEvent(ble_gap_event* event) { switch (event->type) { case BLE_GAP_EVENT_ADV_COMPLETE: NRF_LOG_INFO("Advertising event : BLE_GAP_EVENT_ADV_COMPLETE"); - NRF_LOG_INFO("reason=%d; status=%d", event->adv_complete.reason, event->connect.status); - StartAdvertising(); + NRF_LOG_INFO("advertise complete; reason=%dn status=%d", event->adv_complete.reason, event->connect.status); break; - - case BLE_GAP_EVENT_CONNECT: + case BLE_GAP_EVENT_CONNECT: { NRF_LOG_INFO("Advertising event : BLE_GAP_EVENT_CONNECT"); /* A new connection was established or a connection attempt failed. */ @@ -168,44 +145,35 @@ int NimbleController::OnGAPEvent(ble_gap_event* event) { if (event->connect.status != 0) { /* Connection failed; resume advertising. */ - currentTimeClient.Reset(); - alertNotificationClient.Reset(); - connectionHandle = BLE_HS_CONN_HANDLE_NONE; - bleController.Disconnect(); - fastAdvCount = 0; StartAdvertising(); + bleController.Disconnect(); } else { - connectionHandle = event->connect.conn_handle; bleController.Connect(); systemTask.PushMessage(Pinetime::System::Messages::BleConnected); - // Service discovery is deferred via systemtask + connectionHandle = event->connect.conn_handle; + // Service discovery is deffered via systemtask } - break; - + } break; case BLE_GAP_EVENT_DISCONNECT: NRF_LOG_INFO("Advertising event : BLE_GAP_EVENT_DISCONNECT"); - NRF_LOG_INFO("disconnect reason=%d", event->disconnect.reason); + NRF_LOG_INFO("disconnect; reason=%d", event->disconnect.reason); /* Connection terminated; resume advertising. */ currentTimeClient.Reset(); alertNotificationClient.Reset(); connectionHandle = BLE_HS_CONN_HANDLE_NONE; bleController.Disconnect(); - fastAdvCount = 0; StartAdvertising(); break; - case BLE_GAP_EVENT_CONN_UPDATE: NRF_LOG_INFO("Advertising event : BLE_GAP_EVENT_CONN_UPDATE"); /* The central has updated the connection parameters. */ - NRF_LOG_INFO("update status=%d ", event->conn_update.status); + NRF_LOG_INFO("connection updated; status=%d ", event->conn_update.status); break; - case BLE_GAP_EVENT_ENC_CHANGE: /* Encryption has been enabled or disabled for this connection. */ NRF_LOG_INFO("encryption change event; status=%d ", event->enc_change.status); - break; - + return 0; case BLE_GAP_EVENT_SUBSCRIBE: NRF_LOG_INFO("subscribe event; conn_handle=%d attr_handle=%d " "reason=%d prevn=%d curn=%d previ=%d curi=???\n", @@ -215,12 +183,10 @@ int NimbleController::OnGAPEvent(ble_gap_event* event) { event->subscribe.prev_notify, event->subscribe.cur_notify, event->subscribe.prev_indicate); - break; - + return 0; case BLE_GAP_EVENT_MTU: - NRF_LOG_INFO("mtu update event; conn_handle=%d cid=%d mtu=%d\n", - event->mtu.conn_handle, event->mtu.channel_id, event->mtu.value); - break; + NRF_LOG_INFO("mtu update event; conn_handle=%d cid=%d mtu=%d\n", event->mtu.conn_handle, event->mtu.channel_id, event->mtu.value); + return 0; case BLE_GAP_EVENT_REPEAT_PAIRING: { /* We already have a bond with the peer, but it is attempting to @@ -251,7 +217,8 @@ int NimbleController::OnGAPEvent(ble_gap_event* event) { notifSize); alertNotificationClient.OnNotification(event); - } break; + return 0; + } /* Attribute data is contained in event->notify_rx.attr_data. */ default: @@ -262,9 +229,7 @@ int NimbleController::OnGAPEvent(ble_gap_event* event) { } void NimbleController::StartDiscovery() { - if (connectionHandle != BLE_HS_CONN_HANDLE_NONE) { - serviceDiscovery.StartDiscovery(connectionHandle); - } + serviceDiscovery.StartDiscovery(connectionHandle); } uint16_t NimbleController::connHandle() { @@ -272,7 +237,7 @@ uint16_t NimbleController::connHandle() { } void NimbleController::NotifyBatteryLevel(uint8_t level) { - if (connectionHandle != BLE_HS_CONN_HANDLE_NONE) { + if(connectionHandle != BLE_HS_CONN_HANDLE_NONE) { batteryInformationService.NotifyBatteryLevel(connectionHandle, level); } } diff --git a/src/components/ble/NimbleController.h b/src/components/ble/NimbleController.h index 473bb1aff6..0cfe983c6b 100644 --- a/src/components/ble/NimbleController.h +++ b/src/components/ble/NimbleController.h @@ -72,10 +72,6 @@ namespace Pinetime { uint16_t connHandle(); void NotifyBatteryLevel(uint8_t level); - void RestartFastAdv() { - fastAdvCount = 0; - } - private: static constexpr const char* deviceName = "InfiniTime"; Pinetime::System::SystemTask& systemTask; @@ -98,7 +94,6 @@ namespace Pinetime { uint8_t addrType; // 1 = Random, 0 = PUBLIC uint16_t connectionHandle = BLE_HS_CONN_HANDLE_NONE; - uint8_t fastAdvCount = 0; ble_uuid128_t dfuServiceUuid { .u {.type = BLE_UUID_TYPE_128}, @@ -106,7 +101,5 @@ namespace Pinetime { ServiceDiscovery serviceDiscovery; }; - - static NimbleController* nptr; } } diff --git a/src/components/brightness/BrightnessController.cpp b/src/components/brightness/BrightnessController.cpp index 6c524679c1..8ad987d1f4 100644 --- a/src/components/brightness/BrightnessController.cpp +++ b/src/components/brightness/BrightnessController.cpp @@ -1,13 +1,13 @@ #include "BrightnessController.h" #include #include "displayapp/screens/Symbols.h" -#include "drivers/PinMap.h" + using namespace Pinetime::Controllers; void BrightnessController::Init() { - nrf_gpio_cfg_output(PinMap::LcdBacklightLow); - nrf_gpio_cfg_output(PinMap::LcdBacklightMedium); - nrf_gpio_cfg_output(PinMap::LcdBacklightHigh); + nrf_gpio_cfg_output(pinLcdBacklight1); + nrf_gpio_cfg_output(pinLcdBacklight2); + nrf_gpio_cfg_output(pinLcdBacklight3); Set(level); } @@ -16,24 +16,24 @@ void BrightnessController::Set(BrightnessController::Levels level) { switch (level) { default: case Levels::High: - nrf_gpio_pin_clear(PinMap::LcdBacklightLow); - nrf_gpio_pin_clear(PinMap::LcdBacklightMedium); - nrf_gpio_pin_clear(PinMap::LcdBacklightHigh); + nrf_gpio_pin_clear(pinLcdBacklight1); + nrf_gpio_pin_clear(pinLcdBacklight2); + nrf_gpio_pin_clear(pinLcdBacklight3); break; case Levels::Medium: - nrf_gpio_pin_clear(PinMap::LcdBacklightLow); - nrf_gpio_pin_clear(PinMap::LcdBacklightMedium); - nrf_gpio_pin_set(PinMap::LcdBacklightHigh); + nrf_gpio_pin_clear(pinLcdBacklight1); + nrf_gpio_pin_clear(pinLcdBacklight2); + nrf_gpio_pin_set(pinLcdBacklight3); break; case Levels::Low: - nrf_gpio_pin_clear(PinMap::LcdBacklightLow); - nrf_gpio_pin_set(PinMap::LcdBacklightMedium); - nrf_gpio_pin_set(PinMap::LcdBacklightHigh); + nrf_gpio_pin_clear(pinLcdBacklight1); + nrf_gpio_pin_set(pinLcdBacklight2); + nrf_gpio_pin_set(pinLcdBacklight3); break; case Levels::Off: - nrf_gpio_pin_set(PinMap::LcdBacklightLow); - nrf_gpio_pin_set(PinMap::LcdBacklightMedium); - nrf_gpio_pin_set(PinMap::LcdBacklightHigh); + nrf_gpio_pin_set(pinLcdBacklight1); + nrf_gpio_pin_set(pinLcdBacklight2); + nrf_gpio_pin_set(pinLcdBacklight3); break; } } diff --git a/src/components/brightness/BrightnessController.h b/src/components/brightness/BrightnessController.h index 0d7ac2ffa6..c47158a910 100644 --- a/src/components/brightness/BrightnessController.h +++ b/src/components/brightness/BrightnessController.h @@ -22,6 +22,9 @@ namespace Pinetime { const char* ToString(); private: + static constexpr uint8_t pinLcdBacklight1 = 14; + static constexpr uint8_t pinLcdBacklight2 = 22; + static constexpr uint8_t pinLcdBacklight3 = 23; Levels level = Levels::High; Levels backupLevel = Levels::High; }; diff --git a/src/components/motor/MotorController.cpp b/src/components/motor/MotorController.cpp index 42057a860d..b25e6bc829 100644 --- a/src/components/motor/MotorController.cpp +++ b/src/components/motor/MotorController.cpp @@ -2,7 +2,6 @@ #include #include "systemtask/SystemTask.h" #include "app_timer.h" -#include "drivers/PinMap.h" APP_TIMER_DEF(shortVibTimer); APP_TIMER_DEF(longVibTimer); @@ -13,8 +12,8 @@ MotorController::MotorController(Controllers::Settings& settingsController) : se } void MotorController::Init() { - nrf_gpio_cfg_output(PinMap::Motor); - nrf_gpio_pin_set(PinMap::Motor); + nrf_gpio_cfg_output(pinMotor); + nrf_gpio_pin_set(pinMotor); app_timer_init(); app_timer_create(&shortVibTimer, APP_TIMER_MODE_SINGLE_SHOT, StopMotor); @@ -31,7 +30,7 @@ void MotorController::RunForDuration(uint8_t motorDuration) { return; } - nrf_gpio_pin_clear(PinMap::Motor); + nrf_gpio_pin_clear(pinMotor); app_timer_start(shortVibTimer, APP_TIMER_TICKS(motorDuration), nullptr); } @@ -45,9 +44,9 @@ void MotorController::StartRinging() { void MotorController::StopRinging() { app_timer_stop(longVibTimer); - nrf_gpio_pin_set(PinMap::Motor); + nrf_gpio_pin_set(pinMotor); } void MotorController::StopMotor(void* p_context) { - nrf_gpio_pin_set(PinMap::Motor); + nrf_gpio_pin_set(pinMotor); } diff --git a/src/components/motor/MotorController.h b/src/components/motor/MotorController.h index cf78088ec3..d2c9fe5f2c 100644 --- a/src/components/motor/MotorController.h +++ b/src/components/motor/MotorController.h @@ -1,10 +1,12 @@ #pragma once #include +#include "app_timer.h" #include "components/settings/Settings.h" namespace Pinetime { namespace Controllers { + static constexpr uint8_t pinMotor = 16; class MotorController { public: diff --git a/src/components/settings/Settings.h b/src/components/settings/Settings.h index a54ba9760e..a294ab7840 100644 --- a/src/components/settings/Settings.h +++ b/src/components/settings/Settings.h @@ -114,7 +114,7 @@ namespace Pinetime { }; void setWakeUpMode(WakeUpMode wakeUp, bool enabled) { - if (enabled != isWakeUpModeOn(wakeUp)) { + if (!isWakeUpModeOn(wakeUp)) { settingsChanged = true; } settings.wakeUpMode.set(static_cast(wakeUp), enabled); diff --git a/src/displayapp/DisplayApp.cpp b/src/displayapp/DisplayApp.cpp index 9d47310197..33c67e229c 100644 --- a/src/displayapp/DisplayApp.cpp +++ b/src/displayapp/DisplayApp.cpp @@ -139,6 +139,9 @@ void DisplayApp::InitHw() { brightnessController.Set(settingsController.GetBrightness()); } +uint32_t acc = 0; +uint32_t count = 0; +bool toggle = true; void DisplayApp::Refresh() { TickType_t queueTimeout; TickType_t delta; @@ -194,6 +197,9 @@ void DisplayApp::Refresh() { // clockScreen.SetBleConnectionState(bleController.IsConnected() ? Screens::Clock::BleConnectionStates::Connected : // Screens::Clock::BleConnectionStates::NotConnected); break; + case Messages::UpdateBatteryLevel: + batteryController.Update(); + break; case Messages::NewNotification: LoadApp(Apps::NotificationsPreview, DisplayApp::FullRefreshDirections::Down); break; diff --git a/src/displayapp/DisplayAppRecovery.cpp b/src/displayapp/DisplayAppRecovery.cpp index 7a20262988..17612ef057 100644 --- a/src/displayapp/DisplayAppRecovery.cpp +++ b/src/displayapp/DisplayAppRecovery.cpp @@ -5,7 +5,6 @@ #include #include #include "displayapp/icons/infinitime/infinitime-nb.c" -#include "components/ble/BleController.h" using namespace Pinetime::Applications; diff --git a/src/displayapp/DisplayAppRecovery.h b/src/displayapp/DisplayAppRecovery.h index 4184ea49da..8b2bc7f515 100644 --- a/src/displayapp/DisplayAppRecovery.h +++ b/src/displayapp/DisplayAppRecovery.h @@ -6,38 +6,32 @@ #include #include #include "components/gfx/Gfx.h" +#include "components/battery/BatteryController.h" +#include "components/brightness/BrightnessController.h" +#include "components/ble/BleController.h" +#include "components/datetime/DateTimeController.h" +#include "components/ble/NotificationManager.h" +#include "components/firmwarevalidator/FirmwareValidator.h" #include "drivers/Cst816s.h" #include #include +#include +#include #include +#include #include "TouchEvents.h" #include "Apps.h" #include "Messages.h" #include "DummyLittleVgl.h" +#include "components/timer/TimerController.h" namespace Pinetime { - namespace Drivers { - class St7789; - class Cst816S; - class WatchdogView; - } - namespace Controllers { - class Settings; - class Battery; - class Ble; - class DateTime; - class NotificationManager; - class HeartRateController; - class MotionController; - class TouchHandler; - class MotorController; - class TimerController; - } - namespace System { class SystemTask; }; - + namespace Controllers { + class TouchHandler; + } namespace Applications { class DisplayApp { public: diff --git a/src/displayapp/Messages.h b/src/displayapp/Messages.h index d48b646fe0..c23cdfe3f7 100644 --- a/src/displayapp/Messages.h +++ b/src/displayapp/Messages.h @@ -7,6 +7,7 @@ namespace Pinetime { GoToRunning, UpdateDateTime, UpdateBleConnection, + UpdateBatteryLevel, TouchEvent, ButtonPushed, NewNotification, diff --git a/src/displayapp/screens/BatteryInfo.cpp b/src/displayapp/screens/BatteryInfo.cpp index ad9af15344..91c2651236 100644 --- a/src/displayapp/screens/BatteryInfo.cpp +++ b/src/displayapp/screens/BatteryInfo.cpp @@ -55,6 +55,8 @@ BatteryInfo::~BatteryInfo() { void BatteryInfo::Refresh() { + batteryController.Update(); + batteryPercent = batteryController.PercentRemaining(); batteryVoltage = batteryController.Voltage(); diff --git a/src/displayapp/screens/Notifications.cpp b/src/displayapp/screens/Notifications.cpp index 417dff00d2..22eb290e8e 100644 --- a/src/displayapp/screens/Notifications.cpp +++ b/src/displayapp/screens/Notifications.cpp @@ -152,7 +152,7 @@ Notifications::NotificationItem::NotificationItem(const char* title, uint8_t notifNb, Modes mode, Pinetime::Controllers::AlertNotificationService& alertNotificationService) - : mode {mode}, alertNotificationService {alertNotificationService} { + : notifNr {notifNr}, notifNb {notifNb}, mode {mode}, alertNotificationService {alertNotificationService} { lv_obj_t* container1 = lv_cont_create(lv_scr_act(), NULL); lv_obj_set_style_local_bg_color(container1, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x222222)); diff --git a/src/displayapp/screens/Notifications.h b/src/displayapp/screens/Notifications.h index 0b5271e72f..f6f8b4c35b 100644 --- a/src/displayapp/screens/Notifications.h +++ b/src/displayapp/screens/Notifications.h @@ -43,13 +43,21 @@ namespace Pinetime { void OnCallButtonEvent(lv_obj_t*, lv_event_t event); private: + uint8_t notifNr = 0; + uint8_t notifNb = 0; + char pageText[4]; + lv_obj_t* container1; + lv_obj_t* t1; + lv_obj_t* l1; + lv_obj_t* l2; lv_obj_t* bt_accept; lv_obj_t* bt_mute; lv_obj_t* bt_reject; lv_obj_t* label_accept; lv_obj_t* label_mute; lv_obj_t* label_reject; + lv_obj_t* bottomPlaceholder; Modes mode; Pinetime::Controllers::AlertNotificationService& alertNotificationService; bool running = true; diff --git a/src/displayapp/screens/settings/Settings.cpp b/src/displayapp/screens/settings/Settings.cpp index e3319f030a..f82b03c1a1 100644 --- a/src/displayapp/screens/settings/Settings.cpp +++ b/src/displayapp/screens/settings/Settings.cpp @@ -50,8 +50,8 @@ std::unique_ptr Settings::CreateScreen2() { std::array applications {{ {Symbols::shoe, "Steps", Apps::SettingSteps}, {Symbols::batteryHalf, "Battery", Apps::BatteryInfo}, - {Symbols::paintbrush, "PTS Colors", Apps::SettingPineTimeStyle}, {Symbols::check, "Firmware", Apps::FirmwareValidation}, + {Symbols::list, "About", Apps::SysInfo}, }}; return std::make_unique(1, 3, app, settingsController, applications); @@ -60,7 +60,7 @@ std::unique_ptr Settings::CreateScreen2() { std::unique_ptr Settings::CreateScreen3() { std::array applications {{ - {Symbols::list, "About", Apps::SysInfo}, + {Symbols::paintbrush, "PTS Colors", Apps::SettingPineTimeStyle}, {Symbols::none, "None", Apps::None}, {Symbols::none, "None", Apps::None}, {Symbols::none, "None", Apps::None}, diff --git a/src/drivers/Cst816s.cpp b/src/drivers/Cst816s.cpp index 1ff163b0c2..b8f8e45df9 100644 --- a/src/drivers/Cst816s.cpp +++ b/src/drivers/Cst816s.cpp @@ -3,7 +3,6 @@ #include #include #include -#include "drivers/PinMap.h" using namespace Pinetime::Drivers; @@ -19,12 +18,12 @@ Cst816S::Cst816S(TwiMaster& twiMaster, uint8_t twiAddress) : twiMaster {twiMaste } void Cst816S::Init() { - nrf_gpio_cfg_output(PinMap::Cst816sReset); - nrf_gpio_pin_set(PinMap::Cst816sReset); + nrf_gpio_cfg_output(pinReset); + nrf_gpio_pin_set(pinReset); vTaskDelay(50); - nrf_gpio_pin_clear(PinMap::Cst816sReset); + nrf_gpio_pin_clear(pinReset); vTaskDelay(5); - nrf_gpio_pin_set(PinMap::Cst816sReset); + nrf_gpio_pin_set(pinReset); vTaskDelay(50); // Wake the touchpanel up @@ -81,9 +80,9 @@ Cst816S::TouchInfos Cst816S::GetTouchInfo() { } void Cst816S::Sleep() { - nrf_gpio_pin_clear(PinMap::Cst816sReset); + nrf_gpio_pin_clear(pinReset); vTaskDelay(5); - nrf_gpio_pin_set(PinMap::Cst816sReset); + nrf_gpio_pin_set(pinReset); vTaskDelay(50); static constexpr uint8_t sleepValue = 0x03; twiMaster.Write(twiAddress, 0xA5, &sleepValue, 1); diff --git a/src/drivers/Cst816s.h b/src/drivers/Cst816s.h index 7b46c5d582..d4c17bb823 100644 --- a/src/drivers/Cst816s.h +++ b/src/drivers/Cst816s.h @@ -36,6 +36,9 @@ namespace Pinetime { void Wakeup(); private: + static constexpr uint8_t pinIrq = 28; + static constexpr uint8_t pinReset = 10; + // Unused/Unavailable commented out static constexpr uint8_t gestureIndex = 1; static constexpr uint8_t touchPointNumIndex = 2; diff --git a/src/drivers/PinMap.h b/src/drivers/PinMap.h deleted file mode 100644 index 57964020c6..0000000000 --- a/src/drivers/PinMap.h +++ /dev/null @@ -1,38 +0,0 @@ -#pragma once - -namespace Pinetime { - namespace PinMap { - - #ifdef WATCH_P8 - // COLMI P8 - static constexpr uint8_t Charging = 19; - static constexpr uint8_t Cst816sReset = 13; - static constexpr uint8_t Button = 17; - #else - // Pinetime - static constexpr uint8_t Charging = 12; - static constexpr uint8_t Cst816sReset = 10; - static constexpr uint8_t Button = 13; - #endif - - static constexpr uint8_t Cst816sIrq = 28; - static constexpr uint8_t PowerPresent = 19; - - static constexpr uint8_t Motor = 16; - - static constexpr uint8_t LcdBacklightLow = 14; - static constexpr uint8_t LcdBacklightMedium = 22; - static constexpr uint8_t LcdBacklightHigh = 23; - - static constexpr uint8_t SpiSck = 2; - static constexpr uint8_t SpiMosi = 3; - static constexpr uint8_t SpiMiso = 4; - - static constexpr uint8_t SpiFlashCsn = 5; - static constexpr uint8_t SpiLcdCsn = 25; - static constexpr uint8_t LcdDataCommand = 18; - - static constexpr uint8_t TwiScl = 7; - static constexpr uint8_t TwiSda = 6; - } -} diff --git a/src/main.cpp b/src/main.cpp index 7d4f0858c5..6a7f5eb342 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -43,9 +43,7 @@ #include "drivers/St7789.h" #include "drivers/TwiMaster.h" #include "drivers/Cst816s.h" -#include "drivers/PinMap.h" #include "systemtask/SystemTask.h" -#include "drivers/PinMap.h" #include "touchhandler/TouchHandler.h" #if NRF_LOG_ENABLED @@ -56,6 +54,14 @@ Pinetime::Logging::NrfLogger logger; Pinetime::Logging::DummyLogger logger; #endif +static constexpr uint8_t pinSpiSck = 2; +static constexpr uint8_t pinSpiMosi = 3; +static constexpr uint8_t pinSpiMiso = 4; +static constexpr uint8_t pinSpiFlashCsn = 5; +static constexpr uint8_t pinLcdCsn = 25; +static constexpr uint8_t pinLcdDataCommand = 18; +static constexpr uint8_t pinTwiScl = 7; +static constexpr uint8_t pinTwiSda = 6; static constexpr uint8_t touchPanelTwiAddress = 0x15; static constexpr uint8_t motionSensorTwiAddress = 0x18; static constexpr uint8_t heartRateSensorTwiAddress = 0x44; @@ -64,30 +70,33 @@ Pinetime::Drivers::SpiMaster spi {Pinetime::Drivers::SpiMaster::SpiModule::SPI0, {Pinetime::Drivers::SpiMaster::BitOrder::Msb_Lsb, Pinetime::Drivers::SpiMaster::Modes::Mode3, Pinetime::Drivers::SpiMaster::Frequencies::Freq8Mhz, - Pinetime::PinMap::SpiSck, - Pinetime::PinMap::SpiMosi, - Pinetime::PinMap::SpiMiso}}; + pinSpiSck, + pinSpiMosi, + pinSpiMiso}}; -Pinetime::Drivers::Spi lcdSpi {spi, Pinetime::PinMap::SpiLcdCsn}; -Pinetime::Drivers::St7789 lcd {lcdSpi, Pinetime::PinMap::LcdDataCommand}; +Pinetime::Drivers::Spi lcdSpi {spi, pinLcdCsn}; +Pinetime::Drivers::St7789 lcd {lcdSpi, pinLcdDataCommand}; -Pinetime::Drivers::Spi flashSpi {spi, Pinetime::PinMap::SpiFlashCsn}; +Pinetime::Drivers::Spi flashSpi {spi, pinSpiFlashCsn}; Pinetime::Drivers::SpiNorFlash spiNorFlash {flashSpi}; // The TWI device should work @ up to 400Khz but there is a HW bug which prevent it from // respecting correct timings. According to erratas heet, this magic value makes it run // at ~390Khz with correct timings. static constexpr uint32_t MaxTwiFrequencyWithoutHardwareBug {0x06200000}; -Pinetime::Drivers::TwiMaster twiMaster {NRF_TWIM1, MaxTwiFrequencyWithoutHardwareBug, Pinetime::PinMap::TwiSda, Pinetime::PinMap::TwiScl}; +Pinetime::Drivers::TwiMaster twiMaster {NRF_TWIM1, MaxTwiFrequencyWithoutHardwareBug, pinTwiSda, pinTwiScl}; Pinetime::Drivers::Cst816S touchPanel {twiMaster, touchPanelTwiAddress}; #ifdef PINETIME_IS_RECOVERY +static constexpr bool isFactory = true; #include "displayapp/DummyLittleVgl.h" #include "displayapp/DisplayAppRecovery.h" +Pinetime::Components::LittleVgl lvgl {lcd, touchPanel}; #else +static constexpr bool isFactory = false; #include "displayapp/LittleVgl.h" #include "displayapp/DisplayApp.h" -#endif Pinetime::Components::LittleVgl lvgl {lcd, touchPanel}; +#endif Pinetime::Drivers::Bma421 motionSensor {twiMaster, motionSensorTwiAddress}; Pinetime::Drivers::Hrs3300 heartRateSensor {twiMaster, heartRateSensorTwiAddress}; @@ -96,8 +105,10 @@ TimerHandle_t debounceTimer; TimerHandle_t debounceChargeTimer; Pinetime::Controllers::Battery batteryController; Pinetime::Controllers::Ble bleController; -static constexpr uint8_t pinTouchIrq = Pinetime::PinMap::Cst816sIrq; -static constexpr uint8_t pinPowerPresentIrq = Pinetime::PinMap::PowerPresent; +void ble_manager_set_ble_connection_callback(void (*connection)()); +void ble_manager_set_ble_disconnection_callback(void (*disconnection)()); +static constexpr uint8_t pinTouchIrq = 28; +static constexpr uint8_t pinPowerPresentIrq = 19; Pinetime::Controllers::HeartRateController heartRateController; Pinetime::Applications::HeartRateTask heartRateApp(heartRateSensor, heartRateController); @@ -157,14 +168,14 @@ Pinetime::System::SystemTask systemTask(spi, touchHandler); void nrfx_gpiote_evt_handler(nrfx_gpiote_pin_t pin, nrf_gpiote_polarity_t action) { - if (pin == Pinetime::PinMap::Cst816sIrq) { + if (pin == pinTouchIrq) { systemTask.OnTouchEvent(); return; } BaseType_t xHigherPriorityTaskWoken = pdFALSE; - if (pin == Pinetime::PinMap::PowerPresent and action == NRF_GPIOTE_POLARITY_TOGGLE) { + if (pin == pinPowerPresentIrq and action == NRF_GPIOTE_POLARITY_TOGGLE) { xTimerStartFromISR(debounceChargeTimer, &xHigherPriorityTaskWoken); portYIELD_FROM_ISR(xHigherPriorityTaskWoken); return; @@ -297,18 +308,18 @@ int main(void) { nrf_drv_clock_init(); // Unblock i2c? - nrf_gpio_cfg(Pinetime::PinMap::TwiScl, + nrf_gpio_cfg(pinTwiScl, NRF_GPIO_PIN_DIR_OUTPUT, NRF_GPIO_PIN_INPUT_DISCONNECT, NRF_GPIO_PIN_NOPULL, NRF_GPIO_PIN_S0D1, NRF_GPIO_PIN_NOSENSE); - nrf_gpio_pin_set(Pinetime::PinMap::TwiScl); + nrf_gpio_pin_set(pinTwiScl); for (uint8_t i = 0; i < 16; i++) { - nrf_gpio_pin_toggle(Pinetime::PinMap::TwiScl); + nrf_gpio_pin_toggle(pinTwiScl); nrf_delay_us(5); } - nrf_gpio_cfg_default(Pinetime::PinMap::TwiScl); + nrf_gpio_cfg_default(pinTwiScl); debounceTimer = xTimerCreate("debounceTimer", 200, pdFALSE, (void*) 0, DebounceTimerCallback); debounceChargeTimer = xTimerCreate("debounceTimerCharge", 200, pdFALSE, (void*) 0, DebounceTimerChargeCallback); diff --git a/src/recoveryLoader.cpp b/src/recoveryLoader.cpp index acec14c8ad..9818179dee 100644 --- a/src/recoveryLoader.cpp +++ b/src/recoveryLoader.cpp @@ -15,7 +15,6 @@ #include #include #include "recoveryImage.h" -#include "drivers/PinMap.h" #include "displayapp/icons/infinitime/infinitime-nb.c" #include "components/rle/RleDecoder.h" @@ -28,6 +27,12 @@ Pinetime::Logging::NrfLogger logger; Pinetime::Logging::DummyLogger logger; #endif +static constexpr uint8_t pinSpiSck = 2; +static constexpr uint8_t pinSpiMosi = 3; +static constexpr uint8_t pinSpiMiso = 4; +static constexpr uint8_t pinSpiFlashCsn = 5; +static constexpr uint8_t pinLcdCsn = 25; +static constexpr uint8_t pinLcdDataCommand = 18; static constexpr uint8_t displayWidth = 240; static constexpr uint8_t displayHeight = 240; @@ -40,14 +45,14 @@ Pinetime::Drivers::SpiMaster spi {Pinetime::Drivers::SpiMaster::SpiModule::SPI0, {Pinetime::Drivers::SpiMaster::BitOrder::Msb_Lsb, Pinetime::Drivers::SpiMaster::Modes::Mode3, Pinetime::Drivers::SpiMaster::Frequencies::Freq8Mhz, - Pinetime::PinMap::SpiSck, - Pinetime::PinMap::SpiMosi, - Pinetime::PinMap::SpiMiso}}; -Pinetime::Drivers::Spi flashSpi {spi, Pinetime::PinMap::SpiFlashCsn}; + pinSpiSck, + pinSpiMosi, + pinSpiMiso}}; +Pinetime::Drivers::Spi flashSpi {spi, pinSpiFlashCsn}; Pinetime::Drivers::SpiNorFlash spiNorFlash {flashSpi}; -Pinetime::Drivers::Spi lcdSpi {spi, Pinetime::PinMap::SpiLcdCsn}; -Pinetime::Drivers::St7789 lcd {lcdSpi, Pinetime::PinMap::LcdDataCommand}; +Pinetime::Drivers::Spi lcdSpi {spi, pinLcdCsn}; +Pinetime::Drivers::St7789 lcd {lcdSpi, pinLcdDataCommand}; Pinetime::Components::Gfx gfx {lcd}; Pinetime::Controllers::BrightnessController brightnessController; diff --git a/src/systemtask/Messages.h b/src/systemtask/Messages.h index bd1de234c2..93fcf9407a 100644 --- a/src/systemtask/Messages.h +++ b/src/systemtask/Messages.h @@ -22,9 +22,7 @@ namespace Pinetime { OnNewDay, OnChargingEvent, SetOffAlarm, - StopRinging, - MeasureBatteryTimerExpired, - BatteryMeasurementDone, + StopRinging }; } } diff --git a/src/systemtask/SystemTask.cpp b/src/systemtask/SystemTask.cpp index 24ee4bda3e..534f551092 100644 --- a/src/systemtask/SystemTask.cpp +++ b/src/systemtask/SystemTask.cpp @@ -21,10 +21,8 @@ #include "drivers/SpiNorFlash.h" #include "drivers/TwiMaster.h" #include "drivers/Hrs3300.h" -#include "drivers/PinMap.h" #include "main.h" - #include using namespace Pinetime::System; @@ -49,11 +47,6 @@ void IdleTimerCallback(TimerHandle_t xTimer) { sysTask->OnIdle(); } -void MeasureBatteryTimerCallback(TimerHandle_t xTimer) { - auto* sysTask = static_cast(pvTimerGetTimerID(xTimer)); - sysTask->PushMessage(Pinetime::System::Messages::MeasureBatteryTimerExpired); -} - SystemTask::SystemTask(Drivers::SpiMaster& spi, Drivers::St7789& lcd, Pinetime::Drivers::SpiNorFlash& spiNorFlash, @@ -130,13 +123,13 @@ void SystemTask::Work() { fs.Init(); nimbleController.Init(); + nimbleController.StartAdvertising(); lcd.Init(); twiMaster.Init(); touchPanel.Init(); dateTimeController.Register(this); - batteryController.Register(this); - batteryController.Update(); + batteryController.Init(); motorController.Init(); motionSensor.SoftReset(); timerController.Register(this); @@ -154,11 +147,13 @@ void SystemTask::Work() { displayApp.Register(this); displayApp.Start(); + displayApp.PushMessage(Pinetime::Applications::Display::Messages::UpdateBatteryLevel); + heartRateSensor.Init(); heartRateSensor.Disable(); heartRateApp.Start(); - nrf_gpio_cfg_sense_input(PinMap::Button, (nrf_gpio_pin_pull_t) GPIO_PIN_CNF_PULL_Pulldown, (nrf_gpio_pin_sense_t) GPIO_PIN_CNF_SENSE_High); + nrf_gpio_cfg_sense_input(pinButton, (nrf_gpio_pin_pull_t) GPIO_PIN_CNF_PULL_Pulldown, (nrf_gpio_pin_sense_t) GPIO_PIN_CNF_SENSE_High); nrf_gpio_cfg_output(15); nrf_gpio_pin_set(15); @@ -169,9 +164,9 @@ void SystemTask::Work() { pinConfig.sense = (nrf_gpiote_polarity_t) NRF_GPIOTE_POLARITY_HITOLO; pinConfig.pull = (nrf_gpio_pin_pull_t) GPIO_PIN_CNF_PULL_Pulldown; - nrfx_gpiote_in_init(PinMap::Button, &pinConfig, nrfx_gpiote_evt_handler); + nrfx_gpiote_in_init(pinButton, &pinConfig, nrfx_gpiote_evt_handler); - nrf_gpio_cfg_sense_input(PinMap::Cst816sIrq, (nrf_gpio_pin_pull_t) GPIO_PIN_CNF_PULL_Pullup, (nrf_gpio_pin_sense_t) GPIO_PIN_CNF_SENSE_Low); + nrf_gpio_cfg_sense_input(pinTouchIrq, (nrf_gpio_pin_pull_t) GPIO_PIN_CNF_PULL_Pullup, (nrf_gpio_pin_sense_t) GPIO_PIN_CNF_SENSE_Low); pinConfig.skip_gpio_setup = true; pinConfig.hi_accuracy = false; @@ -179,26 +174,24 @@ void SystemTask::Work() { pinConfig.sense = (nrf_gpiote_polarity_t) NRF_GPIOTE_POLARITY_HITOLO; pinConfig.pull = (nrf_gpio_pin_pull_t) GPIO_PIN_CNF_PULL_Pullup; - nrfx_gpiote_in_init(PinMap::Cst816sIrq, &pinConfig, nrfx_gpiote_evt_handler); + nrfx_gpiote_in_init(pinTouchIrq, &pinConfig, nrfx_gpiote_evt_handler); pinConfig.sense = NRF_GPIOTE_POLARITY_TOGGLE; pinConfig.pull = NRF_GPIO_PIN_NOPULL; pinConfig.is_watcher = false; pinConfig.hi_accuracy = false; pinConfig.skip_gpio_setup = true; - nrfx_gpiote_in_init(PinMap::PowerPresent, &pinConfig, nrfx_gpiote_evt_handler); + nrfx_gpiote_in_init(pinPowerPresentIrq, &pinConfig, nrfx_gpiote_evt_handler); - if (nrf_gpio_pin_read(PinMap::PowerPresent)) { - nrf_gpio_cfg_sense_input(PinMap::PowerPresent, NRF_GPIO_PIN_NOPULL, NRF_GPIO_PIN_SENSE_LOW); + if (nrf_gpio_pin_read(pinPowerPresentIrq)) { + nrf_gpio_cfg_sense_input(pinPowerPresentIrq, NRF_GPIO_PIN_NOPULL, NRF_GPIO_PIN_SENSE_LOW); } else { - nrf_gpio_cfg_sense_input(PinMap::PowerPresent, NRF_GPIO_PIN_NOPULL, NRF_GPIO_PIN_SENSE_HIGH); + nrf_gpio_cfg_sense_input(pinPowerPresentIrq, NRF_GPIO_PIN_NOPULL, NRF_GPIO_PIN_SENSE_HIGH); } idleTimer = xTimerCreate("idleTimer", pdMS_TO_TICKS(2000), pdFALSE, this, IdleTimerCallback); dimTimer = xTimerCreate("dimTimer", pdMS_TO_TICKS(settingsController.GetScreenTimeOut() - 2000), pdFALSE, this, DimTimerCallback); - measureBatteryTimer = xTimerCreate("measureBattery", batteryMeasurementPeriod, pdTRUE, this, MeasureBatteryTimerCallback); xTimerStart(dimTimer, 0); - xTimerStart(measureBatteryTimer, portMAX_DELAY); // Suppress endless loop diagnostic #pragma clang diagnostic push @@ -208,6 +201,11 @@ void SystemTask::Work() { uint8_t msg; if (xQueueReceive(systemTasksMsgQueue, &msg, 100)) { + + batteryController.Update(); + // the battery does not emit events when changing charge levels, so we piggyback + // on any system event to read and update the current values + Messages message = static_cast(msg); switch (message) { case Messages::EnableSleeping: @@ -231,16 +229,15 @@ void SystemTask::Work() { touchPanel.Wakeup(); } + nimbleController.StartAdvertising(); xTimerStart(dimTimer, 0); spiNorFlash.Wakeup(); lcd.Wakeup(); displayApp.PushMessage(Pinetime::Applications::Display::Messages::GoToRunning); + displayApp.PushMessage(Pinetime::Applications::Display::Messages::UpdateBatteryLevel); heartRateApp.PushMessage(Pinetime::Applications::HeartRateTask::Messages::WakeUp); - if (!bleController.IsConnected()) - nimbleController.RestartFastAdv(); - isSleeping = false; isWakingUp = false; isDimmed = false; @@ -343,18 +340,8 @@ void SystemTask::Work() { stepCounterMustBeReset = true; break; case Messages::OnChargingEvent: - batteryController.Update(); motorController.RunForDuration(15); - break; - case Messages::MeasureBatteryTimerExpired: - sendBatteryNotification = true; - batteryController.Update(); - break; - case Messages::BatteryMeasurementDone: - if (sendBatteryNotification) { - sendBatteryNotification = false; - nimbleController.NotifyBatteryLevel(batteryController.PercentRemaining()); - } + // Battery level is updated on every message - there's no need to do anything break; default: @@ -366,17 +353,22 @@ void SystemTask::Work() { if (bleDiscoveryTimer == 0) { isBleDiscoveryTimerRunning = false; // Services discovery is deffered from 3 seconds to avoid the conflicts between the host communicating with the - // target and vice-versa. I'm not sure if this is the right way to handle this... + // tharget and vice-versa. I'm not sure if this is the right way to handle this... nimbleController.StartDiscovery(); } else { bleDiscoveryTimer--; } } + if (xTaskGetTickCount() - batteryNotificationTick > batteryNotificationPeriod) { + nimbleController.NotifyBatteryLevel(batteryController.PercentRemaining()); + batteryNotificationTick = xTaskGetTickCount(); + } + monitor.Process(); uint32_t systick_counter = nrf_rtc_counter_get(portNRF_RTC_REG); dateTimeController.UpdateTime(systick_counter); - if (!nrf_gpio_pin_read(PinMap::Button)) + if (!nrf_gpio_pin_read(pinButton)) watchdog.Kick(); } // Clear diagnostic suppression diff --git a/src/systemtask/SystemTask.h b/src/systemtask/SystemTask.h index 9e7e5e8ce5..cbd98d26cd 100644 --- a/src/systemtask/SystemTask.h +++ b/src/systemtask/SystemTask.h @@ -8,7 +8,6 @@ #include #include #include -#include #include #include "SystemMonitor.h" @@ -124,6 +123,15 @@ namespace Pinetime { Pinetime::Controllers::TouchHandler& touchHandler; Pinetime::Controllers::NimbleController nimbleController; + static constexpr uint8_t pinSpiSck = 2; + static constexpr uint8_t pinSpiMosi = 3; + static constexpr uint8_t pinSpiMiso = 4; + static constexpr uint8_t pinSpiCsn = 25; + static constexpr uint8_t pinLcdDataCommand = 18; + static constexpr uint8_t pinButton = 13; + static constexpr uint8_t pinTouchIrq = 28; + static constexpr uint8_t pinPowerPresentIrq = 19; + static void Process(void* instance); void Work(); void ReloadIdleTimer(); @@ -131,15 +139,13 @@ namespace Pinetime { uint8_t bleDiscoveryTimer = 0; TimerHandle_t dimTimer; TimerHandle_t idleTimer; - TimerHandle_t measureBatteryTimer; - bool sendBatteryNotification = false; bool doNotGoToSleep = false; void GoToRunning(); void UpdateMotion(); bool stepCounterMustBeReset = false; - static constexpr TickType_t batteryMeasurementPeriod = pdMS_TO_TICKS(10 * 60 * 1000); - TickType_t lastBatteryNotificationTime = 0; + static constexpr TickType_t batteryNotificationPeriod = 1000 * 60 * 10; // 1 tick ~= 1ms. 1ms * 60 * 10 = 10 minutes + TickType_t batteryNotificationTick = 0; #if configUSE_TRACE_FACILITY == 1 SystemMonitor monitor; From 7af7db74cde6e8ab23e2e261049cf14396e1e682 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-Fran=C3=A7ois=20Milants?= Date: Sat, 18 Sep 2021 17:20:33 +0200 Subject: [PATCH 169/173] Fix DisplayAppRecovery : add AlarmController to ctor(). --- src/displayapp/DisplayAppRecovery.cpp | 1 + src/displayapp/DisplayAppRecovery.h | 2 ++ 2 files changed, 3 insertions(+) diff --git a/src/displayapp/DisplayAppRecovery.cpp b/src/displayapp/DisplayAppRecovery.cpp index 7a20262988..a42d81a2e5 100644 --- a/src/displayapp/DisplayAppRecovery.cpp +++ b/src/displayapp/DisplayAppRecovery.cpp @@ -22,6 +22,7 @@ DisplayApp::DisplayApp(Drivers::St7789& lcd, Pinetime::Controllers::MotorController& motorController, Pinetime::Controllers::MotionController& motionController, Pinetime::Controllers::TimerController& timerController, + Pinetime::Controllers::AlarmController& alarmController, Pinetime::Controllers::TouchHandler& touchHandler) : lcd {lcd}, bleController {bleController} { diff --git a/src/displayapp/DisplayAppRecovery.h b/src/displayapp/DisplayAppRecovery.h index 4184ea49da..425e0acad4 100644 --- a/src/displayapp/DisplayAppRecovery.h +++ b/src/displayapp/DisplayAppRecovery.h @@ -32,6 +32,7 @@ namespace Pinetime { class TouchHandler; class MotorController; class TimerController; + class AlarmController; } namespace System { @@ -54,6 +55,7 @@ namespace Pinetime { Pinetime::Controllers::MotorController& motorController, Pinetime::Controllers::MotionController& motionController, Pinetime::Controllers::TimerController& timerController, + Pinetime::Controllers::AlarmController& alarmController, Pinetime::Controllers::TouchHandler& touchHandler); void Start(); void PushMessage(Pinetime::Applications::Display::Messages msg); From f3b5da0049132f9b06ecc162039badc20e37d037 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-Fran=C3=A7ois=20Milants?= Date: Sun, 19 Sep 2021 17:42:50 +0200 Subject: [PATCH 170/173] Fix the display of the date after a reset : when the date/time was restored from the noinit area, the date was displayed as "--" instead of the actual date. This issue was caused by DateTime::SetCurrentTime() that would not update the internal state of the class : dayOfWeek, Month, Year were not properly updated according to the current time. --- src/components/datetime/DateTimeController.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/components/datetime/DateTimeController.cpp b/src/components/datetime/DateTimeController.cpp index 6e426825c8..0756d38d28 100644 --- a/src/components/datetime/DateTimeController.cpp +++ b/src/components/datetime/DateTimeController.cpp @@ -7,6 +7,7 @@ using namespace Pinetime::Controllers; void DateTime::SetCurrentTime(std::chrono::time_point t) { this->currentDateTime = t; + UpdateTime(previousSystickCounter); // Update internal state without updating the time } void DateTime::SetTime( From d03db14129b4f8cc2e691dd6f9e8d8d1ed52b7a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-Fran=C3=A7ois=20Milants?= Date: Sun, 26 Sep 2021 10:57:02 +0200 Subject: [PATCH 171/173] Set version to 1.5.0 --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index f2402e5790..ec582fa2dc 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,5 +1,5 @@ cmake_minimum_required(VERSION 3.10) -project(pinetime VERSION 1.4.0 LANGUAGES C CXX ASM) +project(pinetime VERSION 1.5.0 LANGUAGES C CXX ASM) set(CMAKE_C_STANDARD 99) set(CMAKE_CXX_STANDARD 14) From 7377f67e974f3b49bb00864111169c829b508861 Mon Sep 17 00:00:00 2001 From: coxtor Date: Mon, 27 Sep 2021 21:33:37 +0200 Subject: [PATCH 172/173] Fix Favorites for 1.5 --- src/displayapp/screens/settings/SettingFavoriteApp.cpp | 4 ---- src/displayapp/screens/settings/SettingFavoriteApp.h | 2 -- 2 files changed, 6 deletions(-) diff --git a/src/displayapp/screens/settings/SettingFavoriteApp.cpp b/src/displayapp/screens/settings/SettingFavoriteApp.cpp index d0c8dfa11f..c6c0679ca0 100644 --- a/src/displayapp/screens/settings/SettingFavoriteApp.cpp +++ b/src/displayapp/screens/settings/SettingFavoriteApp.cpp @@ -57,10 +57,6 @@ SettingFavoriteApp::~SettingFavoriteApp() { settingsController.SaveSettings(); } -bool SettingFavoriteApp::Refresh() { - return running; -} - void SettingFavoriteApp::UpdateSelected(lv_obj_t* object, lv_event_t event) { if (event == LV_EVENT_VALUE_CHANGED) { for (int i = 0; i < optionsTotal; i++) { diff --git a/src/displayapp/screens/settings/SettingFavoriteApp.h b/src/displayapp/screens/settings/SettingFavoriteApp.h index b6c070c927..f3327dad48 100644 --- a/src/displayapp/screens/settings/SettingFavoriteApp.h +++ b/src/displayapp/screens/settings/SettingFavoriteApp.h @@ -15,8 +15,6 @@ namespace Pinetime { public: SettingFavoriteApp(DisplayApp* app, Pinetime::Controllers::Settings& settingsController); ~SettingFavoriteApp() override; - - bool Refresh() override; void UpdateSelected(lv_obj_t* object, lv_event_t event); private: From 9a21d713f4244fc271840e79f2a635e641702fa3 Mon Sep 17 00:00:00 2001 From: coxtor Date: Tue, 28 Sep 2021 12:49:03 +0200 Subject: [PATCH 173/173] Select Favorite via longpress --- src/displayapp/screens/Tile.cpp | 47 +++++++++++++++++++++++++-------- src/displayapp/screens/Tile.h | 5 +++- 2 files changed, 40 insertions(+), 12 deletions(-) diff --git a/src/displayapp/screens/Tile.cpp b/src/displayapp/screens/Tile.cpp index 1d4f0d0ef7..e5607a56c9 100644 --- a/src/displayapp/screens/Tile.cpp +++ b/src/displayapp/screens/Tile.cpp @@ -1,6 +1,7 @@ #include "Tile.h" #include "../DisplayApp.h" #include "BatteryIcon.h" +#include "Symbols.h" using namespace Pinetime::Applications::Screens; @@ -11,12 +12,15 @@ namespace { } static void event_handler(lv_obj_t* obj, lv_event_t event) { - if (event != LV_EVENT_VALUE_CHANGED) return; - - Tile* screen = static_cast(obj->user_data); - auto* eventDataPtr = (uint32_t*) lv_event_get_data(); - uint32_t eventData = *eventDataPtr; - screen->OnValueChangedEvent(obj, eventData); + switch(event){ + case LV_EVENT_VALUE_CHANGED: + case LV_EVENT_LONG_PRESSED: + Tile* screen = static_cast(obj->user_data); + auto* eventDataPtr = (uint32_t*) lv_event_get_data(); + uint32_t eventData = *eventDataPtr; + screen->OnValueChangedEvent(obj, eventData, event); + break; + } } } @@ -27,7 +31,7 @@ Tile::Tile(uint8_t screenID, Pinetime::Controllers::Battery& batteryController, Controllers::DateTime& dateTimeController, std::array& applications) - : Screen(app), batteryController {batteryController}, dateTimeController {dateTimeController} { + : Screen(app), batteryController {batteryController}, dateTimeController {dateTimeController}, settingsController {settingsController} { settingsController.SetAppMenu(screenID); @@ -74,7 +78,12 @@ Tile::Tile(uint8_t screenID, if (applications[i].application == Apps::None) { btnmMap[btIndex] = " "; } else { - btnmMap[btIndex] = applications[i].icon; + if (applications[i].application == settingsController.GetFavoriteApp()){ + btnmMap[btIndex] = Pinetime::Applications::Screens::Symbols::eye; + } + else{ + btnmMap[btIndex] = applications[i].icon; + } } btIndex++; apps[i] = applications[i].application; @@ -123,9 +132,25 @@ void Tile::UpdateScreen() { lv_label_set_text(batteryIcon, BatteryIcon::GetBatteryIcon(batteryController.PercentRemaining())); } -void Tile::OnValueChangedEvent(lv_obj_t* obj, uint32_t buttonId) { +void Tile::OnValueChangedEvent(lv_obj_t* obj, uint32_t buttonId, lv_event_t event) { if(obj != btnm1) return; + switch(event){ + case LV_EVENT_VALUE_CHANGED: + if(apps[buttonId] != Pinetime::Applications::Apps::None){ + app->StartApp(apps[buttonId], DisplayApp::FullRefreshDirections::Up); + running = false; + } + break; + case LV_EVENT_LONG_PRESSED: + currentFavoriteApp = settingsController.GetFavoriteApp(); + if(currentFavoriteApp == apps[buttonId]){ + settingsController.SetFavoriteApp(Pinetime::Applications::Apps::None); + } + else{ + settingsController.SetFavoriteApp(apps[buttonId]); + } + //motorController.RunForDuration(35); + break; + } - app->StartApp(apps[buttonId], DisplayApp::FullRefreshDirections::Up); - running = false; } diff --git a/src/displayapp/screens/Tile.h b/src/displayapp/screens/Tile.h index 83d3fdf5fa..95e963eab2 100644 --- a/src/displayapp/screens/Tile.h +++ b/src/displayapp/screens/Tile.h @@ -9,6 +9,7 @@ #include "components/settings/Settings.h" #include "components/datetime/DateTimeController.h" #include "components/battery/BatteryController.h" +#include "components/motor/MotorController.h" namespace Pinetime { namespace Applications { @@ -31,11 +32,12 @@ namespace Pinetime { ~Tile() override; void UpdateScreen(); - void OnValueChangedEvent(lv_obj_t* obj, uint32_t buttonId); + void OnValueChangedEvent(lv_obj_t* obj, uint32_t buttonId, lv_event_t event); private: Pinetime::Controllers::Battery& batteryController; Controllers::DateTime& dateTimeController; + Controllers::Settings& settingsController; lv_task_t* taskUpdate; @@ -49,6 +51,7 @@ namespace Pinetime { const char* btnmMap[8]; Pinetime::Applications::Apps apps[6]; + Pinetime::Applications::Apps currentFavoriteApp = Pinetime::Applications::Apps::None; }; } }

    =9Lqwt^u=qg^@;F-{#jYevgSkt$* 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 O%H$!&AQe%LXaCu%_f;nV literal 0 HcmV?d00001 diff --git a/doc/gettingStarted/bootloader-1.0.jpg b/doc/gettingStarted/bootloader-1.0.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7b639184aea7881cb022bb97c7acb848b82b44c5 GIT binary patch literal 160275 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∓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 1.0 : + +![InfiniTime 1.0 version](version-1.0.jpg) + + +PineTime shipped from June 2020 (to be confirmed) will be flashed with the [new version of the bootloader](https://github.com/JF002/pinetime-mcuboot-bootloader/releases/tag/1.0.0), the [recovery firmware](https://github.com/JF002/InfiniTime/releases/tag/0.14.1) and [InfiniTime 1.0](https://github.com/JF002/InfiniTime/releases/tag/1.0.0). + +The bootloader is easily recognizable with it white pine cone that is progressively drawn in green. It also displays its own version on the bottom (1.0.0 as of now). + +![Bootloader 1.0](bootloader-1.0.jpg) + +## How to update your PineTime? +To update your PineTime, you can use one of the compatible companion applications. Here are the main ones: + + - **[Amazfish](https://github.com/piggz/harbour-amazfish)** (Desktop Linux, mobile Linux, SailfishOS, runs on the PinebookPro and the Pinephone) + - **[Gadgetbridge](https://www.gadgetbridge.org/)** (Android) + - **[Siglo](https://github.com/alexr4535/siglo)** (Linux, GTK based) + - **NRFConnect** (closed source, Android & iOS). + +See [this page](ota-gadgetbridge-nrfconnect.md) for more info about the OTA procedure using Gadgetbrige and NRFCOnnect. + +### From InfiniTime 0.7.1 / old bootloader +If your PineTime is currently running InfiniTime 0.7.1 and the old bootloader, we strongly recommend you update them to more recent version (Bootloader 1.0.0 and InfiniTime 1.0.0 as of now). We also recommend you install the recovery firmware once the bootloader is up-do-date. + +Using the companion app of your choice, you'll need to apply the OTA procedure for these 3 firmwares in this sequence (failing to follow this specific order might temporarily or permanently brick your device): + + 1. Flash the latest version of InfiniTime. The file to upload is named **pinetime-mcuboot-app-dfu-x.y.z.zip**. Here is the link to [InfiniTime 1.0](https://github.com/JF002/InfiniTime/releases/download/1.0.0/pinetime-mcuboot-app-dfu-1.0.0.zip). + 2. Update the bootloader by applying the OTA procedure with the file named [**reloader-mcuboot.zip** from the repo of the bootloader](https://github.com/JF002/pinetime-mcuboot-bootloader/releases/download/1.0.0/reloader-mcuboot.zip). + 3. Install the recovery firmware by applying the OTA procedure with the file named [**pinetime-mcuboot-recovery-loader-dfu-0.14.1.zip** from the version 0.14.1 of InfiniTime](https://github.com/JF002/InfiniTime/releases/download/0.14.1/pinetime-mcuboot-recovery-loader-dfu-0.14.1.zip). + +You'll find more info about this process in [this wiki page](https://wiki.pine64.org/wiki/Upgrade_PineTime_to_InfiniTime_1.0.0). You can also see the procedure in video [here](https://video.codingfield.com/videos/watch/831077c5-16f3-47b4-9b2b-c4bbfecc6529) and [here (from Amazfish)](https://video.codingfield.com/videos/watch/f7bffb3d-a6a1-43c4-8f01-f4aeff4adf9e) + +### From version > 1.0 +If you are already running the new "1.0.0" bootloader, all you have to do is update your version of InfiniTime when it'll be available. We'll write specific instructions when (if) we release a new version of the bootloader. + +### Firmware validation +The bootloader requires a (manual) validation of the firmware. If the watch reset with an updated firmware that was not validated, the bootloader will consider it as non-functionning and will revert to the previous version of the firmware. This is a safety feature to prevent bricking your device with a faulty firmware. + +You can validate your updated firmware on InfiniTime >= 1.0 by following this simple procedure: + + - From the watchface, swipe **right** to display the *Quick Actions menu* + - Open the **Settings** app by tapping the *gear* icon on the bottom right + - Swipe down and tap on the entry named **Firmware** + - This app shows the version that is currently running. If it's not validated yet, it displays 2 buttons: + - **Validate** to validate your firmware + - **Reset** to reset the watch and revert to the previously running version of the firmware + +## InfiniTime 1.0 quick user guide +### Setting the time +By default, InfiniTime starts on the digital watchface. It'll probably display the epoch time (1 Jan 1970, 00:00). The time will be automatically synchronized once you connect on of the companion app to your PineTime using BLE connectivity. InfiniTime does not provide any way to manually set the time for now. + +### Navigation in the menu + +![Quick actions](quickactions.jpg) +![Settings](settings.jpg) +![Application menu](appmenu.jpg) + + - Swipe **down** to display the notification panel. Notification sent by your companion app will be displayed in this panel. + - Swipe **up** to display the application menus. Apps (stopwatch, music, step, games,...) can be started from this menu. + - Swipe **right** to display the Quick Actions menu. This menu allows you to + - Set the brightness of the display + - Start the **flashlight** app + - Enable/disable vibrations on notifications (Do Not Disturb mode) + - Enter the **settings** menu + - Settings + - Display timeout + - Wake up event (Tap, wrist rotation) + - Time format (12/24H) + - Default watchface (digital / analog) + - Battery info + - Firmware validation + - About (system info, firmware version,...) + +### Bootloader + +Most of the time, the bootloader just runs without your intervention (update and load the firmware). + +However, you can enable 2 functionalities using the push button: + + - Push the button until the pine cone is drawn in **blue** to force the rollback of the previous version of the firmware, even if you've already validated the updated one + - Push the button until the pine cone is drawn in **red** to load the recovery firmware. This recovery firmware only provides BLE connectivity and OTA functionality. + +More info about the bootloader in [its project page](https://github.com/JF002/pinetime-mcuboot-bootloader/blob/master/README.md). + diff --git a/doc/gettingStarted/oldbootloaderlogo.jpg b/doc/gettingStarted/oldbootloaderlogo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b4d0cdfbd3274351ba0b170af53ea0b02c3982ad GIT binary patch literal 116236 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
    Nh1#hbF$Ers8bkttap^jY3%-8Gk#66D-kn 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
    +fz1ef}$8Ju}$+Ov+d1ihx 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 z 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 k0q_2}= 0.7.1). + +2 companion apps provide support for OTA : + - [Gadgetbridge](https://gadgetbridge.org/) (open source, runs on Android, [available on F-Droid](https://f-droid.org/packages/nodomain.freeyourgadget.gadgetbridge/)). + - [NRFConnect](https://www.nordicsemi.com/Software-and-tools/Development-Tools/nRF-Connect-for-mobile) (close source, runs on Android and iOS). + +Both applications need you to download the **DFU file** of InfiniTime. This file contains the new version of InfiniTime that will be flashed into your device. It's called **dfu-x.y.z.zip** (ex: dfu-0.9.0.zip) in the release note. +![Dfu file](dfuFile.png ) + +### Using Gadgetbridge +Launch Gadgetbridge and tap on the **"+"** button on the bottom right to add a new device: + +![Gadgetbridge 0](gadgetbridge0.jpg) + +Wait for the scan to complete, your PineTime should be detected: + +![Gadgetbridge 1](gadgetbridge1.jpg) + +Tap on it. Gadgdetbridge will pair and connect to your device: + +![Gadgetbridge 2](gadgetbridge2.jpg) + +Now that Gadgetbridge is connected to your PineTime, use a file browser application (I'm using Seafile to browse my NAS) and browse to the DFU file (image-xxx.zip) you downloaded previously. Tap on it and open it using the Gadgetbridge application/firmware installer: + +![Gadgetbridge 3](gadgetbridge3.jpg) + +Read carefully the warning and tap **Install**: + +![Gadgetbridge 4](gadgetbridge4.jpg) + +Wait for the transfer to finish. Your PineTime should reset and reboot with the new version of InfiniTime! + +![Gadgetbridge 5](gadgetbridge5.jpg) + +### Using NRFConnect +Open NRFConnect. Swipe down in the *Scanner* tab and wait for your device to appear: + +![NRFConnect 0](nrfconnect0.jpg) + +Tap on the *Connect* button on the right of your device. NRFConnect will connect to your PineTime and discover its characteristics. Tap on the **DFU** button on the top right: + +![NRFConnect 1](nrfconnect1.jpg) + +Select **Distribution packet (ZIP)**: + +![NRFConnect 2](nrfconnect2.jpg) + +Browse to the DFU file you downloaded previously, the DFU transfer will start automatically. When the transfer is finished, your PineTime will reset and restart on the new version of InfiniTime! + +![NRFConnect 3](nrfconnect3.jpg) + +## How to flash InfiniTime using the SWD interface +Download the files **bootloader.bin**, **image-x.y.z.bin** and **pinetime-graphics-x.y.z.bin** from the release page: + +![Image file](imageFile.png ) + +The bootloader reads a boot logo from the external SPI flash memory. The first step consists in flashing a tool in the MCU that will flash the boot logo into this SPI flash memory. This first step is optional but recommanded (the bootloader will display garbage on screen for a few second if you don't do it). +Using your SWD tool, flash **pinetime-graphics-x.y.z.bin** at offset **0x0000**. Reset the MCU and wait for a few second, until the logo is completely drawn on the display. + +Then, using your SWD tool, flash those file at specific offset: + + - bootloader.bin : **0x0000** + - image-x.y.z.bin : **0x8000** + +Reset and voilà, you're running InfiniTime on your PineTime! + +If you are using OpenOCD with a STLinkV2, you can find more info [on this page](../openOCD.md). + +## How to synchronize the time + +### Using Gadgetbridge +Good news! Gadgetbridge **automatically** synchronizes the time when connecting to your PineTime! + +### Using NRFConnect +You must enable the **CTS** *GATT server* into NRFConnect so that InfiniTime can synchronize the time with your smartphone. + +Launch NRFConnect, tap the sandwich button on the top left and select *Configure GATT server*: + +![NRFConnect CTS 0](nrfconnectcts0.jpg) + + +Tap *Add service* and select the server configuration *Current Time service*. Tap OK and connect to your PineTime, it should automcatically sync the time once the connection is established! + +![NRFConnect CTS 1](nrfconnectcts1.jpg) diff --git a/doc/gettingStarted/quickactions.jpg b/doc/gettingStarted/quickactions.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0d92b13464a66bfb76dfdb9513b9c5d5d11999b1 GIT binary patch literal 114900 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