chore: 解决 stash pop 与 device-link 合并冲突并收回本地 WIP
保留 ConnectionHub(deviceLink 导入/ECAT 自启/pmHold 幂等)与主线 WIP(断线清指标、AUTO_POLL=false、boot_ecat 等)。
This commit is contained in:
+67
-21
@@ -31,16 +31,32 @@ window.sharedFirmwareFiles = window.sharedFirmwareFiles || {
|
||||
var esp32El = document.getElementById('esp32Stages');
|
||||
var gd32El = document.getElementById('gd32Stages');
|
||||
var bleEl = document.getElementById('bleStages');
|
||||
var ecatEl = document.getElementById('ecatStages');
|
||||
if (esp32El) esp32El.style.display = 'none';
|
||||
if (gd32El) gd32El.style.display = 'none';
|
||||
if (ecatEl) ecatEl.style.display = 'none';
|
||||
if (bleEl) bleEl.style.display = '';
|
||||
return;
|
||||
}
|
||||
if (target === 'ecat') {
|
||||
window.currentOtaTarget = 'ecat';
|
||||
var esp32E = document.getElementById('esp32Stages');
|
||||
var gd32E = document.getElementById('gd32Stages');
|
||||
var bleE = document.getElementById('bleStages');
|
||||
var ecatE = document.getElementById('ecatStages');
|
||||
if (esp32E) esp32E.style.display = 'none';
|
||||
if (gd32E) gd32E.style.display = 'none';
|
||||
if (bleE) bleE.style.display = 'none';
|
||||
if (ecatE) ecatE.style.display = '';
|
||||
return;
|
||||
}
|
||||
if (typeof originalSwitchStageFlow === 'function') {
|
||||
originalSwitchStageFlow(target);
|
||||
}
|
||||
var bleEl = document.getElementById('bleStages');
|
||||
if (bleEl) bleEl.style.display = 'none';
|
||||
var bleEl2 = document.getElementById('bleStages');
|
||||
if (bleEl2) bleEl2.style.display = 'none';
|
||||
var ecatEl2 = document.getElementById('ecatStages');
|
||||
if (ecatEl2) ecatEl2.style.display = 'none';
|
||||
};
|
||||
|
||||
window.setConsoleMode = function (mode) {
|
||||
@@ -48,24 +64,33 @@ window.sharedFirmwareFiles = window.sharedFirmwareFiles || {
|
||||
// notifyFileChange → updateFileInfo → finalizeFileInfo → setProgress(0) 会覆盖
|
||||
// 进行中的 WiFi/BLE 上传进度(与 selectFlashTarget 同样的守卫策略)。
|
||||
var bleBusy = window.bleOta && window.bleOta.isUploading && window.bleOta.isUploading();
|
||||
if (window.isUploading || bleBusy) {
|
||||
var active = bleBusy ? 'BLE' : ((window.activeUploadChip || 'OTA').toUpperCase());
|
||||
if (window.isUploading || bleBusy || window.bootEcatBusy) {
|
||||
var active = window.bootEcatBusy ? 'ECAT' : (bleBusy ? 'BLE' : ((window.activeUploadChip || 'OTA').toUpperCase()));
|
||||
if (typeof addLog === 'function') addLog('W', 'OTA', active + ' 刷写进行中,无法切换连接模式');
|
||||
if (typeof showToast === 'function') showToast('当前有 ' + active + ' 任务在运行,请等待结束后再切换', 'error');
|
||||
return;
|
||||
}
|
||||
var isBle = mode === 'ble';
|
||||
window.connectionMode = isBle ? 'ble' : 'wifi';
|
||||
var m = (mode === 'ble' || mode === 'ecat') ? mode : 'wifi';
|
||||
var isBle = m === 'ble';
|
||||
window.connectionMode = m;
|
||||
var wifiCards = document.getElementById('wifiModeCards');
|
||||
var bleCards = document.getElementById('bleModeCards');
|
||||
var ecatCards = document.getElementById('ecatModeCards');
|
||||
var wifiBtn = document.getElementById('modeWifiBtn');
|
||||
var bleBtn = document.getElementById('modeBleBtn');
|
||||
if (wifiCards) wifiCards.style.display = isBle ? 'none' : '';
|
||||
if (bleCards) bleCards.style.display = isBle ? '' : 'none';
|
||||
if (wifiBtn) wifiBtn.className = isBle ? 'btn btn-outline' : 'btn btn-primary';
|
||||
if (bleBtn) bleBtn.className = isBle ? 'btn btn-primary' : 'btn btn-outline';
|
||||
var ecatBtn = document.getElementById('modeEcatBtn');
|
||||
if (wifiCards) wifiCards.style.display = m === 'wifi' ? '' : 'none';
|
||||
if (bleCards) bleCards.style.display = m === 'ble' ? '' : 'none';
|
||||
if (ecatCards) ecatCards.style.display = m === 'ecat' ? '' : 'none';
|
||||
if (wifiBtn) wifiBtn.className = 'btn target-tab-btn ' + (m === 'wifi' ? 'btn-primary' : 'btn-outline');
|
||||
if (bleBtn) bleBtn.className = 'btn target-tab-btn ' + (m === 'ble' ? 'btn-primary' : 'btn-outline');
|
||||
if (ecatBtn) ecatBtn.className = 'btn target-tab-btn ' + (m === 'ecat' ? 'btn-primary' : 'btn-outline');
|
||||
applySharedModeUi();
|
||||
syncBleFileFromSelectedTarget();
|
||||
/* 切到 EtherCAT 时自动探测一次,和 WiFi「测试」一样不用手点才知道通没通 */
|
||||
if (m === 'ecat' && typeof window.bootEcatProbe === 'function') {
|
||||
Promise.resolve(window.bootEcatProbe(false)).catch(function () { /* 后端未起时忽略 */ });
|
||||
}
|
||||
if (isBle) {
|
||||
window.switchStageFlow('ble');
|
||||
if (typeof setActivePhase === 'function') {
|
||||
@@ -74,6 +99,15 @@ window.sharedFirmwareFiles = window.sharedFirmwareFiles || {
|
||||
if (window.bleOta && typeof window.bleOta.refreshButtons === 'function') {
|
||||
window.bleOta.refreshButtons();
|
||||
}
|
||||
} else if (m === 'ecat') {
|
||||
window.switchStageFlow('ecat');
|
||||
if (typeof setActivePhase === 'function') setActivePhase('ecatOta');
|
||||
if (typeof window.resetEcatStages === 'function') window.resetEcatStages();
|
||||
if (typeof window.setProgress === 'function') window.setProgress(0, '等待刷写...');
|
||||
var sb = document.getElementById('stageStatusBar');
|
||||
var st = document.getElementById('stageStatusText');
|
||||
if (sb) sb.className = 'stage-status-bar';
|
||||
if (st) st.textContent = '待机';
|
||||
} else {
|
||||
window.switchStageFlow(window.flashTarget || (window.activePhase === 'esp32Ota' ? 'esp32' : 'gd32'));
|
||||
}
|
||||
@@ -83,8 +117,8 @@ window.sharedFirmwareFiles = window.sharedFirmwareFiles || {
|
||||
// OTA 上传进行中禁止切换目标:避免前端状态与后端 relay/upload 不同步导致卡死
|
||||
// ★ 兼容 BLE 模式:BLE 上传用 bleOta.state.uploading,window.isUploading 仅 WiFi 通道使用。
|
||||
var bleBusy = window.bleOta && window.bleOta.isUploading && window.bleOta.isUploading();
|
||||
if (window.isUploading || bleBusy) {
|
||||
var active = bleBusy ? 'BLE' : ((window.activeUploadChip || 'OTA').toUpperCase());
|
||||
if (window.isUploading || bleBusy || window.bootEcatBusy) {
|
||||
var active = window.bootEcatBusy ? 'ECAT' : (bleBusy ? 'BLE' : ((window.activeUploadChip || 'OTA').toUpperCase()));
|
||||
if (typeof addLog === 'function') addLog('W', 'OTA', active + ' 刷写进行中,无法切换目标');
|
||||
if (typeof showToast === 'function') showToast('当前有 ' + active + ' 任务在运行,请等待结束后再切换', 'error');
|
||||
return;
|
||||
@@ -273,31 +307,42 @@ window.sharedFirmwareFiles = window.sharedFirmwareFiles || {
|
||||
};
|
||||
|
||||
window.applySharedModeUi = function () {
|
||||
var isBle = window.connectionMode === 'ble';
|
||||
var m = (window.connectionMode === 'ble' || window.connectionMode === 'ecat')
|
||||
? window.connectionMode : 'wifi';
|
||||
var isBle = m === 'ble';
|
||||
var isEcat = m === 'ecat';
|
||||
var isGd32 = window.flashTarget === 'gd32';
|
||||
var targetEsp32 = document.getElementById('targetEsp32Tab');
|
||||
var targetGd32 = document.getElementById('targetGd32Tab');
|
||||
if (targetEsp32) targetEsp32.className = isGd32 ? 'btn btn-outline' : 'btn btn-primary';
|
||||
if (targetGd32) targetGd32.className = isGd32 ? 'btn btn-primary' : 'btn btn-outline';
|
||||
if (targetEsp32) targetEsp32.className = 'btn target-tab-btn ' + (isGd32 ? 'btn-outline' : 'btn-primary');
|
||||
if (targetGd32) targetGd32.className = 'btn target-tab-btn ' + (isGd32 ? 'btn-primary' : 'btn-outline');
|
||||
/* EtherCAT 只能刷 GD32(引导程序写应用区),目标切换行留着会以为还能选 ESP32 */
|
||||
var targetRow = document.getElementById('targetTabRow');
|
||||
if (targetRow) targetRow.style.display = isEcat ? 'none' : '';
|
||||
var ids = {
|
||||
wifiEsp32UploadPane: !isGd32,
|
||||
wifiGd32UploadPane: isGd32,
|
||||
/* EtherCAT 复用 GD32 上传区(同一 fileInputGd32 / processFile),选文件 UI 与 WiFi/BLE 一致 */
|
||||
wifiEsp32UploadPane: !isEcat && !isGd32,
|
||||
wifiGd32UploadPane: isGd32 || isEcat,
|
||||
bleUploadPane: false,
|
||||
wifiEsp32ActionPane: !isBle && !isGd32,
|
||||
wifiGd32ActionPane: !isBle && isGd32,
|
||||
bleActionPane: isBle
|
||||
wifiEsp32ActionPane: !isBle && !isEcat && !isGd32,
|
||||
wifiGd32ActionPane: !isBle && !isEcat && isGd32,
|
||||
bleActionPane: isBle,
|
||||
bootEcatPane: isEcat
|
||||
};
|
||||
Object.keys(ids).forEach(function (id) {
|
||||
var el = document.getElementById(id);
|
||||
if (el) el.style.display = ids[id] ? '' : 'none';
|
||||
});
|
||||
/* EtherCAT 与 WiFi/BLE 共用同一张进度卡,只是切到 ecatStages + ppEcatOta */
|
||||
var hint = document.getElementById('readyHint');
|
||||
var autoBtn = document.getElementById('autoFlashBtn');
|
||||
if (autoBtn && isBle) {
|
||||
autoBtn.textContent = isGd32 ? '一键刷写 GD32' : '一键刷写 ESP32';
|
||||
}
|
||||
if (hint) {
|
||||
if (isBle) {
|
||||
if (isEcat) {
|
||||
hint.innerHTML = 'EtherCAT 模式:选择 GD32 固件 → 探测对面是谁 → 刷写 APP。';
|
||||
} else if (isBle) {
|
||||
hint.innerHTML = isGd32
|
||||
? 'BLE 模式 · 目标 GD32:连接设备 → 选择 GD32 固件 → 一键刷写。'
|
||||
: 'BLE 模式 · 目标 ESP32:连接设备 → 选择 ESP32 固件 → 一键刷写。';
|
||||
@@ -307,6 +352,7 @@ window.sharedFirmwareFiles = window.sharedFirmwareFiles || {
|
||||
hint.innerHTML = 'WiFi 模式:上传 ESP32 固件后自动执行 OTA 并重启。';
|
||||
}
|
||||
}
|
||||
if (typeof window.refreshBootEcatUi === 'function') window.refreshBootEcatUi();
|
||||
};
|
||||
|
||||
applySharedModeUi();
|
||||
|
||||
Reference in New Issue
Block a user