Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[lvgl] Revise code generation to allow early widget creation #7611

Merged
merged 12 commits into from
Oct 17, 2024

Conversation

clydebarrow
Copy link
Contributor

What does this implement/fix?

The LVGL component relied on the code generation creating lambdas which contained all the code for creating widgets and which were executed during the LVGL setup() function. The reason for this was that the LVGL library could not be initialised until display parameters (dimensions and rotation) were known, which had to wait until after the display was setup.

A major issue with this was the occurrence of calls to modify state of widgets (e.g. from a switch with a restore mode, linked to a widget, trying to set state during the switch setup()). This was worked-around by wrapping all such calls in tests for LVGL initialisation being complete to avoid null pointer references. However this meant some state synchronisation could be lost.

However It transpires that it is not necessary to wait until the display is setup, merely to wait until it is configured since all LVGL needs initially is to get the display parameters. This will be guaranteed by the code generation process with its coroutine structure.

Accordingly the basic initialisation of LVGL is now done in its constructor, allowing all widgets to be created in the ESPHome main() function before any component is setup and avoiding the need for the null pointer test wrappers.

Types of changes

  • Bugfix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to not work as expected)
  • Other

Test Environment

  • ESP32
  • ESP32 IDF
  • ESP8266
  • RP2040
  • BK72xx
  • RTL87xx
  • host

Example entry for config.yaml:

# Example config.yaml

Checklist:

  • The code change is tested and works locally.
  • Tests have been added to verify that the new code works (under tests/ folder).

If user exposed functionality or configuration variables are added/changed:

@codecov-commenter
Copy link

codecov-commenter commented Oct 16, 2024

Codecov Report

All modified and coverable lines are covered by tests ✅

Project coverage is 54.04%. Comparing base (4d8b5ed) to head (e03714e).
Report is 1472 commits behind head on dev.

Additional details and impacted files
@@            Coverage Diff             @@
##              dev    #7611      +/-   ##
==========================================
+ Coverage   53.70%   54.04%   +0.33%     
==========================================
  Files          50       50              
  Lines        9408     9715     +307     
  Branches     1654     1345     -309     
==========================================
+ Hits         5053     5250     +197     
- Misses       4056     4139      +83     
- Partials      299      326      +27     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

@jesserockz jesserockz merged commit 8bbe4ef into esphome:dev Oct 17, 2024
25 checks passed
@github-actions github-actions bot locked and limited conversation to collaborators Oct 20, 2024
@clydebarrow clydebarrow deleted the lvgl-codegen branch October 21, 2024 23:26
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants