added refference point

This commit is contained in:
2026-06-25 11:27:10 +03:00
parent b5258b4f82
commit 157e1484d3
11 changed files with 42 additions and 83 deletions
+37 -12
View File
@@ -652,6 +652,23 @@ function applyMacroParams(params) {
setCmdFormDirty(false);
}
function paramsFromMacroLines(lines) {
const params = {};
(lines || []).forEach(line => {
const s = String(line || '').trim();
if (s.startsWith('AT+FQ=')) params.frequency_hz = Number(s.slice(6));
else if (s.startsWith('AT+PW=')) params.power_dbm = Number(s.slice(6));
else if (s.startsWith('AT+SF=')) params.sf = Number(s.slice(6));
else if (s.startsWith('AT+BW=')) params.bw_khz = s.slice(6);
else if (s.startsWith('AT+CR=')) params.code_rate = s.slice(6);
else if (s.startsWith('AT+PL=')) params.preamble = Number(s.slice(6));
else if (s.startsWith('AT+TM=')) params.send_timeout_ms = Number(s.slice(6));
else if (s === 'AT+TX') params.role = 'TX';
else if (s === 'AT+RX') params.role = 'RX';
});
return params;
}
function selectedMacroPreset() {
const id = document.getElementById('macroPresetSelect')?.value;
return macroPresets.find(p => p.id === id) || null;
@@ -683,7 +700,24 @@ async function loadMacroPresets() {
function fillMacroPresetEditor(preset) {
document.getElementById('macroPresetName').value = preset?.name || '';
document.getElementById('macroPresetDescription').value = preset?.description || '';
if (preset?.params) applyMacroParams(preset.params);
}
function applySelectedMacroPresetToCommandForm() {
const preset = selectedMacroPreset();
const status = document.getElementById('macroPresetStatus');
if (!preset) {
if (status) status.textContent = 'Выберите пресет';
return;
}
const params = Object.keys(preset.params || {}).length
? preset.params
: paramsFromMacroLines(preset.lines);
applyMacroParams(params);
fillMacroPresetEditor(preset);
const panel = document.getElementById('controlPanel');
panel?.scrollIntoView({ behavior: 'smooth', block: 'start' });
document.getElementById('cmdTargetSelect')?.focus();
if (status) status.textContent = `Пресет "${preset.name || preset.id}" перенесён в форму`;
}
async function saveMacroPreset() {
@@ -848,20 +882,11 @@ async function showReferencePoint(sessionId) {
if (!res.ok) throw new Error('reference point ' + res.status);
const data = await res.json();
const stats = data.stats || {};
const byPreset = stats.by_preset || {};
let byPresetHtml = '';
Object.entries(byPreset).forEach(([key, val]) => {
byPresetHtml += `<div class="metric-card"><b>Пресет: ${escapeHtml(key)}</b>
${metricCard('PER', val.per_percent)}
${metricCard('RX Quality', val.rx_quality_percent)}
</div>`;
});
if (summary) {
summary.innerHTML = `<div><b>${escapeHtml(data.label || 'Реперная точка')} #${data.id}</b></div>
<div>${escapeHtml(deviceDisplayName(data))} · samples: ${data.sample_count || 0} · ${escapeHtml(data.status || '')}</div>
${metricCard('PER', stats.per_percent)}
${metricCard('RX Quality', stats.rx_quality_percent)}
${byPresetHtml || '<div class="muted">Нет разреза по пресетам</div>'}`;
${metricCard('RX Quality', stats.rx_quality_percent)}`;
}
drawReferencePointChart(data.samples || []);
if (data.lat != null && data.lon != null) {
@@ -3941,7 +3966,7 @@ document.getElementById('macroPresetSelect')?.addEventListener('change', () => {
fillMacroPresetEditor(selectedMacroPreset());
});
document.getElementById('btnMacroPresetApply')?.addEventListener('click', () => {
fillMacroPresetEditor(selectedMacroPreset());
applySelectedMacroPresetToCommandForm();
});
document.getElementById('btnMacroPresetSave')?.addEventListener('click', () => {
saveMacroPreset().catch(e => alert(e.message || String(e)));
+1 -1
View File
@@ -199,7 +199,7 @@
<label class="muted">Название</label>
<input type="text" id="macroPresetName" placeholder="SF7 125 RX" />
<label class="muted">Описание</label>
<input type="text" id="macroPresetDescription" placeholder="Для реперной точки" />
<input type="text" id="macroPresetDescription" placeholder="Быстрая конфигурация устройства" />
<div id="macroPresetStatus" class="muted"></div>
</div>
<div class="panel" id="referencePointPanel">