Releases: ItsLimitlezz/firmware
v2.7.19 | LUI v0.5
-Fixed nodes page issue where swiping would send you to that node to message. Now you click the icon.
-Fixed messages going to nodes when swiping on the gutter
v2.7.19 | LUI v0.4
Optimize infinite scroll performance for nodes panel
Major refactoring to eliminate performance bottlenecks during scrolling.
LVGL performance is dominated by object count and update frequency, not visibility.
Key optimizations:
- Separate scroll event handling: continuous scroll (LV_EVENT_SCROLL) only
hides/shows nodes, scroll-end (LV_EVENT_SCROLL_END) handles loading - Remove all filter/status updates from scroll events - defer until scroll completes
- Skip updateNodesFiltered() and updateNodesStatus() during scroll
- Reduce batch load from 20 to 10 nodes per trigger
- Change buffer strategy from 2-node to 0-node (immediate hide)
- Single-pass hide/show logic instead of double-loop iteration
- Early exit at nodesScrollDisplayLimit to avoid processing unloaded nodes
Performance impact:
- Eliminates repeated lv_obj_has_state() calls during scroll
- Avoids expensive strcasestr() and style setters during scroll
- Reduces LVGL object churn from 250 nodes being touched to ~5-6 visible
- Only ~5 LVGL objects rendered during scroll (hidden nodes don't render)
Trade-off: Filters/colors stale during scroll, update only when user stops.
Acceptable: User perceives smooth scroll, updates apply immediately after.
v2.7.19 | LUI v0.3
I’ve optimized the Node Page further and switched back to the drivers for the Lily Go T deck to ensure compatibility. Additionally, I’ve optimized the buffer between pages to avoid a harsh reload.
v2.7.18 | LUI v0.2
Optimize node list rendering with simplified paging and longer cache TTL
-
Introduce rawCount variable to track nodeDB size separately from filtered list
size (totalEntries), eliminating naming ambiguity and potential bugs -
Add locationScreen state tracking to infinite scroll logic, ensuring scroll
viewport resets when switching between modes (Last Heard vs Distance/Bearings) -
Remove complex infinite scroll infrastructure in favor of simple direct paging:
- Replace infiniteScroll_updateViewport() with direct calculation
- Remove infiniteScroll_topNum/bottomNum/resetState/updateRunning tracking
- Eliminate cachedDrawList intermediate buffer
- Render directly from cached filtered list using startIndex/endIndex math
-
Simplify render loop: calculate page slice once, iterate directly through
allNodesList subset without additional buffering or state management -
Increase cache TTL from 2000ms to 5000ms for better efficiency on T-Deck:
- Reduces per-frame cache invalidation checks and allocations
- Still catches position/status updates within reasonable window
- Trade-off: distance/bearing updates appear within 5s instead of 2s
Benefits:
- Fewer CPU cycles per frame (no complex viewport math)
- Reduced memory churn (no intermediate drawList allocations)
- Cleaner, more maintainable code with fewer state variables
- Better performance on resource-constrained ESP32 devices