From bd05a993ed9857a7da21e8ef6be24be78a3c2657 Mon Sep 17 00:00:00 2001 From: Alexander Entinger Date: Wed, 12 Jan 2022 11:45:51 +0100 Subject: [PATCH 01/17] Set-up power before running either custom or default menu. --- src/Braccio.cpp | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/Braccio.cpp b/src/Braccio.cpp index a7acda5..085d7ba 100644 --- a/src/Braccio.cpp +++ b/src/Braccio.cpp @@ -130,10 +130,14 @@ bool BraccioClass::begin(voidFuncPtr customMenu) { splashScreen(); - if (customMenu) { - customMenu(); - } else { - defaultMenu(); + for(auto const now = millis(); + ((millis() - now) < 5000) && !PD_UFP.is_PPS_ready();) + { + i2c_mutex.lock(); + PD_UFP.print_status(Serial); + PD_UFP.set_PPS(PPS_V(7.2), PPS_A(2.0)); + delay(10); + i2c_mutex.unlock(); } if (!PD_UFP.is_PPS_ready()) { @@ -141,14 +145,10 @@ bool BraccioClass::begin(voidFuncPtr customMenu) { gfx.println("\n\nPlease\nconnect\npower"); } - //PD_UFP.print_status(Serial); - while (!PD_UFP.is_PPS_ready()) { - i2c_mutex.lock(); - PD_UFP.print_status(Serial); - //PD_UFP.print_status(Serial); - PD_UFP.set_PPS(PPS_V(7.2), PPS_A(2.0)); - delay(10); - i2c_mutex.unlock(); + if (customMenu) { + customMenu(); + } else { + defaultMenu(); } #ifdef __MBED__ From 248243d9676f0df3439871275e324c09213ddc69 Mon Sep 17 00:00:00 2001 From: Alexander Entinger Date: Wed, 12 Jan 2022 12:33:33 +0100 Subject: [PATCH 02/17] Enable larger font with size 32px. --- src/lv_conf.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lv_conf.h b/src/lv_conf.h index 26ebea9..0e64765 100644 --- a/src/lv_conf.h +++ b/src/lv_conf.h @@ -274,7 +274,7 @@ e.g. "stm32f769xx.h" or "stm32f429xx.h"*/ #define LV_FONT_MONTSERRAT_26 0 #define LV_FONT_MONTSERRAT_28 0 #define LV_FONT_MONTSERRAT_30 0 -#define LV_FONT_MONTSERRAT_32 0 +#define LV_FONT_MONTSERRAT_32 1 #define LV_FONT_MONTSERRAT_34 0 #define LV_FONT_MONTSERRAT_36 0 #define LV_FONT_MONTSERRAT_38 0 From 263d9dbf1d20e87e54aed235500948741282b0db Mon Sep 17 00:00:00 2001 From: Alexander Entinger Date: Wed, 12 Jan 2022 12:34:04 +0100 Subject: [PATCH 03/17] Use LVGL instead of direct GFX calls for writing power message to TFT display. --- src/Braccio++.h | 1 + src/Braccio.cpp | 14 +++++++++++--- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/Braccio++.h b/src/Braccio++.h index bd32a74..a16160d 100644 --- a/src/Braccio++.h +++ b/src/Braccio++.h @@ -195,6 +195,7 @@ class BraccioClass lv_color_t buf[240 * 240 / 10]; lv_group_t* p_objGroup; lv_indev_t *kb_indev; + lv_style_t _lv_style; bool _connected[8]; diff --git a/src/Braccio.cpp b/src/Braccio.cpp index 085d7ba..e344308 100644 --- a/src/Braccio.cpp +++ b/src/Braccio.cpp @@ -112,6 +112,8 @@ bool BraccioClass::begin(voidFuncPtr customMenu) { indev_drv.read_cb = read_keypad; kb_indev = lv_indev_drv_register(&indev_drv); + lv_style_init(&_lv_style); + gfx.init(); gfx.setRotation(4); gfx.fillScreen(TFT_BLACK); @@ -140,9 +142,15 @@ bool BraccioClass::begin(voidFuncPtr customMenu) { i2c_mutex.unlock(); } - if (!PD_UFP.is_PPS_ready()) { - gfx.fillScreen(TFT_BLACK); - gfx.println("\n\nPlease\nconnect\npower"); + if (!PD_UFP.is_PPS_ready()) + { + lv_style_set_text_font(&_lv_style, &lv_font_montserrat_32); + lv_obj_t * label1 = lv_label_create(lv_scr_act()); + lv_obj_add_style(label1, &_lv_style, 0); + lv_label_set_text(label1, "Please\nconnect\npower."); + lv_label_set_long_mode(label1, LV_LABEL_LONG_SCROLL); + lv_obj_set_align(label1, LV_ALIGN_CENTER); + lv_obj_set_pos(label1, 0, 0); } if (customMenu) { From bdc99ca32c439c3d6af2773f61c2de2ae4117ea3 Mon Sep 17 00:00:00 2001 From: Alexander Entinger Date: Wed, 12 Jan 2022 12:35:00 +0100 Subject: [PATCH 04/17] Delete out-dated/out-commented code. --- src/Braccio.cpp | 7 ------- 1 file changed, 7 deletions(-) diff --git a/src/Braccio.cpp b/src/Braccio.cpp index e344308..cc286bf 100644 --- a/src/Braccio.cpp +++ b/src/Braccio.cpp @@ -120,13 +120,6 @@ bool BraccioClass::begin(voidFuncPtr customMenu) { gfx.setAddrWindow(0, 0, 240, 240); gfx.setFreeFont(&FreeSans18pt7b); -/* - gfx.drawBitmap(44, 60, ArduinoLogo, 152, 72, 0x04B3); - gfx.drawBitmap(48, 145, ArduinoText, 144, 23, 0x04B3); -*/ - - //delay(2000); - p_objGroup = lv_group_create(); lv_group_set_default(p_objGroup); From 466ff982be03b55171435824dceb79d32772c058 Mon Sep 17 00:00:00 2001 From: Alexander Entinger Date: Wed, 12 Jan 2022 12:37:31 +0100 Subject: [PATCH 05/17] Start display thread earlier. This allows to skip calling the display task handler manually within 'splashScren'. --- src/Braccio.cpp | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/src/Braccio.cpp b/src/Braccio.cpp index cc286bf..efa5917 100644 --- a/src/Braccio.cpp +++ b/src/Braccio.cpp @@ -123,6 +123,11 @@ bool BraccioClass::begin(voidFuncPtr customMenu) { p_objGroup = lv_group_create(); lv_group_set_default(p_objGroup); +#ifdef __MBED__ + static rtos::Thread display_th; + display_th.start(mbed::callback(this, &BraccioClass::display_thread)); +#endif + splashScreen(); for(auto const now = millis(); @@ -152,11 +157,6 @@ bool BraccioClass::begin(voidFuncPtr customMenu) { defaultMenu(); } -#ifdef __MBED__ - static rtos::Thread display_th; - display_th.start(mbed::callback(this, &BraccioClass::display_thread)); -#endif - servos.begin(); servos.setPositionMode(PositionMode::IMMEDIATE); @@ -223,11 +223,10 @@ void BraccioClass::splashScreen(int duration) { lv_gif_set_src(img, &img_bulb_gif); lv_obj_align(img, LV_ALIGN_CENTER, 0, 0); - for (long start = millis(); millis() - start < duration;) { - lv_task_handler(); - lv_tick_inc(LV_DISP_DEF_REFR_PERIOD); + /* Wait until the splash screen duration is over. */ + for (long start = millis(); millis() - start < duration;) delay(10); - } + lv_obj_del(img); lv_obj_clean(lv_scr_act()); } From 1a3af7c2864d321d3d2685411227751cbac2a28a Mon Sep 17 00:00:00 2001 From: Alexander Entinger Date: Wed, 12 Jan 2022 12:39:49 +0100 Subject: [PATCH 06/17] mbed is the only platform we run this library on, hence we can drop the include guards. --- src/Braccio++.h | 5 +++-- src/Braccio.cpp | 7 ++----- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/src/Braccio++.h b/src/Braccio++.h index a16160d..144d325 100644 --- a/src/Braccio++.h +++ b/src/Braccio++.h @@ -172,11 +172,12 @@ class BraccioClass private: - RS485Class serial485; - SmartServoClass servos; + RS485Class serial485; + SmartServoClass servos; PD_UFP_log_c PD_UFP; TCA6424A expander; Backlight bl; + rtos::Thread _display_thread; speed_grade_t runTime; //ms diff --git a/src/Braccio.cpp b/src/Braccio.cpp index efa5917..3224d49 100644 --- a/src/Braccio.cpp +++ b/src/Braccio.cpp @@ -21,9 +21,9 @@ BraccioClass::BraccioClass() , PD_UFP{PD_LOG_LEVEL_VERBOSE} , expander{TCA6424A_ADDRESS_ADDR_HIGH} , bl{} +, _display_thread{} , runTime{SLOW} , _customMenu{nullptr} - { } @@ -123,10 +123,7 @@ bool BraccioClass::begin(voidFuncPtr customMenu) { p_objGroup = lv_group_create(); lv_group_set_default(p_objGroup); -#ifdef __MBED__ - static rtos::Thread display_th; - display_th.start(mbed::callback(this, &BraccioClass::display_thread)); -#endif + _display_thread.start(mbed::callback(this, &BraccioClass::display_thread)); splashScreen(); From 2db0bde2eefb3279b48cc479087914bcd268bd1c Mon Sep 17 00:00:00 2001 From: Alexander Entinger Date: Wed, 12 Jan 2022 12:45:16 +0100 Subject: [PATCH 07/17] Since the Arduino GIF is white, we may just as well configure for white background from the start. --- src/Braccio.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Braccio.cpp b/src/Braccio.cpp index 3224d49..0764f97 100644 --- a/src/Braccio.cpp +++ b/src/Braccio.cpp @@ -116,7 +116,7 @@ bool BraccioClass::begin(voidFuncPtr customMenu) { gfx.init(); gfx.setRotation(4); - gfx.fillScreen(TFT_BLACK); + gfx.fillScreen(TFT_WHITE); gfx.setAddrWindow(0, 0, 240, 240); gfx.setFreeFont(&FreeSans18pt7b); From c52923d012d749a64ef1719a539cd0782f830633 Mon Sep 17 00:00:00 2001 From: Alexander Entinger Date: Wed, 12 Jan 2022 12:45:35 +0100 Subject: [PATCH 08/17] Prolonge showing of Arduino GIF. --- src/Braccio++.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Braccio++.h b/src/Braccio++.h index 144d325..2b4392f 100644 --- a/src/Braccio++.h +++ b/src/Braccio++.h @@ -161,7 +161,7 @@ class BraccioClass // default display APIs void drawMenu(); - void splashScreen(int duration = 1000); + void splashScreen(int duration = 2000); void hideMenu(); void drawImage(char* image); void defaultMenu(); From cec317a51c102c946d3e6216771abed19d0ea581 Mon Sep 17 00:00:00 2001 From: Alexander Entinger Date: Wed, 12 Jan 2022 12:49:05 +0100 Subject: [PATCH 09/17] Replace 'while(1)' with 'for(;;)' which more expressively says 'infinite loop here'. --- src/Braccio.cpp | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/src/Braccio.cpp b/src/Braccio.cpp index 0764f97..1dbd3ef 100644 --- a/src/Braccio.cpp +++ b/src/Braccio.cpp @@ -196,19 +196,13 @@ void BraccioClass::pd_thread() { } } -void BraccioClass::display_thread() { - while (1) { - /* - if ((braccio::encoder.menu_running) && (braccio::encoder.menu_interrupt)) { - braccio::encoder.menu_interrupt = false; - braccio::nav.doInput(); - braccio::nav.doOutput(); - } - yield(); - */ +void BraccioClass::display_thread() +{ + for(;;) + { lv_task_handler(); lv_tick_inc(LV_DISP_DEF_REFR_PERIOD); - delay(30); + delay(LV_DISP_DEF_REFR_PERIOD); } } From 6d1044cf659418f08e5e40f578e84c6f515ac8a1 Mon Sep 17 00:00:00 2001 From: Alexander Entinger Date: Wed, 12 Jan 2022 12:54:39 +0100 Subject: [PATCH 10/17] Show empty battery symbol in order to entice user to connect power. --- src/Braccio.cpp | 11 +++++++++++ src/lv_conf.h | 2 +- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/Braccio.cpp b/src/Braccio.cpp index 1dbd3ef..640946e 100644 --- a/src/Braccio.cpp +++ b/src/Braccio.cpp @@ -127,6 +127,15 @@ bool BraccioClass::begin(voidFuncPtr customMenu) { splashScreen(); + { + lv_style_set_text_font(&_lv_style, &lv_font_montserrat_48); + lv_obj_t * label1 = lv_label_create(lv_scr_act()); + lv_obj_add_style(label1, &_lv_style, 0); + lv_label_set_text(label1, LV_SYMBOL_BATTERY_EMPTY); + lv_obj_set_align(label1, LV_ALIGN_CENTER); + lv_obj_set_pos(label1, 0, 0); + } + for(auto const now = millis(); ((millis() - now) < 5000) && !PD_UFP.is_PPS_ready();) { @@ -137,6 +146,8 @@ bool BraccioClass::begin(voidFuncPtr customMenu) { i2c_mutex.unlock(); } + lv_obj_clean(lv_scr_act()); + if (!PD_UFP.is_PPS_ready()) { lv_style_set_text_font(&_lv_style, &lv_font_montserrat_32); diff --git a/src/lv_conf.h b/src/lv_conf.h index 0e64765..88c0921 100644 --- a/src/lv_conf.h +++ b/src/lv_conf.h @@ -282,7 +282,7 @@ e.g. "stm32f769xx.h" or "stm32f429xx.h"*/ #define LV_FONT_MONTSERRAT_42 0 #define LV_FONT_MONTSERRAT_44 0 #define LV_FONT_MONTSERRAT_46 0 -#define LV_FONT_MONTSERRAT_48 0 +#define LV_FONT_MONTSERRAT_48 1 /*Demonstrate special features*/ #define LV_FONT_MONTSERRAT_12_SUBPX 0 From 00b441c8c2163760a376f57efcacc2d865d19983 Mon Sep 17 00:00:00 2001 From: Alexander Entinger Date: Thu, 13 Jan 2022 06:44:36 +0100 Subject: [PATCH 11/17] Delete un-implemented function 'drawImage'. --- src/Braccio++.h | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Braccio++.h b/src/Braccio++.h index 2b4392f..c4dc6fe 100644 --- a/src/Braccio++.h +++ b/src/Braccio++.h @@ -163,7 +163,6 @@ class BraccioClass void drawMenu(); void splashScreen(int duration = 2000); void hideMenu(); - void drawImage(char* image); void defaultMenu(); void setID(int id) { From 254a01c900037fbb1eb322847e7d2efa32e6ed0e Mon Sep 17 00:00:00 2001 From: Alexander Entinger Date: Thu, 13 Jan 2022 06:45:35 +0100 Subject: [PATCH 12/17] Delete un-implemented function 'hideMenu'. --- src/Braccio++.h | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Braccio++.h b/src/Braccio++.h index c4dc6fe..f78a1e6 100644 --- a/src/Braccio++.h +++ b/src/Braccio++.h @@ -162,7 +162,6 @@ class BraccioClass // default display APIs void drawMenu(); void splashScreen(int duration = 2000); - void hideMenu(); void defaultMenu(); void setID(int id) { From 5c8fbbfed13c1324d0a8bdf2f8a7e61f3384859a Mon Sep 17 00:00:00 2001 From: Alexander Entinger Date: Thu, 13 Jan 2022 06:46:10 +0100 Subject: [PATCH 13/17] Delete un-implemented function 'drawMenu'. --- src/Braccio++.h | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Braccio++.h b/src/Braccio++.h index f78a1e6..6656d45 100644 --- a/src/Braccio++.h +++ b/src/Braccio++.h @@ -160,7 +160,6 @@ class BraccioClass void digitalWrite(int pin, uint8_t value); // default display APIs - void drawMenu(); void splashScreen(int duration = 2000); void defaultMenu(); From d73bcc2100dec5125a73c3b9dc81e8c21497ae21 Mon Sep 17 00:00:00 2001 From: Alexander Entinger Date: Thu, 13 Jan 2022 06:50:19 +0100 Subject: [PATCH 14/17] Rename splashScreen to lvgl_splashScreen and remove default parameter. --- src/Braccio++.h | 2 +- src/Braccio.cpp | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/Braccio++.h b/src/Braccio++.h index 6656d45..ac2f904 100644 --- a/src/Braccio++.h +++ b/src/Braccio++.h @@ -160,7 +160,7 @@ class BraccioClass void digitalWrite(int pin, uint8_t value); // default display APIs - void splashScreen(int duration = 2000); + void lvgl_splashScreen(unsigned long const duration_ms); void defaultMenu(); void setID(int id) { diff --git a/src/Braccio.cpp b/src/Braccio.cpp index 640946e..a8fbe85 100644 --- a/src/Braccio.cpp +++ b/src/Braccio.cpp @@ -125,7 +125,7 @@ bool BraccioClass::begin(voidFuncPtr customMenu) { _display_thread.start(mbed::callback(this, &BraccioClass::display_thread)); - splashScreen(); + lvgl_splashScreen(2000); { lv_style_set_text_font(&_lv_style, &lv_font_montserrat_48); @@ -219,15 +219,15 @@ void BraccioClass::display_thread() #include -void BraccioClass::splashScreen(int duration) { +void BraccioClass::lvgl_splashScreen(unsigned long const duration_ms) +{ LV_IMG_DECLARE(img_bulb_gif); lv_obj_t* img = lv_gif_create(lv_scr_act()); lv_gif_set_src(img, &img_bulb_gif); lv_obj_align(img, LV_ALIGN_CENTER, 0, 0); /* Wait until the splash screen duration is over. */ - for (long start = millis(); millis() - start < duration;) - delay(10); + for (unsigned long const start = millis(); millis() - start < duration_ms; delay(10)) { } lv_obj_del(img); lv_obj_clean(lv_scr_act()); From 59ab72c11b8c793163e1a9949f00604bbae2ed46 Mon Sep 17 00:00:00 2001 From: Alexander Entinger Date: Thu, 13 Jan 2022 07:10:28 +0100 Subject: [PATCH 15/17] Check for power while the splash screen is shown/only show empty battery symbol when power is not ready. --- src/Braccio++.h | 1 + src/Braccio.cpp | 37 +++++++++++++++++++++++++++---------- 2 files changed, 28 insertions(+), 10 deletions(-) diff --git a/src/Braccio++.h b/src/Braccio++.h index ac2f904..e65a86c 100644 --- a/src/Braccio++.h +++ b/src/Braccio++.h @@ -161,6 +161,7 @@ class BraccioClass // default display APIs void lvgl_splashScreen(unsigned long const duration_ms); + void lvgl_emptyBatterySymbol(); void defaultMenu(); void setID(int id) { diff --git a/src/Braccio.cpp b/src/Braccio.cpp index a8fbe85..dabf912 100644 --- a/src/Braccio.cpp +++ b/src/Braccio.cpp @@ -127,14 +127,8 @@ bool BraccioClass::begin(voidFuncPtr customMenu) { lvgl_splashScreen(2000); - { - lv_style_set_text_font(&_lv_style, &lv_font_montserrat_48); - lv_obj_t * label1 = lv_label_create(lv_scr_act()); - lv_obj_add_style(label1, &_lv_style, 0); - lv_label_set_text(label1, LV_SYMBOL_BATTERY_EMPTY); - lv_obj_set_align(label1, LV_ALIGN_CENTER); - lv_obj_set_pos(label1, 0, 0); - } + if (!PD_UFP.is_PPS_ready()) + lvgl_emptyBatterySymbol(); for(auto const now = millis(); ((millis() - now) < 5000) && !PD_UFP.is_PPS_ready();) @@ -226,13 +220,36 @@ void BraccioClass::lvgl_splashScreen(unsigned long const duration_ms) lv_gif_set_src(img, &img_bulb_gif); lv_obj_align(img, LV_ALIGN_CENTER, 0, 0); - /* Wait until the splash screen duration is over. */ - for (unsigned long const start = millis(); millis() - start < duration_ms; delay(10)) { } + /* Wait until the splash screen duration is over. + * Meanwhile use the wait time for checking the + * power. + */ + for (unsigned long const start = millis(); millis() - start < duration_ms;) + { + if (!PD_UFP.is_PPS_ready()) + { + i2c_mutex.lock(); + PD_UFP.print_status(Serial); + PD_UFP.set_PPS(PPS_V(7.2), PPS_A(2.0)); + delay(10); + i2c_mutex.unlock(); + } + } lv_obj_del(img); lv_obj_clean(lv_scr_act()); } +void BraccioClass::lvgl_emptyBatterySymbol() +{ + lv_style_set_text_font(&_lv_style, &lv_font_montserrat_48); + lv_obj_t * label1 = lv_label_create(lv_scr_act()); + lv_obj_add_style(label1, &_lv_style, 0); + lv_label_set_text(label1, LV_SYMBOL_BATTERY_EMPTY); + lv_obj_set_align(label1, LV_ALIGN_CENTER); + lv_obj_set_pos(label1, 0, 0); +} + void BraccioClass::defaultMenu() { // TODO: create a meaningful default menu From 1daccfdd94a0b05b01f0dae192a20b816db714e1 Mon Sep 17 00:00:00 2001 From: Alexander Entinger Date: Thu, 13 Jan 2022 07:24:04 +0100 Subject: [PATCH 16/17] Rewriting flow to entice user to attach power - Directly show 'Please connect power' message. - Verify power while running splash screen. --- src/Braccio++.h | 2 +- src/Braccio.cpp | 40 ++++++++++++++++++---------------------- src/lv_conf.h | 2 +- 3 files changed, 20 insertions(+), 24 deletions(-) diff --git a/src/Braccio++.h b/src/Braccio++.h index e65a86c..b534646 100644 --- a/src/Braccio++.h +++ b/src/Braccio++.h @@ -161,7 +161,7 @@ class BraccioClass // default display APIs void lvgl_splashScreen(unsigned long const duration_ms); - void lvgl_emptyBatterySymbol(); + void lvgl_pleaseConnectPower(); void defaultMenu(); void setID(int id) { diff --git a/src/Braccio.cpp b/src/Braccio.cpp index dabf912..b934cca 100644 --- a/src/Braccio.cpp +++ b/src/Braccio.cpp @@ -126,33 +126,23 @@ bool BraccioClass::begin(voidFuncPtr customMenu) { _display_thread.start(mbed::callback(this, &BraccioClass::display_thread)); lvgl_splashScreen(2000); + lv_obj_clean(lv_scr_act()); if (!PD_UFP.is_PPS_ready()) - lvgl_emptyBatterySymbol(); + lvgl_pleaseConnectPower(); - for(auto const now = millis(); - ((millis() - now) < 5000) && !PD_UFP.is_PPS_ready();) + /* Loop forever, if no power is attached. */ + while(!PD_UFP.is_PPS_ready()) { i2c_mutex.lock(); PD_UFP.print_status(Serial); PD_UFP.set_PPS(PPS_V(7.2), PPS_A(2.0)); delay(10); i2c_mutex.unlock(); + Serial.println(millis()); } - lv_obj_clean(lv_scr_act()); - if (!PD_UFP.is_PPS_ready()) - { - lv_style_set_text_font(&_lv_style, &lv_font_montserrat_32); - lv_obj_t * label1 = lv_label_create(lv_scr_act()); - lv_obj_add_style(label1, &_lv_style, 0); - lv_label_set_text(label1, "Please\nconnect\npower."); - lv_label_set_long_mode(label1, LV_LABEL_LONG_SCROLL); - lv_obj_set_align(label1, LV_ALIGN_CENTER); - lv_obj_set_pos(label1, 0, 0); - } - if (customMenu) { customMenu(); } else { @@ -237,23 +227,29 @@ void BraccioClass::lvgl_splashScreen(unsigned long const duration_ms) } lv_obj_del(img); - lv_obj_clean(lv_scr_act()); } -void BraccioClass::lvgl_emptyBatterySymbol() +void BraccioClass::lvgl_pleaseConnectPower() { - lv_style_set_text_font(&_lv_style, &lv_font_montserrat_48); + lv_style_set_text_font(&_lv_style, &lv_font_montserrat_32); lv_obj_t * label1 = lv_label_create(lv_scr_act()); lv_obj_add_style(label1, &_lv_style, 0); - lv_label_set_text(label1, LV_SYMBOL_BATTERY_EMPTY); + lv_label_set_text(label1, "Please\nconnect\npower."); + lv_label_set_long_mode(label1, LV_LABEL_LONG_SCROLL); lv_obj_set_align(label1, LV_ALIGN_CENTER); lv_obj_set_pos(label1, 0, 0); } -void BraccioClass::defaultMenu() { - +void BraccioClass::defaultMenu() +{ // TODO: create a meaningful default menu - + lv_style_set_text_font(&_lv_style, &lv_font_montserrat_32); + lv_obj_t * label1 = lv_label_create(lv_scr_act()); + lv_obj_add_style(label1, &_lv_style, 0); + lv_label_set_text(label1, "Braccio++"); + lv_label_set_long_mode(label1, LV_LABEL_LONG_SCROLL); + lv_obj_set_align(label1, LV_ALIGN_CENTER); + lv_obj_set_pos(label1, 0, 0); } void BraccioClass::motors_connected_thread() { diff --git a/src/lv_conf.h b/src/lv_conf.h index 88c0921..0e64765 100644 --- a/src/lv_conf.h +++ b/src/lv_conf.h @@ -282,7 +282,7 @@ e.g. "stm32f769xx.h" or "stm32f429xx.h"*/ #define LV_FONT_MONTSERRAT_42 0 #define LV_FONT_MONTSERRAT_44 0 #define LV_FONT_MONTSERRAT_46 0 -#define LV_FONT_MONTSERRAT_48 1 +#define LV_FONT_MONTSERRAT_48 0 /*Demonstrate special features*/ #define LV_FONT_MONTSERRAT_12_SUBPX 0 From 90d6a15a07895a84e4fc655383cb398a1aef88e3 Mon Sep 17 00:00:00 2001 From: Alexander Entinger Date: Thu, 13 Jan 2022 09:00:21 +0100 Subject: [PATCH 17/17] Pack code for checking power into lambda in order to avoid code duplication. --- src/Braccio++.h | 2 +- src/Braccio.cpp | 34 ++++++++++++++++------------------ 2 files changed, 17 insertions(+), 19 deletions(-) diff --git a/src/Braccio++.h b/src/Braccio++.h index b534646..2cc01a8 100644 --- a/src/Braccio++.h +++ b/src/Braccio++.h @@ -160,7 +160,7 @@ class BraccioClass void digitalWrite(int pin, uint8_t value); // default display APIs - void lvgl_splashScreen(unsigned long const duration_ms); + void lvgl_splashScreen(unsigned long const duration_ms, std::function check_power_func); void lvgl_pleaseConnectPower(); void defaultMenu(); diff --git a/src/Braccio.cpp b/src/Braccio.cpp index b934cca..0a41453 100644 --- a/src/Braccio.cpp +++ b/src/Braccio.cpp @@ -125,7 +125,19 @@ bool BraccioClass::begin(voidFuncPtr customMenu) { _display_thread.start(mbed::callback(this, &BraccioClass::display_thread)); - lvgl_splashScreen(2000); + auto check_power_func = [this]() + { + if (!PD_UFP.is_PPS_ready()) + { + i2c_mutex.lock(); + PD_UFP.print_status(Serial); + PD_UFP.set_PPS(PPS_V(7.2), PPS_A(2.0)); + delay(10); + i2c_mutex.unlock(); + } + }; + + lvgl_splashScreen(2000, check_power_func); lv_obj_clean(lv_scr_act()); if (!PD_UFP.is_PPS_ready()) @@ -133,14 +145,7 @@ bool BraccioClass::begin(voidFuncPtr customMenu) { /* Loop forever, if no power is attached. */ while(!PD_UFP.is_PPS_ready()) - { - i2c_mutex.lock(); - PD_UFP.print_status(Serial); - PD_UFP.set_PPS(PPS_V(7.2), PPS_A(2.0)); - delay(10); - i2c_mutex.unlock(); - Serial.println(millis()); - } + check_power_func(); lv_obj_clean(lv_scr_act()); if (customMenu) { @@ -203,7 +208,7 @@ void BraccioClass::display_thread() #include -void BraccioClass::lvgl_splashScreen(unsigned long const duration_ms) +void BraccioClass::lvgl_splashScreen(unsigned long const duration_ms, std::function check_power_func) { LV_IMG_DECLARE(img_bulb_gif); lv_obj_t* img = lv_gif_create(lv_scr_act()); @@ -216,14 +221,7 @@ void BraccioClass::lvgl_splashScreen(unsigned long const duration_ms) */ for (unsigned long const start = millis(); millis() - start < duration_ms;) { - if (!PD_UFP.is_PPS_ready()) - { - i2c_mutex.lock(); - PD_UFP.print_status(Serial); - PD_UFP.set_PPS(PPS_V(7.2), PPS_A(2.0)); - delay(10); - i2c_mutex.unlock(); - } + check_power_func(); } lv_obj_del(img);