Persist DEXP setting across app restarts#1004
Merged
Merged
Conversation
The Flex radio does not persist the downward expander (DEXP) state across client sessions, so DEXP on/off and level reset to defaults on every reconnect. Save both values to AppSettings on close and restore them in the existing deferred-DSP timer after first slice creation, matching the pattern used for NR2/RN2/NR4/DFNR. Fixes aethersdr#995 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The save-on-close approach fails for radio-applied settings like DEXP: if the radio reboots and resets DEXP to off, the radio status overwrites the model before closeEvent saves it, losing the user's preference. Save DEXP on/off and level to AppSettings immediately when the user changes them in PhoneApplet, so the preference survives radio reboots. The save-on-close in MainWindow remains as a belt-and-suspenders backup. Fixes aethersdr#995 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The save-on-close reads radio state (model), not user intent. If the radio resets DEXP (reboot, error, no firmware persistence), closeEvent was overwriting the user's saved "True" with "False". DEXP is now saved only on user change in PhoneApplet, which captures intent and survives radio resets. Fixes aethersdr#995 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The radio does not echo dexp or noise_gate_level in incremental status messages, so the model never updated after sending commands. Add optimistic model updates to setDexp() and setDexpLevel(), matching the pattern already used by setVoxEnable() and setSpeechProcessorEnable(). This ensures the PhoneApplet UI reflects the user's setting immediately and that the deferred restore on connect actually updates the UI. Fixes aethersdr#995 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2 tasks
aethersdr-agent Bot
pushed a commit
that referenced
this pull request
Apr 10, 2026
* Persist DEXP setting across app restarts The Flex radio does not persist the downward expander (DEXP) state across client sessions, so DEXP on/off and level reset to defaults on every reconnect. Save both values to AppSettings on close and restore them in the existing deferred-DSP timer after first slice creation, matching the pattern used for NR2/RN2/NR4/DFNR. Fixes #995 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * Save DEXP preference on change, not just on close The save-on-close approach fails for radio-applied settings like DEXP: if the radio reboots and resets DEXP to off, the radio status overwrites the model before closeEvent saves it, losing the user's preference. Save DEXP on/off and level to AppSettings immediately when the user changes them in PhoneApplet, so the preference survives radio reboots. The save-on-close in MainWindow remains as a belt-and-suspenders backup. Fixes #995 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * Remove closeEvent DEXP save that overwrites user preference The save-on-close reads radio state (model), not user intent. If the radio resets DEXP (reboot, error, no firmware persistence), closeEvent was overwriting the user's saved "True" with "False". DEXP is now saved only on user change in PhoneApplet, which captures intent and survives radio resets. Fixes #995 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * Add optimistic updates for DEXP setters The radio does not echo dexp or noise_gate_level in incremental status messages, so the model never updated after sending commands. Add optimistic model updates to setDexp() and setDexpLevel(), matching the pattern already used by setVoxEnable() and setSpeechProcessorEnable(). This ensures the PhoneApplet UI reflects the user's setting immediately and that the deferred restore on connect actually updates the UI. Fixes #995 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
setDexp()andsetDexpLevel()in TransmitModel — the radio does not echo these in incremental status, so without optimistic updates the UI never reflected the actual stateThree root causes were addressed:
setDexp()/setDexpLevel()only emitted commands without updating the model, unlikesetVoxEnable()andsetSpeechProcessorEnable()which already had optimistic updatesFixes #995
Test plan
DexpEnabled=TrueandDexpLevelJJ Boyd ~KG4VCF
Co-Authored with Claude Code