From 6ad33b9d7227f1a88942b3809af61a030419e97b Mon Sep 17 00:00:00 2001 From: Rene Date: Sat, 20 Jan 2024 23:32:38 +0100 Subject: [PATCH 01/49] Updated boards --- boards | 2 +- platformio.ini | 20 ++++++++++++++------ 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/boards b/boards index d89176a..3612d15 160000 --- a/boards +++ b/boards @@ -1 +1 @@ -Subproject commit d89176aa3c1173918844253f53dc17d813a72d94 +Subproject commit 3612d153c42fb074d6df0542f4e9b31403c4d570 diff --git a/platformio.ini b/platformio.ini index 7756379..93a7e7f 100644 --- a/platformio.ini +++ b/platformio.ini @@ -34,8 +34,10 @@ #default_envs = esp32-8048S050C #default_envs = esp32-8048S050N #default_envs = esp32-8048S050R -#default_envs = esp32-8048S070C -#default_envs = esp32-8048S070N +#default_envs = esp32-8048S070Cv11 +#default_envs = esp32-8048S070Cv13 +#default_envs = esp32-8048S070Nv11 +#default_envs = esp32-8048S070Nv13 [env] platform = espressif32 @@ -134,8 +136,14 @@ board = esp32-8048S050N [env:esp32-8048S050R] board = esp32-8048S050R -[env:esp32-8048S070C] -board = esp32-8048S070C +[env:esp32-8048S070Cv11] +board = esp32-8048S070Cv11 -[env:esp32-8048S070N] -board = esp32-8048S070N \ No newline at end of file +[env:esp32-8048S070Cv13] +board = esp32-8048S070Cv13 + +[env:esp32-8048S070Nv11] +board = esp32-8048S070Nv11 + +[env:esp32-8048S070Nv13] +board = esp32-8048S070Nv13 \ No newline at end of file From bc12690ccacaa94fd8ad9a56df65147bea8e8a02 Mon Sep 17 00:00:00 2001 From: Rene Date: Wed, 24 Jan 2024 01:18:44 +0100 Subject: [PATCH 02/49] Updated boards --- boards | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/boards b/boards index 3612d15..8f3212a 160000 --- a/boards +++ b/boards @@ -1 +1 @@ -Subproject commit 3612d153c42fb074d6df0542f4e9b31403c4d570 +Subproject commit 8f3212a8cab7bb2f8cb7c709b2bc8d930cbf4ee9 From 8964084aca71e3d675be52eb4455e0a48ce597b7 Mon Sep 17 00:00:00 2001 From: Rene Date: Wed, 24 Jan 2024 08:21:28 +0100 Subject: [PATCH 03/49] Updated boards --- boards | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/boards b/boards index 8f3212a..9f907f3 160000 --- a/boards +++ b/boards @@ -1 +1 @@ -Subproject commit 8f3212a8cab7bb2f8cb7c709b2bc8d930cbf4ee9 +Subproject commit 9f907f3a7c42bb8bb4b33cbe242d617a1930a32d From cd6609aef63af248d55aabd894cbcd8229ab3361 Mon Sep 17 00:00:00 2001 From: Rene Date: Wed, 24 Jan 2024 16:40:54 +0100 Subject: [PATCH 04/49] Updated boards --- boards | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/boards b/boards index 9f907f3..5635ffa 160000 --- a/boards +++ b/boards @@ -1 +1 @@ -Subproject commit 9f907f3a7c42bb8bb4b33cbe242d617a1930a32d +Subproject commit 5635ffa9ebbfd3e61c4f9299e54aacab5e5b6256 From 8594f92f4ca4db1feaa2ac3bcd5951ca51a383b7 Mon Sep 17 00:00:00 2001 From: Rene Date: Wed, 24 Jan 2024 16:54:23 +0100 Subject: [PATCH 05/49] Updated board --- boards | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/boards b/boards index 5635ffa..5eac29b 160000 --- a/boards +++ b/boards @@ -1 +1 @@ -Subproject commit 5635ffa9ebbfd3e61c4f9299e54aacab5e5b6256 +Subproject commit 5eac29bb5c095d45fa3fbb3e107a408f234112c0 From 1e94c700a772aba19c249fb9f44ea8264a6f334c Mon Sep 17 00:00:00 2001 From: Rene Date: Wed, 24 Jan 2024 22:19:13 +0100 Subject: [PATCH 06/49] Added 2432S022N --- boards | 2 +- platformio.ini | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/boards b/boards index 5eac29b..2bcb055 160000 --- a/boards +++ b/boards @@ -1 +1 @@ -Subproject commit 5eac29bb5c095d45fa3fbb3e107a408f234112c0 +Subproject commit 2bcb055674e53581aa5e260f71ce45bc4b649e7a diff --git a/platformio.ini b/platformio.ini index 93a7e7f..f60c3f1 100644 --- a/platformio.ini +++ b/platformio.ini @@ -13,6 +13,8 @@ #default_envs = esp32-1732S019N #default_envs = esp32-2424S012C #default_envs = esp32-2424S012N +#default_envs = esp32-2432S022N +#default_envs = esp32-2432S022C #default_envs = esp32-2432S024C #default_envs = esp32-2432S024N #default_envs = esp32-2432S024R @@ -73,6 +75,12 @@ board = esp32-2424S012C [env:esp32-2424S012N] board = esp32-2424S012N +[env:esp32-2432S022N] +board = esp32-2432S022N + +[env:esp32-2432S022C] +board = esp32-2432S022C + [env:esp32-2432S024C] board = esp32-2432S024C From c57b888c516be62385254c389248b4298c7c6ea4 Mon Sep 17 00:00:00 2001 From: Rene Date: Thu, 25 Jan 2024 19:29:07 +0100 Subject: [PATCH 07/49] Updated boards --- boards | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/boards b/boards index 2bcb055..524d251 160000 --- a/boards +++ b/boards @@ -1 +1 @@ -Subproject commit 2bcb055674e53581aa5e260f71ce45bc4b649e7a +Subproject commit 524d25117aea13082b71e1c38b4c5ba656118b84 From c221388c591e67ae76d7df0c254d98940692c6d8 Mon Sep 17 00:00:00 2001 From: Rene Date: Thu, 25 Jan 2024 19:56:44 +0100 Subject: [PATCH 08/49] Added 8048S070R --- boards | 2 +- platformio.ini | 10 +++++++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/boards b/boards index 524d251..f178a45 160000 --- a/boards +++ b/boards @@ -1 +1 @@ -Subproject commit 524d25117aea13082b71e1c38b4c5ba656118b84 +Subproject commit f178a45d5fe3b4ce52904524d8e196bcfce9d101 diff --git a/platformio.ini b/platformio.ini index f60c3f1..5b9d903 100644 --- a/platformio.ini +++ b/platformio.ini @@ -40,6 +40,8 @@ #default_envs = esp32-8048S070Cv13 #default_envs = esp32-8048S070Nv11 #default_envs = esp32-8048S070Nv13 +#default_envs = esp32-8048S070Rv11 +#default_envs = esp32-8048S070Rv13 [env] platform = espressif32 @@ -154,4 +156,10 @@ board = esp32-8048S070Cv13 board = esp32-8048S070Nv11 [env:esp32-8048S070Nv13] -board = esp32-8048S070Nv13 \ No newline at end of file +board = esp32-8048S070Nv13 + +[env:esp32-8048S070Rv11] +board = esp32-8048S070Rv11 + +[env:esp32-8048S070Rv13] +board = esp32-8048S070Rv13 \ No newline at end of file From cde0aa832ef960f51add49ff90c49f3ef5bfce10 Mon Sep 17 00:00:00 2001 From: Rene Date: Thu, 25 Jan 2024 20:18:45 +0100 Subject: [PATCH 09/49] Updated boards --- boards | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/boards b/boards index f178a45..375cd99 160000 --- a/boards +++ b/boards @@ -1 +1 @@ -Subproject commit f178a45d5fe3b4ce52904524d8e196bcfce9d101 +Subproject commit 375cd998bc8b67e7a30f92b494f1b03623344f6c From 67777d7c97ee648158e833c47fc4ba9cf92c18cb Mon Sep 17 00:00:00 2001 From: Rene Date: Fri, 26 Jan 2024 20:57:49 +0100 Subject: [PATCH 10/49] Smaller Lena 80x80 --- SquareLine_Project.sll | 2 +- SquareLine_Project.spj | 10 +- assets/Lena80x80.png | Bin 0 -> 13397 bytes assets/Lenna_165.png | Bin 63554 -> 0 bytes src/ui/CMakeLists.txt | 3 +- src/ui/filelist.txt | 3 +- src/ui/images/ui_img_lena80x80_png.c | 124 ++++++++ src/ui/images/ui_img_lenna_165_png.c | 447 --------------------------- src/ui/screens/ui_scrMain.c | 124 ++++---- src/ui/ui.c | 57 ++-- src/ui/ui.h | 34 +- src/ui/ui_events.h | 2 +- src/ui/ui_helpers.c | 255 ++++++++------- src/ui/ui_helpers.h | 81 ++--- 14 files changed, 410 insertions(+), 732 deletions(-) create mode 100644 assets/Lena80x80.png delete mode 100644 assets/Lenna_165.png create mode 100644 src/ui/images/ui_img_lena80x80_png.c delete mode 100644 src/ui/images/ui_img_lenna_165_png.c diff --git a/SquareLine_Project.sll b/SquareLine_Project.sll index 0a85a97..21d6cbf 100644 --- a/SquareLine_Project.sll +++ b/SquareLine_Project.sll @@ -1 +1 @@ -{"name":"SquareLine_Project.spj","depth":2,"width":320,"height":240,"rotation":0,"offset_x":0,"offset_y":0,"shape":"RECTANGLE","multilang":"DISABLE","description":"","board":"VS Code with SDL for development on PC","board_version":"v1.0.1","editor_version":"1.3.3","image":"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","force_export_images":false,"flat_export":false,"pointfilter":false,"theme_simplified":false,"theme_dark":false,"theme_color1":5,"theme_color2":0,"exportFolderPath":"C:\\Users\\rzeld\\source\\repos\\esp32-smartdisplay-demo\\src\\ui","projectExportFolderPath":"","backup_cnt":67,"autosave_cnt":0,"lvgl_version":"8.3.6","callfuncsexport":"CPP_FILE","lvgl_include_path":"lvgl.h"} \ No newline at end of file +{"name":"SquareLine_Project.spj","depth":2,"width":320,"height":240,"rotation":0,"offset_x":0,"offset_y":0,"shape":"RECTANGLE","multilang":"DISABLE","description":"","board":"VS Code with SDL for development on PC","board_version":"v1.0.1","editor_version":"1.3.4","image":"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","force_export_images":false,"flat_export":false,"pointfilter":false,"theme_simplified":false,"theme_dark":false,"theme_color1":5,"theme_color2":0,"uiExportFolderPath":"C:\\Users\\rzeld\\source\\repos\\esp32-smartdisplay-demo\\src\\ui","projectExportFolderPath":"","backup_cnt":70,"autosave_cnt":0,"lvgl_version":"8.3.6","callfuncsexport":"CPP_FILE","lvgl_include_path":"lvgl.h"} \ No newline at end of file diff --git a/SquareLine_Project.spj b/SquareLine_Project.spj index 236ed2e..c739b89 100644 --- a/SquareLine_Project.spj +++ b/SquareLine_Project.spj @@ -2387,7 +2387,7 @@ "strtype": "OBJECT/Position", "intarray": [ 0, - 12 + 0 ], "InheritedType": 7 }, @@ -2607,7 +2607,7 @@ { "nid": 1573988665, "strtype": "IMAGE/Asset", - "strval": "assets\\Lenna_165.png", + "strval": "assets\\Lena80x80.png", "InheritedType": 5 }, { @@ -3148,7 +3148,7 @@ "description": "", "board": "VS Code with SDL for development on PC", "board_version": "v1.0.1", - "editor_version": "1.3.3", + "editor_version": "1.3.4", "image": "", "force_export_images": false, "flat_export": false, @@ -3157,9 +3157,9 @@ "theme_dark": false, "theme_color1": 5, "theme_color2": 0, - "exportFolderPath": "C:\\Users\\rzeld\\source\\repos\\esp32-smartdisplay-demo\\src\\ui", + "uiExportFolderPath": "C:\\Users\\rzeld\\source\\repos\\esp32-smartdisplay-demo\\src\\ui", "projectExportFolderPath": "", - "backup_cnt": 66, + "backup_cnt": 69, "autosave_cnt": 0, "lvgl_version": "8.3.6", "callfuncsexport": "CPP_FILE", diff --git a/assets/Lena80x80.png b/assets/Lena80x80.png new file mode 100644 index 0000000000000000000000000000000000000000..622423c24cab4ea2938598649012bd1212d1cd3e GIT binary patch literal 13397 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%0D`G-H=dvvl~=%5sL6-LfB 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 literal 0 HcmV?d00001 diff --git a/assets/Lenna_165.png b/assets/Lenna_165.png deleted file mode 100644 index f8304f3457242cedbe13b6059b5e587e1c754a20..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 63554 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

c?%i4 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 - a->user_data=NULL; + lv_mem_free(a->user_data); + a->user_data = NULL; } -void _ui_anim_callback_set_x(lv_anim_t* a, int32_t v) +void _ui_anim_callback_set_x(lv_anim_t * a, int32_t v) { - ui_anim_user_data_t *usr = (ui_anim_user_data_t *)a->user_data; - lv_obj_set_x(usr->target, v); + ui_anim_user_data_t * usr = (ui_anim_user_data_t *)a->user_data; + lv_obj_set_x(usr->target, v); } -void _ui_anim_callback_set_y(lv_anim_t* a, int32_t v) +void _ui_anim_callback_set_y(lv_anim_t * a, int32_t v) { - ui_anim_user_data_t *usr = (ui_anim_user_data_t *)a->user_data; - lv_obj_set_y(usr->target, v); + ui_anim_user_data_t * usr = (ui_anim_user_data_t *)a->user_data; + lv_obj_set_y(usr->target, v); } -void _ui_anim_callback_set_width(lv_anim_t* a, int32_t v) +void _ui_anim_callback_set_width(lv_anim_t * a, int32_t v) { - ui_anim_user_data_t *usr = (ui_anim_user_data_t *)a->user_data; - lv_obj_set_width(usr->target, v); + ui_anim_user_data_t * usr = (ui_anim_user_data_t *)a->user_data; + lv_obj_set_width(usr->target, v); } -void _ui_anim_callback_set_height(lv_anim_t* a, int32_t v) +void _ui_anim_callback_set_height(lv_anim_t * a, int32_t v) { - ui_anim_user_data_t *usr = (ui_anim_user_data_t *)a->user_data; - lv_obj_set_height(usr->target, v); + ui_anim_user_data_t * usr = (ui_anim_user_data_t *)a->user_data; + lv_obj_set_height(usr->target, v); } -void _ui_anim_callback_set_opacity(lv_anim_t* a, int32_t v) +void _ui_anim_callback_set_opacity(lv_anim_t * a, int32_t v) { - ui_anim_user_data_t *usr = (ui_anim_user_data_t *)a->user_data; - lv_obj_set_style_opa(usr->target, v, 0); + ui_anim_user_data_t * usr = (ui_anim_user_data_t *)a->user_data; + lv_obj_set_style_opa(usr->target, v, 0); } -void _ui_anim_callback_set_image_zoom(lv_anim_t* a, int32_t v) +void _ui_anim_callback_set_image_zoom(lv_anim_t * a, int32_t v) { - ui_anim_user_data_t *usr = (ui_anim_user_data_t *)a->user_data; - lv_img_set_zoom(usr->target, v); + ui_anim_user_data_t * usr = (ui_anim_user_data_t *)a->user_data; + lv_img_set_zoom(usr->target, v); } -void _ui_anim_callback_set_image_angle(lv_anim_t* a, int32_t v) +void _ui_anim_callback_set_image_angle(lv_anim_t * a, int32_t v) { - ui_anim_user_data_t *usr = (ui_anim_user_data_t *)a->user_data; - lv_img_set_angle(usr->target, v); + ui_anim_user_data_t * usr = (ui_anim_user_data_t *)a->user_data; + lv_img_set_angle(usr->target, v); } -void _ui_anim_callback_set_image_frame(lv_anim_t* a, int32_t v) +void _ui_anim_callback_set_image_frame(lv_anim_t * a, int32_t v) { - ui_anim_user_data_t *usr = (ui_anim_user_data_t *)a->user_data; + ui_anim_user_data_t * usr = (ui_anim_user_data_t *)a->user_data; usr->val = v; - if ( v<0 ) v=0; - if ( v>=usr->imgset_size ) v=usr->imgset_size-1; + if(v < 0) v = 0; + if(v >= usr->imgset_size) v = usr->imgset_size - 1; lv_img_set_src(usr->target, usr->imgset[v]); } -int32_t _ui_anim_callback_get_x(lv_anim_t* a) +int32_t _ui_anim_callback_get_x(lv_anim_t * a) { - ui_anim_user_data_t *usr = (ui_anim_user_data_t *)a->user_data; - return lv_obj_get_x_aligned(usr->target); + ui_anim_user_data_t * usr = (ui_anim_user_data_t *)a->user_data; + return lv_obj_get_x_aligned(usr->target); } -int32_t _ui_anim_callback_get_y(lv_anim_t* a) +int32_t _ui_anim_callback_get_y(lv_anim_t * a) { - ui_anim_user_data_t *usr = (ui_anim_user_data_t *)a->user_data; - return lv_obj_get_y_aligned(usr->target); + ui_anim_user_data_t * usr = (ui_anim_user_data_t *)a->user_data; + return lv_obj_get_y_aligned(usr->target); } -int32_t _ui_anim_callback_get_width(lv_anim_t* a) +int32_t _ui_anim_callback_get_width(lv_anim_t * a) { - ui_anim_user_data_t *usr = (ui_anim_user_data_t *)a->user_data; - return lv_obj_get_width(usr->target); + ui_anim_user_data_t * usr = (ui_anim_user_data_t *)a->user_data; + return lv_obj_get_width(usr->target); } -int32_t _ui_anim_callback_get_height(lv_anim_t* a) +int32_t _ui_anim_callback_get_height(lv_anim_t * a) { - ui_anim_user_data_t *usr = (ui_anim_user_data_t *)a->user_data; - return lv_obj_get_height(usr->target); + ui_anim_user_data_t * usr = (ui_anim_user_data_t *)a->user_data; + return lv_obj_get_height(usr->target); } -int32_t _ui_anim_callback_get_opacity(lv_anim_t* a) +int32_t _ui_anim_callback_get_opacity(lv_anim_t * a) { - ui_anim_user_data_t *usr = (ui_anim_user_data_t *)a->user_data; - return lv_obj_get_style_opa(usr->target, 0); + ui_anim_user_data_t * usr = (ui_anim_user_data_t *)a->user_data; + return lv_obj_get_style_opa(usr->target, 0); } -int32_t _ui_anim_callback_get_image_zoom(lv_anim_t* a) +int32_t _ui_anim_callback_get_image_zoom(lv_anim_t * a) { - ui_anim_user_data_t *usr = (ui_anim_user_data_t *)a->user_data; - return lv_img_get_zoom(usr->target); + ui_anim_user_data_t * usr = (ui_anim_user_data_t *)a->user_data; + return lv_img_get_zoom(usr->target); } -int32_t _ui_anim_callback_get_image_angle(lv_anim_t* a) +int32_t _ui_anim_callback_get_image_angle(lv_anim_t * a) { - ui_anim_user_data_t *usr = (ui_anim_user_data_t *)a->user_data; - return lv_img_get_angle(usr->target); + ui_anim_user_data_t * usr = (ui_anim_user_data_t *)a->user_data; + return lv_img_get_angle(usr->target); } -int32_t _ui_anim_callback_get_image_frame(lv_anim_t* a) +int32_t _ui_anim_callback_get_image_frame(lv_anim_t * a) { - ui_anim_user_data_t *usr = (ui_anim_user_data_t *)a->user_data; - return usr->val; + ui_anim_user_data_t * usr = (ui_anim_user_data_t *)a->user_data; + return usr->val; } -void _ui_arc_set_text_value( lv_obj_t *trg, lv_obj_t *src, const char *prefix, const char *postfix) +void _ui_arc_set_text_value(lv_obj_t * trg, lv_obj_t * src, const char * prefix, const char * postfix) { - char buf[_UI_TEMPORARY_STRING_BUFFER_SIZE]; - lv_snprintf(buf, sizeof(buf), "%s%d%s", prefix, (int)lv_arc_get_value(src), postfix); - lv_label_set_text(trg, buf); + char buf[_UI_TEMPORARY_STRING_BUFFER_SIZE]; + lv_snprintf(buf, sizeof(buf), "%s%d%s", prefix, (int)lv_arc_get_value(src), postfix); + lv_label_set_text(trg, buf); } -void _ui_slider_set_text_value( lv_obj_t *trg, lv_obj_t *src, const char *prefix, const char *postfix) +void _ui_slider_set_text_value(lv_obj_t * trg, lv_obj_t * src, const char * prefix, const char * postfix) { - char buf[_UI_TEMPORARY_STRING_BUFFER_SIZE]; - lv_snprintf(buf, sizeof(buf), "%s%d%s", prefix, (int)lv_slider_get_value(src), postfix); - lv_label_set_text(trg, buf); + char buf[_UI_TEMPORARY_STRING_BUFFER_SIZE]; + lv_snprintf(buf, sizeof(buf), "%s%d%s", prefix, (int)lv_slider_get_value(src), postfix); + lv_label_set_text(trg, buf); } -void _ui_checked_set_text_value( lv_obj_t *trg, lv_obj_t *src, const char *txt_on, const char *txt_off) +void _ui_checked_set_text_value(lv_obj_t * trg, lv_obj_t * src, const char * txt_on, const char * txt_off) { - if (lv_obj_has_state(src,LV_STATE_CHECKED)) lv_label_set_text(trg,txt_on); - else lv_label_set_text(trg,txt_off); + if(lv_obj_has_state(src, LV_STATE_CHECKED)) lv_label_set_text(trg, txt_on); + else lv_label_set_text(trg, txt_off); } void _ui_spinbox_step(lv_obj_t * target, int val) { - if(val > 0) lv_spinbox_increment(target); - else lv_spinbox_decrement(target); + if(val > 0) lv_spinbox_increment(target); + else lv_spinbox_decrement(target); - lv_event_send(target,LV_EVENT_VALUE_CHANGED, 0); + lv_event_send(target, LV_EVENT_VALUE_CHANGED, 0); } diff --git a/src/ui/ui_helpers.h b/src/ui/ui_helpers.h index 6d5e07e..7e6e7e1 100644 --- a/src/ui/ui_helpers.h +++ b/src/ui/ui_helpers.h @@ -1,5 +1,5 @@ // This file was generated by SquareLine Studio -// SquareLine Studio version: SquareLine Studio 1.3.3 +// SquareLine Studio version: SquareLine Studio 1.3.4 // LVGL version: 8.3.6 // Project name: SquareLine_Project @@ -15,105 +15,106 @@ extern "C" { #define _UI_TEMPORARY_STRING_BUFFER_SIZE 32 #define _UI_BAR_PROPERTY_VALUE 0 #define _UI_BAR_PROPERTY_VALUE_WITH_ANIM 1 -void _ui_bar_set_property( lv_obj_t *target, int id, int val); +void _ui_bar_set_property(lv_obj_t * target, int id, int val); #define _UI_BASIC_PROPERTY_POSITION_X 0 #define _UI_BASIC_PROPERTY_POSITION_Y 1 #define _UI_BASIC_PROPERTY_WIDTH 2 #define _UI_BASIC_PROPERTY_HEIGHT 3 -void _ui_basic_set_property( lv_obj_t *target, int id, int val); +void _ui_basic_set_property(lv_obj_t * target, int id, int val); #define _UI_DROPDOWN_PROPERTY_SELECTED 0 -void _ui_dropdown_set_property( lv_obj_t *target, int id, int val); +void _ui_dropdown_set_property(lv_obj_t * target, int id, int val); #define _UI_IMAGE_PROPERTY_IMAGE 0 -void _ui_image_set_property( lv_obj_t *target, int id, uint8_t *val); +void _ui_image_set_property(lv_obj_t * target, int id, uint8_t * val); #define _UI_LABEL_PROPERTY_TEXT 0 -void _ui_label_set_property( lv_obj_t *target, int id, const char *val); +void _ui_label_set_property(lv_obj_t * target, int id, const char * val); #define _UI_ROLLER_PROPERTY_SELECTED 0 #define _UI_ROLLER_PROPERTY_SELECTED_WITH_ANIM 1 -void _ui_roller_set_property( lv_obj_t *target, int id, int val); +void _ui_roller_set_property(lv_obj_t * target, int id, int val); #define _UI_SLIDER_PROPERTY_VALUE 0 #define _UI_SLIDER_PROPERTY_VALUE_WITH_ANIM 1 -void _ui_slider_set_property( lv_obj_t *target, int id, int val); +void _ui_slider_set_property(lv_obj_t * target, int id, int val); -void _ui_screen_change( lv_obj_t ** target, lv_scr_load_anim_t fademode, int spd, int delay, void (*target_init)(void)); +void _ui_screen_change(lv_obj_t ** target, lv_scr_load_anim_t fademode, int spd, int delay, void (*target_init)(void)); -void _ui_screen_delete( lv_obj_t ** target ); +void _ui_screen_delete(lv_obj_t ** target); -void _ui_arc_increment( lv_obj_t *target, int val); +void _ui_arc_increment(lv_obj_t * target, int val); -void _ui_bar_increment( lv_obj_t *target, int val, int anm); +void _ui_bar_increment(lv_obj_t * target, int val, int anm); -void _ui_slider_increment( lv_obj_t *target, int val, int anm); +void _ui_slider_increment(lv_obj_t * target, int val, int anm); -void _ui_keyboard_set_target( lv_obj_t *keyboard, lv_obj_t *textarea); +void _ui_keyboard_set_target(lv_obj_t * keyboard, lv_obj_t * textarea); #define _UI_MODIFY_FLAG_ADD 0 #define _UI_MODIFY_FLAG_REMOVE 1 #define _UI_MODIFY_FLAG_TOGGLE 2 -void _ui_flag_modify( lv_obj_t *target, int32_t flag, int value); +void _ui_flag_modify(lv_obj_t * target, int32_t flag, int value); #define _UI_MODIFY_STATE_ADD 0 #define _UI_MODIFY_STATE_REMOVE 1 #define _UI_MODIFY_STATE_TOGGLE 2 -void _ui_state_modify( lv_obj_t *target, int32_t state, int value); +void _ui_state_modify(lv_obj_t * target, int32_t state, int value); void scr_unloaded_delete_cb(lv_event_t * e); -void _ui_opacity_set( lv_obj_t *target, int val); +void _ui_opacity_set(lv_obj_t * target, int val); /** Describes an animation*/ typedef struct _ui_anim_user_data_t { - lv_obj_t *target; - lv_img_dsc_t **imgset; + lv_obj_t * target; + lv_img_dsc_t ** imgset; int32_t imgset_size; int32_t val; } ui_anim_user_data_t; -void _ui_anim_callback_free_user_data(lv_anim_t *a); +void _ui_anim_callback_free_user_data(lv_anim_t * a); -void _ui_anim_callback_set_x(lv_anim_t* a, int32_t v); +void _ui_anim_callback_set_x(lv_anim_t * a, int32_t v); -void _ui_anim_callback_set_y(lv_anim_t* a, int32_t v); +void _ui_anim_callback_set_y(lv_anim_t * a, int32_t v); -void _ui_anim_callback_set_width(lv_anim_t* a, int32_t v); +void _ui_anim_callback_set_width(lv_anim_t * a, int32_t v); -void _ui_anim_callback_set_height(lv_anim_t* a, int32_t v); +void _ui_anim_callback_set_height(lv_anim_t * a, int32_t v); -void _ui_anim_callback_set_opacity(lv_anim_t* a, int32_t v); +void _ui_anim_callback_set_opacity(lv_anim_t * a, int32_t v); -void _ui_anim_callback_set_image_zoom(lv_anim_t* a, int32_t v); +void _ui_anim_callback_set_image_zoom(lv_anim_t * a, int32_t v); -void _ui_anim_callback_set_image_angle(lv_anim_t* a, int32_t v); +void _ui_anim_callback_set_image_angle(lv_anim_t * a, int32_t v); -void _ui_anim_callback_set_image_frame(lv_anim_t* a, int32_t v); +void _ui_anim_callback_set_image_frame(lv_anim_t * a, int32_t v); -int32_t _ui_anim_callback_get_x(lv_anim_t* a); +int32_t _ui_anim_callback_get_x(lv_anim_t * a); -int32_t _ui_anim_callback_get_y(lv_anim_t* a); +int32_t _ui_anim_callback_get_y(lv_anim_t * a); -int32_t _ui_anim_callback_get_width(lv_anim_t* a); +int32_t _ui_anim_callback_get_width(lv_anim_t * a); -int32_t _ui_anim_callback_get_height(lv_anim_t* a); +int32_t _ui_anim_callback_get_height(lv_anim_t * a); -int32_t _ui_anim_callback_get_opacity(lv_anim_t* a); +int32_t _ui_anim_callback_get_opacity(lv_anim_t * a); -int32_t _ui_anim_callback_get_image_zoom(lv_anim_t* a); +int32_t _ui_anim_callback_get_image_zoom(lv_anim_t * a); -int32_t _ui_anim_callback_get_image_angle(lv_anim_t* a); +int32_t _ui_anim_callback_get_image_angle(lv_anim_t * a); -int32_t _ui_anim_callback_get_image_frame(lv_anim_t* a); +int32_t _ui_anim_callback_get_image_frame(lv_anim_t * a); -void _ui_arc_set_text_value( lv_obj_t *trg, lv_obj_t *src, const char *prefix, const char *postfix); +void _ui_arc_set_text_value(lv_obj_t * trg, lv_obj_t * src, const char * prefix, const char * postfix); -void _ui_slider_set_text_value( lv_obj_t *trg, lv_obj_t *src, const char *prefix, const char *postfix); +void _ui_slider_set_text_value(lv_obj_t * trg, lv_obj_t * src, const char * prefix, const char * postfix); -void _ui_checked_set_text_value( lv_obj_t *trg, lv_obj_t *src, const char *txt_on, const char *txt_off); +void _ui_checked_set_text_value(lv_obj_t * trg, lv_obj_t * src, const char * txt_on, const char * txt_off); -void _ui_spinbox_step(lv_obj_t * target, int val) ; +void _ui_spinbox_step(lv_obj_t * target, int val) +; #ifdef __cplusplus } /*extern "C"*/ From 23b9b40f838f4a4c60c95fa0b541f0c91791a50a Mon Sep 17 00:00:00 2001 From: Rene Date: Fri, 26 Jan 2024 20:59:16 +0100 Subject: [PATCH 11/49] Updated boards --- boards | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/boards b/boards index 375cd99..112dc04 160000 --- a/boards +++ b/boards @@ -1 +1 @@ -Subproject commit 375cd998bc8b67e7a30f92b494f1b03623344f6c +Subproject commit 112dc04fa86b7796773955e9b215fd7e881264b4 From a8b0b4e2f1a0aa2ae438c498c641c0162266914a Mon Sep 17 00:00:00 2001 From: Rene Date: Fri, 26 Jan 2024 22:18:49 +0100 Subject: [PATCH 12/49] Rem oved v11 boards --- boards | 2 +- platformio.ini | 26 +++++++------------------- 2 files changed, 8 insertions(+), 20 deletions(-) diff --git a/boards b/boards index 112dc04..f7749bb 160000 --- a/boards +++ b/boards @@ -1 +1 @@ -Subproject commit 112dc04fa86b7796773955e9b215fd7e881264b4 +Subproject commit f7749bb66bb45941b5d238d0329eb1eaec5d6b73 diff --git a/platformio.ini b/platformio.ini index 5b9d903..da966b8 100644 --- a/platformio.ini +++ b/platformio.ini @@ -36,11 +36,8 @@ #default_envs = esp32-8048S050C #default_envs = esp32-8048S050N #default_envs = esp32-8048S050R -#default_envs = esp32-8048S070Cv11 -#default_envs = esp32-8048S070Cv13 -#default_envs = esp32-8048S070Nv11 +default_envs = esp32-8048S070Cv13 #default_envs = esp32-8048S070Nv13 -#default_envs = esp32-8048S070Rv11 #default_envs = esp32-8048S070Rv13 [env] @@ -146,20 +143,11 @@ board = esp32-8048S050N [env:esp32-8048S050R] board = esp32-8048S050R -[env:esp32-8048S070Cv11] -board = esp32-8048S070Cv11 +[env:esp32-8048S070C] +board = esp32-8048S070C -[env:esp32-8048S070Cv13] -board = esp32-8048S070Cv13 +[env:esp32-8048S070N] +board = esp32-8048S070N -[env:esp32-8048S070Nv11] -board = esp32-8048S070Nv11 - -[env:esp32-8048S070Nv13] -board = esp32-8048S070Nv13 - -[env:esp32-8048S070Rv11] -board = esp32-8048S070Rv11 - -[env:esp32-8048S070Rv13] -board = esp32-8048S070Rv13 \ No newline at end of file +[env:esp32-8048S070R] +board = esp32-8048S070R \ No newline at end of file From 1ae552ad41342107338185f95e7841d1ef0db6ce Mon Sep 17 00:00:00 2001 From: Rene Date: Fri, 26 Jan 2024 22:21:54 +0100 Subject: [PATCH 13/49] Removed esp32-8048S070 --- platformio.ini | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/platformio.ini b/platformio.ini index da966b8..ca95c81 100644 --- a/platformio.ini +++ b/platformio.ini @@ -36,9 +36,9 @@ #default_envs = esp32-8048S050C #default_envs = esp32-8048S050N #default_envs = esp32-8048S050R -default_envs = esp32-8048S070Cv13 -#default_envs = esp32-8048S070Nv13 -#default_envs = esp32-8048S070Rv13 +#default_envs = esp32-8048S070C +#default_envs = esp32-8048S070N +#default_envs = esp32-8048S070R [env] platform = espressif32 From 6896e81028294271373022f5e07aab98d5dbfaa6 Mon Sep 17 00:00:00 2001 From: Rene Date: Sat, 27 Jan 2024 13:04:04 +0100 Subject: [PATCH 14/49] Default no rotation --- boards | 2 +- src/main.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/boards b/boards index f7749bb..8918ab4 160000 --- a/boards +++ b/boards @@ -1 +1 @@ -Subproject commit f7749bb66bb45941b5d238d0329eb1eaec5d6b73 +Subproject commit 8918ab4eefe0d78ea890fac27a713f4cc5c993e5 diff --git a/src/main.cpp b/src/main.cpp index d01772b..3a48751 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -45,7 +45,7 @@ void setup() smartdisplay_init(); auto disp = lv_disp_get_default(); - lv_disp_set_rotation(disp, LV_DISP_ROT_90); + // lv_disp_set_rotation(disp, LV_DISP_ROT_90); // lv_disp_set_rotation(disp, LV_DISP_ROT_180); // lv_disp_set_rotation(disp, LV_DISP_ROT_270); From 7550916451c09ede38c570f51407bd28c64c1ceb Mon Sep 17 00:00:00 2001 From: Rene Date: Sun, 28 Jan 2024 02:15:01 +0100 Subject: [PATCH 15/49] Updated boards --- boards | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/boards b/boards index 8918ab4..0fb1260 160000 --- a/boards +++ b/boards @@ -1 +1 @@ -Subproject commit 8918ab4eefe0d78ea890fac27a713f4cc5c993e5 +Subproject commit 0fb1260e8d6ee2b5a610a1c34874e5b829577002 From 318ce0703e7cb4f0816d035ddc69254414f902e0 Mon Sep 17 00:00:00 2001 From: Rene Date: Sun, 28 Jan 2024 13:42:04 +0100 Subject: [PATCH 16/49] Updated build for node 20 --- .github/workflows/main.yml | 8 ++++---- platformio.ini | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 262b479..3671733 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -5,17 +5,17 @@ jobs: name: Build runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: submodules: recursive - - uses: actions/cache@v3 + - uses: actions/cache@v4 with: path: | ~/.cache/pip ~/.platformio/.cache key: ${{ runner.os }}-pio - name: Set up python - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: python-version: "3.9" - name: Install PlatformIO @@ -23,7 +23,7 @@ jobs: - name: Build firmware run: pio run - name: Archive firmwares - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: firmwares.zip path: .pio/build/*/*.bin diff --git a/platformio.ini b/platformio.ini index ca95c81..6ec2083 100644 --- a/platformio.ini +++ b/platformio.ini @@ -28,7 +28,7 @@ #default_envs = esp32-4827S043C #default_envs = esp32-4827S043N #default_envs = esp32-4827S043R -#default_envs = esp32-4848S040CIY1 +default_envs = esp32-4848S040CIY1 #default_envs = esp32-4848S040CIY3 #default_envs = esp32-8048S043C #default_envs = esp32-8048S043N From f12b2c343cbcc2b04e41018806b096a39b4c96d3 Mon Sep 17 00:00:00 2001 From: Rene Date: Sun, 28 Jan 2024 18:09:29 +0100 Subject: [PATCH 17/49] No default_env --- platformio.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platformio.ini b/platformio.ini index 6ec2083..ca95c81 100644 --- a/platformio.ini +++ b/platformio.ini @@ -28,7 +28,7 @@ #default_envs = esp32-4827S043C #default_envs = esp32-4827S043N #default_envs = esp32-4827S043R -default_envs = esp32-4848S040CIY1 +#default_envs = esp32-4848S040CIY1 #default_envs = esp32-4848S040CIY3 #default_envs = esp32-8048S043C #default_envs = esp32-8048S043N From 3864a75ce2e6b44cfa104c503142d26db2b54b2e Mon Sep 17 00:00:00 2001 From: Rene Date: Sun, 28 Jan 2024 18:41:36 +0100 Subject: [PATCH 18/49] Updated boards --- boards | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/boards b/boards index 0fb1260..871de32 160000 --- a/boards +++ b/boards @@ -1 +1 @@ -Subproject commit 0fb1260e8d6ee2b5a610a1c34874e5b829577002 +Subproject commit 871de3231565f08f3b70f72774917053f2039421 From 34dda7d583a4f091e4c517144c35b8c8b9120f82 Mon Sep 17 00:00:00 2001 From: Rene Date: Sun, 28 Jan 2024 19:12:29 +0100 Subject: [PATCH 19/49] Corrected platformio.ini --- platformio.ini | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/platformio.ini b/platformio.ini index cf0e733..a9dcea1 100644 --- a/platformio.ini +++ b/platformio.ini @@ -143,14 +143,8 @@ board = esp32-8048S050N [env:esp32-8048S050R] board = esp32-8048S050R -[env:esp32-8048S070Cv11] -board = esp32-8048S070Cv11 - -[env:esp32-8048S070Cv13] -board = esp32-8048S070Cv13 - -[env:esp32-8048S070Nv11] -board = esp32-8048S070Nv11 +[env:esp32-8048S070C] +board = esp32-8048S070C [env:esp32-8048S070N] board = esp32-8048S070N From b7e2bf1be9e00a65a3dc8099ba2dce4d4fc06b42 Mon Sep 17 00:00:00 2001 From: Rene Date: Sun, 28 Jan 2024 19:14:54 +0100 Subject: [PATCH 20/49] Updated boards --- boards | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/boards b/boards index 871de32..69e1f2d 160000 --- a/boards +++ b/boards @@ -1 +1 @@ -Subproject commit 871de3231565f08f3b70f72774917053f2039421 +Subproject commit 69e1f2d5bfe68b9d044f94206ca404389e9a1565 From 72f0cd7ef8ad2e92832f8934f3fc693dc2d27b75 Mon Sep 17 00:00:00 2001 From: "rzeldent@outlook.com" Date: Sun, 28 Jan 2024 21:05:24 +0100 Subject: [PATCH 21/49] Set back to develop --- boards | 2 +- platformio.ini | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/boards b/boards index 69e1f2d..5e2a530 160000 --- a/boards +++ b/boards @@ -1 +1 @@ -Subproject commit 69e1f2d5bfe68b9d044f94206ca404389e9a1565 +Subproject commit 5e2a53009840f704013d4d982f0b7d7b2093f045 diff --git a/platformio.ini b/platformio.ini index a9dcea1..ca95c81 100644 --- a/platformio.ini +++ b/platformio.ini @@ -59,7 +59,7 @@ build_flags = -D'LV_CONF_PATH=${platformio.include_dir}/lv_conf.h' lib_deps = - https://github.com/rzeldent/esp32-smartdisplay + https://github.com/rzeldent/esp32-smartdisplay#develop https://github.com/schreibfaul1/ESP32-audioI2S [env:esp32-1732S019C] From 41040b7e3a1798b28c4fcfd4b93e7cc8a21d5b9d Mon Sep 17 00:00:00 2001 From: "rzeldent@outlook.com" Date: Tue, 30 Jan 2024 19:52:01 +0100 Subject: [PATCH 22/49] Added name of board in define and in loggin --- platformio.ini | 1 + src/main.cpp | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/platformio.ini b/platformio.ini index ca95c81..31b2ff5 100644 --- a/platformio.ini +++ b/platformio.ini @@ -55,6 +55,7 @@ board_build.partitions = min_spiffs.csv build_flags = -Ofast -Wall + -D 'BOARD_NAME="${this.board}"' -DCORE_DEBUG_LEVEL=ARDUHAL_LOG_LEVEL_VERBOSE -D'LV_CONF_PATH=${platformio.include_dir}/lv_conf.h' diff --git a/src/main.cpp b/src/main.cpp index 3a48751..1525ee5 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -22,7 +22,7 @@ void setup() delay(250); Serial.begin(115200); Serial.setDebugOutput(true); - + log_i("Board: %s", BOARD_NAME); log_i("CPU: %s rev%d, CPU Freq: %d Mhz, %d core(s)", ESP.getChipModel(), ESP.getChipRevision(), getCpuFrequencyMhz(), ESP.getChipCores()); log_i("Free heap: %d bytes", ESP.getFreeHeap()); log_i("Free PSRAM: %d bytes", ESP.getPsramSize()); From 932094ba794e85aedf20f4537a8fac6f462f15f7 Mon Sep 17 00:00:00 2001 From: "rzeldent@outlook.com" Date: Fri, 2 Feb 2024 19:57:59 +0100 Subject: [PATCH 23/49] Added esp32-2432S028Rv3 --- boards | 2 +- platformio.ini | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/boards b/boards index 5e2a530..03dc3ba 160000 --- a/boards +++ b/boards @@ -1 +1 @@ -Subproject commit 5e2a53009840f704013d4d982f0b7d7b2093f045 +Subproject commit 03dc3bae0d5554f1e1a696c54dab1db4188b9bda diff --git a/platformio.ini b/platformio.ini index 31b2ff5..cda0ab5 100644 --- a/platformio.ini +++ b/platformio.ini @@ -20,6 +20,7 @@ #default_envs = esp32-2432S024R #default_envs = esp32-2432S028R #default_envs = esp32-2432S028Rv2 +#default_envs = esp32-2432S028Rv3 #default_envs = esp32-2432S032C #default_envs = esp32-2432S032N #default_envs = esp32-2432S032R @@ -96,6 +97,9 @@ board = esp32-2432S028R [env:esp32-2432S028Rv2] board = esp32-2432S028Rv2 +[env:esp32-2432S028Rv3] +board = esp32-2432S028Rv3 + [env:esp32-2432S032C] board = esp32-2432S032C From f0f42daeebf9befbe142e311f9d7de8d5912b3d2 Mon Sep 17 00:00:00 2001 From: "rzeldent@outlook.com" Date: Sat, 3 Feb 2024 11:57:49 +0100 Subject: [PATCH 24/49] Updated boards --- boards | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/boards b/boards index 03dc3ba..7138277 160000 --- a/boards +++ b/boards @@ -1 +1 @@ -Subproject commit 03dc3bae0d5554f1e1a696c54dab1db4188b9bda +Subproject commit 71382774103d706b19f0a9ca753b7aa6ec7ee12d From 2d8850cf9aec6c97c3a0d3d8589083ee017bbf03 Mon Sep 17 00:00:00 2001 From: "rzeldent@outlook.com" Date: Sat, 3 Feb 2024 12:12:51 +0100 Subject: [PATCH 25/49] Updated boards --- boards | 2 +- platformio.ini | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/boards b/boards index 7138277..2e19d35 160000 --- a/boards +++ b/boards @@ -1 +1 @@ -Subproject commit 71382774103d706b19f0a9ca753b7aa6ec7ee12d +Subproject commit 2e19d35b2352cfdd2ce9f446919a3418b2096133 diff --git a/platformio.ini b/platformio.ini index cda0ab5..57495f6 100644 --- a/platformio.ini +++ b/platformio.ini @@ -14,7 +14,7 @@ #default_envs = esp32-2424S012C #default_envs = esp32-2424S012N #default_envs = esp32-2432S022N -#default_envs = esp32-2432S022C +default_envs = esp32-2432S022C #default_envs = esp32-2432S024C #default_envs = esp32-2432S024N #default_envs = esp32-2432S024R From 9ff4626aa68f4ab448eb85905a4851409db028c9 Mon Sep 17 00:00:00 2001 From: "rzeldent@outlook.com" Date: Sat, 3 Feb 2024 17:54:55 +0100 Subject: [PATCH 26/49] updated boards --- boards | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/boards b/boards index 2e19d35..be82147 160000 --- a/boards +++ b/boards @@ -1 +1 @@ -Subproject commit 2e19d35b2352cfdd2ce9f446919a3418b2096133 +Subproject commit be821474e9eee72f92edd6a23f6b9f364db04a3d From 025f4f0d18582551d84399246dad51f296e8b0f3 Mon Sep 17 00:00:00 2001 From: Rene Zeldenthuis Date: Thu, 8 Feb 2024 00:08:56 +0100 Subject: [PATCH 27/49] Updated boards --- boards | 2 +- platformio.ini | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/boards b/boards index be82147..8f753b2 160000 --- a/boards +++ b/boards @@ -1 +1 @@ -Subproject commit be821474e9eee72f92edd6a23f6b9f364db04a3d +Subproject commit 8f753b27e562386e86241dae5e71a25a287592e7 diff --git a/platformio.ini b/platformio.ini index 57495f6..cda0ab5 100644 --- a/platformio.ini +++ b/platformio.ini @@ -14,7 +14,7 @@ #default_envs = esp32-2424S012C #default_envs = esp32-2424S012N #default_envs = esp32-2432S022N -default_envs = esp32-2432S022C +#default_envs = esp32-2432S022C #default_envs = esp32-2432S024C #default_envs = esp32-2432S024N #default_envs = esp32-2432S024R From f533ff5c7272a00e785e7102be05065eca36e600 Mon Sep 17 00:00:00 2001 From: Rene Zeldenthuis Date: Fri, 9 Feb 2024 22:03:36 +0100 Subject: [PATCH 28/49] Updated boards --- boards | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/boards b/boards index 8f753b2..f10c559 160000 --- a/boards +++ b/boards @@ -1 +1 @@ -Subproject commit 8f753b27e562386e86241dae5e71a25a287592e7 +Subproject commit f10c559701433a85fb32944faf05c3bfae5706fe From 4f4fd128fc33253169e9fa12e45a4ae7a8dceefe Mon Sep 17 00:00:00 2001 From: Rene Zeldenthuis Date: Fri, 9 Feb 2024 23:09:06 +0100 Subject: [PATCH 29/49] UPdated boards --- boards | 2 +- platformio.ini | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/boards b/boards index f10c559..420b207 160000 --- a/boards +++ b/boards @@ -1 +1 @@ -Subproject commit f10c559701433a85fb32944faf05c3bfae5706fe +Subproject commit 420b207ba7006b8dce38494bcfc26f8ba4c853de diff --git a/platformio.ini b/platformio.ini index cda0ab5..57495f6 100644 --- a/platformio.ini +++ b/platformio.ini @@ -14,7 +14,7 @@ #default_envs = esp32-2424S012C #default_envs = esp32-2424S012N #default_envs = esp32-2432S022N -#default_envs = esp32-2432S022C +default_envs = esp32-2432S022C #default_envs = esp32-2432S024C #default_envs = esp32-2432S024N #default_envs = esp32-2432S024R From 61d930aa7c9d2757bcf75b72f3e0cde280b0b861 Mon Sep 17 00:00:00 2001 From: Rene Zeldenthuis Date: Fri, 9 Feb 2024 23:33:23 +0100 Subject: [PATCH 30/49] Updated boards --- boards | 2 +- platformio.ini | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/boards b/boards index 420b207..4aa429f 160000 --- a/boards +++ b/boards @@ -1 +1 @@ -Subproject commit 420b207ba7006b8dce38494bcfc26f8ba4c853de +Subproject commit 4aa429fdefeda907a9e3e8d9b0f4a22feda4d152 diff --git a/platformio.ini b/platformio.ini index 57495f6..edcadc5 100644 --- a/platformio.ini +++ b/platformio.ini @@ -14,7 +14,7 @@ #default_envs = esp32-2424S012C #default_envs = esp32-2424S012N #default_envs = esp32-2432S022N -default_envs = esp32-2432S022C +#default_envs = esp32-2432S022C #default_envs = esp32-2432S024C #default_envs = esp32-2432S024N #default_envs = esp32-2432S024R @@ -61,7 +61,7 @@ build_flags = -D'LV_CONF_PATH=${platformio.include_dir}/lv_conf.h' lib_deps = - https://github.com/rzeldent/esp32-smartdisplay#develop + https://github.com/rzeldent/esp32-smartdisplay https://github.com/schreibfaul1/ESP32-audioI2S [env:esp32-1732S019C] From 6e714760642c93252c5dbd906d2a0a9cf8824010 Mon Sep 17 00:00:00 2001 From: Rene Zeldenthuis Date: Fri, 9 Feb 2024 23:35:56 +0100 Subject: [PATCH 31/49] Updated boards --- boards | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/boards b/boards index 4aa429f..420b207 160000 --- a/boards +++ b/boards @@ -1 +1 @@ -Subproject commit 4aa429fdefeda907a9e3e8d9b0f4a22feda4d152 +Subproject commit 420b207ba7006b8dce38494bcfc26f8ba4c853de From 6e7924c0186a68d41b8669a2c95e6bcc6944e381 Mon Sep 17 00:00:00 2001 From: Rene Zeldenthuis Date: Sat, 10 Feb 2024 11:51:42 +0100 Subject: [PATCH 32/49] Updated boards --- boards | 2 +- platformio.ini | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/boards b/boards index 420b207..941af36 160000 --- a/boards +++ b/boards @@ -1 +1 @@ -Subproject commit 420b207ba7006b8dce38494bcfc26f8ba4c853de +Subproject commit 941af369976ccf35cf912f253a657a9760550149 diff --git a/platformio.ini b/platformio.ini index edcadc5..cda0ab5 100644 --- a/platformio.ini +++ b/platformio.ini @@ -61,7 +61,7 @@ build_flags = -D'LV_CONF_PATH=${platformio.include_dir}/lv_conf.h' lib_deps = - https://github.com/rzeldent/esp32-smartdisplay + https://github.com/rzeldent/esp32-smartdisplay#develop https://github.com/schreibfaul1/ESP32-audioI2S [env:esp32-1732S019C] From 266d5ae72b2967f73a35e1e11d0250b7165feb72 Mon Sep 17 00:00:00 2001 From: Rene Zeldenthuis Date: Sat, 10 Feb 2024 14:45:27 +0100 Subject: [PATCH 33/49] Updated boards --- boards | 2 +- platformio.ini | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/boards b/boards index 941af36..3432afd 160000 --- a/boards +++ b/boards @@ -1 +1 @@ -Subproject commit 941af369976ccf35cf912f253a657a9760550149 +Subproject commit 3432afda117f697c2adcc7f01c591129ce5bdeed diff --git a/platformio.ini b/platformio.ini index cda0ab5..57495f6 100644 --- a/platformio.ini +++ b/platformio.ini @@ -14,7 +14,7 @@ #default_envs = esp32-2424S012C #default_envs = esp32-2424S012N #default_envs = esp32-2432S022N -#default_envs = esp32-2432S022C +default_envs = esp32-2432S022C #default_envs = esp32-2432S024C #default_envs = esp32-2432S024N #default_envs = esp32-2432S024R From 9d8b841049c8a54257e026c13f183300bdfc6171 Mon Sep 17 00:00:00 2001 From: Rene Zeldenthuis Date: Sat, 10 Feb 2024 14:47:00 +0100 Subject: [PATCH 34/49] Enable all boards --- platformio.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platformio.ini b/platformio.ini index 57495f6..cda0ab5 100644 --- a/platformio.ini +++ b/platformio.ini @@ -14,7 +14,7 @@ #default_envs = esp32-2424S012C #default_envs = esp32-2424S012N #default_envs = esp32-2432S022N -default_envs = esp32-2432S022C +#default_envs = esp32-2432S022C #default_envs = esp32-2432S024C #default_envs = esp32-2432S024N #default_envs = esp32-2432S024R From 7b8d9dcfba1037ffd251121950eb2cf9753814c6 Mon Sep 17 00:00:00 2001 From: Rene Zeldenthuis Date: Sun, 11 Feb 2024 18:04:05 +0100 Subject: [PATCH 35/49] Delay if ARDUINO_USB_CDC_ON_BOOT --- src/main.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main.cpp b/src/main.cpp index 1525ee5..bd24e37 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -19,7 +19,9 @@ void OnButtonClicked(lv_event_t *e) void setup() { - delay(250); +#ifdef ARDUINO_USB_CDC_ON_BOOT + delay(5000); +#endif Serial.begin(115200); Serial.setDebugOutput(true); log_i("Board: %s", BOARD_NAME); From 67b6c7cfea8a153e3deb1cfe35d30086399c58d7 Mon Sep 17 00:00:00 2001 From: Rene Zeldenthuis Date: Sun, 11 Feb 2024 18:29:13 +0100 Subject: [PATCH 36/49] Updated boards --- boards | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/boards b/boards index 3432afd..172f904 160000 --- a/boards +++ b/boards @@ -1 +1 @@ -Subproject commit 3432afda117f697c2adcc7f01c591129ce5bdeed +Subproject commit 172f904ee1162fd6b7ff909b0a306dfcc129a376 From facbce757f1fcac1e6d907836d1e51384cf192ef Mon Sep 17 00:00:00 2001 From: Rene Zeldenthuis Date: Tue, 20 Feb 2024 00:05:15 +0100 Subject: [PATCH 37/49] Updated boards --- boards | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/boards b/boards index 172f904..eb25cae 160000 --- a/boards +++ b/boards @@ -1 +1 @@ -Subproject commit 172f904ee1162fd6b7ff909b0a306dfcc129a376 +Subproject commit eb25caec8b15f951c2beb743111efa043d2d0285 From c1037a89bda2d2958e15a3a9c4694cb4b11757e6 Mon Sep 17 00:00:00 2001 From: Rene Zeldenthuis Date: Fri, 23 Feb 2024 00:08:03 +0100 Subject: [PATCH 38/49] Updated boards --- boards | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/boards b/boards index eb25cae..3bdae76 160000 --- a/boards +++ b/boards @@ -1 +1 @@ -Subproject commit eb25caec8b15f951c2beb743111efa043d2d0285 +Subproject commit 3bdae76bc503c46b1eec9bfcac7ff30d3aa0d9db From 2ae4690db12dbbb7a851d2c54d22d3d0b027ad7e Mon Sep 17 00:00:00 2001 From: Rene Zeldenthuis Date: Fri, 23 Feb 2024 00:40:28 +0100 Subject: [PATCH 39/49] Updated boards --- boards | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/boards b/boards index 3bdae76..a681bc2 160000 --- a/boards +++ b/boards @@ -1 +1 @@ -Subproject commit 3bdae76bc503c46b1eec9bfcac7ff30d3aa0d9db +Subproject commit a681bc21a787dc65933fda91e1ea01fd7edb961d From 9619d023f56fa5b264bee0d7a1f39f2ad68461c8 Mon Sep 17 00:00:00 2001 From: Rene Date: Sat, 24 Feb 2024 14:04:27 +0100 Subject: [PATCH 40/49] Updated boards --- boards | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/boards b/boards index a681bc2..eb25cae 160000 --- a/boards +++ b/boards @@ -1 +1 @@ -Subproject commit a681bc21a787dc65933fda91e1ea01fd7edb961d +Subproject commit eb25caec8b15f951c2beb743111efa043d2d0285 From 487b71ea432985c6dd6018ed3301b94e6dbfd70b Mon Sep 17 00:00:00 2001 From: Rene Zeldenthuis Date: Thu, 29 Feb 2024 00:52:13 +0100 Subject: [PATCH 41/49] Updated boards --- boards | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/boards b/boards index eb25cae..3dafb46 160000 --- a/boards +++ b/boards @@ -1 +1 @@ -Subproject commit eb25caec8b15f951c2beb743111efa043d2d0285 +Subproject commit 3dafb46859eb818fbf22ca9b61077a8ec67f0b7a From ea8e155b02c369462858394d8993d251533a95ea Mon Sep 17 00:00:00 2001 From: Rene Zeldenthuis Date: Thu, 7 Mar 2024 22:55:56 +0100 Subject: [PATCH 42/49] Removed audio --- boards | 2 +- platformio.ini | 10 ++++------ src/main.cpp | 26 -------------------------- 3 files changed, 5 insertions(+), 33 deletions(-) diff --git a/boards b/boards index 3dafb46..0e471db 160000 --- a/boards +++ b/boards @@ -1 +1 @@ -Subproject commit 3dafb46859eb818fbf22ca9b61077a8ec67f0b7a +Subproject commit 0e471dbb1a687e0df9b8f14f2365feb6f2ae9df0 diff --git a/platformio.ini b/platformio.ini index cda0ab5..314eb96 100644 --- a/platformio.ini +++ b/platformio.ini @@ -50,19 +50,17 @@ monitor_rts = 0 monitor_dtr = 0 monitor_filters = esp32_exception_decoder -# Partition scheme for OTA -board_build.partitions = min_spiffs.csv - build_flags = -Ofast -Wall -D 'BOARD_NAME="${this.board}"' - -DCORE_DEBUG_LEVEL=ARDUHAL_LOG_LEVEL_VERBOSE - -D'LV_CONF_PATH=${platformio.include_dir}/lv_conf.h' + #-D 'CORE_DEBUG_LEVEL=ARDUHAL_LOG_LEVEL_VERBOSE' + #-D 'CORE_DEBUG_LEVEL=ARDUHAL_LOG_LEVEL_DEBUG' + -D 'CORE_DEBUG_LEVEL=ARDUHAL_LOG_LEVEL_INFO' + -D 'LV_CONF_PATH=${platformio.include_dir}/lv_conf.h' lib_deps = https://github.com/rzeldent/esp32-smartdisplay#develop - https://github.com/schreibfaul1/ESP32-audioI2S [env:esp32-1732S019C] board = esp32-1732S019C diff --git a/src/main.cpp b/src/main.cpp index bd24e37..c1a4fd0 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -2,13 +2,6 @@ #include #include -#include - -#define WIFI_SSID "" -#define WIFI_PASSWORD "" -#define RADIO_URL "http://www.wdr.de/wdrlive/media/einslive.m3u" - -Audio *audio; void OnButtonClicked(lv_event_t *e) { @@ -30,20 +23,6 @@ void setup() log_i("Free PSRAM: %d bytes", ESP.getPsramSize()); log_i("SDK version: %s", ESP.getSdkVersion()); -#ifdef BOARD_HAS_SPEAK - // Connect to WiFi - WiFi.begin(WIFI_SSID, WIFI_PASSWORD); - if (WiFi.waitForConnectResult() == WL_CONNECTED) - { - audio = new Audio(true, I2S_DAC_CHANNEL_LEFT_EN); - audio->forceMono(true); - audio->setVolume(10); - - while (!audio->connecttohost(RADIO_URL)) - delay(500); - } -#endif - smartdisplay_init(); auto disp = lv_disp_get_default(); @@ -58,11 +37,6 @@ ulong next_millis; void loop() { -#ifdef BOARD_HAS_SPEAK - if (audio) - audio->loop(); -#endif - auto const now = millis(); if (now > next_millis) { From 3fbaecf5a2164bb33bfe5391028928b0237d5c9c Mon Sep 17 00:00:00 2001 From: Rene Zeldenthuis Date: Sat, 9 Mar 2024 01:10:55 +0100 Subject: [PATCH 43/49] Updated boards --- boards | 2 +- platformio.ini | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/boards b/boards index 0e471db..d1f36c1 160000 --- a/boards +++ b/boards @@ -1 +1 @@ -Subproject commit 0e471dbb1a687e0df9b8f14f2365feb6f2ae9df0 +Subproject commit d1f36c19d8d1369ddcf7f08b8faeead04f32fcb4 diff --git a/platformio.ini b/platformio.ini index 314eb96..0e7e4c8 100644 --- a/platformio.ini +++ b/platformio.ini @@ -55,8 +55,8 @@ build_flags = -Wall -D 'BOARD_NAME="${this.board}"' #-D 'CORE_DEBUG_LEVEL=ARDUHAL_LOG_LEVEL_VERBOSE' - #-D 'CORE_DEBUG_LEVEL=ARDUHAL_LOG_LEVEL_DEBUG' - -D 'CORE_DEBUG_LEVEL=ARDUHAL_LOG_LEVEL_INFO' + -D 'CORE_DEBUG_LEVEL=ARDUHAL_LOG_LEVEL_DEBUG' + #-D 'CORE_DEBUG_LEVEL=ARDUHAL_LOG_LEVEL_INFO' -D 'LV_CONF_PATH=${platformio.include_dir}/lv_conf.h' lib_deps = From 5c7742db6b55d32eec5de96a092c235954f7e36c Mon Sep 17 00:00:00 2001 From: Rene Zeldenthuis Date: Sat, 9 Mar 2024 22:44:21 +0100 Subject: [PATCH 44/49] not track s;ll --- SquareLine_Project.sll | 1 - 1 file changed, 1 deletion(-) delete mode 100644 SquareLine_Project.sll diff --git a/SquareLine_Project.sll b/SquareLine_Project.sll deleted file mode 100644 index 21d6cbf..0000000 --- a/SquareLine_Project.sll +++ /dev/null @@ -1 +0,0 @@ -{"name":"SquareLine_Project.spj","depth":2,"width":320,"height":240,"rotation":0,"offset_x":0,"offset_y":0,"shape":"RECTANGLE","multilang":"DISABLE","description":"","board":"VS Code with SDL for development on PC","board_version":"v1.0.1","editor_version":"1.3.4","image":"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","force_export_images":false,"flat_export":false,"pointfilter":false,"theme_simplified":false,"theme_dark":false,"theme_color1":5,"theme_color2":0,"uiExportFolderPath":"C:\\Users\\rzeld\\source\\repos\\esp32-smartdisplay-demo\\src\\ui","projectExportFolderPath":"","backup_cnt":70,"autosave_cnt":0,"lvgl_version":"8.3.6","callfuncsexport":"CPP_FILE","lvgl_include_path":"lvgl.h"} \ No newline at end of file From 3c17c389f003ce840d32d1fe6b12ac91beb0dc03 Mon Sep 17 00:00:00 2001 From: Rene Zeldenthuis Date: Mon, 11 Mar 2024 01:01:22 +0100 Subject: [PATCH 45/49] Added rotate button, version 2.8 --- .gitignore | 6 +- SquareLine_Project.spj | 641 ++++++++++++++++++++++++++- SquareLine_Project_events.py | 4 - platformio.ini | 8 +- src/main.cpp | 9 +- src/ui/components/ui_comp_hook.c | 2 +- src/ui/images/ui_img_lena80x80_png.c | 4 +- src/ui/screens/ui_scrMain.c | 18 +- src/ui/ui.c | 15 +- src/ui/ui.h | 12 +- src/ui/ui_events.h | 5 +- src/ui/ui_helpers.c | 98 +++- src/ui/ui_helpers.h | 27 +- 13 files changed, 820 insertions(+), 29 deletions(-) delete mode 100644 SquareLine_Project_events.py diff --git a/.gitignore b/.gitignore index e3075b5..585cfc2 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,9 @@ .* ./ *.log -.DS_Store workspace.code-workspace autosave/ -backup/ \ No newline at end of file +backup/ +SquareLine_Project.sll +Themes.slt +SquareLine_Project_events.py diff --git a/SquareLine_Project.spj b/SquareLine_Project.spj index c739b89..6e2ffeb 100644 --- a/SquareLine_Project.spj +++ b/SquareLine_Project.spj @@ -1157,6 +1157,622 @@ ], "saved_objtypeKey": "LABEL" }, + { + "guid": "GUID98385998-882988S33149369", + "deepid": -335272605, + "children": [ + { + "guid": "GUID61390002-883548S569369", + "deepid": -1650129863, + "locked": false, + "properties": [ + { + "nid": 1442754740, + "strtype": "OBJECT/Name", + "strval": "Label1", + "InheritedType": 10 + }, + { + "nid": 342834439, + "strtype": "OBJECT/Layout", + "InheritedType": 1 + }, + { + "Flow": 0, + "Wrap": false, + "Reversed": false, + "MainAlignment": 0, + "CrossAlignment": 0, + "TrackAlignment": 0, + "LayoutType": 0, + "nid": 224666674, + "strtype": "OBJECT/Layout_type", + "strval": "No_layout", + "InheritedType": 13 + }, + { + "nid": 824357465, + "strtype": "OBJECT/Transform", + "InheritedType": 1 + }, + { + "nid": -822552499, + "flags": 17, + "strtype": "OBJECT/Position", + "intarray": [ + 0, + 0 + ], + "InheritedType": 7 + }, + { + "nid": 875382501, + "flags": 51, + "strtype": "OBJECT/Size", + "intarray": [ + 1, + 1 + ], + "InheritedType": 7 + }, + { + "nid": 827079137, + "strtype": "OBJECT/Align", + "strval": "CENTER", + "InheritedType": 3 + }, + { + "nid": -850667278, + "flags": 1048576, + "strtype": "OBJECT/Flags", + "InheritedType": 1 + }, + { + "nid": 1711992282, + "strtype": "OBJECT/Hidden", + "strval": "False", + "InheritedType": 2 + }, + { + "nid": 852090798, + "strtype": "OBJECT/Clickable", + "strval": "False", + "InheritedType": 2 + }, + { + "nid": 630995121, + "strtype": "OBJECT/Checkable", + "strval": "False", + "InheritedType": 2 + }, + { + "nid": 7502698, + "strtype": "OBJECT/Press_lock", + "strval": "True", + "InheritedType": 2 + }, + { + "nid": 819176383, + "strtype": "OBJECT/Click_focusable", + "strval": "True", + "InheritedType": 2 + }, + { + "nid": -519131414, + "strtype": "OBJECT/Adv_hittest", + "strval": "False", + "InheritedType": 2 + }, + { + "nid": 567523943, + "strtype": "OBJECT/Ignore_layout", + "strval": "False", + "InheritedType": 2 + }, + { + "nid": 155597143, + "strtype": "OBJECT/Floating", + "strval": "False", + "InheritedType": 2 + }, + { + "nid": -1325199371, + "strtype": "OBJECT/Overflow_visible", + "strval": "False", + "InheritedType": 2 + }, + { + "nid": 142328265, + "strtype": "OBJECT/Flex_in_new_track", + "strval": "False", + "InheritedType": 2 + }, + { + "nid": -93409243, + "strtype": "OBJECT/Event_bubble", + "strval": "False", + "InheritedType": 2 + }, + { + "nid": -2005556760, + "strtype": "OBJECT/Gesture_bubble", + "strval": "True", + "InheritedType": 2 + }, + { + "nid": 1708067148, + "strtype": "OBJECT/Snappable", + "strval": "True", + "InheritedType": 2 + }, + { + "nid": -196917968, + "strtype": "OBJECT/Scrollable", + "strval": "True", + "InheritedType": 2 + }, + { + "nid": -2047826988, + "strtype": "OBJECT/Scroll_elastic", + "strval": "True", + "InheritedType": 2 + }, + { + "nid": -1898524709, + "strtype": "OBJECT/Scroll_momentum", + "strval": "True", + "InheritedType": 2 + }, + { + "nid": -1723729260, + "strtype": "OBJECT/Scroll_on_focus", + "strval": "False", + "InheritedType": 2 + }, + { + "nid": -28486215, + "strtype": "OBJECT/Scroll_chain", + "strval": "True", + "InheritedType": 2 + }, + { + "nid": -2125364532, + "strtype": "OBJECT/Scroll_with_arrow", + "strval": "False", + "InheritedType": 2 + }, + { + "nid": 1783104629, + "strtype": "OBJECT/Scroll_one", + "strval": "False", + "InheritedType": 2 + }, + { + "nid": -1358011081, + "strtype": "OBJECT/Scrollbar_mode", + "strval": "AUTO", + "InheritedType": 3 + }, + { + "nid": -438601294, + "strtype": "OBJECT/Scroll_direction", + "strval": "ALL", + "InheritedType": 3 + }, + { + "nid": 1744785133, + "flags": 1048576, + "strtype": "OBJECT/States", + "InheritedType": 1 + }, + { + "nid": 638604064, + "strtype": "OBJECT/Checked", + "strval": "False", + "InheritedType": 2 + }, + { + "nid": 1606914610, + "strtype": "OBJECT/Disabled", + "strval": "False", + "InheritedType": 2 + }, + { + "nid": -1495402902, + "strtype": "OBJECT/Focused", + "strval": "False", + "InheritedType": 2 + }, + { + "nid": 1241302375, + "strtype": "OBJECT/Pressed", + "strval": "False", + "InheritedType": 2 + }, + { + "nid": -1085757518, + "strtype": "OBJECT/User_1", + "strval": "False", + "InheritedType": 2 + }, + { + "nid": -1668346252, + "strtype": "OBJECT/User_2", + "strval": "False", + "InheritedType": 2 + }, + { + "nid": -1325258139, + "strtype": "OBJECT/User_3", + "strval": "False", + "InheritedType": 2 + }, + { + "nid": 225163757, + "strtype": "OBJECT/User_4", + "strval": "False", + "InheritedType": 2 + }, + { + "nid": -2090177965, + "strtype": "LABEL/Label", + "InheritedType": 1 + }, + { + "nid": -1586919080, + "strtype": "LABEL/Long_mode", + "strval": "WRAP", + "InheritedType": 3 + }, + { + "nid": -36005373, + "strtype": "LABEL/Text", + "strval": "Rotate", + "InheritedType": 10 + }, + { + "part": "lv.PART.MAIN", + "childs": [], + "nid": 1771066441, + "strtype": "LABEL/Style_main", + "strval": "lv.PART.MAIN, Text, Rectangle, Pad", + "InheritedType": 11 + }, + { + "nid": 644834894, + "strtype": "LABEL/Recolor", + "strval": "False", + "InheritedType": 2 + } + ], + "saved_objtypeKey": "LABEL" + } + ], + "locked": false, + "properties": [ + { + "nid": -642660101, + "strtype": "OBJECT/Name", + "strval": "Rotate", + "InheritedType": 10 + }, + { + "nid": -1298229436, + "strtype": "OBJECT/Layout", + "InheritedType": 1 + }, + { + "Flow": 0, + "Wrap": false, + "Reversed": false, + "MainAlignment": 0, + "CrossAlignment": 0, + "TrackAlignment": 0, + "LayoutType": 0, + "nid": -1578641459, + "strtype": "OBJECT/Layout_type", + "strval": "No_layout", + "InheritedType": 13 + }, + { + "nid": -1316752961, + "strtype": "OBJECT/Transform", + "InheritedType": 1 + }, + { + "nid": -1750449178, + "flags": 17, + "strtype": "OBJECT/Position", + "intarray": [ + 0, + 0 + ], + "InheritedType": 7 + }, + { + "nid": 1824280140, + "flags": 17, + "strtype": "OBJECT/Size", + "intarray": [ + 100, + 50 + ], + "InheritedType": 7 + }, + { + "nid": -1897871785, + "strtype": "OBJECT/Align", + "strval": "BOTTOM_LEFT", + "InheritedType": 3 + }, + { + "nid": 91801937, + "flags": 1048576, + "strtype": "OBJECT/Flags", + "InheritedType": 1 + }, + { + "nid": 406821442, + "strtype": "OBJECT/Hidden", + "strval": "False", + "InheritedType": 2 + }, + { + "nid": -362461289, + "strtype": "OBJECT/Clickable", + "strval": "True", + "InheritedType": 2 + }, + { + "nid": -2138482613, + "strtype": "OBJECT/Checkable", + "strval": "False", + "InheritedType": 2 + }, + { + "nid": -66039966, + "strtype": "OBJECT/Press_lock", + "strval": "True", + "InheritedType": 2 + }, + { + "nid": -418458486, + "strtype": "OBJECT/Click_focusable", + "strval": "True", + "InheritedType": 2 + }, + { + "nid": 76869552, + "strtype": "OBJECT/Adv_hittest", + "strval": "False", + "InheritedType": 2 + }, + { + "nid": 1794404267, + "strtype": "OBJECT/Ignore_layout", + "strval": "False", + "InheritedType": 2 + }, + { + "nid": -425931157, + "strtype": "OBJECT/Floating", + "strval": "False", + "InheritedType": 2 + }, + { + "nid": 1397406420, + "strtype": "OBJECT/Overflow_visible", + "strval": "False", + "InheritedType": 2 + }, + { + "nid": -200793177, + "strtype": "OBJECT/Flex_in_new_track", + "strval": "False", + "InheritedType": 2 + }, + { + "nid": 1921099633, + "strtype": "OBJECT/Event_bubble", + "strval": "False", + "InheritedType": 2 + }, + { + "nid": -477223235, + "strtype": "OBJECT/Gesture_bubble", + "strval": "True", + "InheritedType": 2 + }, + { + "nid": 163722874, + "strtype": "OBJECT/Snappable", + "strval": "True", + "InheritedType": 2 + }, + { + "nid": -1934923098, + "strtype": "OBJECT/Scrollable", + "strval": "False", + "InheritedType": 2 + }, + { + "nid": -201890939, + "strtype": "OBJECT/Scroll_elastic", + "strval": "True", + "InheritedType": 2 + }, + { + "nid": -1322806651, + "strtype": "OBJECT/Scroll_momentum", + "strval": "True", + "InheritedType": 2 + }, + { + "nid": -23110176, + "strtype": "OBJECT/Scroll_on_focus", + "strval": "True", + "InheritedType": 2 + }, + { + "nid": -656856749, + "strtype": "OBJECT/Scroll_chain", + "strval": "True", + "InheritedType": 2 + }, + { + "nid": 1724685365, + "strtype": "OBJECT/Scroll_with_arrow", + "strval": "False", + "InheritedType": 2 + }, + { + "nid": 1316457989, + "strtype": "OBJECT/Scroll_one", + "strval": "False", + "InheritedType": 2 + }, + { + "nid": 1021715762, + "strtype": "OBJECT/Scrollbar_mode", + "strval": "AUTO", + "InheritedType": 3 + }, + { + "nid": -1371163310, + "strtype": "OBJECT/Scroll_direction", + "strval": "ALL", + "InheritedType": 3 + }, + { + "nid": 745104175, + "flags": 1048576, + "strtype": "OBJECT/States", + "InheritedType": 1 + }, + { + "nid": -1231770581, + "strtype": "OBJECT/Checked", + "strval": "False", + "InheritedType": 2 + }, + { + "nid": -1953607701, + "strtype": "OBJECT/Disabled", + "strval": "False", + "InheritedType": 2 + }, + { + "nid": -812959049, + "strtype": "OBJECT/Focused", + "strval": "False", + "InheritedType": 2 + }, + { + "nid": 1042703602, + "strtype": "OBJECT/Pressed", + "strval": "False", + "InheritedType": 2 + }, + { + "nid": -2058976230, + "strtype": "OBJECT/User_1", + "strval": "False", + "InheritedType": 2 + }, + { + "nid": -347764684, + "strtype": "OBJECT/User_2", + "strval": "False", + "InheritedType": 2 + }, + { + "nid": -2043274545, + "strtype": "OBJECT/User_3", + "strval": "False", + "InheritedType": 2 + }, + { + "nid": 30634157, + "strtype": "OBJECT/User_4", + "strval": "False", + "InheritedType": 2 + }, + { + "part": "lv.PART.MAIN", + "childs": [], + "nid": 1682744946, + "strtype": "BUTTON/Style_main", + "strval": "lv.PART.MAIN, Rectangle, Pad, Text ", + "InheritedType": 11 + }, + { + "disabled": false, + "nid": -1736035920, + "strtype": "_event/EventHandler", + "strval": "CLICKED", + "childs": [ + { + "nid": 799025726, + "strtype": "_custom/name", + "strval": "Event1", + "InheritedType": 10 + }, + { + "nid": -1802223861, + "strtype": "_custom/condition_C", + "strval": "", + "InheritedType": 10 + }, + { + "nid": -21001486, + "strtype": "_custom/condition_P", + "strval": "", + "InheritedType": 10 + }, + { + "nid": 1817739929, + "strtype": "_event/action", + "strval": "CALL FUNCTION", + "childs": [ + { + "nid": 982475560, + "strtype": "CALL FUNCTION/Name", + "strval": "CALL FUNCTION", + "InheritedType": 10 + }, + { + "nid": 1643403114, + "strtype": "CALL FUNCTION/Call", + "strval": "<{Function_name}>( event_struct )", + "InheritedType": 10 + }, + { + "nid": 237009652, + "strtype": "CALL FUNCTION/CallC", + "strval": "<{Function_name}>( e );", + "InheritedType": 10 + }, + { + "nid": -690063285, + "strtype": "CALL FUNCTION/Function_name", + "strval": "OnRotateClicked", + "InheritedType": 10 + }, + { + "nid": -1386628958, + "strtype": "CALL FUNCTION/Dont_export_function", + "strval": "True", + "InheritedType": 2 + } + ], + "InheritedType": 10 + } + ], + "InheritedType": 4 + } + ], + "saved_objtypeKey": "BUTTON" + }, { "guid": "GUID74451784-121997S1282280", "deepid": 1370575997, @@ -1756,7 +2372,7 @@ { "nid": 1685483521, "strtype": "CALL FUNCTION/Function_name", - "strval": "OnButtonClicked", + "strval": "OnAddOneClicked", "InheritedType": 10 }, { @@ -2326,7 +2942,7 @@ { "nid": 1036576854, "strtype": "LABEL/Text", - "strval": "Count", + "strval": "0", "InheritedType": 10 }, { @@ -2911,6 +3527,8 @@ } ], "isPage": true, + "editor_posx": 400, + "editor_posy": -400, "locked": false, "properties": [ { @@ -3135,6 +3753,7 @@ "saved_objtypeKey": "STARTEVENTS" }, "animations": [], + "selected_theme": "Default", "info": { "name": "SquareLine_Project.spj", "depth": 2, @@ -3148,22 +3767,34 @@ "description": "", "board": "VS Code with SDL for development on PC", "board_version": "v1.0.1", - "editor_version": "1.3.4", + "editor_version": "1.4.0", "image": "", "force_export_images": false, "flat_export": false, + "advanced_alpha": false, "pointfilter": false, "theme_simplified": false, "theme_dark": false, "theme_color1": 5, "theme_color2": 0, "uiExportFolderPath": "C:\\Users\\rzeld\\source\\repos\\esp32-smartdisplay-demo\\src\\ui", - "projectExportFolderPath": "", - "backup_cnt": 69, + "projectExportFolderPath": "C:\\Users\\rzeld\\source\\repos\\esp32-smartdisplay-demo", + "backup_cnt": 71, "autosave_cnt": 0, "lvgl_version": "8.3.6", "callfuncsexport": "CPP_FILE", + "imageexport": "SOURCE", "lvgl_include_path": "lvgl.h", + "drive_stdio": "-", + "drive_stdio_path": "", + "drive_posix": "-", + "drive_posix_path": "", + "drive_win32": "-", + "drive_win32_path": "", + "drive_fatfs": "-", + "drive_fatfs_path": "", + "naming": null, + "naming_force_lowercase": false, "BitDepth": 16, "Name": "SquareLine_Project" } diff --git a/SquareLine_Project_events.py b/SquareLine_Project_events.py deleted file mode 100644 index 9cf1ebe..0000000 --- a/SquareLine_Project_events.py +++ /dev/null @@ -1,4 +0,0 @@ - -def OnButtonClicked(event_struct): - return - diff --git a/platformio.ini b/platformio.ini index 0e7e4c8..2a87744 100644 --- a/platformio.ini +++ b/platformio.ini @@ -54,13 +54,13 @@ build_flags = -Ofast -Wall -D 'BOARD_NAME="${this.board}"' + -D 'CORE_DEBUG_LEVEL=ARDUHAL_LOG_LEVEL_INFO' + #-D 'CORE_DEBUG_LEVEL=ARDUHAL_LOG_LEVEL_DEBUG' #-D 'CORE_DEBUG_LEVEL=ARDUHAL_LOG_LEVEL_VERBOSE' - -D 'CORE_DEBUG_LEVEL=ARDUHAL_LOG_LEVEL_DEBUG' - #-D 'CORE_DEBUG_LEVEL=ARDUHAL_LOG_LEVEL_INFO' - -D 'LV_CONF_PATH=${platformio.include_dir}/lv_conf.h' + -D'LV_CONF_PATH=${platformio.include_dir}/lv_conf.h' lib_deps = - https://github.com/rzeldent/esp32-smartdisplay#develop + https://github.com/rzeldent/esp32-smartdisplay [env:esp32-1732S019C] board = esp32-1732S019C diff --git a/src/main.cpp b/src/main.cpp index c1a4fd0..deac04a 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -3,13 +3,20 @@ #include #include -void OnButtonClicked(lv_event_t *e) +void OnAddOneClicked(lv_event_t *e) { static uint8_t cnt = 0; cnt++; lv_label_set_text_fmt(ui_lblCountValue, "%d", cnt); } +void OnRotateClicked(lv_event_t *e) +{ + auto disp = lv_disp_get_default(); + auto rotation = (lv_disp_rot_t)((lv_disp_get_rotation(disp) + 1) % LV_DISP_ROT_270); + lv_disp_set_rotation(disp, rotation); +} + void setup() { #ifdef ARDUINO_USB_CDC_ON_BOOT diff --git a/src/ui/components/ui_comp_hook.c b/src/ui/components/ui_comp_hook.c index 038329f..c6ed9bf 100644 --- a/src/ui/components/ui_comp_hook.c +++ b/src/ui/components/ui_comp_hook.c @@ -1,5 +1,5 @@ // This file was generated by SquareLine Studio -// SquareLine Studio version: SquareLine Studio 1.3.3 +// SquareLine Studio version: SquareLine Studio 1.4.0 // LVGL version: 8.3.6 // Project name: SquareLine_Project diff --git a/src/ui/images/ui_img_lena80x80_png.c b/src/ui/images/ui_img_lena80x80_png.c index 25bce11..ae4ffca 100644 --- a/src/ui/images/ui_img_lena80x80_png.c +++ b/src/ui/images/ui_img_lena80x80_png.c @@ -1,5 +1,5 @@ // This file was generated by SquareLine Studio -// SquareLine Studio version: SquareLine Studio 1.3.4 +// SquareLine Studio version: SquareLine Studio 1.4.0 // LVGL version: 8.3.6 // Project name: SquareLine_Project @@ -9,7 +9,7 @@ #define LV_ATTRIBUTE_MEM_ALIGN #endif -// IMAGE DATA: assets\Lena80x80.png +// IMAGE DATA: assets/Lena80x80.png const LV_ATTRIBUTE_MEM_ALIGN uint8_t ui_img_lena80x80_png_data[] = { 0xE4,0x4F,0xE4,0x2F,0xDC,0x2E,0xDC,0x0D,0xDC,0x0D,0xE4,0x2E,0xEC,0x8E,0xEC,0xAF,0xE4,0x4E,0xCB,0x0C,0xA1,0xEB,0xA2,0x2B,0xB2,0x4B,0xB2,0x6A,0xB2,0x6A,0xB2,0x6A,0xB2,0x6A,0xC2,0xAB,0xC2,0xEB,0xCB,0x0B,0xCB,0x0C,0xCB,0x2C,0xCB,0x0C,0xCB,0x2B,0xCB,0x2C,0xD3,0x2C,0xD3,0x2C,0xD3,0x2C,0xCB,0x2C,0xCB,0x2C,0xD3,0x4C,0xD3,0x4C,0xCB,0x4D,0xCB,0x2C,0xCB,0x2B,0xCB,0x2C,0xCB,0x2C,0xD3,0x2C,0xD3,0x2C,0xCB,0x2C,0xCB,0x4C,0xCB,0x0C,0xCB,0x0C,0xCB,0x2C,0xCB,0x0C,0xCB,0x0C,0xCB,0x0C,0xC2,0xEC,0xBA,0xCC,0xAA,0x8B,0xBA,0xAB,0xD3,0xAD,0xDC,0x2E,0xDC,0x2D,0xDB,0xED,0xDC,0x0E,0xDC,0x0E,0xDB,0xED,0xDB,0xED,0xDC,0x0D,0xDC,0x2D,0xDC,0x2D,0xDC,0x2D,0xF5,0xF1, 0xFE,0x93,0xF6,0x12,0xAA,0xAB,0xB2,0xAB,0xBA,0xEB,0xBA,0xCB,0xBA,0xEC,0xBA,0xCB,0xC2,0xEB,0xC2,0xEB,0xC2,0xEB,0xC3,0x0C,0xC2,0xEB,0xBA,0xCB,0xC3,0x0C,0xDC,0x0E,0xE4,0x0D,0xE4,0x0D,0xE4,0x0D,0xE4,0x0D,0xE4,0x0D,0xE4,0x2D,0xEC,0x8E,0xEC,0xAE,0xE4,0x2D,0xCA,0xEB,0xA1,0xCA,0xAA,0x0A,0xB2,0x2A,0xB2,0x4A,0xB2,0x4A,0xB2,0x4A,0xB2,0x6A,0xC2,0xAB,0xC2,0xEB,0xCA,0xEB,0xCB,0x0B,0xCB,0x0B,0xCB,0x0C,0xCB,0x0B,0xCB,0x0B,0xD3,0x2C,0xD3,0x2C,0xD3,0x2C,0xD3,0x2C,0xD3,0x2C,0xD3,0x2C,0xD3,0x2C,0xCB,0x0C,0xCB,0x2C,0xCB,0x0B,0xCB,0x2C,0xCB,0x0B,0xCB,0x2C,0xD3,0x2C,0xCB,0x0B,0xCB,0x2C,0xCB,0x0B,0xCB,0x0B,0xCB,0x0B,0xCB,0x0C,0xCB,0x0C,0xCB,0x0B,0xC2,0xEB, diff --git a/src/ui/screens/ui_scrMain.c b/src/ui/screens/ui_scrMain.c index 9f906ae..daf7d41 100644 --- a/src/ui/screens/ui_scrMain.c +++ b/src/ui/screens/ui_scrMain.c @@ -1,5 +1,5 @@ // This file was generated by SquareLine Studio -// SquareLine Studio version: SquareLine Studio 1.3.4 +// SquareLine Studio version: SquareLine Studio 1.4.0 // LVGL version: 8.3.6 // Project name: SquareLine_Project @@ -41,6 +41,19 @@ void ui_scrMain_screen_init(void) lv_obj_set_align(ui_lblCdrValue, LV_ALIGN_TOP_MID); lv_label_set_text(ui_lblCdrValue, "cdr"); + ui_Rotate = lv_btn_create(ui_pnlMain); + lv_obj_set_width(ui_Rotate, 100); + lv_obj_set_height(ui_Rotate, 50); + lv_obj_set_align(ui_Rotate, LV_ALIGN_BOTTOM_LEFT); + lv_obj_add_flag(ui_Rotate, LV_OBJ_FLAG_SCROLL_ON_FOCUS); /// Flags + lv_obj_clear_flag(ui_Rotate, LV_OBJ_FLAG_SCROLLABLE); /// Flags + + ui_Label1 = lv_label_create(ui_Rotate); + lv_obj_set_width(ui_Label1, LV_SIZE_CONTENT); /// 1 + lv_obj_set_height(ui_Label1, LV_SIZE_CONTENT); /// 1 + lv_obj_set_align(ui_Label1, LV_ALIGN_CENTER); + lv_label_set_text(ui_Label1, "Rotate"); + ui_btnCount = lv_btn_create(ui_pnlMain); lv_obj_set_width(ui_btnCount, 100); lv_obj_set_height(ui_btnCount, 50); @@ -67,7 +80,7 @@ void ui_scrMain_screen_init(void) lv_obj_set_x(ui_lblCountValue, 0); lv_obj_set_y(ui_lblCountValue, 60); lv_obj_set_align(ui_lblCountValue, LV_ALIGN_TOP_MID); - lv_label_set_text(ui_lblCountValue, "Count"); + lv_label_set_text(ui_lblCountValue, "0"); ui_Image1 = lv_img_create(ui_pnlMain); lv_img_set_src(ui_Image1, &ui_img_lena80x80_png); @@ -77,6 +90,7 @@ void ui_scrMain_screen_init(void) lv_obj_add_flag(ui_Image1, LV_OBJ_FLAG_ADV_HITTEST); /// Flags lv_obj_clear_flag(ui_Image1, LV_OBJ_FLAG_SCROLLABLE); /// Flags + lv_obj_add_event_cb(ui_Rotate, ui_event_Rotate, LV_EVENT_ALL, NULL); lv_obj_add_event_cb(ui_btnCount, ui_event_btnCount, LV_EVENT_ALL, NULL); } diff --git a/src/ui/ui.c b/src/ui/ui.c index 7e87e2c..14f91df 100644 --- a/src/ui/ui.c +++ b/src/ui/ui.c @@ -1,5 +1,5 @@ // This file was generated by SquareLine Studio -// SquareLine Studio version: SquareLine Studio 1.3.4 +// SquareLine Studio version: SquareLine Studio 1.4.0 // LVGL version: 8.3.6 // Project name: SquareLine_Project @@ -17,6 +17,9 @@ lv_obj_t * ui_lblMilliseconds; lv_obj_t * ui_lblMillisecondsValue; lv_obj_t * ui_lblCdr; lv_obj_t * ui_lblCdrValue; +void ui_event_Rotate(lv_event_t * e); +lv_obj_t * ui_Rotate; +lv_obj_t * ui_Label1; void ui_event_btnCount(lv_event_t * e); lv_obj_t * ui_btnCount; lv_obj_t * ui_lblButton; @@ -37,12 +40,20 @@ const lv_img_dsc_t * ui_imgset_lenax[1] = {&ui_img_lena80x80_png}; ///////////////////// ANIMATIONS //////////////////// ///////////////////// FUNCTIONS //////////////////// +void ui_event_Rotate(lv_event_t * e) +{ + lv_event_code_t event_code = lv_event_get_code(e); + lv_obj_t * target = lv_event_get_target(e); + if(event_code == LV_EVENT_CLICKED) { + OnRotateClicked(e); + } +} void ui_event_btnCount(lv_event_t * e) { lv_event_code_t event_code = lv_event_get_code(e); lv_obj_t * target = lv_event_get_target(e); if(event_code == LV_EVENT_CLICKED) { - OnButtonClicked(e); + OnAddOneClicked(e); } } diff --git a/src/ui/ui.h b/src/ui/ui.h index 96fbb80..573393e 100644 --- a/src/ui/ui.h +++ b/src/ui/ui.h @@ -1,5 +1,5 @@ // This file was generated by SquareLine Studio -// SquareLine Studio version: SquareLine Studio 1.3.4 +// SquareLine Studio version: SquareLine Studio 1.4.0 // LVGL version: 8.3.6 // Project name: SquareLine_Project @@ -14,6 +14,7 @@ extern "C" { #include "ui_helpers.h" #include "ui_events.h" + // SCREEN: ui_scrMain void ui_scrMain_screen_init(void); extern lv_obj_t * ui_scrMain; @@ -22,6 +23,9 @@ extern lv_obj_t * ui_lblMilliseconds; extern lv_obj_t * ui_lblMillisecondsValue; extern lv_obj_t * ui_lblCdr; extern lv_obj_t * ui_lblCdrValue; +void ui_event_Rotate(lv_event_t * e); +extern lv_obj_t * ui_Rotate; +extern lv_obj_t * ui_Label1; void ui_event_btnCount(lv_event_t * e); extern lv_obj_t * ui_btnCount; extern lv_obj_t * ui_lblButton; @@ -30,7 +34,11 @@ extern lv_obj_t * ui_lblCountValue; extern lv_obj_t * ui_Image1; extern lv_obj_t * ui____initial_actions0; -LV_IMG_DECLARE(ui_img_lena80x80_png); // assets\Lena80x80.png + +LV_IMG_DECLARE(ui_img_lena80x80_png); // assets/Lena80x80.png + + + diff --git a/src/ui/ui_events.h b/src/ui/ui_events.h index 7e14753..e6e2c5a 100644 --- a/src/ui/ui_events.h +++ b/src/ui/ui_events.h @@ -1,5 +1,5 @@ // This file was generated by SquareLine Studio -// SquareLine Studio version: SquareLine Studio 1.3.4 +// SquareLine Studio version: SquareLine Studio 1.4.0 // LVGL version: 8.3.6 // Project name: SquareLine_Project @@ -10,7 +10,8 @@ extern "C" { #endif -void OnButtonClicked(lv_event_t * e); +void OnRotateClicked(lv_event_t * e); +void OnAddOneClicked(lv_event_t * e); #ifdef __cplusplus } /*extern "C"*/ diff --git a/src/ui/ui_helpers.c b/src/ui/ui_helpers.c index 5d68254..c87f954 100644 --- a/src/ui/ui_helpers.c +++ b/src/ui/ui_helpers.c @@ -1,5 +1,5 @@ // This file was generated by SquareLine Studio -// SquareLine Studio version: SquareLine Studio 1.3.4 +// SquareLine Studio version: SquareLine Studio 1.4.0 // LVGL version: 8.3.6 // Project name: SquareLine_Project @@ -19,6 +19,7 @@ void _ui_basic_set_property(lv_obj_t * target, int id, int val) if(id == _UI_BASIC_PROPERTY_HEIGHT) lv_obj_set_height(target, val); } + void _ui_dropdown_set_property(lv_obj_t * target, int id, int val) { if(id == _UI_DROPDOWN_PROPERTY_SELECTED) lv_dropdown_set_selected(target, val); @@ -34,6 +35,7 @@ void _ui_label_set_property(lv_obj_t * target, int id, const char * val) if(id == _UI_LABEL_PROPERTY_TEXT) lv_label_set_text(target, val); } + void _ui_roller_set_property(lv_obj_t * target, int id, int val) { if(id == _UI_ROLLER_PROPERTY_SELECTED_WITH_ANIM) lv_roller_set_selected(target, val, LV_ANIM_ON); @@ -46,6 +48,7 @@ void _ui_slider_set_property(lv_obj_t * target, int id, int val) if(id == _UI_SLIDER_PROPERTY_VALUE) lv_slider_set_value(target, val, LV_ANIM_OFF); } + void _ui_screen_change(lv_obj_t ** target, lv_scr_load_anim_t fademode, int spd, int delay, void (*target_init)(void)) { if(*target == NULL) @@ -105,11 +108,26 @@ void _ui_state_modify(lv_obj_t * target, int32_t state, int value) else lv_obj_clear_state(target, state); } + +void _ui_textarea_move_cursor(lv_obj_t * target, int val) + +{ + + if(val == UI_MOVE_CURSOR_UP) lv_textarea_cursor_up(target); + if(val == UI_MOVE_CURSOR_RIGHT) lv_textarea_cursor_right(target); + if(val == UI_MOVE_CURSOR_DOWN) lv_textarea_cursor_down(target); + if(val == UI_MOVE_CURSOR_LEFT) lv_textarea_cursor_left(target); + lv_obj_add_state(target, LV_STATE_FOCUSED); +} + void scr_unloaded_delete_cb(lv_event_t * e) + { + lv_obj_t ** var = lv_event_get_user_data(e); lv_obj_del(*var); (*var) = NULL; + } void _ui_opacity_set(lv_obj_t * target, int val) @@ -124,115 +142,178 @@ void _ui_anim_callback_free_user_data(lv_anim_t * a) } void _ui_anim_callback_set_x(lv_anim_t * a, int32_t v) + { + ui_anim_user_data_t * usr = (ui_anim_user_data_t *)a->user_data; lv_obj_set_x(usr->target, v); + } + void _ui_anim_callback_set_y(lv_anim_t * a, int32_t v) + { + ui_anim_user_data_t * usr = (ui_anim_user_data_t *)a->user_data; lv_obj_set_y(usr->target, v); + } + void _ui_anim_callback_set_width(lv_anim_t * a, int32_t v) + { + ui_anim_user_data_t * usr = (ui_anim_user_data_t *)a->user_data; lv_obj_set_width(usr->target, v); + } + void _ui_anim_callback_set_height(lv_anim_t * a, int32_t v) + { + ui_anim_user_data_t * usr = (ui_anim_user_data_t *)a->user_data; lv_obj_set_height(usr->target, v); + } + void _ui_anim_callback_set_opacity(lv_anim_t * a, int32_t v) + { + ui_anim_user_data_t * usr = (ui_anim_user_data_t *)a->user_data; lv_obj_set_style_opa(usr->target, v, 0); + } + void _ui_anim_callback_set_image_zoom(lv_anim_t * a, int32_t v) + { + ui_anim_user_data_t * usr = (ui_anim_user_data_t *)a->user_data; lv_img_set_zoom(usr->target, v); + } + void _ui_anim_callback_set_image_angle(lv_anim_t * a, int32_t v) + { + ui_anim_user_data_t * usr = (ui_anim_user_data_t *)a->user_data; lv_img_set_angle(usr->target, v); + } + void _ui_anim_callback_set_image_frame(lv_anim_t * a, int32_t v) + { + ui_anim_user_data_t * usr = (ui_anim_user_data_t *)a->user_data; usr->val = v; + if(v < 0) v = 0; if(v >= usr->imgset_size) v = usr->imgset_size - 1; lv_img_set_src(usr->target, usr->imgset[v]); } int32_t _ui_anim_callback_get_x(lv_anim_t * a) + { + ui_anim_user_data_t * usr = (ui_anim_user_data_t *)a->user_data; return lv_obj_get_x_aligned(usr->target); + } + int32_t _ui_anim_callback_get_y(lv_anim_t * a) + { + ui_anim_user_data_t * usr = (ui_anim_user_data_t *)a->user_data; return lv_obj_get_y_aligned(usr->target); + } + int32_t _ui_anim_callback_get_width(lv_anim_t * a) + { + ui_anim_user_data_t * usr = (ui_anim_user_data_t *)a->user_data; return lv_obj_get_width(usr->target); + } + int32_t _ui_anim_callback_get_height(lv_anim_t * a) + { + ui_anim_user_data_t * usr = (ui_anim_user_data_t *)a->user_data; return lv_obj_get_height(usr->target); + } + int32_t _ui_anim_callback_get_opacity(lv_anim_t * a) + { + ui_anim_user_data_t * usr = (ui_anim_user_data_t *)a->user_data; return lv_obj_get_style_opa(usr->target, 0); + } int32_t _ui_anim_callback_get_image_zoom(lv_anim_t * a) + { + ui_anim_user_data_t * usr = (ui_anim_user_data_t *)a->user_data; return lv_img_get_zoom(usr->target); + } int32_t _ui_anim_callback_get_image_angle(lv_anim_t * a) + { + ui_anim_user_data_t * usr = (ui_anim_user_data_t *)a->user_data; return lv_img_get_angle(usr->target); + } int32_t _ui_anim_callback_get_image_frame(lv_anim_t * a) + { + ui_anim_user_data_t * usr = (ui_anim_user_data_t *)a->user_data; return usr->val; + } void _ui_arc_set_text_value(lv_obj_t * trg, lv_obj_t * src, const char * prefix, const char * postfix) { char buf[_UI_TEMPORARY_STRING_BUFFER_SIZE]; + lv_snprintf(buf, sizeof(buf), "%s%d%s", prefix, (int)lv_arc_get_value(src), postfix); + lv_label_set_text(trg, buf); } void _ui_slider_set_text_value(lv_obj_t * trg, lv_obj_t * src, const char * prefix, const char * postfix) { char buf[_UI_TEMPORARY_STRING_BUFFER_SIZE]; + lv_snprintf(buf, sizeof(buf), "%s%d%s", prefix, (int)lv_slider_get_value(src), postfix); + lv_label_set_text(trg, buf); } void _ui_checked_set_text_value(lv_obj_t * trg, lv_obj_t * src, const char * txt_on, const char * txt_off) @@ -241,11 +322,26 @@ void _ui_checked_set_text_value(lv_obj_t * trg, lv_obj_t * src, const char * txt else lv_label_set_text(trg, txt_off); } + void _ui_spinbox_step(lv_obj_t * target, int val) + { + if(val > 0) lv_spinbox_increment(target); + else lv_spinbox_decrement(target); + lv_event_send(target, LV_EVENT_VALUE_CHANGED, 0); } +void _ui_switch_theme(int val) + +{ + +#ifdef UI_THEME_ACTIVE + ui_theme_set(val); +#endif +} + + diff --git a/src/ui/ui_helpers.h b/src/ui/ui_helpers.h index 7e6e7e1..abbe46f 100644 --- a/src/ui/ui_helpers.h +++ b/src/ui/ui_helpers.h @@ -1,5 +1,5 @@ // This file was generated by SquareLine Studio -// SquareLine Studio version: SquareLine Studio 1.3.4 +// SquareLine Studio version: SquareLine Studio 1.4.0 // LVGL version: 8.3.6 // Project name: SquareLine_Project @@ -62,6 +62,14 @@ void _ui_flag_modify(lv_obj_t * target, int32_t flag, int value); #define _UI_MODIFY_STATE_TOGGLE 2 void _ui_state_modify(lv_obj_t * target, int32_t state, int value); +#define UI_MOVE_CURSOR_UP 0 +#define UI_MOVE_CURSOR_RIGHT 1 +#define UI_MOVE_CURSOR_DOWN 2 +#define UI_MOVE_CURSOR_LEFT 3 +void _ui_textarea_move_cursor(lv_obj_t * target, int val) +; + + void scr_unloaded_delete_cb(lv_event_t * e); void _ui_opacity_set(lv_obj_t * target, int val); @@ -83,30 +91,41 @@ void _ui_anim_callback_set_width(lv_anim_t * a, int32_t v); void _ui_anim_callback_set_height(lv_anim_t * a, int32_t v); + void _ui_anim_callback_set_opacity(lv_anim_t * a, int32_t v); + void _ui_anim_callback_set_image_zoom(lv_anim_t * a, int32_t v); + void _ui_anim_callback_set_image_angle(lv_anim_t * a, int32_t v); + void _ui_anim_callback_set_image_frame(lv_anim_t * a, int32_t v); + int32_t _ui_anim_callback_get_x(lv_anim_t * a); int32_t _ui_anim_callback_get_y(lv_anim_t * a); int32_t _ui_anim_callback_get_width(lv_anim_t * a); + int32_t _ui_anim_callback_get_height(lv_anim_t * a); + int32_t _ui_anim_callback_get_opacity(lv_anim_t * a); + int32_t _ui_anim_callback_get_image_zoom(lv_anim_t * a); + int32_t _ui_anim_callback_get_image_angle(lv_anim_t * a); + int32_t _ui_anim_callback_get_image_frame(lv_anim_t * a); + void _ui_arc_set_text_value(lv_obj_t * trg, lv_obj_t * src, const char * prefix, const char * postfix); void _ui_slider_set_text_value(lv_obj_t * trg, lv_obj_t * src, const char * prefix, const char * postfix); @@ -116,6 +135,12 @@ void _ui_checked_set_text_value(lv_obj_t * trg, lv_obj_t * src, const char * txt void _ui_spinbox_step(lv_obj_t * target, int val) ; + +void _ui_switch_theme(int val) +; + + + #ifdef __cplusplus } /*extern "C"*/ #endif From f78def533fc429b156f37ef067a5eaf20cc19533 Mon Sep 17 00:00:00 2001 From: Rene Zeldenthuis Date: Mon, 11 Mar 2024 01:01:48 +0100 Subject: [PATCH 46/49] Small fixes --- boards | 2 +- src/main.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/boards b/boards index d1f36c1..e864619 160000 --- a/boards +++ b/boards @@ -1 +1 @@ -Subproject commit d1f36c19d8d1369ddcf7f08b8faeead04f32fcb4 +Subproject commit e864619f48bb75cfb7d1db3387ffa5897126aa5f diff --git a/src/main.cpp b/src/main.cpp index deac04a..637e763 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -32,7 +32,7 @@ void setup() smartdisplay_init(); - auto disp = lv_disp_get_default(); + __attribute__((unused)) auto disp = lv_disp_get_default(); // lv_disp_set_rotation(disp, LV_DISP_ROT_90); // lv_disp_set_rotation(disp, LV_DISP_ROT_180); // lv_disp_set_rotation(disp, LV_DISP_ROT_270); From 6a52c64eadadcb7e053053f870acd568a634ff2e Mon Sep 17 00:00:00 2001 From: Rene Zeldenthuis Date: Sat, 16 Mar 2024 16:07:40 +0100 Subject: [PATCH 47/49] Modulo rotate --- src/main.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 637e763..5185978 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -13,15 +13,15 @@ void OnAddOneClicked(lv_event_t *e) void OnRotateClicked(lv_event_t *e) { auto disp = lv_disp_get_default(); - auto rotation = (lv_disp_rot_t)((lv_disp_get_rotation(disp) + 1) % LV_DISP_ROT_270); + auto rotation = (lv_disp_rot_t)((lv_disp_get_rotation(disp) + 1) % (LV_DISP_ROT_270 + 1)); lv_disp_set_rotation(disp, rotation); } void setup() { -#ifdef ARDUINO_USB_CDC_ON_BOOT +#ifdef ARDUINO_USB_CDC_ON_BOOT delay(5000); -#endif +#endif Serial.begin(115200); Serial.setDebugOutput(true); log_i("Board: %s", BOARD_NAME); From 0938ec46176d7663e949227ab3a387a0e1fbd20e Mon Sep 17 00:00:00 2001 From: Rene Zeldenthuis Date: Sun, 17 Mar 2024 11:30:36 +0100 Subject: [PATCH 48/49] %lu instead of %d Updated boards --- boards | 2 +- src/main.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/boards b/boards index e864619..e1a5cdd 160000 --- a/boards +++ b/boards @@ -1 +1 @@ -Subproject commit e864619f48bb75cfb7d1db3387ffa5897126aa5f +Subproject commit e1a5cdd10f12f492fce235eafbd695627b96cb16 diff --git a/src/main.cpp b/src/main.cpp index 5185978..d1cbec5 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -50,7 +50,7 @@ void loop() next_millis = now + 500; char text_buffer[32]; - sprintf(text_buffer, "%d", now); + sprintf(text_buffer, "%lu", now); lv_label_set_text(ui_lblMillisecondsValue, text_buffer); #ifdef BOARD_HAS_RGB_LED From 73f3b782d3b87a5d528ec6188832d078e5e70c3f Mon Sep 17 00:00:00 2001 From: Rene Zeldenthuis Date: Sun, 17 Mar 2024 13:10:21 +0100 Subject: [PATCH 49/49] updated boards --- boards | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/boards b/boards index e1a5cdd..8c623d4 160000 --- a/boards +++ b/boards @@ -1 +1 @@ -Subproject commit e1a5cdd10f12f492fce235eafbd695627b96cb16 +Subproject commit 8c623d474c41bf9288e84eeda3d4a8b268496a45