Repository navigation
Releases: rotorflight/rotorflight-lua-edgetx-suite
Releases · rotorflight/rotorflight-lua-edgetx-suite
Release list
Rotorflight Lua EdgeTX Suite - Snapshot 0.1.6
Features & Enhancements
-
Dynamic ESC Model Identification & Interface Unification (
setup/esc_motors/esc_tools):- Added dynamic ESC model name detection and header display queried directly from hardware via telemetry / MSP.
- Unified device information and capability reporting across all supported ESC manufacturers (AM32, BLHeli_S, Bluejay, Flyrotor, Hobbywing V5, OMP, Scorpion, XDFly, YGE, ZTW).
- Isolated Hobbywing V5 parameter tables to prevent cross-talk and corrected YGE firmware version mapping.
-
ESC Firmware Version & Serial Number / Revision Subheader Display (
setup/esc_motors/esc_tools):- Implemented a compact subheader info line directly beneath the section header across all 10 ESC manufacturer configuration pages (AM32, BLHeli_S, Bluejay, Flyrotor, Hobbywing V5, OMP, Scorpion, XDFly, YGE, ZTW).
- Provides persistent, at-a-glance visibility into firmware versions (
FW), device serial numbers (S/N), and layout revisions (Rev) across all parameter tabs with minimal screen footprint (~18px). - Corrected YGE serial number extraction (
getEscVersion) to parse the 32-bit uint serial number from protocol buffers.
-
Active Profile & Rate Profile Live Resolution (
flight_tuning):- Centralized live profile resolution (
getLiveProfile()) to read active PID and rate profiles directly from telemetry sensors and session state. - Profile adjustments made via transmitter switches or telemetry are instantly reflected across all flight tuning pages without desync.
- Centralized live profile resolution (
-
Motor Override & ESC Motor Test Tool (
setup/esc_motors/motor_override):- Added dedicated Motor Override tool allowing direct spool-up and functional testing of main and tail motors from the radio.
- Multi-tier safety architecture: requires explicit disarm confirmation, hardware arming switch check, deadman timeout watchdog, manual throttle override sliders, and automatic shutoff upon page navigation or telemetry link loss.
-
SD Card Session Logging & Trace Layer (
rfsuite.log):- Implemented structured multi-level logging (
trace,debug,info,warn,error) with ring buffer sink writing session logs directly to SD card. - Added single-writer arbitration between configuration tool and background widgets to avoid file contention.
- Emits timestamps, MSP transport traces, UI lifecycle events, and save refusal explanations.
- Implemented structured multi-level logging (
-
MSP Live Telemetry & Accessors (
tasks/msp/api):- Added modular MSP API endpoints for live analog sensor readings (
MSP_ANALOG) and receiver channel inputs (MSP_RC). - Added self-identification tags for simulator responses in debug traces.
- Added modular MSP API endpoints for live analog sensor readings (
-
Startup Progress & Visual Preparation (
ui/home.lua):- Added smooth animated preparation progress bar on the home start screen.
-
Flight Controller Reboot Policy Documentation (
tasks/msp/save_pipeline.lua):- Embedded explicit Rotorflight 2 flight controller reboot policy guidelines directly into save pipeline headers and architecture documentation.
- Formulated clear boundaries for mandatory reboots (hardware drivers, DMA, UART ports, radio config, ESC protocols, sensor alignment), conditional reboots (swash/tail geometry changes), and non-reboot live tuning (PIDs, rates, governor, filters).
-
Reactive LVGL Telemetry Bindings & Zero-Rebuild Dashboard Engine (
widgets/dashboard):- Migrated telemetry labels, gauges, arcs, duration timers, governor indicators, and stats to reactive getter closures evaluated directly by EdgeTX's native
callRefsloop in C++. - Pruned dynamic sensor data (
voltage,rpm,flightSeconds,fuel,lq, etc.) fromEngine.renderKey, eliminating continuous 2-Hz full-scene teardown and rebuild churn (lvgl.clear()+lvgl.build()). - Scene rebuilds are now strictly confined to layout mutations (flight mode changes
preflight$\rightarrow$ inflight$\rightarrow$ postflight, theme switches, and zone resizing), resulting in zero memory allocations and minimal CPU overhead during steady-state flights.
- Migrated telemetry labels, gauges, arcs, duration timers, governor indicators, and stats to reactive getter closures evaluated directly by EdgeTX's native
-
MSP API Return Format Normalization (
tasks/msp/api):- Standardized all 102 MSP API modules (
Api.parse) to return a clean, flat table (return { ... }) rather than mixed wrapped tables ({ parsed = ... }), eliminating duplicate unnesting logic across servo, esc, and setup pages and improving API tester introspection.
- Standardized all 102 MSP API modules (
Bug Fixes & Improvements
- Dashboard Model Preferences Cache Invalidation & Reload Decoupling (
widgets/dashboard,lib/model_preferences.lua,tasks/msp/runtime.lua) (fixes #186):- Fixed an issue where changing theme selection or model preference overrides in the suite did not update the active dashboard widget until a transmitter power cycle due to stale in-memory preferences and RAM cache lookups.
- Decoupled disk I/O from theme module loading during preference reloads (
reloadPreferencesIfNeeded) so reading INI files and building the theme occur on separate passes, eliminating EdgeTX CPU limit instruction budget faults. - Hardened reload lifecycle against mid-load faults: pre-cleared theme and memo state before disk reads, deferred baseline stamp/sequence adoption and pending flag clearance until after successful I/O, and protected active session preferences against stale MSP runtime republishes.
- Initial Fuel Announcement Preference Authority & Redundant Flag Cleanup (
lib/audio.lua,app/pages/setup/model/page.lua) — ref #191, ref #187:- Established the radio preference (
Audio / Events -> Battery -> Initial Fuel Announcement, default: enabled) as the single source of truth for the initial fuel announcement upon connection. - Fixed
initialFuelWanted()inlib/audio.lua, which previously consultedFLAG_TELL_CAPACITYfrommodel_flagsand silenced announcements for all pilots on default flight controller configurations (model_flags = 0). - Removed the redundant and conflicting
FLAG_TELL_CAPACITYswitch fromapp/pages/setup/model/page.lua, preventing dual-switch ambiguity where neither control could reliably silence the callout independently.
- Established the radio preference (
- Dashboard Postflight Stats: Missing Handlers and Live-Value Fallthrough (
widgets/dashboard) — fixes #133:- Added per-flight tracking for
currentFlightMaxVoltage/lastFlightMaxVoltage,currentFlightMaxLq/lastFlightMaxLq,currentFlightMinBecVoltage/lastFlightMinBecVoltage, andlastFlightEndingVoltageinruntime.lua(updateDerivedFlightState). - Added stat handlers in
objects/text/stats.luaformax+voltage(MAX VOLTAGE tile inrfstatustheme),max+link(LINK MAX in@rt-rc-n),min+link(LINK MIN in@srb-rc), andlast+voltage(ENDING VOLTAGE in@srb-rc). - Fixed
min+bec_voltagehandler to use the dedicated BEC minimum accumulator (lastFlightMinBecVoltage) instead of incorrectly returning the main pack minimum voltage. - Removed the
/2transform workaround from@aerc-n/postflight.lua's MIN BEC VOLTAGE tile; the accumulator now tracks the actual BEC minimum directly. - Fixed stats handlers to prioritize current in-flight values over previous flights (
currentFlight… or last…), and removed live sensor fallbacks so tiles render--before the first flight instead of leaking live readings. - Made any unresolvable
(stattype, source)pair render--instead of silently falling through to the live telemetry value, turning future theme typos into immediately visible blank values.
- Added per-flight tracking for
- Dashboard Fullscreen Menu EEPROM Commit Write Flag (
widgets/dashboard/fullscreen_menu.lua) (fixes #135):- Added explicit
isWrite = trueflag to the queued EEPROM commit after a battery profile change, ensuring the message with an empty payload is recognized as a write rather than defaulting to a read request. Dispatches as an MSP write frame (CRSF_FRAMETYPE_MSP_WRITE) on CRSF and properly triggers MSP response cache invalidation.
- Added explicit
- Dashboard ESC Temperature Gauge Arc Coloring (
widgets/dashboard/objects/gauge.lua) (fixes #132):- Fixed
getArcValueColorfalling through to the LiPo cell-voltage branch for temperature sources (esc_temp,mcu_temp), which divided the temperature value by the estimated battery cell count and applied ascending (low = bad) threshold logic — causing cold ESC temperatures to display as critical (red) and hot temperatures as OK (green). - Added explicit temperature source detection (
isTempSource) or temperature unit fallback (°C/°F) with inverted threshold coloring: low/cool = green, high/hot = orange/red. - Temperature thresholds resolve from box properties (
warntemp/alerttemp), theme configuration (esctemp_warn/esctemp_alert), or sensible defaults (90 °C warn,max(warn + 15, 105)°C alert; when alert threshold defaults, it is clamped to gauge maximum to remain reachable on custom scales). - Preserved valid cold / freezing temperatures (<= 0 °C) in OK green and properly distinguish missing telemetry (
curHasValue == false) for arc background coloring. - Passed temperature, unit, and scale flags directly from
renderArcto avoid redundant lookups and eliminated unit/source mismatches under Fahrenheit mode. - Eliminated dependency on battery cell count for temperature arc coloring.
- Fixed
- Dashboard Stats Precedence, BEC Voltage Correction & Governor Optimization (
widgets/dashboard):- Stats Box Flight Precedence & BEC Voltage Correction: Corrected stat value precedence in
widgets/dashboard/objects/text/stats.luaso current flight extremes (currentFlight...) take precedence over previous flight aggregates (lastFlight...) while in flight, cleanly falling back to previous flight values once disarmed. Resolved a copy-paste error in thebec_voltagebranch where main battery pack voltage (lastMinVoltage) was displayed instead of BEC voltage, and implemented in-flight minimum BEC voltage tracking (currentFlightMinBecVoltage/ `lastMin...
- Stats Box Flight Precedence & BEC Voltage Correction: Corrected stat value precedence in
Rotorflight Lua EdgeTX Suite - Snapshot 0.1.5
🚀 What's New in 0.1.5
This release contains a massive suite-wide stability and bugfix update, primarily focusing on MSP communication reliability, ESC-specific fixes, and UI improvements.
📡 MSP & Communication Stability
- Retry mechanisms: The suite now actively re-sends chunks if the uplink buffer refuses them, and gives the final retry a proper reply window before timing out.
- Queue management: Giving up on a single failing message no longer clears the entire queue for everyone else. The receive reassembly is now cleanly reset when the queue is deliberately cleared.
- Cache & Profiles: Profile-dependent replies are no longer cached under a guessed profile. Furthermore, the cache is now instantly dropped when a write is sent, rather than waiting for an acknowledgement.
- Read efficiency: The suite can now answer a re-read directly from the last reply when its cache key still holds.
🔌 ESC Specific Fixes
- Hobbywing: Fixed failing parameter saves by writing the device-info block back byte-for-byte instead of re-encoding.
- FlyRotor: Corrected serialization by honoring the byte-order flag and stopped accidentally rewriting/corrupting the ESC serial number.
- Scorpion: The suite now correctly refuses replies that are either incomplete or don't actually belong to a Scorpion ESC.
- YGE: Padded the YGE block with the exact eight bytes the ESC firmware expects.
🎨 UI & Usability
- Saving & Dialogs: Replaced non-existent
lvgl.alertcalls withlvgl.message. Save operations are now correctly reported when the FC actually acknowledges them, not when they are merely queued. - Safety: The suite now prompts for confirmation before saving if the arming state cannot be read at all.
- Loading Screens: Improved visual feedback. The loading bar track is now visually distinct from the fill color, loading boxes are captioned with titles instead of sentences, and targets now open without a superfluous loading frame blocking them.
- Help View: The help view now correctly stays alive across repaints it did not ask for, and is now properly captioned with the page it belongs to.
- Embeddability: Embedding hosts can now ask the tool for a repaint.
⚙️ Telemetry Widget & Dashboard
- Performance: Dashboard runtime debug logs and widget entry point logs are now strictly hidden behind the debug level. To save processing time, log strings are now only built when they are actually going to be written.
🛠 Simulator & Packaging (i18n)
- Localisation (i18n): Save dialog texts are now resolved at package time so they never show up empty. Dynamic lookups were rewritten into a format the packager can resolve natively.
- Simulator Fixtures: Fixed a servo property misalignment where every servo in the fixture was missing a field, and repaired the YGE simulator fixture layout.
- Data Mapping:
servo_countis now correctly read directly out of the status reply rather than off its wrapper.
Rotorflight Lua EdgeTX Suite - Snapshot 0.1.4
Bug Fixes & Improvements
- Blackbox Status Page:
- Fixed a nil index error (
attempt to index a nil value (upvalue 'SdcardSummaryApi')) occurring when navigating away or closing the Blackbox status page while MSP summary queries are in flight. - Safeguarded asynchronous MSP response callbacks against page unloads and nil module references.
- Fixed a nil index error (
- Controls & Modes Setup (
setup/controls/modes):- Standardized control heights for range inputs and action buttons (
+ Add,Set,X, AUX/Logic choices, Min/Max numbers) to match the standard widget height used in the Rates and PIDs tables. - Fixed focus loss when editing numbers or dropdowns by removing premature full-page rebuild calls from value setters.
- Expanded row heights and inter-row spacing to prevent separator lines from intersecting input controls.
- Standardized control heights for range inputs and action buttons (
- Controls & Failsafe Setup (
setup/controls/failsafe):- Standardized mode choice and failsafe pulse value inputs to native framework widget dimensions.
- Adjusted row height to
56 pxwith centered vertical offsets to ensure clean visual separation and avoid divider line clipping.
- Hobbywing Platinum V5 ESC Configuration (
setup/esc_motors/esc_tools/hw5):- Fixed MSP parameter parsing and write serialization by implementing dynamic
itemBytesprofile layouts (DEFAULT_LAYOUT,HW1132_LAYOUT,HW1128_LAYOUT,OPTO_LAYOUT) matching Rotorflight firmware specifications. - Fixed shifted and corrupted field values on OPTO ESCs (130A HV, 200A HV, 260A HV) caused by omitted BEC voltage field in OPTO telemetry payloads.
- Corrected raw offset translation for
startup_time(value = raw + 4) on reading and writing. - Fixed inverted
Active Freewheeloption mapping (0 = Enabled,1 = Disabled). - Added support for
response_timesetting (1–10) on compatible ESC models (e.g. HW1132). - Improved ESC model string decoding in
init.luato read full 31-byte model identification. - Corrected profile detection and layout field filtering in
profile.lua.
- Fixed MSP parameter parsing and write serialization by implementing dynamic
Rotorflight Lua EdgeTX Suite - Snapshot 0.1.0
Features
- Telemetry Flight Logs & Dashboard (
diagnostics/flight_logs):- Implemented flight log browser and analytical dashboard to inspect EdgeTX CSV log files directly on the radio.
- Added statistics calculations including min/max/average cell voltages, battery capacity consumption, RPM, temperatures, and flight durations.
- Added interactive
LoadingOverlaywith non-blocking incremental parsing and proactive memory cleanup to keep the UI responsive on large CSV files.
- RFSuite EdgeTX Updater Tool & CI:
- Added standalone and integrated EdgeTX Updater tool for automatic online and local updating of RFSuite packages.
- Automated detection of available languages from repository branches and release tags.
- Added multi-language CI build workflows and packaging scripts.
- Governor Setup Pages:
- Ported Governor General setup page (
governor/general). - Ported Governor Ramp Time configuration (
governor/ramps). - Ported Governor Filters setup page (
governor/filters). - Ported Governor Bypass Curve configuration (
governor/bypass).
- Ported Governor General setup page (
- Dynamic ESC Sensor Detection:
- Added background
esc_sensor_configtask triggered on connection to query and identify active ESC telemetry protocol.
- Added background
- Manufacturer ESC Tools Integration:
- Ported and integrated full ESC configuration suites for Bluejay, BLHeli_S, Flyrotor, Hobbywing V5, OMP, Scorpion, XD-Fly, YGE, and ZTW.
Localization (i18n)
- Localized flight tuning pages (PIDs, Rates, Governor, Rates Advanced) in German and English with fallback cleanup.
Bug Fixes & Performance
- Telemetry CSV Parsing Accuracy: Improved header validation, outlier filtering (e.g. 0 RPM spikes), and memory efficiency during log analysis.
- Reconnect Performance: Resolved telemetry reconnect slowdowns and memory buildup using proactive garbage collection and cached LQ checks.