rack:刷机模式界面与事件;事件 21 新增 254「断电自动退出」
- 单板页「更多 → 刷机模式(1 小时)/ 加钟 30 分钟」,chg>0 时蓝色「刷机模式 · 充电中」、FLT 显示为「反向阻断」 - 协议白名单 flash_mode;事件 21 命名:开 / 手动关 / 到期 / 加钟 / 断电自动退出 - ⚠️ 254 带 0x80 位,必须先于「加钟」判断,否则显示成「加钟 126 分钟」 48 例全绿,已部署。 Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
这个提交包含在:
@@ -30,6 +30,7 @@ class SimRail:
|
||||
self.busy_until = 0
|
||||
self.act = "idle"
|
||||
self.pending: Optional[str] = None # 序列结束时要做的事
|
||||
self.chg_until = 0 # 刷机模式截止(模拟时钟 ms),0 = 没开
|
||||
|
||||
|
||||
class SimBoard:
|
||||
@@ -132,7 +133,9 @@ class SimBoard:
|
||||
rails.append({"r": r.rail, "pr": r.present, "en": r.en, "vb": r.vb, "set": r.set_mv,
|
||||
"mv": (r.set_mv if r.en else 0) if ok else None,
|
||||
"ua": r.ua if ok else None, "pg": r.en if ok else None,
|
||||
"flt": False if ok else None, "st": r.act, "res": "-"})
|
||||
"flt": False if ok else None,
|
||||
"chg": max(0, (r.chg_until - self.now + 999) // 1000) if r.chg_until else 0,
|
||||
"st": r.act, "res": "-"})
|
||||
return {"ok": True, "fw": self.fw, "up": self.up_ms, "in": {"mv": 12030, "ua": 1500000},
|
||||
"rails": rails, "temp": [35000, 36500],
|
||||
"fan": {"duty": max(300, self.fan_floor), "floor": self.fan_floor, "en": True,
|
||||
@@ -231,7 +234,31 @@ class SimBoard:
|
||||
r.en = req["on"]
|
||||
if not r.en:
|
||||
r.vb = False
|
||||
if r.chg_until > self.now:
|
||||
r.chg_until = 0
|
||||
self._ev(rail, 21, 0)
|
||||
return {"ok": True}
|
||||
if cmd == "flash_mode": # 固件 chgmode.h 的规则:最多 2 路、关着电不许开、关电一并退出
|
||||
if "add" in req: # 0.1.6 加钟:只给开着的加,剩余截断到 120 分钟
|
||||
if r.chg_until <= self.now:
|
||||
return {"ok": False, "err": "state"}
|
||||
r.chg_until = min(r.chg_until + req["add"] * 60000, self.now + 120 * 60000)
|
||||
self._ev(rail, 21, 0x80 | req["add"])
|
||||
return {"ok": True, "left": (r.chg_until - self.now + 999) // 1000}
|
||||
if not req["on"]:
|
||||
if r.chg_until > self.now:
|
||||
self._ev(rail, 21, 0)
|
||||
r.chg_until = 0
|
||||
return {"ok": True, "left": 0}
|
||||
if not r.en:
|
||||
return {"ok": False, "err": "state"}
|
||||
active = sum(1 for x in self.rails if x is not r and x.chg_until > self.now)
|
||||
if active >= 2:
|
||||
return {"ok": False, "err": "state"}
|
||||
m = req.get("min", 60)
|
||||
r.chg_until = self.now + m * 60000
|
||||
self._ev(rail, 21, m)
|
||||
return {"ok": True, "left": m * 60}
|
||||
if cmd == "set_voltage":
|
||||
r.set_mv = req["mv"]
|
||||
return {"ok": True, "set": r.set_mv}
|
||||
|
||||
在新工单中引用
屏蔽一个用户