generated from Grigo/AndroidTemplate
added refference point
This commit is contained in:
+37
-12
@@ -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)));
|
||||
|
||||
@@ -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">
|
||||
|
||||
Reference in New Issue
Block a user