mirror of
https://github.com/smittix/intercept.git
synced 2026-07-06 00:28:12 -07:00
Improve Morse stream startup compatibility and diagnostics
This commit is contained in:
+17
-12
@@ -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)
|
||||||
|
|||||||
@@ -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';
|
||||||
|
|||||||
Reference in New Issue
Block a user