Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
43 changes: 37 additions & 6 deletions docs/GUI_DESIGN.md
Original file line number Diff line number Diff line change
Expand Up @@ -92,18 +92,43 @@ Located in the right column, below the info cards. Hidden for CC/CV/CR/CP modes.
- Window size is persisted between sessions (saved in settings)
- Minimum window size: 400×400 px
- Combined mode: voltage scale on left axis, current and power scales on right axis (color-coded)
- **X axis is time-based**, not sample-index based. Points are positioned by timestamp within an
explicit time domain, and the axis is labelled underneath:
- Roll: labels are relative to now (`-1h02m`, `-2m05s`, `-45s`, `0`)
- Infinite: labels are wall-clock (`HH:MM:SS`)
- Full labels are drawn when the plot is at least 320 px wide; narrower plots are labelled at
their ends only. Split ↕ labels the bottom sub-chart only (all sub-charts share one domain).
- Traces are **min/max decimated** to at most two points per horizontal pixel. The full time span
is always drawn — there is no cap on how many samples a plot may cover — and single-sample
transients survive decimation.
- A pause longer than 5 poll intervals (minimum 1.5 s) **breaks the polyline**, so a disconnect or
a paused log renders as a gap instead of a straight line. An isolated reading between two gaps is
drawn as a dot.
- Time mode controls (bottom toolbar row, left-aligned):
- **Mode toggle button** shows current mode: `⟳ Roll` or `∞ Infinite`; click to switch
- **Roll mode**: rolling window of the last N seconds; time window input + "Set" button are shown
- **Infinite mode**: all data since app start or last Clear; time window input and "Set" are hidden
- **Clear button** (Infinite mode only): resets graph display start time to now; does NOT delete samples
- **Mode toggle button** shows current mode: `⟳ Roll` or `∞ Infinite`; click to switch.
Switching is a **view-only** change: it never adds to or removes from the sample buffer, so it
is safe to toggle mid-run.
- **Roll mode**: the last N seconds; time window input + "Set" button are shown. The domain is the
window itself, so a partly-filled window draws on the right-hand portion of the canvas rather
than stretching to fill it. The window is clamped to the history retention setting.
- **Infinite mode**: everything retained in the buffer since the last Clear; the window input and
"Set" are hidden.
- **Clear button** (both modes): sets the graph's view epoch to now. Samples before the epoch are
hidden from the graph in **both** modes, but are **not** deleted — a CSV export still contains
them. Pressing Clear is the only action that hides recorded data from the graph.
- **Buffer label**: wall-clock span currently held in the buffer, so a window wider than the
available history is visibly explained rather than silently ignored.
- Hide/show toggle button
- Graph data is independent of CSV export (export uses all collected samples)
- The graph and CSV export read the **same** buffer. Retention (Settings → Application → History
retention, default 86400 s = 24 h) bounds both together: the graph can never show something an
export would miss, and vice versa. Clearing the samples buffer also resets the graph's view epoch.
The 24 h default is sized for long CAP runs such as a car battery discharge.

### 6. Samples Panel
- Sample count
- Last sample summary (V/I/P values)
- Clear button (clears all samples)
- Clear button (deletes all samples — unlike the chart's Clear, this discards data that would
otherwise be exportable; it also resets the chart's view epoch)
- Export button (saves CSV with columns: timestamp, voltage, current, power, resistance, mode)

### 7. Connection Panel
Expand Down Expand Up @@ -160,6 +185,12 @@ Responsive card-based layout. On wide windows (≥720px), cards are arranged in
- Language (dropdown)
- Poll interval (dropdown: 50/100/200/500/1000/2000 ms; helper text below)
- Auto-connect to first EL15 (toggle)
- History retention (text input + "Set"; seconds, clamped to 60–86400, default 86400 = 24 h;
helper text below). Bounds the shared sample buffer used by both the graph and CSV export.
Shrinking it trims the buffer immediately and pulls the Roll window in with it.
A hard backstop of 500 000 samples (~32 MB) also applies: it sits just above 24 h at the
default 200 ms poll, so a *faster* poll reaches the ceiling first and retains proportionally
less wall-clock time (at 50 ms, roughly 7 h).

2. **SCPI Server**
- Enable SCPI server (toggle)
Expand Down
3 changes: 3 additions & 0 deletions el15-app/locales/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -82,12 +82,15 @@
"graph.infinite": "Infinite",
"graph.time_window": "Window",
"graph.clear": "Clear",
"graph.buffer": "Buffer",
"settings.scpi_section": "SCPI Server",
"settings.firmware_section": "Maintenance",
"settings.about_section": "About",
"settings.repository": "Repository:",
"settings.card.application": "Application",
"settings.poll_hint": "Lower values increase responsiveness but may increase device traffic.",
"settings.retention": "History retention",
"settings.retention_hint": "How long samples are kept for the graph and CSV export.",
"settings.scpi_port_hint": "Used by external tools to control the load over SCPI.",
"settings.maintenance_desc": "Device must be in DFU mode for firmware update. See Firmware Update page for instructions.",
"settings.auto_saved": "Settings are saved automatically.",
Expand Down
3 changes: 3 additions & 0 deletions el15-app/locales/es.json
Original file line number Diff line number Diff line change
Expand Up @@ -82,12 +82,15 @@
"graph.infinite": "Infinito",
"graph.time_window": "Ventana",
"graph.clear": "Limpiar",
"graph.buffer": "Búfer",
"settings.scpi_section": "Servidor SCPI",
"settings.firmware_section": "Mantenimiento",
"settings.about_section": "Acerca de",
"settings.repository": "Repositorio:",
"settings.card.application": "Aplicación",
"settings.poll_hint": "Valores más bajos mejoran la respuesta pero pueden aumentar el tráfico al dispositivo.",
"settings.retention": "Retención del historial",
"settings.retention_hint": "Cuánto tiempo se conservan las muestras para el gráfico y la exportación CSV.",
"settings.scpi_port_hint": "Usado por herramientas externas para controlar la carga por SCPI.",
"settings.maintenance_desc": "El dispositivo debe estar en modo DFU para actualizar firmware. Vea la página de actualización para instrucciones.",
"settings.auto_saved": "Los ajustes se guardan automáticamente.",
Expand Down
3 changes: 3 additions & 0 deletions el15-app/locales/hi.json
Original file line number Diff line number Diff line change
Expand Up @@ -82,12 +82,15 @@
"graph.infinite": "अनंत",
"graph.time_window": "विंडो",
"graph.clear": "साफ़ करें",
"graph.buffer": "बफ़र",
"settings.scpi_section": "SCPI सर्वर",
"settings.firmware_section": "रखरखाव",
"settings.about_section": "के बारे में",
"settings.repository": "रिपॉजिटरी:",
"settings.card.application": "एप्लिकेशन",
"settings.poll_hint": "कम मान अधिक त्वरित प्रतिक्रिया देते हैं लेकिन डिवाइस का ट्रैफिक बढ़ा सकते हैं।",
"settings.retention": "इतिहास प्रतिधारण",
"settings.retention_hint": "ग्राफ़ और CSV निर्यात के लिए नमूने कितने समय तक रखे जाते हैं।",
"settings.scpi_port_hint": "SCPI के माध्यम से लोड को नियंत्रित करने के लिए बाहरी उपकरणों द्वारा उपयोग किया जाता है।",
"settings.maintenance_desc": "फर्मवेयर अपडेट के लिए डिवाइस DFU मोड में होना चाहिए। निर्देशों के लिए फर्मवेयर अपडेट पेज देखें।",
"settings.auto_saved": "सेटिंग्स स्वचालित रूप से सहेजी जाती हैं।",
Expand Down
3 changes: 3 additions & 0 deletions el15-app/locales/ru.json
Original file line number Diff line number Diff line change
Expand Up @@ -82,12 +82,15 @@
"graph.infinite": "Полностью",
"graph.time_window": "Окно",
"graph.clear": "Очистить",
"graph.buffer": "Буфер",
"settings.scpi_section": "Сервер SCPI",
"settings.firmware_section": "Обслуживание",
"settings.about_section": "О программе",
"settings.repository": "Репозиторий:",
"settings.card.application": "Приложение",
"settings.poll_hint": "Меньшие значения повышают отзывчивость, но увеличивают нагрузку на устройство.",
"settings.retention": "Хранение истории",
"settings.retention_hint": "Сколько времени хранятся отсчёты для графика и экспорта в CSV.",
"settings.scpi_port_hint": "Используется внешними инструментами для управления нагрузкой через SCPI.",
"settings.maintenance_desc": "Устройство должно быть в режиме DFU для обновления прошивки. Инструкции на странице обновления.",
"settings.auto_saved": "Настройки сохраняются автоматически.",
Expand Down
3 changes: 3 additions & 0 deletions el15-app/locales/zh.json
Original file line number Diff line number Diff line change
Expand Up @@ -82,12 +82,15 @@
"graph.infinite": "无限",
"graph.time_window": "窗口",
"graph.clear": "清除",
"graph.buffer": "缓冲",
"settings.scpi_section": "SCPI 服务器",
"settings.firmware_section": "维护",
"settings.about_section": "关于",
"settings.repository": "代码仓库:",
"settings.card.application": "应用程序",
"settings.poll_hint": "较小的值提高响应速度,但可能增加设备通信负担。",
"settings.retention": "历史保留时长",
"settings.retention_hint": "采样数据为图表和 CSV 导出保留的时长。",
"settings.scpi_port_hint": "外部工具通过 SCPI 控制负载时使用此端口。",
"settings.maintenance_desc": "设备需处于 DFU 模式才能更新固件。请参阅固件更新页面的说明。",
"settings.auto_saved": "设置会自动保存。",
Expand Down
Loading