Improve Morse stream startup compatibility and diagnostics

This commit is contained in:
Smittix
2026-02-26 11:15:45 +00:00
parent 41e115a0e4
commit 3399c1bb14
2 changed files with 33 additions and 13 deletions
+17 -12
View File
@@ -265,12 +265,10 @@ def start_morse() -> Response:
_set_state(MORSE_STARTING, 'Starting decoder...') _set_state(MORSE_STARTING, 'Starting decoder...')
sample_rate = 8000 # Use pager-proven audio rate for rtl_fm compatibility across builds.
sample_rate = 22050
bias_t = _bool_value(data.get('bias_t', False), False) bias_t = _bool_value(data.get('bias_t', False), False)
# RTL-SDR needs direct sampling mode for HF frequencies below 24 MHz
direct_sampling = 2 if freq < 24.0 else None
sdr_type_str = data.get('sdr_type', 'rtlsdr') sdr_type_str = data.get('sdr_type', 'rtlsdr')
try: try:
sdr_type = SDRType(sdr_type_str) sdr_type = SDRType(sdr_type_str)
@@ -280,15 +278,22 @@ def start_morse() -> Response:
sdr_device = SDRFactory.create_default_device(sdr_type, index=device) sdr_device = SDRFactory.create_default_device(sdr_type, index=device)
builder = SDRFactory.get_builder(sdr_device.sdr_type) builder = SDRFactory.get_builder(sdr_device.sdr_type)
fm_kwargs: dict[str, Any] = {
'device': sdr_device,
'frequency_mhz': freq,
'sample_rate': sample_rate,
'gain': float(gain) if gain and gain != '0' else None,
'ppm': int(ppm) if ppm and ppm != '0' else None,
'modulation': 'usb',
'bias_t': bias_t,
}
# Only rtl_fm supports direct sampling flags.
if sdr_device.sdr_type == SDRType.RTL_SDR and freq < 24.0:
fm_kwargs['direct_sampling'] = 2
rtl_cmd = builder.build_fm_demod_command( rtl_cmd = builder.build_fm_demod_command(
device=sdr_device, **fm_kwargs,
frequency_mhz=freq,
sample_rate=sample_rate,
gain=float(gain) if gain and gain != '0' else None,
ppm=int(ppm) if ppm and ppm != '0' else None,
modulation='usb',
bias_t=bias_t,
direct_sampling=direct_sampling,
) )
full_cmd = ' '.join(rtl_cmd) full_cmd = ' '.join(rtl_cmd)
+16 -1
View File
@@ -173,11 +173,18 @@ var MorseMode = (function () {
function loadSettings() { function loadSettings() {
try { try {
var raw = localStorage.getItem(SETTINGS_KEY); var raw = localStorage.getItem(SETTINGS_KEY);
if (!raw) return; if (!raw) {
if (el('morseShowDiag')) el('morseShowDiag').checked = true;
toggleDiagPanel();
persistSettings();
return;
}
var parsed = JSON.parse(raw); var parsed = JSON.parse(raw);
applySettings(parsed); applySettings(parsed);
} catch (_) { } catch (_) {
// Ignore malformed settings. // Ignore malformed settings.
if (el('morseShowDiag')) el('morseShowDiag').checked = true;
toggleDiagPanel();
} }
} }
@@ -555,6 +562,11 @@ var MorseMode = (function () {
if (!scopeWaiting) { if (!scopeWaiting) {
scopeWaiting = true; scopeWaiting = true;
waitingStart = Date.now(); waitingStart = Date.now();
appendDiagLine('[morse] waiting for PCM stream...');
}
var waitElapsedMs = waitingStart ? (Date.now() - waitingStart) : 0;
if (waitElapsedMs > 10000 && el('morseDiagLog') && el('morseDiagLog').children.length < 6) {
appendDiagLine('[hint] No samples after 10s. Check SDR device, frequency, and HF direct sampling path.');
} }
} else if (amps.length > 0) { } else if (amps.length > 0) {
scopeWaiting = false; scopeWaiting = false;
@@ -812,6 +824,9 @@ var MorseMode = (function () {
if (!log) return; if (!log) return;
var showDiag = !!(el('morseShowDiag') && el('morseShowDiag').checked); var showDiag = !!(el('morseShowDiag') && el('morseShowDiag').checked);
if (!showDiag && scopeWaiting) {
showDiag = true;
}
if (!showDiag) return; if (!showDiag) return;
log.style.display = 'block'; log.style.display = 'block';