From 1adfe540f8e20062f13fd293b4ca417cd8e0021e Mon Sep 17 00:00:00 2001 From: Thomas Farstrike Date: Fri, 16 May 2025 10:51:36 +0200 Subject: [PATCH] fix and simplify lvgltest --- .../com.example.helloworld/assets/hello.py | 19 +++----- .../com.example.lvgltest/assets/lvgltest.py | 43 ++++++++----------- 2 files changed, 24 insertions(+), 38 deletions(-) diff --git a/internal_filesystem/apps/com.example.helloworld/assets/hello.py b/internal_filesystem/apps/com.example.helloworld/assets/hello.py index 7d66f2b2..5f4dd123 100644 --- a/internal_filesystem/apps/com.example.helloworld/assets/hello.py +++ b/internal_filesystem/apps/com.example.helloworld/assets/hello.py @@ -2,7 +2,7 @@ # Initialize -import display_driver +import display_driver # not needed, but included because the LVGL simulator does it import lvgl as lv # Create a button with a label @@ -17,17 +17,10 @@ lv.screen_load(scr) # END OF COPY-PASTE FROM https://sim.lvgl.io/v9.0/micropython/ports/webassembly/ -def check_running(timer): - if lv.screen_active() == scr: - print("hello.py is still foreground") - else: +def janitor_cb(timer): + if lv.screen_active() != scr: print("hello.py lost foreground, cleaning up...") - timer1.delete() + janitor.delete() + # No cleanups to do, but in a real app, you might stop timers, deinitialize hardware devices you used, close network connections, etc. -timer1 = lv.timer_create(check_running, 1000, None) - -# Added: wait until the user navigates away instead of stopping immediately. -#while lv.screen_active() == scr: -# import time -# time.sleep_ms(100) -#print("User navigated away from the HelloWorld app. Bye bye!") +janitor = lv.timer_create(janitor_cb, 1000, None) diff --git a/internal_filesystem/apps/com.example.lvgltest/assets/lvgltest.py b/internal_filesystem/apps/com.example.lvgltest/assets/lvgltest.py index 8852e985..d3488b19 100644 --- a/internal_filesystem/apps/com.example.lvgltest/assets/lvgltest.py +++ b/internal_filesystem/apps/com.example.lvgltest/assets/lvgltest.py @@ -1,5 +1,3 @@ -appscreen = lv.screen_active() - import time import random @@ -10,7 +8,7 @@ SPINNER_SIZE = 40 # Size of each spinner in pixels spinner_count = 0 metrics_label = None -def add_spinner_and_update(timer): +def add_spinner(timer): global spinner_count, metrics_label try: x = random.randint(0, appscreen.get_width() - SPINNER_SIZE) @@ -27,27 +25,22 @@ def add_spinner_and_update(timer): metrics_label.set_text(f"Spinners: {spinner_count}") print(f"Finished adding spinner {spinner_count}") -def run_benchmark(): - global spinner_count, metrics_label - print("Starting LVGL spinner benchmark...") - metrics_label = lv.label(appscreen) - metrics_label.set_style_text_color(lv.color_white(), 0) - metrics_label.set_style_bg_color(lv.color_black(), 0) - metrics_label.set_style_bg_opa(lv.OPA.COVER, 0) - metrics_label.set_pos(10, 10) - metrics_label.set_text("Spinners: 0") - timer = lv.timer_create(add_spinner_and_update, 2000, None) - th.disable() # taskhandler control is necessary, otherwise there are concurrency issues - while appscreen == lv.screen_active(): - lv.task_handler() - time.sleep_ms(10) - lv.tick_inc(10) - th.enable() - timer.delete() -try: - run_benchmark() -except Exception as e: - print(f"Error in benchmark: {e}") +def janitor_cb(timer): + if lv.screen_active() != appscreen: + print("lvgltest.py lost foreground, cleaning up...") + janitor.delete() + add_spinner_timer.delete() + +appscreen = lv.screen_active() +metrics_label = lv.label(appscreen) +metrics_label.set_style_text_color(lv.color_white(), 0) +metrics_label.set_style_bg_color(lv.color_black(), 0) +metrics_label.set_style_bg_opa(lv.OPA.COVER, 0) +metrics_label.set_pos(10, 10) +metrics_label.set_text("Spinners: 0") + +print("Starting LVGL spinner benchmark...") +janitor = lv.timer_create(janitor_cb, 500, None) +add_spinner_timer = lv.timer_create(add_spinner, 2000, None) -print("lvgltest.py exiting")