diff --git a/Devices/btt-panda-touch/Source/module.cpp b/Devices/btt-panda-touch/Source/module.cpp index 881dd315c..3bd6afb7b 100644 --- a/Devices/btt-panda-touch/Source/module.cpp +++ b/Devices/btt-panda-touch/Source/module.cpp @@ -16,7 +16,8 @@ static error_t stop() { struct Module device_module = { .name = "btt-panda-touch", .start = start, - .stop = stop + .stop = stop, + .symbols = nullptr }; } diff --git a/Devices/cyd-2432s024c/Source/module.cpp b/Devices/cyd-2432s024c/Source/module.cpp index bda3f76bd..6898097e9 100644 --- a/Devices/cyd-2432s024c/Source/module.cpp +++ b/Devices/cyd-2432s024c/Source/module.cpp @@ -16,7 +16,8 @@ static error_t stop() { struct Module device_module = { .name = "cyd-2432s024c", .start = start, - .stop = stop + .stop = stop, + .symbols = nullptr }; } diff --git a/Devices/cyd-2432s028r/Source/module.cpp b/Devices/cyd-2432s028r/Source/module.cpp index 8d9b5152e..449be9cfa 100644 --- a/Devices/cyd-2432s028r/Source/module.cpp +++ b/Devices/cyd-2432s028r/Source/module.cpp @@ -16,7 +16,8 @@ static error_t stop() { struct Module device_module = { .name = "cyd-2432s028r", .start = start, - .stop = stop + .stop = stop, + .symbols = nullptr }; } diff --git a/Devices/cyd-2432s028rv3/Source/module.cpp b/Devices/cyd-2432s028rv3/Source/module.cpp index f36b66271..9723e37c7 100644 --- a/Devices/cyd-2432s028rv3/Source/module.cpp +++ b/Devices/cyd-2432s028rv3/Source/module.cpp @@ -16,7 +16,8 @@ static error_t stop() { struct Module device_module = { .name = "cyd-2432s028rv3", .start = start, - .stop = stop + .stop = stop, + .symbols = nullptr }; } diff --git a/Devices/cyd-2432s032c/Source/module.cpp b/Devices/cyd-2432s032c/Source/module.cpp index 275f43ca7..87e8f63e8 100644 --- a/Devices/cyd-2432s032c/Source/module.cpp +++ b/Devices/cyd-2432s032c/Source/module.cpp @@ -16,7 +16,8 @@ static error_t stop() { struct Module device_module = { .name = "cyd-2432s032c", .start = start, - .stop = stop + .stop = stop, + .symbols = nullptr }; } diff --git a/Devices/cyd-4848s040c/Source/module.cpp b/Devices/cyd-4848s040c/Source/module.cpp index 3115b3a39..f9d281742 100644 --- a/Devices/cyd-4848s040c/Source/module.cpp +++ b/Devices/cyd-4848s040c/Source/module.cpp @@ -16,7 +16,8 @@ static error_t stop() { struct Module device_module = { .name = "cyd-4848s040c", .start = start, - .stop = stop + .stop = stop, + .symbols = nullptr }; } diff --git a/Devices/cyd-8048s043c/Source/module.cpp b/Devices/cyd-8048s043c/Source/module.cpp index 2aeb6a1d0..13d35d5f1 100644 --- a/Devices/cyd-8048s043c/Source/module.cpp +++ b/Devices/cyd-8048s043c/Source/module.cpp @@ -16,7 +16,8 @@ static error_t stop() { struct Module device_module = { .name = "cyd-8048s043c", .start = start, - .stop = stop + .stop = stop, + .symbols = nullptr }; } diff --git a/Devices/cyd-e32r28t/Source/module.cpp b/Devices/cyd-e32r28t/Source/module.cpp index 77a33065a..fa32e8090 100644 --- a/Devices/cyd-e32r28t/Source/module.cpp +++ b/Devices/cyd-e32r28t/Source/module.cpp @@ -16,7 +16,8 @@ static error_t stop() { struct Module device_module = { .name = "cyd-e32r28t", .start = start, - .stop = stop + .stop = stop, + .symbols = nullptr }; } diff --git a/Devices/cyd-e32r32p/Source/module.cpp b/Devices/cyd-e32r32p/Source/module.cpp index d63b5ecc1..57fc73dbf 100644 --- a/Devices/cyd-e32r32p/Source/module.cpp +++ b/Devices/cyd-e32r32p/Source/module.cpp @@ -16,7 +16,8 @@ static error_t stop() { struct Module device_module = { .name = "cyd-e32r32p", .start = start, - .stop = stop + .stop = stop, + .symbols = nullptr }; } diff --git a/Devices/elecrow-crowpanel-advance-28/Source/module.cpp b/Devices/elecrow-crowpanel-advance-28/Source/module.cpp index edd412fab..82221ebcf 100644 --- a/Devices/elecrow-crowpanel-advance-28/Source/module.cpp +++ b/Devices/elecrow-crowpanel-advance-28/Source/module.cpp @@ -16,7 +16,8 @@ static error_t stop() { struct Module device_module = { .name = "elecrow-crowpanel-advance-28", .start = start, - .stop = stop + .stop = stop, + .symbols = nullptr }; } diff --git a/Devices/elecrow-crowpanel-advance-35/Source/module.cpp b/Devices/elecrow-crowpanel-advance-35/Source/module.cpp index 0beb3267e..c9a1756b5 100644 --- a/Devices/elecrow-crowpanel-advance-35/Source/module.cpp +++ b/Devices/elecrow-crowpanel-advance-35/Source/module.cpp @@ -16,7 +16,8 @@ static error_t stop() { struct Module device_module = { .name = "elecrow-crowpanel-advance-35", .start = start, - .stop = stop + .stop = stop, + .symbols = nullptr }; } diff --git a/Devices/elecrow-crowpanel-advance-50/Source/module.cpp b/Devices/elecrow-crowpanel-advance-50/Source/module.cpp index b10c01afb..b8e4f0f74 100644 --- a/Devices/elecrow-crowpanel-advance-50/Source/module.cpp +++ b/Devices/elecrow-crowpanel-advance-50/Source/module.cpp @@ -16,7 +16,8 @@ static error_t stop() { struct Module device_module = { .name = "elecrow-crowpanel-advance-50", .start = start, - .stop = stop + .stop = stop, + .symbols = nullptr }; } diff --git a/Devices/elecrow-crowpanel-basic-28/Source/module.cpp b/Devices/elecrow-crowpanel-basic-28/Source/module.cpp index e502d9abc..8c284b328 100644 --- a/Devices/elecrow-crowpanel-basic-28/Source/module.cpp +++ b/Devices/elecrow-crowpanel-basic-28/Source/module.cpp @@ -16,7 +16,8 @@ static error_t stop() { struct Module device_module = { .name = "elecrow-crowpanel-basic-28", .start = start, - .stop = stop + .stop = stop, + .symbols = nullptr }; } diff --git a/Devices/elecrow-crowpanel-basic-35/Source/module.cpp b/Devices/elecrow-crowpanel-basic-35/Source/module.cpp index 36c9fe1a5..5bf88d8f5 100644 --- a/Devices/elecrow-crowpanel-basic-35/Source/module.cpp +++ b/Devices/elecrow-crowpanel-basic-35/Source/module.cpp @@ -16,7 +16,8 @@ static error_t stop() { struct Module device_module = { .name = "elecrow-crowpanel-basic-35", .start = start, - .stop = stop + .stop = stop, + .symbols = nullptr }; } diff --git a/Devices/elecrow-crowpanel-basic-50/Source/module.cpp b/Devices/elecrow-crowpanel-basic-50/Source/module.cpp index 43c317b22..8ae5c1f66 100644 --- a/Devices/elecrow-crowpanel-basic-50/Source/module.cpp +++ b/Devices/elecrow-crowpanel-basic-50/Source/module.cpp @@ -16,7 +16,8 @@ static error_t stop() { struct Module device_module = { .name = "elecrow-crowpanel-basic-50", .start = start, - .stop = stop + .stop = stop, + .symbols = nullptr }; } diff --git a/Devices/generic-esp32/Source/module.cpp b/Devices/generic-esp32/Source/module.cpp index fba222d8e..e30198aac 100644 --- a/Devices/generic-esp32/Source/module.cpp +++ b/Devices/generic-esp32/Source/module.cpp @@ -16,7 +16,8 @@ static error_t stop() { struct Module device_module = { .name = "generic-esp32", .start = start, - .stop = stop + .stop = stop, + .symbols = nullptr }; } diff --git a/Devices/generic-esp32c6/Source/module.cpp b/Devices/generic-esp32c6/Source/module.cpp index 640d73013..c22545ca1 100644 --- a/Devices/generic-esp32c6/Source/module.cpp +++ b/Devices/generic-esp32c6/Source/module.cpp @@ -16,7 +16,8 @@ static error_t stop() { struct Module device_module = { .name = "generic-esp32c6", .start = start, - .stop = stop + .stop = stop, + .symbols = nullptr }; } diff --git a/Devices/generic-esp32p4/Source/module.cpp b/Devices/generic-esp32p4/Source/module.cpp index fc7b8065f..9dbf7c201 100644 --- a/Devices/generic-esp32p4/Source/module.cpp +++ b/Devices/generic-esp32p4/Source/module.cpp @@ -16,7 +16,8 @@ static error_t stop() { struct Module device_module = { .name = "generic-esp32p4", .start = start, - .stop = stop + .stop = stop, + .symbols = nullptr }; } diff --git a/Devices/generic-esp32s3/Source/module.cpp b/Devices/generic-esp32s3/Source/module.cpp index 514cb7202..d28a5d0e6 100644 --- a/Devices/generic-esp32s3/Source/module.cpp +++ b/Devices/generic-esp32s3/Source/module.cpp @@ -16,7 +16,8 @@ static error_t stop() { struct Module device_module = { .name = "generic-esp32s3", .start = start, - .stop = stop + .stop = stop, + .symbols = nullptr }; } diff --git a/Devices/guition-jc1060p470ciwy/Source/module.cpp b/Devices/guition-jc1060p470ciwy/Source/module.cpp index 3ad541c3d..00b4e0762 100644 --- a/Devices/guition-jc1060p470ciwy/Source/module.cpp +++ b/Devices/guition-jc1060p470ciwy/Source/module.cpp @@ -16,7 +16,8 @@ static error_t stop() { struct Module device_module = { .name = "guition-jc1060p470ciwy", .start = start, - .stop = stop + .stop = stop, + .symbols = nullptr }; } diff --git a/Devices/guition-jc2432w328c/Source/module.cpp b/Devices/guition-jc2432w328c/Source/module.cpp index f13f64d34..ef9ac9ebf 100644 --- a/Devices/guition-jc2432w328c/Source/module.cpp +++ b/Devices/guition-jc2432w328c/Source/module.cpp @@ -16,7 +16,8 @@ static error_t stop() { struct Module device_module = { .name = "guition-jc2432w328c", .start = start, - .stop = stop + .stop = stop, + .symbols = nullptr }; } diff --git a/Devices/guition-jc3248w535c/Source/module.cpp b/Devices/guition-jc3248w535c/Source/module.cpp index e56afa25a..e99aad6b0 100644 --- a/Devices/guition-jc3248w535c/Source/module.cpp +++ b/Devices/guition-jc3248w535c/Source/module.cpp @@ -16,7 +16,8 @@ static error_t stop() { struct Module device_module = { .name = "guition-jc3248w535c", .start = start, - .stop = stop + .stop = stop, + .symbols = nullptr }; } diff --git a/Devices/guition-jc8048w550c/Source/module.cpp b/Devices/guition-jc8048w550c/Source/module.cpp index 674795f66..0549e5f9b 100644 --- a/Devices/guition-jc8048w550c/Source/module.cpp +++ b/Devices/guition-jc8048w550c/Source/module.cpp @@ -16,7 +16,8 @@ static error_t stop() { struct Module device_module = { .name = "guition-jc8048w550c", .start = start, - .stop = stop + .stop = stop, + .symbols = nullptr }; } diff --git a/Devices/heltec-wifi-lora-32-v3/Source/module.cpp b/Devices/heltec-wifi-lora-32-v3/Source/module.cpp index 3090a351d..0294e3759 100644 --- a/Devices/heltec-wifi-lora-32-v3/Source/module.cpp +++ b/Devices/heltec-wifi-lora-32-v3/Source/module.cpp @@ -16,7 +16,8 @@ static error_t stop() { struct Module device_module = { .name = "heltec-wifi-lora-32-v3", .start = start, - .stop = stop + .stop = stop, + .symbols = nullptr }; } diff --git a/Devices/lilygo-tdeck/Source/module.cpp b/Devices/lilygo-tdeck/Source/module.cpp index adc3efc83..cf804c194 100644 --- a/Devices/lilygo-tdeck/Source/module.cpp +++ b/Devices/lilygo-tdeck/Source/module.cpp @@ -16,7 +16,8 @@ static error_t stop() { struct Module device_module = { .name = "lilygo-tdeck", .start = start, - .stop = stop + .stop = stop, + .symbols = nullptr }; } diff --git a/Devices/lilygo-tdisplay-s3/Source/module.cpp b/Devices/lilygo-tdisplay-s3/Source/module.cpp index c7406140c..91233e41b 100644 --- a/Devices/lilygo-tdisplay-s3/Source/module.cpp +++ b/Devices/lilygo-tdisplay-s3/Source/module.cpp @@ -16,7 +16,8 @@ static error_t stop() { struct Module device_module = { .name = "lilygo-tdisplay-s3", .start = start, - .stop = stop + .stop = stop, + .symbols = nullptr }; } diff --git a/Devices/lilygo-tdisplay/Source/module.cpp b/Devices/lilygo-tdisplay/Source/module.cpp index 611e53130..000b0acfe 100644 --- a/Devices/lilygo-tdisplay/Source/module.cpp +++ b/Devices/lilygo-tdisplay/Source/module.cpp @@ -16,7 +16,8 @@ static error_t stop() { struct Module device_module = { .name = "lilygo-tdisplay", .start = start, - .stop = stop + .stop = stop, + .symbols = nullptr }; } diff --git a/Devices/lilygo-tdongle-s3/Source/module.cpp b/Devices/lilygo-tdongle-s3/Source/module.cpp index 724053d47..b3387eb7e 100644 --- a/Devices/lilygo-tdongle-s3/Source/module.cpp +++ b/Devices/lilygo-tdongle-s3/Source/module.cpp @@ -16,7 +16,8 @@ static error_t stop() { struct Module device_module = { .name = "lilygo-tdongle-s3", .start = start, - .stop = stop + .stop = stop, + .symbols = nullptr }; } diff --git a/Devices/lilygo-tlora-pager/Source/module.cpp b/Devices/lilygo-tlora-pager/Source/module.cpp index 1e1f91600..d840cd7bf 100644 --- a/Devices/lilygo-tlora-pager/Source/module.cpp +++ b/Devices/lilygo-tlora-pager/Source/module.cpp @@ -24,7 +24,8 @@ static error_t stop() { struct Module device_module = { .name = "lilygo-tlora-pager", .start = start, - .stop = stop + .stop = stop, + .symbols = nullptr }; } diff --git a/Devices/m5stack-cardputer-adv/Source/module.cpp b/Devices/m5stack-cardputer-adv/Source/module.cpp index 8d36c48a0..656d9766f 100644 --- a/Devices/m5stack-cardputer-adv/Source/module.cpp +++ b/Devices/m5stack-cardputer-adv/Source/module.cpp @@ -16,7 +16,8 @@ static error_t stop() { struct Module device_module = { .name = "m5stack-cardputer-adv", .start = start, - .stop = stop + .stop = stop, + .symbols = nullptr }; } diff --git a/Devices/m5stack-cardputer/Source/module.cpp b/Devices/m5stack-cardputer/Source/module.cpp index 61536878a..66b2f7cf8 100644 --- a/Devices/m5stack-cardputer/Source/module.cpp +++ b/Devices/m5stack-cardputer/Source/module.cpp @@ -16,7 +16,8 @@ static error_t stop() { struct Module device_module = { .name = "m5stack-cardputer", .start = start, - .stop = stop + .stop = stop, + .symbols = nullptr }; } diff --git a/Devices/m5stack-core2/Source/module.cpp b/Devices/m5stack-core2/Source/module.cpp index 1caed8e51..b8166a5c9 100644 --- a/Devices/m5stack-core2/Source/module.cpp +++ b/Devices/m5stack-core2/Source/module.cpp @@ -16,7 +16,8 @@ static error_t stop() { struct Module device_module = { .name = "m5stack-core2", .start = start, - .stop = stop + .stop = stop, + .symbols = nullptr }; } diff --git a/Devices/m5stack-cores3/Source/module.cpp b/Devices/m5stack-cores3/Source/module.cpp index 0d9f25d81..1fdd059b2 100644 --- a/Devices/m5stack-cores3/Source/module.cpp +++ b/Devices/m5stack-cores3/Source/module.cpp @@ -16,7 +16,8 @@ static error_t stop() { struct Module device_module = { .name = "m5stack-cores3", .start = start, - .stop = stop + .stop = stop, + .symbols = nullptr }; } diff --git a/Devices/m5stack-stickc-plus/Source/module.cpp b/Devices/m5stack-stickc-plus/Source/module.cpp index 624582a2d..8e4face58 100644 --- a/Devices/m5stack-stickc-plus/Source/module.cpp +++ b/Devices/m5stack-stickc-plus/Source/module.cpp @@ -16,7 +16,8 @@ static error_t stop() { struct Module device_module = { .name = "m5stack-stickc-plus", .start = start, - .stop = stop + .stop = stop, + .symbols = nullptr }; } diff --git a/Devices/m5stack-stickc-plus2/Source/module.cpp b/Devices/m5stack-stickc-plus2/Source/module.cpp index cc73feb1c..f8ee926d4 100644 --- a/Devices/m5stack-stickc-plus2/Source/module.cpp +++ b/Devices/m5stack-stickc-plus2/Source/module.cpp @@ -16,7 +16,8 @@ static error_t stop() { struct Module device_module = { .name = "m5stack-stickc-plus2", .start = start, - .stop = stop + .stop = stop, + .symbols = nullptr }; } diff --git a/Devices/m5stack-tab5/Source/module.cpp b/Devices/m5stack-tab5/Source/module.cpp index def51dc4e..a0d99011a 100644 --- a/Devices/m5stack-tab5/Source/module.cpp +++ b/Devices/m5stack-tab5/Source/module.cpp @@ -16,7 +16,8 @@ static error_t stop() { struct Module device_module = { .name = "m5stack-tab5", .start = start, - .stop = stop + .stop = stop, + .symbols = nullptr }; } diff --git a/Devices/simulator/Source/module.cpp b/Devices/simulator/Source/module.cpp index 88303c1d3..c52deb065 100644 --- a/Devices/simulator/Source/module.cpp +++ b/Devices/simulator/Source/module.cpp @@ -16,7 +16,8 @@ static error_t stop() { struct Module device_module = { .name = "simulator", .start = start, - .stop = stop + .stop = stop, + .symbols = nullptr }; } diff --git a/Devices/unphone/Source/module.cpp b/Devices/unphone/Source/module.cpp index fc2fbf09b..e1929eed3 100644 --- a/Devices/unphone/Source/module.cpp +++ b/Devices/unphone/Source/module.cpp @@ -16,7 +16,8 @@ static error_t stop() { struct Module device_module = { .name = "unphone", .start = start, - .stop = stop + .stop = stop, + .symbols = nullptr }; } diff --git a/Devices/waveshare-esp32-s3-geek/Source/module.cpp b/Devices/waveshare-esp32-s3-geek/Source/module.cpp index 14b283c50..682dcd3c8 100644 --- a/Devices/waveshare-esp32-s3-geek/Source/module.cpp +++ b/Devices/waveshare-esp32-s3-geek/Source/module.cpp @@ -16,7 +16,8 @@ static error_t stop() { struct Module device_module = { .name = "waveshare-esp32-s3-geek", .start = start, - .stop = stop + .stop = stop, + .symbols = nullptr }; } diff --git a/Devices/waveshare-s3-lcd-13/Source/module.cpp b/Devices/waveshare-s3-lcd-13/Source/module.cpp index 6b6a72bbb..2071dc4b2 100644 --- a/Devices/waveshare-s3-lcd-13/Source/module.cpp +++ b/Devices/waveshare-s3-lcd-13/Source/module.cpp @@ -16,7 +16,8 @@ static error_t stop() { struct Module device_module = { .name = "waveshare-s3-lcd-13", .start = start, - .stop = stop + .stop = stop, + .symbols = nullptr }; } diff --git a/Devices/waveshare-s3-touch-lcd-128/Source/module.cpp b/Devices/waveshare-s3-touch-lcd-128/Source/module.cpp index e33f32c7f..90dc8667d 100644 --- a/Devices/waveshare-s3-touch-lcd-128/Source/module.cpp +++ b/Devices/waveshare-s3-touch-lcd-128/Source/module.cpp @@ -16,7 +16,8 @@ static error_t stop() { struct Module device_module = { .name = "waveshare-s3-touch-lcd-128", .start = start, - .stop = stop + .stop = stop, + .symbols = nullptr }; } diff --git a/Devices/waveshare-s3-touch-lcd-147/Source/module.cpp b/Devices/waveshare-s3-touch-lcd-147/Source/module.cpp index c0df6f143..86dba168c 100644 --- a/Devices/waveshare-s3-touch-lcd-147/Source/module.cpp +++ b/Devices/waveshare-s3-touch-lcd-147/Source/module.cpp @@ -16,7 +16,8 @@ static error_t stop() { struct Module device_module = { .name = "waveshare-s3-touch-lcd-147", .start = start, - .stop = stop + .stop = stop, + .symbols = nullptr }; } diff --git a/Devices/waveshare-s3-touch-lcd-43/Source/module.cpp b/Devices/waveshare-s3-touch-lcd-43/Source/module.cpp index 7dcec5f19..a6c203bad 100644 --- a/Devices/waveshare-s3-touch-lcd-43/Source/module.cpp +++ b/Devices/waveshare-s3-touch-lcd-43/Source/module.cpp @@ -16,7 +16,8 @@ static error_t stop() { struct Module device_module = { .name = "waveshare-s3-touch-lcd-43", .start = start, - .stop = stop + .stop = stop, + .symbols = nullptr }; } diff --git a/Devices/wireless-tag-wt32-sc01-plus/Source/module.cpp b/Devices/wireless-tag-wt32-sc01-plus/Source/module.cpp index 8fa863c70..85e806fcf 100644 --- a/Devices/wireless-tag-wt32-sc01-plus/Source/module.cpp +++ b/Devices/wireless-tag-wt32-sc01-plus/Source/module.cpp @@ -16,7 +16,8 @@ static error_t stop() { struct Module device_module = { .name = "wireless-tag-wt32-sc01-plus", .start = start, - .stop = stop + .stop = stop, + .symbols = nullptr }; } diff --git a/Modules/hal-device-module/Source/module.cpp b/Modules/hal-device-module/Source/module.cpp index 73802337a..49d651071 100644 --- a/Modules/hal-device-module/Source/module.cpp +++ b/Modules/hal-device-module/Source/module.cpp @@ -17,15 +17,15 @@ static error_t start() { static error_t stop() { /* We crash when destruct fails, because if a single driver fails to destruct, * there is no guarantee that the previously destroyed drivers can be recovered */ - check(driver_remove(&hal_device_driver) == ERROR_NONE); - check(driver_destruct(&hal_device_driver) == ERROR_NONE); + check(driver_remove_destruct(&hal_device_driver) == ERROR_NONE); return ERROR_NONE; } struct Module hal_device_module = { .name = "hal-device", .start = start, - .stop = stop + .stop = stop, + .symbols = nullptr }; } diff --git a/Modules/lvgl-module/Source/lvgl_module.c b/Modules/lvgl-module/Source/module.c similarity index 89% rename from Modules/lvgl-module/Source/lvgl_module.c rename to Modules/lvgl-module/Source/module.c index 2c48c29ce..6a4b0afdf 100644 --- a/Modules/lvgl-module/Source/lvgl_module.c +++ b/Modules/lvgl-module/Source/module.c @@ -4,7 +4,7 @@ #include #include - +extern const struct ModuleSymbol lvgl_module_symbols[]; error_t lvgl_arch_start(); error_t lvgl_arch_stop(); @@ -63,5 +63,6 @@ bool lvgl_is_running() { struct Module lvgl_module = { .name = "lvgl", .start = start, - .stop = stop + .stop = stop, + .symbols = (const struct ModuleSymbol*)lvgl_module_symbols }; diff --git a/Modules/lvgl-module/Source/symbols.c b/Modules/lvgl-module/Source/symbols.c new file mode 100644 index 000000000..0dddbcd79 --- /dev/null +++ b/Modules/lvgl-module/Source/symbols.c @@ -0,0 +1,364 @@ +#include +#include + +const struct ModuleSymbol lvgl_module_symbols[] = { + // lv_event + DEFINE_MODULE_SYMBOL(lv_event_get_code), + DEFINE_MODULE_SYMBOL(lv_event_get_indev), + DEFINE_MODULE_SYMBOL(lv_event_get_key), + DEFINE_MODULE_SYMBOL(lv_event_get_param), + DEFINE_MODULE_SYMBOL(lv_event_get_scroll_anim), + DEFINE_MODULE_SYMBOL(lv_event_get_user_data), + DEFINE_MODULE_SYMBOL(lv_event_get_target_obj), + DEFINE_MODULE_SYMBOL(lv_event_get_target), + DEFINE_MODULE_SYMBOL(lv_event_get_current_target_obj), + DEFINE_MODULE_SYMBOL(lv_event_get_draw_task), + DEFINE_MODULE_SYMBOL(lv_event_stop_bubbling), + // lv_obj + DEFINE_MODULE_SYMBOL(lv_color_hex), + DEFINE_MODULE_SYMBOL(lv_color_make), + DEFINE_MODULE_SYMBOL(lv_color_black), + DEFINE_MODULE_SYMBOL(lv_color_white), + DEFINE_MODULE_SYMBOL(lv_obj_center), + DEFINE_MODULE_SYMBOL(lv_obj_clean), + DEFINE_MODULE_SYMBOL(lv_obj_clear_flag), + DEFINE_MODULE_SYMBOL(lv_obj_create), + DEFINE_MODULE_SYMBOL(lv_obj_delete), + DEFINE_MODULE_SYMBOL(lv_obj_add_event_cb), + DEFINE_MODULE_SYMBOL(lv_obj_add_flag), + DEFINE_MODULE_SYMBOL(lv_obj_add_state), + DEFINE_MODULE_SYMBOL(lv_obj_clear_state), + DEFINE_MODULE_SYMBOL(lv_obj_set_state), + DEFINE_MODULE_SYMBOL(lv_obj_align), + DEFINE_MODULE_SYMBOL(lv_obj_align_to), + DEFINE_MODULE_SYMBOL(lv_obj_get_parent), + DEFINE_MODULE_SYMBOL(lv_obj_get_height), + DEFINE_MODULE_SYMBOL(lv_obj_get_width), + DEFINE_MODULE_SYMBOL(lv_obj_get_coords), + DEFINE_MODULE_SYMBOL(lv_obj_get_x), + DEFINE_MODULE_SYMBOL(lv_obj_get_display), + DEFINE_MODULE_SYMBOL(lv_obj_get_y), + DEFINE_MODULE_SYMBOL(lv_obj_get_content_width), + DEFINE_MODULE_SYMBOL(lv_obj_get_content_height), + DEFINE_MODULE_SYMBOL(lv_obj_get_group), + DEFINE_MODULE_SYMBOL(lv_obj_get_user_data), + DEFINE_MODULE_SYMBOL(lv_obj_get_state), + DEFINE_MODULE_SYMBOL(lv_obj_has_flag), + DEFINE_MODULE_SYMBOL(lv_obj_has_flag_any), + DEFINE_MODULE_SYMBOL(lv_obj_has_state), + DEFINE_MODULE_SYMBOL(lv_obj_invalidate), + DEFINE_MODULE_SYMBOL(lv_obj_is_valid), + DEFINE_MODULE_SYMBOL(lv_obj_remove_event_cb), + DEFINE_MODULE_SYMBOL(lv_obj_remove_flag), + DEFINE_MODULE_SYMBOL(lv_obj_remove_state), + DEFINE_MODULE_SYMBOL(lv_obj_set_pos), + DEFINE_MODULE_SYMBOL(lv_obj_set_flex_align), + DEFINE_MODULE_SYMBOL(lv_obj_set_flex_flow), + DEFINE_MODULE_SYMBOL(lv_obj_set_flex_grow), + DEFINE_MODULE_SYMBOL(lv_obj_set_layout), + DEFINE_MODULE_SYMBOL(lv_obj_is_layout_positioned), + DEFINE_MODULE_SYMBOL(lv_obj_mark_layout_as_dirty), + DEFINE_MODULE_SYMBOL(lv_obj_get_style_layout), + DEFINE_MODULE_SYMBOL(lv_obj_update_layout), + DEFINE_MODULE_SYMBOL(lv_obj_set_scroll_dir), + DEFINE_MODULE_SYMBOL(lv_obj_scroll_to_view), + DEFINE_MODULE_SYMBOL(lv_obj_set_style_radius), + DEFINE_MODULE_SYMBOL(lv_obj_set_style_border_width), + DEFINE_MODULE_SYMBOL(lv_obj_set_style_border_color), + DEFINE_MODULE_SYMBOL(lv_obj_set_style_border_opa), + DEFINE_MODULE_SYMBOL(lv_obj_set_style_line_width), + DEFINE_MODULE_SYMBOL(lv_obj_set_style_line_color), + DEFINE_MODULE_SYMBOL(lv_obj_set_style_line_opa), + DEFINE_MODULE_SYMBOL(lv_obj_set_style_line_rounded), + DEFINE_MODULE_SYMBOL(lv_obj_set_style_opa), + DEFINE_MODULE_SYMBOL(lv_obj_set_style_bg_color), + DEFINE_MODULE_SYMBOL(lv_obj_set_style_bg_opa), + DEFINE_MODULE_SYMBOL(lv_obj_set_style_bg_image_src), + DEFINE_MODULE_SYMBOL(lv_obj_set_style_bg_image_opa), + DEFINE_MODULE_SYMBOL(lv_obj_set_style_bg_image_recolor), + DEFINE_MODULE_SYMBOL(lv_obj_set_style_bg_image_recolor_opa), + DEFINE_MODULE_SYMBOL(lv_obj_set_style_margin_hor), + DEFINE_MODULE_SYMBOL(lv_obj_set_style_margin_ver), + DEFINE_MODULE_SYMBOL(lv_obj_set_style_margin_top), + DEFINE_MODULE_SYMBOL(lv_obj_set_style_margin_bottom), + DEFINE_MODULE_SYMBOL(lv_obj_set_style_margin_left), + DEFINE_MODULE_SYMBOL(lv_obj_set_style_margin_right), + DEFINE_MODULE_SYMBOL(lv_obj_set_style_margin_all), + DEFINE_MODULE_SYMBOL(lv_obj_set_style_pad_all), + DEFINE_MODULE_SYMBOL(lv_obj_set_style_pad_hor), + DEFINE_MODULE_SYMBOL(lv_obj_set_style_pad_ver), + DEFINE_MODULE_SYMBOL(lv_obj_set_style_pad_top), + DEFINE_MODULE_SYMBOL(lv_obj_set_style_pad_bottom), + DEFINE_MODULE_SYMBOL(lv_obj_set_style_pad_left), + DEFINE_MODULE_SYMBOL(lv_obj_set_style_pad_right), + DEFINE_MODULE_SYMBOL(lv_obj_set_style_pad_column), + DEFINE_MODULE_SYMBOL(lv_obj_set_style_pad_row), + DEFINE_MODULE_SYMBOL(lv_obj_set_style_border_post), + DEFINE_MODULE_SYMBOL(lv_obj_set_style_border_side), + DEFINE_MODULE_SYMBOL(lv_obj_set_style_text_opa), + DEFINE_MODULE_SYMBOL(lv_obj_set_style_text_align), + DEFINE_MODULE_SYMBOL(lv_obj_set_style_text_color), + DEFINE_MODULE_SYMBOL(lv_obj_set_style_text_font), + DEFINE_MODULE_SYMBOL(lv_obj_set_style_text_decor), + DEFINE_MODULE_SYMBOL(lv_obj_set_style_text_letter_space), + DEFINE_MODULE_SYMBOL(lv_obj_set_style_text_line_space), + DEFINE_MODULE_SYMBOL(lv_obj_set_style_text_outline_stroke_color), + DEFINE_MODULE_SYMBOL(lv_obj_set_style_text_outline_stroke_opa), + DEFINE_MODULE_SYMBOL(lv_obj_set_style_text_outline_stroke_width), + DEFINE_MODULE_SYMBOL(lv_obj_set_user_data), + DEFINE_MODULE_SYMBOL(lv_obj_set_align), + DEFINE_MODULE_SYMBOL(lv_obj_set_x), + DEFINE_MODULE_SYMBOL(lv_obj_set_y), + DEFINE_MODULE_SYMBOL(lv_obj_set_size), + DEFINE_MODULE_SYMBOL(lv_obj_set_width), + DEFINE_MODULE_SYMBOL(lv_obj_set_height), + DEFINE_MODULE_SYMBOL(lv_obj_send_event), + DEFINE_MODULE_SYMBOL(lv_obj_set_style_outline_color), + DEFINE_MODULE_SYMBOL(lv_obj_set_style_outline_width), + DEFINE_MODULE_SYMBOL(lv_obj_set_style_outline_pad), + DEFINE_MODULE_SYMBOL(lv_obj_set_style_outline_opa), + DEFINE_MODULE_SYMBOL(lv_obj_set_style_flex_cross_place), + DEFINE_MODULE_SYMBOL(lv_obj_set_style_image_recolor_opa), + DEFINE_MODULE_SYMBOL(lv_obj_set_style_pad_gap), + DEFINE_MODULE_SYMBOL(lv_obj_set_style_shadow_width), + DEFINE_MODULE_SYMBOL(lv_obj_set_style_size), + DEFINE_MODULE_SYMBOL(lv_obj_set_style_transform_pivot_x), + DEFINE_MODULE_SYMBOL(lv_obj_set_style_transform_pivot_y), + DEFINE_MODULE_SYMBOL(lv_obj_set_style_transform_rotation), + DEFINE_MODULE_SYMBOL(lv_obj_scroll_to_y), + DEFINE_MODULE_SYMBOL(lv_obj_set_scrollbar_mode), + DEFINE_MODULE_SYMBOL(lv_obj_get_child_count), + DEFINE_MODULE_SYMBOL(lv_obj_get_child), + DEFINE_MODULE_SYMBOL(lv_obj_get_index), + DEFINE_MODULE_SYMBOL(lv_obj_remove_style_all), + DEFINE_MODULE_SYMBOL(lv_obj_set_content_height), + DEFINE_MODULE_SYMBOL(lv_obj_set_content_width), + DEFINE_MODULE_SYMBOL(lv_obj_event_base), + DEFINE_MODULE_SYMBOL(lv_obj_class_create_obj), + DEFINE_MODULE_SYMBOL(lv_obj_class_init_obj), + // lv_font + DEFINE_MODULE_SYMBOL(lv_font_get_default), + // lv_theme + DEFINE_MODULE_SYMBOL(lv_theme_get_color_primary), + DEFINE_MODULE_SYMBOL(lv_theme_get_color_secondary), + DEFINE_MODULE_SYMBOL(lv_theme_get_font_small), + DEFINE_MODULE_SYMBOL(lv_theme_get_font_normal), + DEFINE_MODULE_SYMBOL(lv_theme_get_font_large), + // lv_button + DEFINE_MODULE_SYMBOL(lv_button_create), + DEFINE_MODULE_SYMBOL(lv_btn_create), + // lv_buttonmatrix + DEFINE_MODULE_SYMBOL(lv_buttonmatrix_create), + DEFINE_MODULE_SYMBOL(lv_buttonmatrix_get_button_text), + DEFINE_MODULE_SYMBOL(lv_buttonmatrix_get_map), + DEFINE_MODULE_SYMBOL(lv_buttonmatrix_get_one_checked), + DEFINE_MODULE_SYMBOL(lv_buttonmatrix_get_selected_button), + DEFINE_MODULE_SYMBOL(lv_buttonmatrix_set_button_ctrl), + DEFINE_MODULE_SYMBOL(lv_buttonmatrix_set_button_ctrl_all), + DEFINE_MODULE_SYMBOL(lv_buttonmatrix_set_ctrl_map), + DEFINE_MODULE_SYMBOL(lv_buttonmatrix_set_map), + DEFINE_MODULE_SYMBOL(lv_buttonmatrix_set_one_checked), + DEFINE_MODULE_SYMBOL(lv_buttonmatrix_set_button_width), + DEFINE_MODULE_SYMBOL(lv_buttonmatrix_set_selected_button), + // lv_canvas + DEFINE_MODULE_SYMBOL(lv_canvas_create), + DEFINE_MODULE_SYMBOL(lv_canvas_set_draw_buf), + DEFINE_MODULE_SYMBOL(lv_canvas_set_px), + // lv_label + DEFINE_MODULE_SYMBOL(lv_label_create), + DEFINE_MODULE_SYMBOL(lv_label_cut_text), + DEFINE_MODULE_SYMBOL(lv_label_get_long_mode), + DEFINE_MODULE_SYMBOL(lv_label_set_long_mode), + DEFINE_MODULE_SYMBOL(lv_label_get_text), + DEFINE_MODULE_SYMBOL(lv_label_set_text), + DEFINE_MODULE_SYMBOL(lv_label_set_text_fmt), + // lv_switch + DEFINE_MODULE_SYMBOL(lv_switch_create), + // lv_checkbox + DEFINE_MODULE_SYMBOL(lv_checkbox_create), + DEFINE_MODULE_SYMBOL(lv_checkbox_set_text), + DEFINE_MODULE_SYMBOL(lv_checkbox_get_text), + DEFINE_MODULE_SYMBOL(lv_checkbox_set_text_static), + // lv_bar + DEFINE_MODULE_SYMBOL(lv_bar_create), + DEFINE_MODULE_SYMBOL(lv_bar_get_max_value), + DEFINE_MODULE_SYMBOL(lv_bar_get_min_value), + DEFINE_MODULE_SYMBOL(lv_bar_get_mode), + DEFINE_MODULE_SYMBOL(lv_bar_get_start_value), + DEFINE_MODULE_SYMBOL(lv_bar_get_value), + DEFINE_MODULE_SYMBOL(lv_bar_set_mode), + DEFINE_MODULE_SYMBOL(lv_bar_set_range), + DEFINE_MODULE_SYMBOL(lv_bar_set_start_value), + DEFINE_MODULE_SYMBOL(lv_bar_set_value), + DEFINE_MODULE_SYMBOL(lv_bar_is_symmetrical), + // lv_dropdown + DEFINE_MODULE_SYMBOL(lv_dropdown_create), + DEFINE_MODULE_SYMBOL(lv_dropdown_add_option), + DEFINE_MODULE_SYMBOL(lv_dropdown_clear_options), + DEFINE_MODULE_SYMBOL(lv_dropdown_close), + DEFINE_MODULE_SYMBOL(lv_dropdown_get_dir), + DEFINE_MODULE_SYMBOL(lv_dropdown_get_list), + DEFINE_MODULE_SYMBOL(lv_dropdown_get_option_count), + DEFINE_MODULE_SYMBOL(lv_dropdown_get_option_index), + DEFINE_MODULE_SYMBOL(lv_dropdown_get_options), + DEFINE_MODULE_SYMBOL(lv_dropdown_get_selected), + DEFINE_MODULE_SYMBOL(lv_dropdown_get_selected_str), + DEFINE_MODULE_SYMBOL(lv_dropdown_get_selected_highlight), + DEFINE_MODULE_SYMBOL(lv_dropdown_set_dir), + DEFINE_MODULE_SYMBOL(lv_dropdown_set_options), + DEFINE_MODULE_SYMBOL(lv_dropdown_set_options_static), + DEFINE_MODULE_SYMBOL(lv_dropdown_set_selected), + DEFINE_MODULE_SYMBOL(lv_dropdown_set_selected_highlight), + DEFINE_MODULE_SYMBOL(lv_dropdown_set_symbol), + DEFINE_MODULE_SYMBOL(lv_dropdown_set_text), + DEFINE_MODULE_SYMBOL(lv_dropdown_open), + // lv_list + DEFINE_MODULE_SYMBOL(lv_list_create), + DEFINE_MODULE_SYMBOL(lv_list_add_text), + DEFINE_MODULE_SYMBOL(lv_list_add_button), + DEFINE_MODULE_SYMBOL(lv_list_get_button_text), + DEFINE_MODULE_SYMBOL(lv_list_set_button_text), + // lv_keyboard + DEFINE_MODULE_SYMBOL(lv_keyboard_create), + DEFINE_MODULE_SYMBOL(lv_keyboard_set_textarea), + // lv_textarea + DEFINE_MODULE_SYMBOL(lv_textarea_create), + DEFINE_MODULE_SYMBOL(lv_textarea_get_accepted_chars), + DEFINE_MODULE_SYMBOL(lv_textarea_get_label), + DEFINE_MODULE_SYMBOL(lv_textarea_get_max_length), + DEFINE_MODULE_SYMBOL(lv_textarea_get_one_line), + DEFINE_MODULE_SYMBOL(lv_textarea_get_text), + DEFINE_MODULE_SYMBOL(lv_textarea_get_text_selection), + DEFINE_MODULE_SYMBOL(lv_textarea_set_one_line), + DEFINE_MODULE_SYMBOL(lv_textarea_set_accepted_chars), + DEFINE_MODULE_SYMBOL(lv_textarea_set_align), + DEFINE_MODULE_SYMBOL(lv_textarea_set_password_bullet), + DEFINE_MODULE_SYMBOL(lv_textarea_set_password_mode), + DEFINE_MODULE_SYMBOL(lv_textarea_set_password_show_time), + DEFINE_MODULE_SYMBOL(lv_textarea_set_placeholder_text), + DEFINE_MODULE_SYMBOL(lv_textarea_set_text), + DEFINE_MODULE_SYMBOL(lv_textarea_set_text_selection), + DEFINE_MODULE_SYMBOL(lv_textarea_set_max_length), + DEFINE_MODULE_SYMBOL(lv_textarea_set_cursor_click_pos), + DEFINE_MODULE_SYMBOL(lv_textarea_add_text), + // lv_palette + DEFINE_MODULE_SYMBOL(lv_palette_main), + DEFINE_MODULE_SYMBOL(lv_palette_darken), + DEFINE_MODULE_SYMBOL(lv_palette_lighten), + // lv_display + DEFINE_MODULE_SYMBOL(lv_display_get_default), + DEFINE_MODULE_SYMBOL(lv_display_get_horizontal_resolution), + DEFINE_MODULE_SYMBOL(lv_display_get_vertical_resolution), + DEFINE_MODULE_SYMBOL(lv_display_get_physical_horizontal_resolution), + DEFINE_MODULE_SYMBOL(lv_display_get_physical_vertical_resolution), + DEFINE_MODULE_SYMBOL(lv_display_dpx), + DEFINE_MODULE_SYMBOL(lv_display_get_inactive_time), + DEFINE_MODULE_SYMBOL(lv_display_get_rotation), + DEFINE_MODULE_SYMBOL(lv_display_set_rotation), + DEFINE_MODULE_SYMBOL(lv_display_set_offset), + DEFINE_MODULE_SYMBOL(lv_display_trigger_activity), + // lv_pct + DEFINE_MODULE_SYMBOL(lv_pct), + DEFINE_MODULE_SYMBOL(lv_pct_to_px), + // lv_spinbox + DEFINE_MODULE_SYMBOL(lv_spinbox_create), + DEFINE_MODULE_SYMBOL(lv_spinbox_decrement), + DEFINE_MODULE_SYMBOL(lv_spinbox_get_rollover), + DEFINE_MODULE_SYMBOL(lv_spinbox_get_step), + DEFINE_MODULE_SYMBOL(lv_spinbox_get_value), + DEFINE_MODULE_SYMBOL(lv_spinbox_increment), + DEFINE_MODULE_SYMBOL(lv_spinbox_set_rollover), + DEFINE_MODULE_SYMBOL(lv_spinbox_set_step), + DEFINE_MODULE_SYMBOL(lv_spinbox_set_range), + DEFINE_MODULE_SYMBOL(lv_spinbox_set_digit_format), + DEFINE_MODULE_SYMBOL(lv_spinbox_set_digit_step_direction), + DEFINE_MODULE_SYMBOL(lv_spinbox_set_value), + DEFINE_MODULE_SYMBOL(lv_spinbox_set_cursor_pos), + DEFINE_MODULE_SYMBOL(lv_spinbox_step_next), + DEFINE_MODULE_SYMBOL(lv_spinbox_step_prev), + // lv_indev + DEFINE_MODULE_SYMBOL(lv_indev_get_type), + DEFINE_MODULE_SYMBOL(lv_indev_get_point), + DEFINE_MODULE_SYMBOL(lv_indev_get_display), + DEFINE_MODULE_SYMBOL(lv_indev_get_key), + DEFINE_MODULE_SYMBOL(lv_indev_get_gesture_dir), + DEFINE_MODULE_SYMBOL(lv_indev_get_state), + DEFINE_MODULE_SYMBOL(lv_indev_active), + DEFINE_MODULE_SYMBOL(lv_indev_get_next), + DEFINE_MODULE_SYMBOL(lv_indev_set_group), + // lv_timer + DEFINE_MODULE_SYMBOL(lv_timer_handler), + DEFINE_MODULE_SYMBOL(lv_timer_handler_run_in_period), + DEFINE_MODULE_SYMBOL(lv_timer_periodic_handler), + DEFINE_MODULE_SYMBOL(lv_timer_handler_set_resume_cb), + DEFINE_MODULE_SYMBOL(lv_timer_create_basic), + DEFINE_MODULE_SYMBOL(lv_timer_create), + DEFINE_MODULE_SYMBOL(lv_timer_delete), + DEFINE_MODULE_SYMBOL(lv_timer_pause), + DEFINE_MODULE_SYMBOL(lv_timer_resume), + DEFINE_MODULE_SYMBOL(lv_timer_set_cb), + DEFINE_MODULE_SYMBOL(lv_timer_set_period), + DEFINE_MODULE_SYMBOL(lv_timer_ready), + DEFINE_MODULE_SYMBOL(lv_timer_set_repeat_count), + DEFINE_MODULE_SYMBOL(lv_timer_set_auto_delete), + DEFINE_MODULE_SYMBOL(lv_timer_set_user_data), + DEFINE_MODULE_SYMBOL(lv_timer_reset), + DEFINE_MODULE_SYMBOL(lv_timer_enable), + DEFINE_MODULE_SYMBOL(lv_timer_get_idle), + DEFINE_MODULE_SYMBOL(lv_timer_get_time_until_next), + DEFINE_MODULE_SYMBOL(lv_timer_get_next), + DEFINE_MODULE_SYMBOL(lv_timer_get_user_data), + DEFINE_MODULE_SYMBOL(lv_timer_get_paused), + // lvgl other + DEFINE_MODULE_SYMBOL(lv_refr_now), + DEFINE_MODULE_SYMBOL(lv_line_create), + DEFINE_MODULE_SYMBOL(lv_line_set_points), + DEFINE_MODULE_SYMBOL(lv_line_set_points_mutable), + // lv_slider + DEFINE_MODULE_SYMBOL(lv_slider_create), + DEFINE_MODULE_SYMBOL(lv_slider_get_value), + DEFINE_MODULE_SYMBOL(lv_slider_set_range), + DEFINE_MODULE_SYMBOL(lv_slider_set_value), + // lv_tabview + DEFINE_MODULE_SYMBOL(lv_tabview_add_tab), + DEFINE_MODULE_SYMBOL(lv_tabview_create), + DEFINE_MODULE_SYMBOL(lv_tabview_set_tab_bar_position), + DEFINE_MODULE_SYMBOL(lv_tabview_set_tab_bar_size), + // lv_screen + DEFINE_MODULE_SYMBOL(lv_scr_act), + DEFINE_MODULE_SYMBOL(lv_screen_active), + DEFINE_MODULE_SYMBOL(lv_layer_top), + // lv_group + DEFINE_MODULE_SYMBOL(lv_group_remove_obj), + DEFINE_MODULE_SYMBOL(lv_group_focus_obj), + DEFINE_MODULE_SYMBOL(lv_group_get_default), + DEFINE_MODULE_SYMBOL(lv_group_add_obj), + DEFINE_MODULE_SYMBOL(lv_group_set_default), + DEFINE_MODULE_SYMBOL(lv_group_set_editing), + DEFINE_MODULE_SYMBOL(lv_group_create), + DEFINE_MODULE_SYMBOL(lv_group_delete), + // lv_mem + DEFINE_MODULE_SYMBOL(lv_free), + DEFINE_MODULE_SYMBOL(lv_malloc), + // lv_draw + DEFINE_MODULE_SYMBOL(lv_draw_task_get_draw_dsc), + DEFINE_MODULE_SYMBOL(lv_draw_task_get_label_dsc), + DEFINE_MODULE_SYMBOL(lv_draw_task_get_fill_dsc), + DEFINE_MODULE_SYMBOL(lv_draw_buf_create), + // lv_image + DEFINE_MODULE_SYMBOL(lv_image_create), + DEFINE_MODULE_SYMBOL(lv_image_set_src), + DEFINE_MODULE_SYMBOL(lv_img_set_src), + // lv_anim + DEFINE_MODULE_SYMBOL(lv_anim_init), + DEFINE_MODULE_SYMBOL(lv_anim_set_duration), + DEFINE_MODULE_SYMBOL(lv_anim_set_exec_cb), + DEFINE_MODULE_SYMBOL(lv_anim_set_repeat_count), + DEFINE_MODULE_SYMBOL(lv_anim_set_values), + DEFINE_MODULE_SYMBOL(lv_anim_set_var), + DEFINE_MODULE_SYMBOL(lv_anim_set_path_cb), + DEFINE_MODULE_SYMBOL(lv_anim_start), + DEFINE_MODULE_SYMBOL(lv_anim_path_ease_in_out), + DEFINE_MODULE_SYMBOL(lv_anim_path_linear), + MODULE_SYMBOL_TERMINATOR +}; \ No newline at end of file diff --git a/Platforms/PlatformEsp32/Source/module.cpp b/Platforms/PlatformEsp32/Source/module.cpp index 4c4ad3f34..b014fd844 100644 --- a/Platforms/PlatformEsp32/Source/module.cpp +++ b/Platforms/PlatformEsp32/Source/module.cpp @@ -27,7 +27,8 @@ static error_t stop() { struct Module platform_module = { .name = "platform-esp32", .start = start, - .stop = stop + .stop = stop, + .symbols = nullptr }; } diff --git a/Platforms/PlatformPosix/Source/module.cpp b/Platforms/PlatformPosix/Source/module.cpp index 5a12aa9ee..c696aa518 100644 --- a/Platforms/PlatformPosix/Source/module.cpp +++ b/Platforms/PlatformPosix/Source/module.cpp @@ -17,7 +17,8 @@ static error_t stop() { struct Module platform_module = { .name = "platform-posix", .start = start, - .stop = stop + .stop = stop, + .symbols = nullptr }; } diff --git a/Tactility/Include/Tactility/Tactility.h b/Tactility/Include/Tactility/Tactility.h index 4e2bc337d..f48f48c3f 100644 --- a/Tactility/Include/Tactility/Tactility.h +++ b/Tactility/Include/Tactility/Tactility.h @@ -38,6 +38,8 @@ const Configuration* getConfiguration(); */ Dispatcher& getMainDispatcher(); +ModuleParent& getModuleParent(); + namespace hal { /** While technically this configuration is nullable, it's never null after initHeadless() is called. */ diff --git a/Tactility/Source/Tactility.cpp b/Tactility/Source/Tactility.cpp index 1445fb91a..27cf9f774 100644 --- a/Tactility/Source/Tactility.cpp +++ b/Tactility/Source/Tactility.cpp @@ -41,11 +41,15 @@ static auto LOGGER = Logger("Tactility"); static const Configuration* config_instance = nullptr; static Dispatcher mainDispatcher; -struct ModuleParent tactility_module_parent { +static struct ModuleParent tactility_module_parent { "tactility", nullptr }; +ModuleParent& getModuleParent() { + return tactility_module_parent; +} + // region Default services namespace service { // Primary diff --git a/TactilityC/Source/tt_init.cpp b/TactilityC/Source/tt_init.cpp index 5b532208f..872bae2a6 100644 --- a/TactilityC/Source/tt_init.cpp +++ b/TactilityC/Source/tt_init.cpp @@ -20,21 +20,21 @@ #include "tt_time.h" #include "tt_wifi.h" +#include "symbols/cplusplus.h" #include "symbols/esp_event.h" #include "symbols/esp_http_client.h" +#include "symbols/freertos.h" +#include "symbols/gcc_soft_float.h" #include "symbols/pthread.h" #include "symbols/stl.h" #include "symbols/string.h" -#include "symbols/cplusplus.h" -#include "symbols/freertos.h" -#include "symbols/gcc_soft_float.h" -#include -#include #include -#include #include +#include #include +#include +#include #include #include #include @@ -49,9 +49,11 @@ #include #include -#include +#include + #include +bool module_parent_resolve_symbol(ModuleParent* pParent, const char* name, uintptr_t* pInt); extern "C" { extern double __floatsidf(int x); @@ -284,300 +286,7 @@ const esp_elfsym main_symbols[] { ESP_ELFSYM_EXPORT(tt_wifi_get_rssi), // tt::lvgl ESP_ELFSYM_EXPORT(tt_lvgl_spinner_create), - // lv_event - ESP_ELFSYM_EXPORT(lv_event_get_code), - ESP_ELFSYM_EXPORT(lv_event_get_indev), - ESP_ELFSYM_EXPORT(lv_event_get_key), - ESP_ELFSYM_EXPORT(lv_event_get_param), - ESP_ELFSYM_EXPORT(lv_event_get_scroll_anim), - ESP_ELFSYM_EXPORT(lv_event_get_user_data), - ESP_ELFSYM_EXPORT(lv_event_get_target_obj), - ESP_ELFSYM_EXPORT(lv_event_get_target), - ESP_ELFSYM_EXPORT(lv_event_get_current_target_obj), - ESP_ELFSYM_EXPORT(lv_event_get_draw_task), - // lv_obj - ESP_ELFSYM_EXPORT(lv_color_hex), - ESP_ELFSYM_EXPORT(lv_color_make), - ESP_ELFSYM_EXPORT(lv_obj_center), - ESP_ELFSYM_EXPORT(lv_obj_clean), - ESP_ELFSYM_EXPORT(lv_obj_clear_flag), - ESP_ELFSYM_EXPORT(lv_obj_create), - ESP_ELFSYM_EXPORT(lv_obj_delete), - ESP_ELFSYM_EXPORT(lv_obj_add_event_cb), - ESP_ELFSYM_EXPORT(lv_obj_add_flag), - ESP_ELFSYM_EXPORT(lv_obj_add_state), - ESP_ELFSYM_EXPORT(lv_obj_align), - ESP_ELFSYM_EXPORT(lv_obj_align_to), - ESP_ELFSYM_EXPORT(lv_obj_get_parent), - ESP_ELFSYM_EXPORT(lv_obj_get_height), - ESP_ELFSYM_EXPORT(lv_obj_get_width), - ESP_ELFSYM_EXPORT(lv_obj_get_coords), - ESP_ELFSYM_EXPORT(lv_obj_get_x), - ESP_ELFSYM_EXPORT(lv_obj_get_display), - ESP_ELFSYM_EXPORT(lv_obj_get_y), - ESP_ELFSYM_EXPORT(lv_obj_get_content_width), - ESP_ELFSYM_EXPORT(lv_obj_get_content_height), - ESP_ELFSYM_EXPORT(lv_obj_get_group), - ESP_ELFSYM_EXPORT(lv_obj_get_user_data), - ESP_ELFSYM_EXPORT(lv_obj_get_state), - ESP_ELFSYM_EXPORT(lv_obj_has_flag), - ESP_ELFSYM_EXPORT(lv_obj_has_flag_any), - ESP_ELFSYM_EXPORT(lv_obj_has_state), - ESP_ELFSYM_EXPORT(lv_obj_invalidate), - ESP_ELFSYM_EXPORT(lv_obj_is_valid), - ESP_ELFSYM_EXPORT(lv_obj_remove_event_cb), - ESP_ELFSYM_EXPORT(lv_obj_remove_flag), - ESP_ELFSYM_EXPORT(lv_obj_remove_state), - ESP_ELFSYM_EXPORT(lv_obj_set_pos), - ESP_ELFSYM_EXPORT(lv_obj_set_flex_align), - ESP_ELFSYM_EXPORT(lv_obj_set_flex_flow), - ESP_ELFSYM_EXPORT(lv_obj_set_flex_grow), - ESP_ELFSYM_EXPORT(lv_obj_set_layout), - ESP_ELFSYM_EXPORT(lv_obj_is_layout_positioned), - ESP_ELFSYM_EXPORT(lv_obj_mark_layout_as_dirty), - ESP_ELFSYM_EXPORT(lv_obj_get_style_layout), - ESP_ELFSYM_EXPORT(lv_obj_update_layout), - ESP_ELFSYM_EXPORT(lv_obj_set_scroll_dir), - ESP_ELFSYM_EXPORT(lv_obj_scroll_to_view), - ESP_ELFSYM_EXPORT(lv_obj_set_style_radius), - ESP_ELFSYM_EXPORT(lv_obj_set_style_border_width), - ESP_ELFSYM_EXPORT(lv_obj_set_style_border_color), - ESP_ELFSYM_EXPORT(lv_obj_set_style_border_opa), - ESP_ELFSYM_EXPORT(lv_obj_set_style_line_width), - ESP_ELFSYM_EXPORT(lv_obj_set_style_line_color), - ESP_ELFSYM_EXPORT(lv_obj_set_style_line_opa), - ESP_ELFSYM_EXPORT(lv_obj_set_style_line_rounded), - ESP_ELFSYM_EXPORT(lv_obj_set_style_opa), - ESP_ELFSYM_EXPORT(lv_obj_set_style_bg_color), - ESP_ELFSYM_EXPORT(lv_obj_set_style_bg_opa), - ESP_ELFSYM_EXPORT(lv_obj_set_style_bg_image_src), - ESP_ELFSYM_EXPORT(lv_obj_set_style_bg_image_opa), - ESP_ELFSYM_EXPORT(lv_obj_set_style_bg_image_recolor), - ESP_ELFSYM_EXPORT(lv_obj_set_style_bg_image_recolor_opa), - ESP_ELFSYM_EXPORT(lv_obj_set_style_margin_hor), - ESP_ELFSYM_EXPORT(lv_obj_set_style_margin_ver), - ESP_ELFSYM_EXPORT(lv_obj_set_style_margin_top), - ESP_ELFSYM_EXPORT(lv_obj_set_style_margin_bottom), - ESP_ELFSYM_EXPORT(lv_obj_set_style_margin_left), - ESP_ELFSYM_EXPORT(lv_obj_set_style_margin_right), - ESP_ELFSYM_EXPORT(lv_obj_set_style_margin_all), - ESP_ELFSYM_EXPORT(lv_obj_set_style_pad_all), - ESP_ELFSYM_EXPORT(lv_obj_set_style_pad_hor), - ESP_ELFSYM_EXPORT(lv_obj_set_style_pad_ver), - ESP_ELFSYM_EXPORT(lv_obj_set_style_pad_top), - ESP_ELFSYM_EXPORT(lv_obj_set_style_pad_bottom), - ESP_ELFSYM_EXPORT(lv_obj_set_style_pad_left), - ESP_ELFSYM_EXPORT(lv_obj_set_style_pad_right), - ESP_ELFSYM_EXPORT(lv_obj_set_style_pad_column), - ESP_ELFSYM_EXPORT(lv_obj_set_style_pad_row), - ESP_ELFSYM_EXPORT(lv_obj_set_style_border_post), - ESP_ELFSYM_EXPORT(lv_obj_set_style_border_side), - ESP_ELFSYM_EXPORT(lv_obj_set_style_text_opa), - ESP_ELFSYM_EXPORT(lv_obj_set_style_text_align), - ESP_ELFSYM_EXPORT(lv_obj_set_style_text_color), - ESP_ELFSYM_EXPORT(lv_obj_set_style_text_font), - ESP_ELFSYM_EXPORT(lv_obj_set_style_text_decor), - ESP_ELFSYM_EXPORT(lv_obj_set_style_text_letter_space), - ESP_ELFSYM_EXPORT(lv_obj_set_style_text_line_space), - ESP_ELFSYM_EXPORT(lv_obj_set_style_text_outline_stroke_color), - ESP_ELFSYM_EXPORT(lv_obj_set_style_text_outline_stroke_opa), - ESP_ELFSYM_EXPORT(lv_obj_set_style_text_outline_stroke_width), - ESP_ELFSYM_EXPORT(lv_obj_set_user_data), - ESP_ELFSYM_EXPORT(lv_obj_set_align), - ESP_ELFSYM_EXPORT(lv_obj_set_x), - ESP_ELFSYM_EXPORT(lv_obj_set_y), - ESP_ELFSYM_EXPORT(lv_obj_set_size), - ESP_ELFSYM_EXPORT(lv_obj_set_width), - ESP_ELFSYM_EXPORT(lv_obj_set_height), - ESP_ELFSYM_EXPORT(lv_obj_send_event), - ESP_ELFSYM_EXPORT(lv_obj_set_style_outline_color), - ESP_ELFSYM_EXPORT(lv_obj_set_style_outline_width), - ESP_ELFSYM_EXPORT(lv_obj_set_style_outline_pad), - ESP_ELFSYM_EXPORT(lv_obj_set_style_outline_opa), - ESP_ELFSYM_EXPORT(lv_obj_scroll_to_y), - ESP_ELFSYM_EXPORT(lv_obj_set_scrollbar_mode), - ESP_ELFSYM_EXPORT(lv_obj_get_child_count), - ESP_ELFSYM_EXPORT(lv_obj_get_child), - // lv_font - ESP_ELFSYM_EXPORT(lv_font_get_default), - // lv_theme - ESP_ELFSYM_EXPORT(lv_theme_get_color_primary), - ESP_ELFSYM_EXPORT(lv_theme_get_color_secondary), - ESP_ELFSYM_EXPORT(lv_theme_get_font_small), - ESP_ELFSYM_EXPORT(lv_theme_get_font_normal), - ESP_ELFSYM_EXPORT(lv_theme_get_font_large), - // lv_button - ESP_ELFSYM_EXPORT(lv_button_create), - // lv_buttonmatrix - ESP_ELFSYM_EXPORT(lv_buttonmatrix_create), - ESP_ELFSYM_EXPORT(lv_buttonmatrix_get_button_text), - ESP_ELFSYM_EXPORT(lv_buttonmatrix_get_map), - ESP_ELFSYM_EXPORT(lv_buttonmatrix_get_one_checked), - ESP_ELFSYM_EXPORT(lv_buttonmatrix_get_selected_button), - ESP_ELFSYM_EXPORT(lv_buttonmatrix_set_button_ctrl), - ESP_ELFSYM_EXPORT(lv_buttonmatrix_set_button_ctrl_all), - ESP_ELFSYM_EXPORT(lv_buttonmatrix_set_ctrl_map), - ESP_ELFSYM_EXPORT(lv_buttonmatrix_set_map), - ESP_ELFSYM_EXPORT(lv_buttonmatrix_set_one_checked), - ESP_ELFSYM_EXPORT(lv_buttonmatrix_set_button_width), - ESP_ELFSYM_EXPORT(lv_buttonmatrix_set_selected_button), - // lv_label - ESP_ELFSYM_EXPORT(lv_label_create), - ESP_ELFSYM_EXPORT(lv_label_cut_text), - ESP_ELFSYM_EXPORT(lv_label_get_long_mode), - ESP_ELFSYM_EXPORT(lv_label_set_long_mode), - ESP_ELFSYM_EXPORT(lv_label_get_text), - ESP_ELFSYM_EXPORT(lv_label_set_text), - ESP_ELFSYM_EXPORT(lv_label_set_text_fmt), - // lv_switch - ESP_ELFSYM_EXPORT(lv_switch_create), - // lv_checkbox - ESP_ELFSYM_EXPORT(lv_checkbox_create), - ESP_ELFSYM_EXPORT(lv_checkbox_set_text), - ESP_ELFSYM_EXPORT(lv_checkbox_get_text), - ESP_ELFSYM_EXPORT(lv_checkbox_set_text_static), - // lv_bar - ESP_ELFSYM_EXPORT(lv_bar_create), - ESP_ELFSYM_EXPORT(lv_bar_get_max_value), - ESP_ELFSYM_EXPORT(lv_bar_get_min_value), - ESP_ELFSYM_EXPORT(lv_bar_get_mode), - ESP_ELFSYM_EXPORT(lv_bar_get_start_value), - ESP_ELFSYM_EXPORT(lv_bar_get_value), - ESP_ELFSYM_EXPORT(lv_bar_set_mode), - ESP_ELFSYM_EXPORT(lv_bar_set_range), - ESP_ELFSYM_EXPORT(lv_bar_set_start_value), - ESP_ELFSYM_EXPORT(lv_bar_set_value), - ESP_ELFSYM_EXPORT(lv_bar_is_symmetrical), - // lv_dropdown - ESP_ELFSYM_EXPORT(lv_dropdown_create), - ESP_ELFSYM_EXPORT(lv_dropdown_add_option), - ESP_ELFSYM_EXPORT(lv_dropdown_clear_options), - ESP_ELFSYM_EXPORT(lv_dropdown_close), - ESP_ELFSYM_EXPORT(lv_dropdown_get_dir), - ESP_ELFSYM_EXPORT(lv_dropdown_get_list), - ESP_ELFSYM_EXPORT(lv_dropdown_get_option_count), - ESP_ELFSYM_EXPORT(lv_dropdown_get_option_index), - ESP_ELFSYM_EXPORT(lv_dropdown_get_options), - ESP_ELFSYM_EXPORT(lv_dropdown_get_selected), - ESP_ELFSYM_EXPORT(lv_dropdown_get_selected_str), - ESP_ELFSYM_EXPORT(lv_dropdown_get_selected_highlight), - ESP_ELFSYM_EXPORT(lv_dropdown_set_dir), - ESP_ELFSYM_EXPORT(lv_dropdown_set_options), - ESP_ELFSYM_EXPORT(lv_dropdown_set_options_static), - ESP_ELFSYM_EXPORT(lv_dropdown_set_selected), - ESP_ELFSYM_EXPORT(lv_dropdown_set_selected_highlight), - ESP_ELFSYM_EXPORT(lv_dropdown_set_symbol), - ESP_ELFSYM_EXPORT(lv_dropdown_set_text), - ESP_ELFSYM_EXPORT(lv_dropdown_open), - // lv_list - ESP_ELFSYM_EXPORT(lv_list_create), - ESP_ELFSYM_EXPORT(lv_list_add_text), - ESP_ELFSYM_EXPORT(lv_list_add_button), - ESP_ELFSYM_EXPORT(lv_list_get_button_text), - ESP_ELFSYM_EXPORT(lv_list_set_button_text), - // lv_textarea - ESP_ELFSYM_EXPORT(lv_textarea_create), - ESP_ELFSYM_EXPORT(lv_textarea_get_accepted_chars), - ESP_ELFSYM_EXPORT(lv_textarea_get_label), - ESP_ELFSYM_EXPORT(lv_textarea_get_max_length), - ESP_ELFSYM_EXPORT(lv_textarea_get_one_line), - ESP_ELFSYM_EXPORT(lv_textarea_get_text), - ESP_ELFSYM_EXPORT(lv_textarea_get_text_selection), - ESP_ELFSYM_EXPORT(lv_textarea_set_one_line), - ESP_ELFSYM_EXPORT(lv_textarea_set_accepted_chars), - ESP_ELFSYM_EXPORT(lv_textarea_set_align), - ESP_ELFSYM_EXPORT(lv_textarea_set_password_bullet), - ESP_ELFSYM_EXPORT(lv_textarea_set_password_mode), - ESP_ELFSYM_EXPORT(lv_textarea_set_password_show_time), - ESP_ELFSYM_EXPORT(lv_textarea_set_placeholder_text), - ESP_ELFSYM_EXPORT(lv_textarea_set_text), - ESP_ELFSYM_EXPORT(lv_textarea_set_text_selection), - ESP_ELFSYM_EXPORT(lv_textarea_set_max_length), - ESP_ELFSYM_EXPORT(lv_textarea_set_cursor_click_pos), - ESP_ELFSYM_EXPORT(lv_textarea_add_text), - // lv_palette - ESP_ELFSYM_EXPORT(lv_palette_main), - ESP_ELFSYM_EXPORT(lv_palette_darken), - ESP_ELFSYM_EXPORT(lv_palette_lighten), - // lv_display - ESP_ELFSYM_EXPORT(lv_display_get_default), - ESP_ELFSYM_EXPORT(lv_display_get_horizontal_resolution), - ESP_ELFSYM_EXPORT(lv_display_get_vertical_resolution), - ESP_ELFSYM_EXPORT(lv_display_get_physical_horizontal_resolution), - ESP_ELFSYM_EXPORT(lv_display_get_physical_vertical_resolution), - ESP_ELFSYM_EXPORT(lv_display_dpx), - // lv_pct - ESP_ELFSYM_EXPORT(lv_pct), - ESP_ELFSYM_EXPORT(lv_pct_to_px), - // lv_spinbox - ESP_ELFSYM_EXPORT(lv_spinbox_create), - ESP_ELFSYM_EXPORT(lv_spinbox_decrement), - ESP_ELFSYM_EXPORT(lv_spinbox_get_rollover), - ESP_ELFSYM_EXPORT(lv_spinbox_get_step), - ESP_ELFSYM_EXPORT(lv_spinbox_get_value), - ESP_ELFSYM_EXPORT(lv_spinbox_increment), - ESP_ELFSYM_EXPORT(lv_spinbox_set_rollover), - ESP_ELFSYM_EXPORT(lv_spinbox_set_step), - ESP_ELFSYM_EXPORT(lv_spinbox_set_range), - ESP_ELFSYM_EXPORT(lv_spinbox_set_digit_format), - ESP_ELFSYM_EXPORT(lv_spinbox_set_digit_step_direction), - ESP_ELFSYM_EXPORT(lv_spinbox_set_value), - ESP_ELFSYM_EXPORT(lv_spinbox_set_cursor_pos), - ESP_ELFSYM_EXPORT(lv_spinbox_step_next), - ESP_ELFSYM_EXPORT(lv_spinbox_step_prev), - // lv_indev - ESP_ELFSYM_EXPORT(lv_indev_get_type), - ESP_ELFSYM_EXPORT(lv_indev_get_point), - ESP_ELFSYM_EXPORT(lv_indev_get_display), - ESP_ELFSYM_EXPORT(lv_indev_get_key), - ESP_ELFSYM_EXPORT(lv_indev_get_gesture_dir), - ESP_ELFSYM_EXPORT(lv_indev_get_state), - ESP_ELFSYM_EXPORT(lv_indev_active), - // lv_timer - ESP_ELFSYM_EXPORT(lv_timer_handler), - ESP_ELFSYM_EXPORT(lv_timer_handler_run_in_period), - ESP_ELFSYM_EXPORT(lv_timer_periodic_handler), - ESP_ELFSYM_EXPORT(lv_timer_handler_set_resume_cb), - ESP_ELFSYM_EXPORT(lv_timer_create_basic), - ESP_ELFSYM_EXPORT(lv_timer_create), - ESP_ELFSYM_EXPORT(lv_timer_delete), - ESP_ELFSYM_EXPORT(lv_timer_pause), - ESP_ELFSYM_EXPORT(lv_timer_resume), - ESP_ELFSYM_EXPORT(lv_timer_set_cb), - ESP_ELFSYM_EXPORT(lv_timer_set_period), - ESP_ELFSYM_EXPORT(lv_timer_ready), - ESP_ELFSYM_EXPORT(lv_timer_set_repeat_count), - ESP_ELFSYM_EXPORT(lv_timer_set_auto_delete), - ESP_ELFSYM_EXPORT(lv_timer_set_user_data), - ESP_ELFSYM_EXPORT(lv_timer_reset), - ESP_ELFSYM_EXPORT(lv_timer_enable), - ESP_ELFSYM_EXPORT(lv_timer_get_idle), - ESP_ELFSYM_EXPORT(lv_timer_get_time_until_next), - ESP_ELFSYM_EXPORT(lv_timer_get_next), - ESP_ELFSYM_EXPORT(lv_timer_get_user_data), - ESP_ELFSYM_EXPORT(lv_timer_get_paused), - // lvgl other - ESP_ELFSYM_EXPORT(lv_refr_now), - ESP_ELFSYM_EXPORT(lv_line_create), - ESP_ELFSYM_EXPORT(lv_line_set_points), - ESP_ELFSYM_EXPORT(lv_line_set_points_mutable), - // lv_group - ESP_ELFSYM_EXPORT(lv_group_remove_obj), - ESP_ELFSYM_EXPORT(lv_group_focus_obj), - ESP_ELFSYM_EXPORT(lv_group_get_default), - ESP_ELFSYM_EXPORT(lv_group_add_obj), - ESP_ELFSYM_EXPORT(lv_group_set_default), - ESP_ELFSYM_EXPORT(lv_group_set_editing), - // lv_mem - ESP_ELFSYM_EXPORT(lv_free), - ESP_ELFSYM_EXPORT(lv_malloc), - // lv_draw - ESP_ELFSYM_EXPORT(lv_draw_task_get_draw_dsc), - ESP_ELFSYM_EXPORT(lv_draw_task_get_label_dsc), - ESP_ELFSYM_EXPORT(lv_draw_task_get_fill_dsc), - // lv_image - ESP_ELFSYM_EXPORT(lv_image_create), - ESP_ELFSYM_EXPORT(lv_image_set_src), + // stdio.h ESP_ELFSYM_EXPORT(rename), // dirent.h @@ -638,6 +347,12 @@ uintptr_t tt_symbol_resolver(const char* symbolName) { } } + auto& module_parent = tt::getModuleParent(); + uintptr_t symbol_address; + if (module_parent_resolve_symbol(&module_parent, symbolName, &symbol_address)) { + return symbol_address; + } + return 0; } @@ -645,7 +360,9 @@ void tt_init_tactility_c() { elf_set_symbol_resolver(tt_symbol_resolver); } -} // extern "C" +} + +// extern "C" #else // Simulator diff --git a/TactilityKernel/Include/tactility/module.h b/TactilityKernel/Include/tactility/module.h index bd47e34ee..7895705d4 100644 --- a/TactilityKernel/Include/tactility/module.h +++ b/TactilityKernel/Include/tactility/module.h @@ -1,16 +1,28 @@ // SPDX-License-Identifier: Apache-2.0 #pragma once +#include "error.h" +#include +#include + #ifdef __cplusplus extern "C" { #endif -#include "error.h" -#include - struct ModuleParent; struct ModuleParentPrivate; +#define MODULE_SYMBOL_TERMINATOR { NULL, NULL } +#define DEFINE_MODULE_SYMBOL(symbol) { #symbol, (void*)&symbol } + +/** A binary symbol like a function or a variable. */ +struct ModuleSymbol { + /** The name of the symbol. */ + const char* name; + /** The address of the symbol. */ + const void* symbol; +}; + /** * A module is a collection of drivers or other functionality that can be loaded and unloaded at runtime. */ @@ -38,6 +50,13 @@ struct Module { */ error_t (*stop)(void); + /** + * A list of symbols exported by the module. + * Should be terminated by MODULE_SYMBOL_TERMINATOR. + * Can be a NULL value. + */ + const struct ModuleSymbol* symbols; + struct { bool started; struct ModuleParent* parent; @@ -69,6 +88,16 @@ error_t module_parent_construct(struct ModuleParent* parent); */ error_t module_parent_destruct(struct ModuleParent* parent); +/** + * @brief Resolve a symbol from the module parent. + * @details This function iterates through all started modules in the parent and attempts to resolve the symbol. + * @param parent parent module + * @param symbol_name name of the symbol to resolve + * @param symbol_address pointer to store the address of the resolved symbol + * @return true if the symbol was found, false otherwise + */ +bool module_parent_resolve_symbol(struct ModuleParent* parent, const char* symbol_name, uintptr_t* symbol_address); + /** * @brief Set the parent of the module. * @warning must call before module_start() @@ -99,6 +128,16 @@ bool module_is_started(struct Module* module); */ error_t module_stop(struct Module* module); +/** + * @brief Resolve a symbol from the module. + * @details The module must be started for symbol resolution to succeed. + * @param module module + * @param symbol_name name of the symbol to resolve + * @param symbol_address pointer to store the address of the resolved symbol + * @return true if the symbol was found and the module is started, false otherwise + */ +bool module_resolve_symbol(struct Module* module, const char* symbol_name, uintptr_t* symbol_address); + #ifdef __cplusplus } #endif diff --git a/TactilityKernel/Source/module.cpp b/TactilityKernel/Source/module.cpp index 0cde2b3d2..9a43becd8 100644 --- a/TactilityKernel/Source/module.cpp +++ b/TactilityKernel/Source/module.cpp @@ -1,4 +1,5 @@ #include +#include #include #include #include @@ -41,6 +42,21 @@ error_t module_parent_destruct(struct ModuleParent* parent) { return ERROR_NONE; } +bool module_parent_resolve_symbol(ModuleParent* parent, const char* symbol_name, uintptr_t* symbol_address) { + auto* data = static_cast(parent->module_parent_private); + mutex_lock(&data->mutex); + for (auto* module : data->modules) { + if (!module_is_started(module)) + continue; + if (module_resolve_symbol(module, symbol_name, symbol_address)) { + mutex_unlock(&data->mutex); + return true; + } + } + mutex_unlock(&data->mutex); + return false; +} + #pragma endregion #pragma region module @@ -102,6 +118,20 @@ error_t module_stop(struct Module* module) { return error; } +bool module_resolve_symbol(Module* module, const char* symbol_name, uintptr_t* symbol_address) { + if (!module_is_started(module)) return false; + auto* symbol_ptr = module->symbols; + if (symbol_ptr == nullptr) return false; + while (symbol_ptr->name != nullptr) { + if (strcmp(symbol_ptr->name, symbol_name) == 0) { + *symbol_address = reinterpret_cast(symbol_ptr->symbol); + return true; + } + symbol_ptr++; + } + return false; +} + #pragma endregion } diff --git a/Tests/TactilityKernel/ModuleTest.cpp b/Tests/TactilityKernel/ModuleTest.cpp index 303ec8242..9d42168dd 100644 --- a/Tests/TactilityKernel/ModuleTest.cpp +++ b/Tests/TactilityKernel/ModuleTest.cpp @@ -35,6 +35,7 @@ TEST_CASE("ModuleParent destruction with children") { .name = "test", .start = test_start, .stop = test_stop, + .symbols = nullptr, .internal = {.started = false, .parent = nullptr} }; @@ -62,6 +63,7 @@ TEST_CASE("Module parent management") { .name = "test", .start = test_start, .stop = test_stop, + .symbols = nullptr, .internal = {.started = false, .parent = nullptr} }; @@ -100,6 +102,7 @@ TEST_CASE("Module lifecycle") { .name = "test", .start = test_start, .stop = test_stop, + .symbols = nullptr, .internal = {.started = false, .parent = nullptr} };