Decode standard PPS sub-types + RST CLK extension → ATR data rate

- capture.py: map GSMTAP PPS request/response (0x02/0x03) to 'pps',
  matching the pcap-import mapping (was decoded as TPDU live)
- decode.py: parse the optional RST CLK extension (sigrok v1.9.0+,
  payload flag bit 0); ATR gains clk_hz/data_rate/etu_us derived from
  TA1 Fi/Di (data_rate = clk_hz × D / F)
- database.py: CLK state is consumed by the next ATR (no stale rate
  for an ATR without preceding RST); a late-arriving RST measurement
  is backfilled onto the ATR it belongs to; replay context carries
  the CLK across pagination/live polling
- PWA: ATR detail shows CLK/Data rate/ETU; RST event detail shows CLK
- tests: PPS mapping, CLK parse with/without flag, rate math,
  DB consume + backfill round-trips
- README/RUS updated
- Bump 1.22.18, SW cache v49->v50
This commit is contained in:
catarrh committed 2026-09-18 00:30:26 +03:00
1 parent c2f605a391
commit a46667d93f
12 files changed
+211 -40

No files matched your search

+5 -1
View File
@@ -1512,6 +1512,9 @@ function atrPpsRows(decoded) {
rows.push([ifc.name, ifaceValue(ifc)]);
}
}
if (decoded.clk_hz) rows.push(['CLK', (decoded.clk_hz / 1e6).toFixed(3) + ' MHz']);
if (decoded.data_rate) rows.push(['Data rate', decoded.data_rate + ' bit/s']);
if (decoded.etu_us) rows.push(['ETU', decoded.etu_us + ' µs']);
if (decoded.historical) {
const h = decoded.historical;
let v = h.category || '';
@@ -1580,6 +1583,7 @@ function showDetail(msg, entry) {
<table>
<tr><td class="label">Event</td><td class="value">${evName}</td></tr>
<tr><td class="label">Level</td><td class="value">${decoded.level || '?'}</td></tr>
${decoded.clk_hz ? `<tr><td class="label">CLK</td><td class="value">${(decoded.clk_hz / 1e6).toFixed(3)} MHz</td></tr>` : ''}
${decoded.raw ? `<tr><td class="label">Raw</td><td class="hex">${decoded.raw}</td></tr>` : ''}
</table>
</div>`;
@@ -2625,7 +2629,7 @@ function onFilterChange() {
}
// ──────────────────── Versioning ────────────────────
const PWA_VERSION = '1.22.17';
const PWA_VERSION = '1.22.18';
const MIN_SERVER_VERSION = '1.0.0';
function parseVersion(v) {
+1 -1
View File
@@ -1,4 +1,4 @@
const CACHE = 'simtrace-analyser-v49';
const CACHE = 'simtrace-analyser-v50';
const PRECACHE = [
'index.html',