feat(kiwisdr): dedicated Support-menu logging categories#3676
Conversation
Adds two QLoggingCategory entries that surface as checkboxes in Help → Support
(auto-built from LogManager's category list):
- aether.kiwisdr ("KiwiSDR", default ON): connect/disconnect, handshake, sample-
rate/waterfall negotiation, reconnect scheduling, profile add/remove, slice
assignment, and the virtual-RX-antenna select/clear (which logs that no antenna
command is sent to the radio — Principle I).
- aether.kiwisdr.audio ("KiwiSDR Audio/DSP", default OFF, verbose): per-source
audio enable/disable/remove and frame-shape diagnostics.
Migrates the existing 14 KiwiSdrClient logging calls off the shared
aether.protocol category onto these, so KiwiSDR logging toggles independently of
SmartSDR protocol logging. Adds lifecycle logging to the previously-silent
KiwiSdrManager and MainWindow_KiwiSdr. Warnings (unsupported stream shapes,
invalid passband) always pass the filter regardless of toggle.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
There was a problem hiding this comment.
Thanks for the follow-up @ten9876 — this is clean and well-scoped. I verified the key behaviors:
Looks good
- The two new categories follow the existing
Q_LOGGING_CATEGORY→m_categories→defaultOnpattern exactly.aether.kiwisdrdeclaredQtDebugMsg+ added todefaultOn(consistent withlcProtocol/lcConnection/lcDiscovery), andaether.kiwisdr.audiodeclaredQtWarningMsg+ left off — so underapplyFilterRules()'saether.*.debug=falsebaseline, audio warnings always pass while debug follows the checkbox. Matches the stated design. - All 14
lcProtocolcall sites inKiwiSdrClient.cppare migrated — base had exactly 14, the diff touches all of them, no stragglers left borrowing the SmartSDR category. - Log placements are safe:
connectProfile's new line sits after theidx/endpoint/hasTrackedSliceearly-returns and only dereferences the validatedm_profiles[idx];displayName()is a publicconstmethod. No null-deref or scope concerns. - No new flat AppSettings keys — auto-persisted via the existing
LogCategory_*path. Good adherence to the settings convention.
One non-blocking note
Because aether.kiwisdr is a QtDebugMsg category, applyFilterRules() only ever toggles its .debug level — the new qCInfo(lcKiwiSdr) lifecycle messages (connect/disconnect/profile/slice/state) will keep printing even when a user unticks the KiwiSDR box; only the qCDebug lines actually go quiet. This is identical to how lcProtocol/lcConnection behave today, so it's a pre-existing codebase convention rather than a defect introduced here — just flagging it since the PR frames the category as a toggle. No change required.
Nice incremental improvement to the Support diagnostics. 👍
🤖 aethersdr-agent · cost: $1.2831 · model: claude-opus-4-8
Summary
Follow-up to #3668. KiwiSDR currently borrows the shared
aether.protocollogging category (so its messages can't be toggled apart from SmartSDR protocol logging), and four of its five source files log nothing at all. This adds two dedicated QLoggingCategory entries that surface as checkboxes in Help → Support → Diagnostic Logging (auto-built fromLogManager's category list).What changed
aether.kiwisdr— "KiwiSDR" (default ON): the connection/diagnosis story — connect/disconnect, handshake, audio-rate/waterfall negotiation, reconnect scheduling, profile add/remove, slice assignment, and the virtual-RX-antenna select/clear (which logs that no antenna command is sent to the radio — Principle I).aether.kiwisdr.audio— "KiwiSDR Audio/DSP" (default OFF, verbose): per-source audio enable/disable/remove and frame-shape diagnostics. Mirrors the existingaether.audio/aether.audio.summarysplit so the high-rate decode chatter is separately toggleable.KiwiSdrClientcalls offaether.protocolonto these categories, so KiwiSDR logging toggles independently of SmartSDR protocol logging.KiwiSdrManagerandMainWindow_KiwiSdr.Notes
AppSettingskeys — the Support dialog auto-persists each category under its existingLogCategory_*key; only the twom_categoriesrows +defaultOnentry are added.QLoggingCategory/LogManager, no platform-specific code.Test plan
mainkiwi_sdr_protocol_test+spectral_nr_testpass🤖 Generated with Claude Code