Skip to content

Incorrect hardcoded panadapter bandwidth limits in RadioModel restrict valid zoom range #1385

Description

@raymundd

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?

🐞 Bug: Incorrect hardcoded panadapter bandwidth limits in RadioModel restrict valid zoom range

What happened

Panadapter zoom limits in AetherSDR are incorrectly constrained due to hardcoded values in RadioModel.

Specifically:

  • minPanBandwidthMhz() is hardcoded to 0.010 MHz (10 kHz) for all models
  • maxPanBandwidthMhz() uses simplified model-based limits that do not match actual hardware capabilities
  • Maximum bandwidth is arbitrarily limited to values such as 7 MHz and 14 MHz, which do not reflect actual radio bandwidth limit values observed on other client software packages.
double maxPanBandwidthMhz() const {
    if (m_model.contains("6700") || m_model.contains("8600"))
        return 14.0;
    if (m_model.contains("8400"))
        return 7.0;
    if (m_model.contains("6500"))
        return 7.2;
    return 5.4;
}

double minPanBandwidthMhz() const { return 0.010; }  // 10 kHz — all models

These values do not reflect real FlexRadio limits.

Impact

  • Minimum zoom is artificially limited (~10 kHz), preventing access to narrower bandwidths
  • Maximum zoom is arbitrarily capped (e.g., 7 MHz / 14 MHz), preventing access to full hardware-supported range (e.g., ~14.745601 MHz)
  • Results in inconsistent and inaccurate panadapter behavior across different radio models

What I expected

Panadapter zoom limits should match the actual hardware-defined bandwidth limits for each radio model.

Correct values (examples):

  • FLEX-6500: 0.004920 MHz → 14.745601 MHz
  • FLEX-8600: 0.001230 MHz → 14.745601 MHz

These actual limits were observed in TCP packet captures taken when using the official SmartSDR software.

Note: I do not have access to other radio models to verify their exact limits, but they should follow their respective hardware specifications rather than fixed assumptions.


Steps to reproduce

  1. Connect to a FLEX-6500 or FLEX-8600
  2. Open a panadapter
  3. Attempt to:
    • Zoom in to minimum bandwidth
    • Zoom out to maximum bandwidth
  4. Observe:
    • Minimum is clamped to ~10 kHz (too high)
    • Maximum is capped below the true hardware limit

Environment

  • OS: Linux
  • Client: AetherSDR (Qt6/C++20)
  • Radios tested:
    • FLEX-6500
    • FLEX-8600

Suggested fix

  • Replace hardcoded limits in RadioModel with accurate per-model values
  • Remove arbitrary caps (e.g., 7 MHz / 14 MHz) and use real hardware limits
  • Update:
    • minPanBandwidthMhz() → model-specific minimums
    • maxPanBandwidthMhz() → correct maximums (e.g., 14.745601 MHz where applicable)
  • Avoid substring matching (contains) for model detection if possible—use a structured model identifier

Better approaches (preferred order)

  1. Query limits from radio via FlexLib (if available)
  2. Maintain a precise per-model lookup table
  3. As fallback, correct existing constants

Suggested labels

  • bug
  • spectrum
  • GUI
  • protocol

Additional notes

The current implementation appears to rely on approximate or legacy assumptions:

  • A uniform minimum (10 kHz) is applied to all models
  • Maximum limits are simplified and arbitrarily capped (e.g., 7 MHz / 14 MHz)
  • These values do not align with actual hardware capabilities

Given that Flex radios expose precise capabilities, this logic should ideally be data-driven rather than hardcoded.

What did you expect?

No response

Steps to reproduce

No response

Radio model & firmware

No response

Linux distro & Qt version

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    awaiting-responseWaiting for reporter to provide additional informationbugSomething isn't working

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions