chore: 解决 stash pop 与 device-link 合并冲突并收回本地 WIP

保留 ConnectionHub(deviceLink 导入/ECAT 自启/pmHold 幂等)与主线
WIP(断线清指标、AUTO_POLL=false、boot_ecat 等)。
This commit is contained in:
cbb
2026-09-16 12:31:39 +08:00
parent 0c772f5924
commit e98950cde2
12 changed files with 1026 additions and 248 deletions
+18 -9
View File
@@ -17,7 +17,8 @@
恢复可靠性(为什么睡不死):ESP32↔GD32 的 SPI 链路与 LAN9252 完全解耦(独立外设/中断),
芯片睡得再深 0xA2 命令照样送达 GD32;NRST 硬复位覆盖 LAN9252 的一切软件可达状态
(D3 睡死/HBI 假死都在内);GD32 自身挂了还有断电重启兜底(固件 hardwareReset 自动重走
受控复位序列)。页面常驻 2s 自动状态轮询,睡没睡一目了然。
受控复位序列)。自动状态轮询默认已关(AUTO_POLL=false),仅手动「读状态/唤醒/休眠」,
避免持续 /spi/send 0xA2 在 ESP32 串口刷「WEB SPI」日志;需恢复自动刷新改 AUTO_POLL。
-->
<html lang="zh-CN">
<head>
@@ -151,7 +152,7 @@
<div>
<div class="card card--mem">
<div class="card-head"><span class="ico">🔋</span> 芯片电源状态 <span style="margin-left:auto;font-size:.68rem;color:var(--text-label);font-weight:400">2s 自动刷新</span></div>
<div class="card-head"><span class="ico">🔋</span> 芯片电源状态 <span style="margin-left:auto;font-size:.68rem;color:var(--text-label);font-weight:400">仅手动读状态</span></div>
<div class="card-body">
<div class="pm-sleep-banner" id="sleepBanner">🌙 芯片处于低功耗档 —— EtherCAT 通信已中断,点「手动唤醒」恢复</div>
<div class="pm-grid">
@@ -323,10 +324,11 @@
$("sleepBanner").className = "pm-sleep-banner show";
}
/* ---- 自动状态轮询:连接后 2s 一次;读到睡眠态即暂停(1.6.24 实测 HBI 读
* 事务本身会唤醒睡眠中的芯片,轮询等于不停叫醒它);连败 3 次标红停轮。
* pollGen:丢弃 enterMode/唤醒 之后仍在途的过期 1E 响应,避免竞态覆盖 UI。 ---- */
var pollFail = 0, pollTimer = null, pollPaused = false, pollGen = 0;
/* ---- 自动状态轮询已关闭(默认只手动):此前 2s 轮询会持续打 /spi/send 0xA2,
* 在 ESP32 串口刷「WEB SPI」日志。手动「读状态 / 唤醒 / 休眠」仍可用。
* 若需恢复自动刷新:把 AUTO_POLL 改 true。 ---- */
var AUTO_POLL = false;
var pollFail = 0, pollTimer = null, pollPaused = !AUTO_POLL, pollGen = 0;
/** 主站看门狗豁免是否已置位(pmHold 幂等,防 2s 轮询刷屏) */
var pmHoldOn = false;
function bumpPollGen() { return ++pollGen; }
@@ -369,6 +371,10 @@
}
function resumePolling() {
if (pollTimer) { clearTimeout(pollTimer); pollTimer = null; }
if (!AUTO_POLL) {
pollPaused = true;
return;
}
pollPaused = false;
bumpPollGen();
pollTimer = setTimeout(pollOnce, 2000);
@@ -393,8 +399,9 @@
.then(function (r) {
if (!r.ok) throw new Error("HTTP " + r.status);
setConn(true, "已连接");
log("设备可达: " + deviceIp(), "ok");
pollOnce();
log("设备可达: " + deviceIp() +
(AUTO_POLL ? "。" : "。自动状态轮询已关闭,请点「读状态」手动查询。"), "ok");
if (AUTO_POLL) pollOnce();
})
.catch(function (e) {
setSpiFail("ESP32 探测失败: " + e.message + "(IP " + deviceIp() + ")");
@@ -624,7 +631,9 @@
pmHold(1);
probeEspOnly();
} else {
log("就绪。状态每 2s 自动刷新;改设备 IP 请到 OTA 中继页(全局共享)。", "warn");
log(AUTO_POLL
? "就绪。状态每 2s 自动刷新;改设备 IP 请到 OTA 中继页(全局共享)。"
: "就绪。自动状态轮询已关闭(避免持续 SPI 诊断流量);需要时点「读状态」。改设备 IP 请到 OTA 中继页。", "warn");
probe();
}
})();