From 4f3542065f93ca0030dd42fb10a613e8ec4e95f3 Mon Sep 17 00:00:00 2001 From: Martin Vladic Date: Thu, 30 Jan 2025 14:12:32 +0100 Subject: [PATCH] do not add LVGL widgets to the execution queue --- packages/project-editor/build/assets.ts | 4 +- packages/project-editor/build/flows.ts | 14 ++- .../flow/components/component-types.ts | 2 + .../flow/runtime/eez_runtime.wasm | Bin 532528 -> 532537 bytes .../flow/runtime/lvgl_runtime_v8.3.wasm | Bin 2004195 -> 2004312 bytes .../flow/runtime/lvgl_runtime_v9.0.wasm | Bin 2025993 -> 2026110 bytes .../eez-framework-amalgamation/eez-flow.cpp | 91 +++++++++--------- .../eez-framework-amalgamation/eez-flow.h | 5 +- wasm/eez-framework | 2 +- 9 files changed, 66 insertions(+), 52 deletions(-) diff --git a/packages/project-editor/build/assets.ts b/packages/project-editor/build/assets.ts index a55f76098..3f6ea514a 100644 --- a/packages/project-editor/build/assets.ts +++ b/packages/project-editor/build/assets.ts @@ -80,7 +80,8 @@ import { } from "project-editor/build/helper"; import { FIRST_DASHBOARD_ACTION_COMPONENT_TYPE, - FIRST_DASHBOARD_WIDGET_COMPONENT_TYPE + FIRST_DASHBOARD_WIDGET_COMPONENT_TYPE, + FIRST_LVGL_WIDGET_COMPONENT_TYPE } from "project-editor/flow/components/component-types"; import { DummyDataBuffer, DataBuffer } from "project-editor/build/data-buffer"; @@ -170,6 +171,7 @@ export class Assets { } = {}; nextDashboardActionComponentId = FIRST_DASHBOARD_ACTION_COMPONENT_TYPE; nextDashboardWidgetComponentId = FIRST_DASHBOARD_WIDGET_COMPONENT_TYPE; + nextLVGLWidgetComponentId = FIRST_LVGL_WIDGET_COMPONENT_TYPE; dashboardComponentTypeToNameMap: { [componentType: number]: string; } = {}; diff --git a/packages/project-editor/build/flows.ts b/packages/project-editor/build/flows.ts index e4ed91f8c..8e497330b 100644 --- a/packages/project-editor/build/flows.ts +++ b/packages/project-editor/build/flows.ts @@ -39,7 +39,8 @@ import { import { makeEndInstruction } from "project-editor/flow/expression/instructions"; import { FIRST_DASHBOARD_ACTION_COMPONENT_TYPE, - FIRST_DASHBOARD_WIDGET_COMPONENT_TYPE + FIRST_DASHBOARD_WIDGET_COMPONENT_TYPE, + FIRST_LVGL_WIDGET_COMPONENT_TYPE } from "project-editor/flow/components/component-types"; import { BASIC_TYPE_NAMES, @@ -107,7 +108,12 @@ function getComponentIdOfComponent(assets: Assets, component: Component) { if (component instanceof ProjectEditor.ActionComponentClass) { flowComponentId = assets.nextDashboardActionComponentId++; } else { - flowComponentId = assets.nextDashboardWidgetComponentId++; + if (assets.projectStore.projectTypeTraits.isLVGL) { + flowComponentId = assets.nextLVGLWidgetComponentId++; + } else { + flowComponentId = + assets.nextDashboardWidgetComponentId++; + } } assets.dashboardComponentClassNameToComponentIdMap[name] = flowComponentId; @@ -529,6 +535,10 @@ export function buildFlowDefs(assets: Assets) { `${TAB}FIRST_DASHBOARD_WIDGET_COMPONENT_TYPE = ${FIRST_DASHBOARD_WIDGET_COMPONENT_TYPE}` ); + componentTypeEnumItems.push( + `${TAB}FIRST_LVGL_WIDGET_COMPONENT_TYPE = ${FIRST_LVGL_WIDGET_COMPONENT_TYPE}` + ); + defs.push( `enum ComponentTypes {\n${componentTypeEnumItems.join(",\n")}\n};` ); diff --git a/packages/project-editor/flow/components/component-types.ts b/packages/project-editor/flow/components/component-types.ts index d92ecf2a1..0c6db5e59 100644 --- a/packages/project-editor/flow/components/component-types.ts +++ b/packages/project-editor/flow/components/component-types.ts @@ -77,3 +77,5 @@ export const COMPONENT_TYPE_SET_COLOR_THEME_ACTION = 1045; export const FIRST_DASHBOARD_ACTION_COMPONENT_TYPE = 10000; export const FIRST_DASHBOARD_WIDGET_COMPONENT_TYPE = 20000; + +export const FIRST_LVGL_WIDGET_COMPONENT_TYPE = 30000; diff --git a/packages/project-editor/flow/runtime/eez_runtime.wasm b/packages/project-editor/flow/runtime/eez_runtime.wasm index 6f04c0957cca760fce7c2daf3765fca9271b8805..756aa96f4747ef21c423915d82fbb54bce943178 100644 GIT binary patch delta 65 zcmdmRKw;+rg$FoT>(e2s%%s|Wn#H>Kf2E^>!v-vsB G2><{`JrYj< diff --git a/packages/project-editor/flow/runtime/lvgl_runtime_v8.3.wasm b/packages/project-editor/flow/runtime/lvgl_runtime_v8.3.wasm index fddf5f2dd9e3c9481f15be417e6a14d53be7dfc1..a6bfb6b9c21abe3096f2f2efc8995a354f5a326a 100644 GIT binary patch delta 1692 zcmYjRS8Nqm5Z$vp0`}V%zkqQJ0qKmC56cMHuO?5&Ey_im-&_C$CNXd6Z=B^Ej>?7^mJLk-t*?IeTTjA~Pg~k1n?f1XV&QC7N zPlm!)R8RyI6&0T;Dk&-}Vid88pu#E1PYzY?95@(`e(DVw#F=Bkm!=FIY>g`H{sB5a}ZWh&XsHYzQBl^nKYjwh|$ zILT!zY0X?|!`5t*EqN-^mU(RJNjtU+ee9t<+Z%QVpWTri*wK?t?xuB+&g>*z*jc)= z3%lk?H|2L{H+J`=2O~YQR6$RADtfUedwJ4Z?e+e@y*}(?r2G2P{n(fNJn3)j<+HyG zV7?6G01j*+gH&TM2XU|`Lv(OM%AKXjP!3J9YsxU!k^&Bs;Vh659L^Eh5*ewSQ5?xp zo{Uz`=uez69Ft^IJU1d^>B%^bmGKX?zINn`*cNp_;l1ZTn=`~U{(qK?dhZ+12~3!Dv4 z=0J7lf^)#R7%%fcO`V4VDT13Q^OeT=8Z7`9Kz;=EzX;)o-lV5Ywv z+zvDU9j53Gq$AdF(_|;OQwuq=3vO6;gS)`pDzZoO>LON(%U;A@uo&E{2KRw_w-4cO z{!Wnn;C|G$EID9g52)=J25MU|a!_fIL*PO15WMKLyRo$*S}*pAF%-@9H%Nsae*1!qyICw%EIBDFT0#AacbQ4a4ntEEL&KRjPDittN0XYkv zMfjftIcG|qM}+6V^Qv$Gy6G2C_PY;Dsky!gmVy^m=8}=QWZqHG|G*eKmwh`|z{}tj zRk#Y*mTTZu@S29#jo|fi!8Ex6-tayAQSRYS-@~%hxuIO`{U-PqcvE}71!~GIEqdD& zy{$$4Z;>T;z&n2LcTIEmz`Ni*t#sd1x)1%)xmGlHapmff45wl+=zj+td0>(sf)Bul zD*DKXK2lM~v4WPL6EBaA!egUgrWBSZ;1lg!_wlJ=KLekF&$QHY!+!p8lOZq6^-J&t z_)@Q5nd?_b)lFCB+E#|VHVJRQ*WepXcnkN0CGSkyJ8kAY_#R(de2chXN5n*LthB!^ zxi>GA*A#n-l1oF1&lPcsu;L3v6-8A=yrP;SLGh&`QBhq{L-CcOW=V2st=}&F2S8|@ A*8l(j delta 1549 zcmX|BSx^*L6z$WD5ttdBC>kWjIyaRMiYk|?D2|{)s|YG0?jQc7a32+H#SNFi6?a5q zQ5qDC`)=IER9rxfiumC!Dz5p;Z}OL_l)10LRM)BM``$h0o_pWxZaz`=$MLdrKcw0J z#MTz2RTQN`VJqSkK1Dml7mD_ZctwIDQQ=nvVnu1e_=&#y4)_o&js_PY`e%FT%kQNh z`${_dF+ETEJCHE@GwjL$JKH=QkQ21%OSSt*1~YoYl1%5*r#KnNOb&Eqkke5HbC6_l zuw*lf*}3AV#t=Fj;>u7C4Z`2b9>!sYo#U~GGl#=VT*-CnY9M*cl@ZL7ksQI11u{wn z@;Qq6u8ijB997VT0>u~>aEvR3^sz9*$_jjz9?P*tdYmUcp5r*)l?je^H<1%$5+}-J zPU7U@)m2TwE`Dt#EK@io)$U&1Qk3v*ltpbFhGiy2Kr$TPo~i@4a8C91cSOSrUDma&w}B2wlg%W{=j9+4GXAuG9(WudK| zQ*?QiF0YD6lu;=M%Mtq2NmfH`tN~X;)`Dvw>p*>3hg?|?ZDj+v9^3#|Dxy$+1$3UO zwb29{5s^*cCdg)RGeZA%N(tEJ47M2RR&WcrRjJ!d@;1ZNlhAtGO}riHc9I5_CaBaP zq`?jo?9d=!XUAomF$APa*UYWzu@l^hRNE)Jz$(a(;4a8+P+xXqM0If>zFXAG+yfoU zUT_b%S1tbJ2?V4D)YlrAf$szN!Hj&rskk4RNNgQ?Em*5X0#XMjBnQAc@PLZ^ta-hW zC1A-t{M;5z^mXj z*l2V-WO&1y5aRz58eRlwP*tzTW*34;7tv0XqhV%*r=}WgPMC^t2deIOfL#0+&%&yf{#?` zvB`hzUAlIDzxQtm$P<(E6np|cRn2E6=b35-0+!$Ma+2h^@%;SrNrdDD_(D6-3eAT7 z5^M%vYK2#Z{mQG5@BMmSoBbB>HQ1v2Z_NH1v#-iMtt@$K_TPbT!FRg<9!|X_A57K< zHS-bti0>@EkM*bsmJh+nirU7YqJyHNBBc0I(Mi!+k)-IN=&JZik*w&ZNKt&P=pL(W J{N~rD{{UY?eZK$z diff --git a/packages/project-editor/flow/runtime/lvgl_runtime_v9.0.wasm b/packages/project-editor/flow/runtime/lvgl_runtime_v9.0.wasm index 8a28479550cc8047b45fff48770dd89ef90976d5..55a394bb14176d703514c698e69b074ab8b00b5d 100644 GIT binary patch delta 1679 zcmYjRS8P;Q5Z$vZ277noO|nT$)fp)tD_KCKP>c=O4=|=0q=eq{6EOAB!I&j9LujEy zOUI#iOtnPsy#~`k!t~B(l%J59wS%J7k>0#JbIzQ(vu{>u{y(Mp#lBQ;+22zWQVSDO zq3|jyDSV2`iUdU!MO8(jB1z#_1WFQ8gFo%Bye}E=5!;!NRHI~OS+F~z#jhdt`Moq? zeQC%BY}i&BIgm6qVwx+By;*FW9rQRJN!Pa-OlO8GP3U8jbWdgge)=Nb@1!Z4)`Lfy zIUhe(l1w&ZrYl*_t199!OPbS>7HrNIt)-=MWV0o+U1{abvY*3NN?*>B!yIF29cO97 z)@Q%pau-J4;t~Vb@&g zrg`1jjon@8!5-N``1M6kMKAVbFIRf2i{Aft(T9CZzi(W>AN#VOEB)0)ED}hp8P!Sr zT+wQp4B&u>x26o#x#V%63}T)P<{%Evks&HDltVbwm0?;k>{H2b4v%;#t`n6JbY&z* z$S98Fs2mxsC1W_6V_X@_v7ZXYahz$4cYHE|JD#n_bHF)}x!_!cmWO2?w88n{Jjie0e8>V&9~K}- z7D8Pv0vCddRDQ8BEQXF>>3-KB)^ATR91VEwl9pKRQg8{lRCAYE?lQ~Og;Rm$7B5Fb zZ&-sB7Oc=9q`^uHR%#INW>w0vi3DVozOx-&4X)Oa_@oG21^ELkf~*1cVGY{ITGNcK z1J{DJ@_-jQ~Ff0em%0ch|cu;i?S>YiYS9w2&!Nc+0I8xET(eeh4 zfk(k(s(;+vo&b-7Cv-PXf|`0#sZJTyDW&oml}}ECrxBW-B4hi((A__W z@_%+n&fD0={(tfYZ}$M1>fgyo4b zJTV3vS4f_MPt}4h>NBf;4n6~)tJDjte(~RiLtfhPEAS=wN{?UL@oO~De}FRA@np&y zOLz;u0pDuEJ2=NY^4`+kYcn6f5BS!@cS!dC5bOW2YIsp-P4$wyFN3+wv9mCe`k5kG n5mJ1v_(JieBCPmI@wMU`MT(-DqPn7nqNbu&NhGy)*^z$%rq7KX delta 1494 zcmXw(X-rgS6o&7684#Em80%O^wB|icladg{q%MP~a8(3R(WX_?_^WlpapNkksN+r> zcdebE;DQ^bRj3=T2x?u>f8v_BVACHa{cV~wsXgBeX7VKWeDj_6ocDa+z5jJo{nSy_ zA3Ocu zA^NVH4B}TZn1f^p2Xjb?40Rx34rSPtJiE~Rm{;Vt=*hMR$}kSgg(dmUhYv|IocSE? z$_OV@MskD{aHJHnfQ7~4sKzKd9OcSrj`qWw$R5KnCc7w}J(firTj)x$bGQ~#!eSZ6 z5-H_4mX^tQ6_~*BoZ!ktPApOdT_{r~v5b>knM@BS53>q3743tlAc@)km%C5{bgLrWv(n&y%k)}6_v7*m0TH-RZd8%RHiB-tGQa%a1B=l z8iHB6yjGXjMkLCptOM5}a3Cn_p>1pc*F!df8z7rNeb|Iz*$lO^1>6j7fh*O}^lBvO z*kb(4-zyrZ31<0hGuf?X=QeOFxJ`F%H#@h(%vT3*$qp0mzz{pA!A=wG)F7b2E)(q1 zz-JdG6&lw**{y5luIvH#AlvrHUT`<$XK*iMAE*!eFiw7n)h|iyWlm$D)Ii6uAFKiQ zBO(Xl3O=a?^|2Oaz;$39%!m(~k_VBG^u&-4frqq=PY%Ng$Pw@`ctl0&bzd&hIBFM%-5`cmr%zg*G_0+yvXen;PCSg15Q^!*UzE9ry5u@ld4Wypu3-7rX=B z)r@<_#C`A{cwbGlgSxj}t3NQ+A87UXx5JW$;6pVLinYB@&9WUU_V4@D-sJ_pWUn{= zeelU6(|!l|2<%XS$420>3iy1M*NX26$`jMzlaGfGkf-2NZCCH&Gn4%sd= 9 - lv_obj_check_type((lv_obj_t*)target, &lv_buttonmatrix_class) - #else - lv_obj_check_type((lv_obj_t*)target, &lv_btnmatrix_class) - #endif - )) { - uint32_t *param = (uint32_t *)lv_event_get_param(event); - key = param ? *param : 0; - } - int32_t gestureDir = (int32_t)LV_DIR_NONE; - if (event_code == LV_EVENT_GESTURE) { - #if LVGL_VERSION_MAJOR >= 9 - lv_indev_wait_release(lv_indev_active()); - #else - lv_indev_wait_release(lv_indev_get_act()); - #endif - gestureDir = (int32_t)lv_indev_get_gesture_dir( - #if LVGL_VERSION_MAJOR >= 9 - lv_indev_active() - #else - lv_indev_get_act() - #endif - ); - } - int32_t rotaryDiff = 0; - #if LVGL_VERSION_MAJOR >= 9 - if (event_code == LV_EVENT_ROTARY) { - rotaryDiff = lv_event_get_rotary_diff(event); - } - #endif - eez::flow::propagateValue( - (eez::flow::FlowState *)flowState, componentIndex, outputIndex, - eez::Value::makeLVGLEventRef( - code, currentTarget, target, userData, key, gestureDir, rotaryDiff, 0xe7f23624 - ) + uint32_t code = (uint32_t)event_code; + void *currentTarget = (void *)lv_event_get_current_target(event); + void *target = (void *)lv_event_get_target(event); + void *userDataPointer = lv_event_get_user_data(event); + int32_t userData = *((int32_t*)(&userDataPointer)); + uint32_t key = 0; + if (event_code == LV_EVENT_KEY || (event_code == LV_EVENT_VALUE_CHANGED && +#if LVGL_VERSION_MAJOR >= 9 + lv_obj_check_type((lv_obj_t*)target, &lv_buttonmatrix_class) +#else + lv_obj_check_type((lv_obj_t*)target, &lv_btnmatrix_class) +#endif + )) { + uint32_t *param = (uint32_t *)lv_event_get_param(event); + key = param ? *param : 0; + } + int32_t gestureDir = (int32_t)LV_DIR_NONE; + if (event_code == LV_EVENT_GESTURE) { +#if LVGL_VERSION_MAJOR >= 9 + lv_indev_wait_release(lv_indev_active()); +#else + lv_indev_wait_release(lv_indev_get_act()); +#endif + gestureDir = (int32_t)lv_indev_get_gesture_dir( +#if LVGL_VERSION_MAJOR >= 9 + lv_indev_active() +#else + lv_indev_get_act() +#endif ); - } else { - eez::flow::propagateValue((eez::flow::FlowState *)flowState, componentIndex, outputIndex); } + int32_t rotaryDiff = 0; +#if LVGL_VERSION_MAJOR >= 9 + if (event_code == LV_EVENT_ROTARY) { + rotaryDiff = lv_event_get_rotary_diff(event); + } +#endif + eez::flow::propagateValue( + (eez::flow::FlowState *)flowState, componentIndex, outputIndex, + eez::Value::makeLVGLEventRef( + code, currentTarget, target, userData, key, gestureDir, rotaryDiff, 0xe7f23624 + ) + ); if (!lv_disp_get_default()->rendering_in_progress) { g_currentLVGLEvent = event; eez::flow::tick(); @@ -10089,6 +10085,9 @@ bool isComponentReadyToRun(FlowState *flowState, unsigned componentIndex) { if (component->type == defs_v3::COMPONENT_TYPE_LABEL_IN_ACTION) { return false; } + if (component->type > defs_v3::FIRST_LVGL_WIDGET_COMPONENT_TYPE) { + return false; + } if ((component->type < defs_v3::COMPONENT_TYPE_START_ACTION && component->type != defs_v3::COMPONENT_TYPE_USER_WIDGET_WIDGET) || component->type >= defs_v3::FIRST_DASHBOARD_WIDGET_COMPONENT_TYPE) { return true; } diff --git a/resources/eez-framework-amalgamation/eez-flow.h b/resources/eez-framework-amalgamation/eez-flow.h index bc25186e9..c803bd552 100644 --- a/resources/eez-framework-amalgamation/eez-flow.h +++ b/resources/eez-framework-amalgamation/eez-flow.h @@ -1,4 +1,4 @@ -/* Autogenerated on January 29, 2025 3:46:07 PM from eez-framework commit bc909755c9b83d15689e53474f6339176a299ac7 */ +/* Autogenerated on January 30, 2025 2:10:05 PM from eez-framework commit ac84fe0e07a96635c7c1920fbbc2712f6fc42cd3 */ /* * eez-framework * @@ -294,7 +294,8 @@ enum ComponentTypes { COMPONENT_TYPE_LVGL_ACTION = 1044, COMPONENT_TYPE_SET_COLOR_THEME_ACTION = 1045, FIRST_DASHBOARD_ACTION_COMPONENT_TYPE = 10000, - FIRST_DASHBOARD_WIDGET_COMPONENT_TYPE = 20000 + FIRST_DASHBOARD_WIDGET_COMPONENT_TYPE = 20000, + FIRST_LVGL_WIDGET_COMPONENT_TYPE = 30000 }; enum Component_CONTAINER_WIDGET_Properties { CONTAINER_WIDGET_PROPERTY_DATA = 0, diff --git a/wasm/eez-framework b/wasm/eez-framework index ac84fe0e0..b4f42bf88 160000 --- a/wasm/eez-framework +++ b/wasm/eez-framework @@ -1 +1 @@ -Subproject commit ac84fe0e07a96635c7c1920fbbc2712f6fc42cd3 +Subproject commit b4f42bf8825f781873c71338a28722f165545500