feat: add SETUP/APPS status LEDs (b2/b1), toggle on activation

Made-with: Cursor
This commit is contained in:
stswangzhiping
2026-03-18 20:25:54 +08:00
parent 06b670d5ec
commit 90bba5f348
2 changed files with 54 additions and 6 deletions

View File

@@ -4,18 +4,22 @@ const fs = require('fs');
const log = require('./logger');
/**
* WiFi 指示灯控制
* 前面板指示灯控制
*
* 硬件路径: /sys/devices/platform/openvfd/attr/b5
* 1 = 亮 0 = 灭
*
* LED 状态与 WiFi 状态的对应关系:
* WiFi 灯 (b5): 1 = 亮, 0 = 灭(正逻辑)
* - WiFi 已连接且互联网畅通 → 常亮
* - WiFi 连接中(正在尝试) → 闪烁
* - WiFi 未连接 / 无互联网 → 熄灭
*
* SETUP 灯 (b2): 0 = 亮, 1 = 灭(反逻辑,与 APPS 互斥)
* APPS 灯 (b1): 0 = 亮, 1 = 灭(反逻辑,与 SETUP 互斥)
* - claw 未激活 → SETUP 亮APPS 灭
* - claw 已激活 → APPS 亮SETUP 灭
*/
const LED_PATH = process.env.CLAWD_LED_PATH || '/sys/devices/platform/openvfd/attr/b5';
const SETUP_LED_PATH = '/sys/devices/platform/openvfd/attr/b2';
const APPS_LED_PATH = '/sys/devices/platform/openvfd/attr/b1';
const BLINK_INTERVAL_MS = 500; // 闪烁间隔ms
class WifiLed {
@@ -82,5 +86,42 @@ class WifiLed {
}
}
// ── SETUP / APPS 状态灯 ───────────────────────────────────────────────────────
/**
* SETUP 灯b2与 APPS 灯b1互斥控制。
* 两灯均为反逻辑:写 0 = 亮,写 1 = 灭。
*/
class StatusLed {
/** claw 未激活 → SETUP 亮APPS 灭 */
setSetup() {
this._write(SETUP_LED_PATH, 0); // SETUP 亮
this._write(APPS_LED_PATH, 1); // APPS 灭
log.info('led', '状态灯 → SETUP未激活');
}
/** claw 已激活 → APPS 亮SETUP 灭 */
setApps() {
this._write(SETUP_LED_PATH, 1); // SETUP 灭
this._write(APPS_LED_PATH, 0); // APPS 亮
log.info('led', '状态灯 → APPS已激活');
}
/** 两灯全灭(进程退出时调用) */
off() {
this._write(SETUP_LED_PATH, 1);
this._write(APPS_LED_PATH, 1);
}
_write(path, val) {
try {
fs.writeFileSync(path, String(val));
} catch (e) {
log.warn('led', `写入失败 (${path}): ${e.message}`);
}
}
}
// 全局单例,整个进程共用
module.exports = new WifiLed();
module.exports = new WifiLed();
module.exports.status = new StatusLed();