Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
  • Loading branch information
mvladic committed Sep 25, 2024
1 parent 813caaf commit feef149
Show file tree
Hide file tree
Showing 20 changed files with 663 additions and 45 deletions.
5 changes: 5 additions & 0 deletions packages/eez-studio-types/index.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -539,6 +539,7 @@ export interface IWasmFlowRuntime {
_getSyncedBuffer(): number;
_onMouseWheelEvent(wheelDeltaY: number, wheelClicked: number): void;
_onPointerEvent(x: number, y: number, pressed: number): void;
_onKeyPressed(key: number): void;
_onMessageFromDebugger(messageData: number, messageDataSize: number): void;

// eez flow API for Dashboard projects
Expand Down Expand Up @@ -765,6 +766,10 @@ export interface IWasmFlowRuntime {
_lvglScrollTo(obj: number, x: number, y: number, anim_en: boolean);
_lvglGetScrollX(obj: number): number;
_lvglGetScrollY(obj: number): number;

_lvglAddScreenLoadedEventHandler(screenObj: number): void;
_lvglEncoderGroupAddObject(screenObj: number, obj: number): void;
_lvglKeyboardGroupAddObject(screenObj: number, obj: number): void;
}

export interface IDashboardComponentContext {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,11 @@ static int mouse_x = 0;
static int mouse_y = 0;
static int mouse_pressed = 0;

#define KEYBOARD_BUFFER_SIZE 1
static uint32_t keyboard_buffer[KEYBOARD_BUFFER_SIZE];
static uint32_t keyboard_buffer_index = 0;
static bool keyboard_pressed = false;

#if LVGL_VERSION_MAJOR >= 9
void my_mouse_read(lv_indev_t * indev_drv, lv_indev_data_t * data) {
#else
Expand All @@ -79,7 +84,19 @@ void my_keyboard_read(lv_indev_t * indev_drv, lv_indev_data_t * data) {
#else
void my_keyboard_read(lv_indev_drv_t * indev_drv, lv_indev_data_t * data) {
#endif
(void) indev_drv; /*Unused*/

if (keyboard_pressed) {
/*Send a release manually*/
keyboard_pressed = false;
data->state = LV_INDEV_STATE_RELEASED;
} else if (keyboard_buffer_index > 0) {
/*Send the pressed character*/
keyboard_pressed = true;
data->state = LV_INDEV_STATE_PRESSED;
data->key = keyboard_buffer[--keyboard_buffer_index];
}


}

static int mouse_wheel_delta = 0;
Expand Down Expand Up @@ -192,6 +209,9 @@ static void init_fs_driver() {

////////////////////////////////////////////////////////////////////////////////

lv_group_t *g_encoderGroup = 0;
lv_group_t *g_keyboardGroup = 0;

static void hal_init() {
// alloc memory for the display front buffer
display_fb = (uint32_t *)malloc(sizeof(uint32_t) * hor_res * ver_res);
Expand Down Expand Up @@ -235,43 +255,42 @@ static void hal_init() {
lv_indev_drv_register(&indev_drv_1);
#endif

// lv_group_t * my_group = lv_group_create();
// lv_group_set_default(my_group);

// keyboard init
g_keyboardGroup = lv_group_create();
#if LVGL_VERSION_MAJOR >= 9
lv_indev_t * indev2 = lv_indev_create();
lv_indev_set_type(indev2, LV_INDEV_TYPE_KEYPAD);
lv_indev_set_read_cb(indev2, my_keyboard_read);
//lv_indev_set_mode(indev2, LV_INDEV_MODE_EVENT);

//lv_indev_set_group(indev2, my_group);
lv_indev_set_group(indev2, g_keyboardGroup);
#else
static lv_indev_drv_t indev_drv_2;
lv_indev_drv_init(&indev_drv_2);
indev_drv_2.type = LV_INDEV_TYPE_KEYPAD;
indev_drv_2.read_cb = my_keyboard_read;
lv_indev_t *kb_indev = lv_indev_drv_register(&indev_drv_2);

//lv_indev_set_group(kb_indev, my_group);
lv_indev_set_group(kb_indev, g_keyboardGroup);
#endif

// mousewheel init
g_encoderGroup = lv_group_create();
#if LVGL_VERSION_MAJOR >= 9
lv_indev_t * indev3 = lv_indev_create();
lv_indev_set_type(indev3, LV_INDEV_TYPE_ENCODER);
lv_indev_set_read_cb(indev3, my_mousewheel_read);
//lv_indev_set_mode(indev3, LV_INDEV_MODE_EVENT);

//lv_indev_set_group(indev3, my_group);
lv_indev_set_group(indev3, g_encoderGroup);
#else
static lv_indev_drv_t indev_drv_3;
lv_indev_drv_init(&indev_drv_3);
indev_drv_3.type = LV_INDEV_TYPE_ENCODER;
indev_drv_3.read_cb = my_mousewheel_read;
lv_indev_t * enc_indev = lv_indev_drv_register(&indev_drv_3);

//lv_indev_set_group(enc_indev, my_group);
lv_indev_set_group(enc_indev, g_encoderGroup);
#endif
}

Expand Down Expand Up @@ -367,6 +386,12 @@ EM_PORT_API(void) onMouseWheelEvent(double yMouseWheel, int clicked) {
mouse_wheel_pressed = clicked;
}

EM_PORT_API(void) onKeyPressed(uint32_t key) {
if (keyboard_buffer_index < KEYBOARD_BUFFER_SIZE) {
keyboard_buffer[keyboard_buffer_index++] = key;
}
}

////////////////////////////////////////////////////////////////////////////////

lv_obj_t *lv_spinner_create_adapt(lv_obj_t *parentObj) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -920,6 +920,55 @@ static lv_obj_t *getLvglObjectFromIndex(int32_t index) {

////////////////////////////////////////////////////////////////////////////////

extern lv_group_t *g_encoderGroup;
extern lv_group_t *g_keyboardGroup;

static std::map<lv_obj_t *, std::vector<lv_obj_t *>> screenToEncoderGroupObjects;
static std::map<lv_obj_t *, std::vector<lv_obj_t *>> screenToKeyboardGroupObjects;

void screen_loaded_event_callback(lv_event_t *e) {
lv_obj_t *screenObj = lv_event_get_target_obj(e);

lv_group_remove_all_objs(g_encoderGroup);
{
auto itMap = screenToEncoderGroupObjects.find(screenObj);
std::vector<lv_obj_t *> &groupObjects = itMap->second;
for (auto it = groupObjects.begin(); it != groupObjects.end(); it++) {
lv_group_add_obj(g_encoderGroup, *it);
}
}

lv_group_remove_all_objs(g_keyboardGroup);
{
auto itMap = screenToKeyboardGroupObjects.find(screenObj);
std::vector<lv_obj_t *> &groupObjects = itMap->second;
for (auto it = groupObjects.begin(); it != groupObjects.end(); it++) {
lv_group_add_obj(g_keyboardGroup, *it);
}
}
}

EM_PORT_API(void) lvglAddScreenLoadedEventHandler(lv_obj_t *screenObj) {
screenToEncoderGroupObjects.insert(std::make_pair(screenObj, std::vector<lv_obj_t *>()));
screenToKeyboardGroupObjects.insert(std::make_pair(screenObj, std::vector<lv_obj_t *>()));

lv_obj_add_event_cb(screenObj, screen_loaded_event_callback, LV_EVENT_SCREEN_LOADED, 0);
}

EM_PORT_API(void) lvglEncoderGroupAddObject(lv_obj_t *screenObj, lv_obj_t *obj) {
auto itMap = screenToEncoderGroupObjects.find(screenObj);
std::vector<lv_obj_t *> &groupObjects = itMap->second;
groupObjects.push_back(obj);
}

EM_PORT_API(void) lvglKeyboardGroupAddObject(lv_obj_t *screenObj, lv_obj_t *obj) {
auto itMap = screenToKeyboardGroupObjects.find(screenObj);
std::vector<lv_obj_t *> &groupObjects = itMap->second;
groupObjects.push_back(obj);
}

////////////////////////////////////////////////////////////////////////////////

static const void *getLvglImageByName(const char *name) {
return (const void *)EM_ASM_INT({
return getLvglImageByName($0, UTF8ToString($1));
Expand Down
32 changes: 18 additions & 14 deletions packages/project-editor/flow/runtime/lvgl_runtime_v8.3.js
Original file line number Diff line number Diff line change
Expand Up @@ -969,20 +969,20 @@ function dbg(text) {
// === Body ===

var ASM_CONSTS = {
1036408: ($0) => { startToDebuggerMessage($0); },
1036440: ($0, $1, $2) => { writeDebuggerBuffer($0, new Uint8Array(Module.HEAPU8.buffer, $1, $2)); },
1036515: ($0, $1, $2) => { writeDebuggerBuffer($0, new Uint8Array(Module.HEAPU8.buffer, $1, $2)); },
1036590: ($0) => { finishToDebuggerMessage($0); },
1036623: ($0, $1) => { return getLvglImageByName($0, UTF8ToString($1)); },
1036676: ($0, $1, $2) => { lvglObjAddStyle($0, $1, $2); },
1036709: ($0, $1, $2) => { lvglObjRemoveStyle($0, $1, $2); },
1036745: ($0, $1, $2, $3, $4, $5) => { return eez_mqtt_init($0, UTF8ToString($1), UTF8ToString($2), $3, UTF8ToString($4), UTF8ToString($5)); },
1036851: ($0, $1) => { return eez_mqtt_deinit($0, $1); },
1036887: ($0, $1) => { return eez_mqtt_connect($0, $1); },
1036924: ($0, $1) => { return eez_mqtt_disconnect($0, $1); },
1036964: ($0, $1, $2) => { return eez_mqtt_subscribe($0, $1, UTF8ToString($2)); },
1037021: ($0, $1, $2) => { return eez_mqtt_unsubscribe($0, $1, UTF8ToString($2)); },
1037080: ($0, $1, $2, $3) => { return eez_mqtt_publish($0, $1, UTF8ToString($2), UTF8ToString($3)); }
1036440: ($0) => { startToDebuggerMessage($0); },
1036472: ($0, $1, $2) => { writeDebuggerBuffer($0, new Uint8Array(Module.HEAPU8.buffer, $1, $2)); },
1036547: ($0, $1, $2) => { writeDebuggerBuffer($0, new Uint8Array(Module.HEAPU8.buffer, $1, $2)); },
1036622: ($0) => { finishToDebuggerMessage($0); },
1036655: ($0, $1) => { return getLvglImageByName($0, UTF8ToString($1)); },
1036708: ($0, $1, $2) => { lvglObjAddStyle($0, $1, $2); },
1036741: ($0, $1, $2) => { lvglObjRemoveStyle($0, $1, $2); },
1036777: ($0, $1, $2, $3, $4, $5) => { return eez_mqtt_init($0, UTF8ToString($1), UTF8ToString($2), $3, UTF8ToString($4), UTF8ToString($5)); },
1036883: ($0, $1) => { return eez_mqtt_deinit($0, $1); },
1036919: ($0, $1) => { return eez_mqtt_connect($0, $1); },
1036956: ($0, $1) => { return eez_mqtt_disconnect($0, $1); },
1036996: ($0, $1, $2) => { return eez_mqtt_subscribe($0, $1, UTF8ToString($2)); },
1037053: ($0, $1, $2) => { return eez_mqtt_unsubscribe($0, $1, UTF8ToString($2)); },
1037112: ($0, $1, $2, $3) => { return eez_mqtt_publish($0, $1, UTF8ToString($2), UTF8ToString($3)); }
};


Expand Down Expand Up @@ -4712,10 +4712,14 @@ var _getSyncedBuffer = Module['_getSyncedBuffer'] = createExportWrapper('getSync
var _isRTL = Module['_isRTL'] = createExportWrapper('isRTL');
var _onPointerEvent = Module['_onPointerEvent'] = createExportWrapper('onPointerEvent');
var _onMouseWheelEvent = Module['_onMouseWheelEvent'] = createExportWrapper('onMouseWheelEvent');
var _onKeyPressed = Module['_onKeyPressed'] = createExportWrapper('onKeyPressed');
var _stopScript = Module['_stopScript'] = createExportWrapper('stopScript');
var _onMessageFromDebugger = Module['_onMessageFromDebugger'] = createExportWrapper('onMessageFromDebugger');
var _lvglGetFlowState = Module['_lvglGetFlowState'] = createExportWrapper('lvglGetFlowState');
var _setDebuggerMessageSubsciptionFilter = Module['_setDebuggerMessageSubsciptionFilter'] = createExportWrapper('setDebuggerMessageSubsciptionFilter');
var _lvglAddScreenLoadedEventHandler = Module['_lvglAddScreenLoadedEventHandler'] = createExportWrapper('lvglAddScreenLoadedEventHandler');
var _lvglEncoderGroupAddObject = Module['_lvglEncoderGroupAddObject'] = createExportWrapper('lvglEncoderGroupAddObject');
var _lvglKeyboardGroupAddObject = Module['_lvglKeyboardGroupAddObject'] = createExportWrapper('lvglKeyboardGroupAddObject');
var _lvglCreateScreen = Module['_lvglCreateScreen'] = createExportWrapper('lvglCreateScreen');
var _lvglCreateContainer = Module['_lvglCreateContainer'] = createExportWrapper('lvglCreateContainer');
var _lvglCreateLabel = Module['_lvglCreateLabel'] = createExportWrapper('lvglCreateLabel');
Expand Down
Binary file modified packages/project-editor/flow/runtime/lvgl_runtime_v8.3.wasm
Binary file not shown.
32 changes: 18 additions & 14 deletions packages/project-editor/flow/runtime/lvgl_runtime_v9.0.js
Original file line number Diff line number Diff line change
Expand Up @@ -969,20 +969,20 @@ function dbg(text) {
// === Body ===

var ASM_CONSTS = {
1031352: ($0) => { startToDebuggerMessage($0); },
1031384: ($0, $1, $2) => { writeDebuggerBuffer($0, new Uint8Array(Module.HEAPU8.buffer, $1, $2)); },
1031459: ($0, $1, $2) => { writeDebuggerBuffer($0, new Uint8Array(Module.HEAPU8.buffer, $1, $2)); },
1031534: ($0) => { finishToDebuggerMessage($0); },
1031567: ($0, $1) => { return getLvglImageByName($0, UTF8ToString($1)); },
1031620: ($0, $1, $2) => { lvglObjAddStyle($0, $1, $2); },
1031653: ($0, $1, $2) => { lvglObjRemoveStyle($0, $1, $2); },
1031689: ($0, $1, $2, $3, $4, $5) => { return eez_mqtt_init($0, UTF8ToString($1), UTF8ToString($2), $3, UTF8ToString($4), UTF8ToString($5)); },
1031795: ($0, $1) => { return eez_mqtt_deinit($0, $1); },
1031831: ($0, $1) => { return eez_mqtt_connect($0, $1); },
1031868: ($0, $1) => { return eez_mqtt_disconnect($0, $1); },
1031908: ($0, $1, $2) => { return eez_mqtt_subscribe($0, $1, UTF8ToString($2)); },
1031965: ($0, $1, $2) => { return eez_mqtt_unsubscribe($0, $1, UTF8ToString($2)); },
1032024: ($0, $1, $2, $3) => { return eez_mqtt_publish($0, $1, UTF8ToString($2), UTF8ToString($3)); }
1031368: ($0) => { startToDebuggerMessage($0); },
1031400: ($0, $1, $2) => { writeDebuggerBuffer($0, new Uint8Array(Module.HEAPU8.buffer, $1, $2)); },
1031475: ($0, $1, $2) => { writeDebuggerBuffer($0, new Uint8Array(Module.HEAPU8.buffer, $1, $2)); },
1031550: ($0) => { finishToDebuggerMessage($0); },
1031583: ($0, $1) => { return getLvglImageByName($0, UTF8ToString($1)); },
1031636: ($0, $1, $2) => { lvglObjAddStyle($0, $1, $2); },
1031669: ($0, $1, $2) => { lvglObjRemoveStyle($0, $1, $2); },
1031705: ($0, $1, $2, $3, $4, $5) => { return eez_mqtt_init($0, UTF8ToString($1), UTF8ToString($2), $3, UTF8ToString($4), UTF8ToString($5)); },
1031811: ($0, $1) => { return eez_mqtt_deinit($0, $1); },
1031847: ($0, $1) => { return eez_mqtt_connect($0, $1); },
1031884: ($0, $1) => { return eez_mqtt_disconnect($0, $1); },
1031924: ($0, $1, $2) => { return eez_mqtt_subscribe($0, $1, UTF8ToString($2)); },
1031981: ($0, $1, $2) => { return eez_mqtt_unsubscribe($0, $1, UTF8ToString($2)); },
1032040: ($0, $1, $2, $3) => { return eez_mqtt_publish($0, $1, UTF8ToString($2), UTF8ToString($3)); }
};


Expand Down Expand Up @@ -4712,10 +4712,14 @@ var _getSyncedBuffer = Module['_getSyncedBuffer'] = createExportWrapper('getSync
var _isRTL = Module['_isRTL'] = createExportWrapper('isRTL');
var _onPointerEvent = Module['_onPointerEvent'] = createExportWrapper('onPointerEvent');
var _onMouseWheelEvent = Module['_onMouseWheelEvent'] = createExportWrapper('onMouseWheelEvent');
var _onKeyPressed = Module['_onKeyPressed'] = createExportWrapper('onKeyPressed');
var _stopScript = Module['_stopScript'] = createExportWrapper('stopScript');
var _onMessageFromDebugger = Module['_onMessageFromDebugger'] = createExportWrapper('onMessageFromDebugger');
var _lvglGetFlowState = Module['_lvglGetFlowState'] = createExportWrapper('lvglGetFlowState');
var _setDebuggerMessageSubsciptionFilter = Module['_setDebuggerMessageSubsciptionFilter'] = createExportWrapper('setDebuggerMessageSubsciptionFilter');
var _lvglAddScreenLoadedEventHandler = Module['_lvglAddScreenLoadedEventHandler'] = createExportWrapper('lvglAddScreenLoadedEventHandler');
var _lvglEncoderGroupAddObject = Module['_lvglEncoderGroupAddObject'] = createExportWrapper('lvglEncoderGroupAddObject');
var _lvglKeyboardGroupAddObject = Module['_lvglKeyboardGroupAddObject'] = createExportWrapper('lvglKeyboardGroupAddObject');
var _lvglCreateScreen = Module['_lvglCreateScreen'] = createExportWrapper('lvglCreateScreen');
var _lvglCreateContainer = Module['_lvglCreateContainer'] = createExportWrapper('lvglCreateContainer');
var _lvglCreateLabel = Module['_lvglCreateLabel'] = createExportWrapper('lvglCreateLabel');
Expand Down
Binary file modified packages/project-editor/flow/runtime/lvgl_runtime_v9.0.wasm
Binary file not shown.
Loading

0 comments on commit feef149

Please sign in to comment.