Quellcode durchsuchen

feat: expose detector edge margin in GUI

master
Jan Svabenik vor 2 Tagen
Ursprung
Commit
d7b38ad978
3 geänderte Dateien mit 15 neuen und 0 gelöschten Zeilen
  1. +8
    -0
      internal/runtime/runtime.go
  2. +6
    -0
      web/app.js
  3. +1
    -0
      web/index.html

+ 8
- 0
internal/runtime/runtime.go Datei anzeigen

@@ -34,6 +34,7 @@ type DetectorUpdate struct {
CFARRank *int `json:"cfar_rank"`
CFARScaleDb *float64 `json:"cfar_scale_db"`
CFARWrapAround *bool `json:"cfar_wrap_around"`
EdgeMarginDb *float64 `json:"edge_margin_db"`
}

type SettingsUpdate struct {
@@ -195,6 +196,13 @@ func (m *Manager) ApplyConfig(update ConfigUpdate) (config.Config, error) {
if update.Detector.CFARScaleDb != nil {
next.Detector.CFARScaleDb = *update.Detector.CFARScaleDb
}
if update.Detector.EdgeMarginDb != nil {
v := *update.Detector.EdgeMarginDb
if math.IsNaN(v) || math.IsInf(v, 0) || v < 0 {
return m.cfg, errors.New("edge_margin_db must be >= 0")
}
next.Detector.EdgeMarginDb = v
}
}
if update.Recorder != nil {
if update.Recorder.Enabled != nil {


+ 6
- 0
web/app.js Datei anzeigen

@@ -42,6 +42,7 @@ const emaAlphaInput = qs('emaAlphaInput');
const hysteresisInput = qs('hysteresisInput');
const stableFramesInput = qs('stableFramesInput');
const gapToleranceInput = qs('gapToleranceInput');
const edgeMarginInput = qs('edgeMarginInput');
const agcToggle = qs('agcToggle');
const dcToggle = qs('dcToggle');
const iqToggle = qs('iqToggle');
@@ -418,6 +419,7 @@ function applyConfigToUI(cfg) {
if (hysteresisInput) hysteresisInput.value = cfg.detector.hysteresis_db ?? 3;
if (stableFramesInput) stableFramesInput.value = cfg.detector.min_stable_frames ?? 3;
if (gapToleranceInput) gapToleranceInput.value = cfg.detector.gap_tolerance_ms ?? cfg.detector.hold_ms;
if (edgeMarginInput) edgeMarginInput.value = cfg.detector.edge_margin_db ?? 3.0;
agcToggle.checked = !!cfg.agc;
dcToggle.checked = !!cfg.dc_block;
iqToggle.checked = !!cfg.iq_balance;
@@ -1416,6 +1418,10 @@ if (gapToleranceInput) gapToleranceInput.addEventListener('change', () => {
const v = parseInt(gapToleranceInput.value, 10);
if (Number.isFinite(v)) queueConfigUpdate({ detector: { gap_tolerance_ms: v } });
});
if (edgeMarginInput) edgeMarginInput.addEventListener('change', () => {
const v = parseFloat(edgeMarginInput.value);
if (Number.isFinite(v)) queueConfigUpdate({ detector: { edge_margin_db: v } });
});

agcToggle.addEventListener('change', () => queueSettingsUpdate({ agc: agcToggle.checked }));
dcToggle.addEventListener('change', () => queueSettingsUpdate({ dc_block: dcToggle.checked }));


+ 1
- 0
web/index.html Datei anzeigen

@@ -197,6 +197,7 @@
<label class="field"><span>Hysteresis (dB)</span><input id="hysteresisInput" type="number" step="1" min="0" /></label>
<label class="field"><span>Min Stable Frames</span><input id="stableFramesInput" type="number" step="1" min="1" /></label>
<label class="field"><span>Gap Tolerance (ms)</span><input id="gapToleranceInput" type="number" step="50" min="0" /></label>
<label class="field"><span>Edge Margin (dB)</span><input id="edgeMarginInput" type="number" step="0.5" min="0" /></label>
<label class="field"><span>CFAR Mode</span>
<select id="cfarModeSelect">
<option value="OFF">Off</option>


Laden…
Abbrechen
Speichern