Provisioning LAN (dnsmasq) — when dashboard runs on LXC.
USB boot
- 1 Set reTerminal to boot mode (eMMC disable jumper).
+ 1 Set device to boot mode (eMMC disable jumper).
2 Connect USB to host; choose Backup or Deploy above.
3 Remove jumper and power cycle when done.
@@ -178,7 +178,7 @@
const phase = data.phase || 'idle';
document.getElementById('statusPill').className = 'status-pill ' + phase;
document.getElementById('statusPill').textContent = phaseLabels[phase] || phase;
- document.getElementById('statusMsg').textContent = data.message || '';
+ document.getElementById('statusMsg').textContent = data.message || (phase === 'idle' ? 'Waiting for Device in USB boot mode.' : '');
const err = document.getElementById('statusErr');
if (data.error) { err.textContent = data.error; err.style.display = 'block'; } else { err.style.display = 'none'; }
if (phase === 'done') scheduleDoneClear();
@@ -204,7 +204,7 @@
shrinkWrap.style.display = 'block';
const el = document.createElement('div');
el.className = 'device-item';
- el.innerHTML = '
USB device — choose Backup, Deploy, or Update EEPROM
Backup Deploy eMMC only Update EEPROM
';
+ el.innerHTML = '
USB device — choose Backup or Deploy
Backup Deploy
';
container.appendChild(el);
} else shrinkWrap.style.display = 'none';
noPending.style.display = hasAny ? 'none' : 'block';
@@ -212,10 +212,6 @@
btn.onclick = function() {
const body = { source: btn.getAttribute('data-source'), action: btn.getAttribute('data-action') };
if (body.source === 'network') body.mac = btn.getAttribute('data-mac');
- if (body.action === 'eeprom_update' && body.source === 'usb') {
- const presetEl = btn.closest('.device-item') && btn.closest('.device-item').querySelector('.eeprom-preset');
- body.boot_order = (presetEl && presetEl.value) ? presetEl.value : '0x1';
- }
if (body.action === 'backup' && document.getElementById('shrinkAfterBackup').checked) body.shrink = true;
fetch('/api/device-action', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(body) })
.then(function(r) { return r.json(); })
@@ -267,7 +263,14 @@
fetch('/api/first-boot-status').then(function(r){ return r.json(); }).then(renderFirstBootStatus).catch(function(){});
}
function fetchPending() { fetch('/api/pending-devices').then(function(r){ return r.json(); }).then(function(d){ renderPending(d.usb || null, d.network || []); }).catch(function(){ renderPending(null, []); }); }
- function fetchLog() { fetch('/api/log').then(function(r){ return r.json(); }).then(function(d){ document.getElementById('log').textContent = d.log || ''; }).catch(function(){}); }
+ function fetchLog() {
+ fetch('/api/log').then(function(r){ return r.json(); }).then(function(d){
+ var logEl = document.getElementById('log');
+ if (!logEl) return;
+ logEl.textContent = d.log || '';
+ logEl.scrollTop = logEl.scrollHeight;
+ }).catch(function(){});
+ }
function fetchGolden() {
fetch('/api/golden-info').then(function(r){ return r.json(); }).then(function(d){
const el = document.getElementById('goldenInfo');
diff --git a/emmc-provisioning/dashboard/templates/index.html b/emmc-provisioning/dashboard/templates/index.html
index 43149a9..6f431e6 100644
--- a/emmc-provisioning/dashboard/templates/index.html
+++ b/emmc-provisioning/dashboard/templates/index.html
@@ -4,7 +4,7 @@
-
CM4 eMMC Provisioning
+
GNSS Guard Provisioning
@@ -359,8 +359,8 @@
@@ -368,12 +368,12 @@
Current status
Idle
- Waiting for device
+ Waiting for Device in USB boot mode.
Clear status
- No golden image is required to capture . Connect a device in USB boot mode; when it appears under “Capture image or deploy”, click Backup to save its image. Then set that backup as golden in the list below.
+ No golden image is required to backup . Connect a device in USB boot mode; when it appears under “Deploy and Backup”, click Backup to save its image. Then set that backup as golden in the list below.
Clear message
@@ -384,8 +384,8 @@
- Capture image or deploy
- To capture (backup) an image from a device: connect it in USB boot mode. When the device appears below, click Backup to save its eMMC to a file. To write an image to a device, click Deploy (requires a golden image).
+ Deploy and Backup
+ Connect a device in USB boot mode. When it appears below, click Backup to save its eMMC to a file, or Deploy to write the golden image to the device (requires a golden image set in Admin).
Shrink after backup (reduces size; requires PiShrink on host)
@@ -398,7 +398,7 @@
— USB boot mode
-
No device connected. Connect reTerminal in USB boot mode (eMMC disable jumper + USB to host) — then the Backup and Deploy buttons will appear above.
+
No device connected. Connect device in USB boot mode (eMMC disable jumper + USB to host) — then the Backup and Deploy buttons will appear above.
@@ -477,7 +477,7 @@
USB boot mode
- 1 Set reTerminal to boot mode (eMMC disable jumper, e.g. J2 / nRPIBOOT).
+ 1 Set device to boot mode (eMMC disable jumper, e.g. J2 / nRPIBOOT).
2 Connect USB slave to the host and power on. The device appears above; choose Backup or Deploy .
3 When done, remove the jumper and power cycle to boot from eMMC.
@@ -485,7 +485,7 @@
-
+
Recent log
@@ -516,7 +516,7 @@
const phase = data.phase || 'idle';
statusPill.className = 'status-pill ' + phase;
statusPill.textContent = phaseLabels[phase] || phase;
- statusMsg.textContent = data.message || '';
+ statusMsg.textContent = data.message || (phase === 'idle' ? 'Waiting for Device in USB boot mode.' : '');
if (data.error) {
statusErr.textContent = data.error;
@@ -566,7 +566,7 @@
if (shrinkWrap) shrinkWrap.style.display = 'block';
const el = document.createElement('div');
el.className = 'device-item';
- el.innerHTML = '
USB boot
Device connected — choose Backup, Deploy, or Update EEPROM
Backup Deploy eMMC only Update EEPROM
';
+ el.innerHTML = '
USB boot
Device connected — choose Backup or Deploy
Backup Deploy
';
container.appendChild(el);
} else {
if (shrinkWrap) shrinkWrap.style.display = 'none';
@@ -583,10 +583,6 @@
const mac = btn.getAttribute('data-mac');
const body = { source: source, action: action };
if (mac) body.mac = mac;
- if (action === 'eeprom_update' && source === 'usb') {
- const presetEl = btn.closest('.device-item') && btn.closest('.device-item').querySelector('.eeprom-preset');
- body.boot_order = (presetEl && presetEl.value) ? presetEl.value : '0x1';
- }
const shrinkCb = document.getElementById('shrinkAfterBackup');
if (action === 'backup' && shrinkCb && shrinkCb.checked) body.shrink = true;
fetch('/api/device-action', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(body) })
@@ -785,7 +781,12 @@
fetch('/api/pending-devices').then(function(r) { return r.json(); }).then(function(d) { renderPending(d.usb || null, d.network || []); }).catch(function() { renderPending(null, []); });
}
function fetchLog() {
- fetch('/api/log').then(function(r) { return r.json(); }).then(function(d) { document.getElementById('log').textContent = d.log || ''; }).catch(function() {});
+ fetch('/api/log').then(function(r) { return r.json(); }).then(function(d) {
+ var logEl = document.getElementById('log');
+ if (!logEl) return;
+ logEl.textContent = d.log || '';
+ logEl.scrollTop = logEl.scrollHeight;
+ }).catch(function() {});
}
function fetchBackups() {
fetch('/api/backups').then(function(r) { return r.json(); }).then(function(d) {
diff --git a/emmc-provisioning/dashboard/templates/login.html b/emmc-provisioning/dashboard/templates/login.html
index c9b4ed0..454fee5 100644
--- a/emmc-provisioning/dashboard/templates/login.html
+++ b/emmc-provisioning/dashboard/templates/login.html
@@ -4,7 +4,7 @@
-
Admin login · CM4 Provisioning
+
Admin login · GNSS Guard Provisioning
@@ -28,7 +28,7 @@
Admin login
-
CM4 eMMC provisioning dashboard
+
GNSS Guard Provisioning admin
{% if error %}
{{ error }}
{% endif %}