diff --git a/static/icon-map.js b/static/icon-map.js
index d394125..9ba4716 100644
--- a/static/icon-map.js
+++ b/static/icon-map.js
@@ -21,5 +21,10 @@ const iconMap = {
'AVERAGE': { src: 'assets/timeturner_jitter_orange.png', tooltip: 'Clock jitter is moderate.' },
'BAD': { src: 'assets/timeturner_jitter_red.png', tooltip: 'Clock jitter is high and may affect accuracy.' },
'default': { src: 'assets/timeturner_jitter_red.png', tooltip: 'Jitter status is unknown.' }
+ },
+ deltaStatus: {
+ 'good': { src: 'assets/timeturner_delta_green.png', tooltip: 'Clock delta is low (<= 40ms).' },
+ 'average': { src: 'assets/timeturner_delta_orange.png', tooltip: 'Clock delta is moderate (<= 100ms).' },
+ 'bad': { src: 'assets/timeturner_delta_red.png', tooltip: 'Clock delta is high (> 100ms).' }
}
};
diff --git a/static/index.html b/static/index.html
index 1b2880a..5aca849 100644
--- a/static/index.html
+++ b/static/index.html
@@ -41,7 +41,7 @@
Clock Offset
-
Delta: -- ms (-- frames)
+
Delta: -- ms (-- frames)
Jitter: --
diff --git a/static/script.js b/static/script.js
index 20c5571..6739230 100644
--- a/static/script.js
+++ b/static/script.js
@@ -16,8 +16,7 @@ document.addEventListener('DOMContentLoaded', () => {
systemDate: document.getElementById('system-date'),
ntpActive: document.getElementById('ntp-active'),
syncStatus: document.getElementById('sync-status'),
- deltaMs: document.getElementById('delta-ms'),
- deltaFrames: document.getElementById('delta-frames'),
+ deltaStatus: document.getElementById('delta-status'),
jitterStatus: document.getElementById('jitter-status'),
interfaces: document.getElementById('interfaces'),
logs: document.getElementById('logs'),
@@ -99,8 +98,19 @@ document.addEventListener('DOMContentLoaded', () => {
statusElements.syncStatus.innerHTML = `
${syncStatus}`;
statusElements.syncStatus.className = syncStatus.replace(/\s+/g, '-').toLowerCase();
- statusElements.deltaMs.textContent = data.timecode_delta_ms;
- statusElements.deltaFrames.textContent = data.timecode_delta_frames;
+ // Delta Status
+ const deltaMs = data.timecode_delta_ms;
+ let deltaCategory;
+ if (Math.abs(deltaMs) <= 40) { // ~1 frame at 25fps
+ deltaCategory = 'good';
+ } else if (Math.abs(deltaMs) <= 100) {
+ deltaCategory = 'average';
+ } else {
+ deltaCategory = 'bad';
+ }
+ const deltaIconInfo = iconMap.deltaStatus[deltaCategory];
+ const deltaText = `${data.timecode_delta_ms} ms (${data.timecode_delta_frames} frames)`;
+ statusElements.deltaStatus.innerHTML = `
${deltaText}`;
const jitterStatus = data.jitter_status || 'UNKNOWN';
const jitterIconInfo = iconMap.jitterStatus[jitterStatus] || iconMap.jitterStatus.default;
diff --git a/static/style.css b/static/style.css
index 638b554..7955571 100644
--- a/static/style.css
+++ b/static/style.css
@@ -99,7 +99,7 @@ button:hover {
color: #555;
}
-#ltc-status, #ntp-active, #sync-status, #jitter-status {
+#ltc-status, #ntp-active, #sync-status, #jitter-status, #delta-status {
display: inline-flex;
align-items: center;
gap: 0.5em;