ASR (Copy Assist) indicator stays disabled in WFM mode on IC-705 — mode not included in isVoiceMode() What happened?

Open
#5,301 2 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
4/5
Estimated time
3-5 days
Newbie friendliness
45/100
Issue type
Feature
Clarity
Mostly clear
Activity status
Active
Tech stack
cpp
Domain
desktop

Research direction

Start with src/gui/VoiceModeGate.h and trace its use in src/gui/MainWindow.cpp, especially the ASR indicator update. Then inspect src/core/backends/icom/IcomModels.cpp, src/core/backends/icom/CivCodec.cpp, src/gui/RxApplet.cpp, and the ASR tap files to determine whether WFM provides usable speech audio. Done means the intended WFM policy is decided and the indicator and audio path are verified against it.

Written by the indexing model from the issue text.

Description

aetherclaude-eligible audio bug enhancement GUI maintainer-review
Report preparation
  • I used the AI-assisted bug report tool (Help → Support → File an Issue)
  • I have attached a support bundle or log file
What happened?

Title: ASR (Copy Assist) indicator stays disabled in WFM mode on IC-705 — mode not included in isVoiceMode()
What happened?

While operating an IC-705 (via the networked-Icom/CI-V backend) in WFM mode, the ASR (Copy Assist) status-bar indicator is greyed out and cannot be clicked to open the transcription panel.

What did you expect?

To be able to enable ASR/Copy Assist while receiving in WFM mode, since WFM can carry intelligible speech (e.g. broadcast FM, weather-radio voice announcements).

Steps to reproduce
Connect to an IC-705 over the networked-Icom CI-V backend.
Select or toggle WFM on the active slice (the VFO-flag WFM button, not the mode combo — WFM is not a m_modeCombo entry).
Attempt to click the ASR/Copy Assist indicator in the status bar.
Observe the indicator is dimmed/disabled and does not open the Copy Assist panel.
Radio model & firmware

Icom IC-705 (networked/CI-V backend — “early” support tier per project docs)

OS & version
AetherSDR: 26.8.4
Qt: 6.8.3
OS: macOS
Developer Notes

This is not a crash — it's deliberate, current gating logic, and the report is really "should WFM count as a voice mode?"

Root cause / relevant code:

src/gui/VoiceModeGate.h, lines 26–32 — isVoiceMode() is the single shared predicate used by both the DVK indicator and the ASR/Copy Assist indicator. Its mode list is:
cpp
return mode == QLatin1String("USB") || mode == QLatin1String("LSB")
|| mode == QLatin1String("AM") || mode == QLatin1String("SAM")
|| mode == QLatin1String("FM") || mode == QLatin1String("NFM")
|| mode == QLatin1String("DFM");

"WFM" is absent from this list. The header comment (lines 8–11) states the intent explicitly: only modes that "carry human-intelligible voice audio" are included, and WFM isn't among them by design — the project docs describe WFM as a per-slice demodulator aimed at satellite data, not voice.

src/gui/MainWindow.cpp, updateKeyerAvailability() (~line 9584 onward, ASR-specific block starting ~line 9695 under #ifdef AETHER_ASR_ENABLED): reads activeSlice()->mode() and calls isVoiceMode() on it (line 9733: const bool asrIsVoice = asrSlice && isVoiceMode(asrSlice->mode());). The indicator's enabled state is set at line ~9793: m_asrIndicator->setEnabled(asrIsVoice || asrVisible); — so with an active slice in WFM, asrIsVoice is false and the indicator stays disabled unless a panel is already open.
src/core/backends/icom/IcomModels.cpp, lines 231–232 confirm WFM is a real, receive-only mode reported by the IC-705 backend:
cpp
constexpr std::array<std::string_view, 10> kIc705Modes{
"USB", "LSB", "CW", "CWL", "AM", "FM", "DFM", "WFM", "DIGU", "DIGL"};
constexpr std::array<std::string_view, 1> kIc705ReceiveOnlyModes{"WFM"};

and src/core/backends/icom/CivCodec.cpp (lines 308, 352, 405, 497) maps the radio's raw CI-V mode byte to and from the exact string "WFM", so the string comparison in VoiceModeGate.h is comparing against the right value — this isn't a string-mismatch bug, it's a genuine mode-list omission (or, depending on intent, an omission worth revisiting).

src/gui/RxApplet.cpp (~line 539) confirms WFM is toggled via the VFO-flag WFM button rather than appearing in the mode combo, matching your repro steps.
Note src/models/SliceModel.cpp line 70 (filterCarrierStraddlingFamily()) does include "WFM"/"WBFM" alongside FM/NFM for filter-shape purposes — so WFM is already treated as "FM-family" in at least one other subsystem. That inconsistency (FM-family for filter shape, but excluded from voice-mode gating) is worth flagging to maintainers as the crux of the design question: is WFM meant to ever carry ASR-transcribable voice, or is it intentionally satellite/data-only per the roadmap?

Suggested logging categories to enable (Help → Support):

aether.asr.engine (AsrEngine.cpp)
aether.asr.tap (AsrAudioTap.cpp) — confirms whether the audio tap ever attaches
aether.icom.civ / aether.icom.session (IcomCivBackend.cpp, IcomSession.cpp) — confirms the exact mode string the IC-705 is reporting for the active slice at the time of the click
aether.icom.stream (IcomStream.cpp) — rules out a stream-side issue if this turns out to be more than the mode gate

Possible root causes to weigh:

Working as designed — WFM is treated purely as a satellite/data demodulator and Copy Assist is intentionally scoped to conversational voice modes only (matches header comment in VoiceModeGate.h).
Enhancement candidate — WFM legitimately carries speech in some use cases (broadcast FM, weather radio), so adding "WFM" to isVoiceMode() might be reasonable; would need to confirm the ASR audio tap (AsrAudioTap.cpp / AsrTapPolicy.h) receives usable post-DSP audio when the slice is in WFM before changing the gate, since the tap "locks onto a RECEIVER... never onto a slice" per the code comments at ~line 9705–9712 of MainWindow.cpp.

What did you expect?

No response

Steps to reproduce
  1. Connect to radio. 2. Select WFM. 3. Click on ASR
AetherSDR version

v26.8.4

Radio model & firmware

Icom 705

Operating system

macOS

OS version and hardware

Tahoe 26.6.2

Dominant language
C++
Stars
221
Forks
117
Avg merge
2d 7h
Merged PRs (30d)
299

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from aethersdr/AetherSDR

All issues in aethersdr/AetherSDR

Similar issues

More C++ issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.