Files
clawd/lib/led/rk3588-lvgl.js

82 lines
2.1 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
'use strict';
const fs = require('fs');
const log = require('../logger');
const LVGL_CMD_FIFO = process.env.CLAWD_LVGL_CMD_FIFO || '/tmp/lvgl_cmd';
function writeLvglCommand(command) {
try {
const fd = fs.openSync(LVGL_CMD_FIFO, fs.constants.O_WRONLY | fs.constants.O_NONBLOCK);
fs.writeSync(fd, `${command}\n`);
fs.closeSync(fd);
return true;
} catch (e) {
log.warn('display', `lvgl cmd failed (${command}): ${e.message}`);
return false;
}
}
class BasicLed {
constructor(name) {
this.name = name;
this._current = null;
}
on() { this._current = 'on'; log.debug('led', `[rk3588-lvgl] ${this.name} on`); }
off() { this._current = 'off'; log.debug('led', `[rk3588-lvgl] ${this.name} off`); }
blink() { this._current = 'blink'; log.debug('led', `[rk3588-lvgl] ${this.name} blink`); }
destroy() { this._current = 'off'; log.debug('led', `[rk3588-lvgl] ${this.name} destroy`); }
}
class StatusLed {
setSetup() { log.debug('led', '[rk3588-lvgl] status setup'); }
setApps() { log.debug('led', '[rk3588-lvgl] status apps'); }
off() { log.debug('led', '[rk3588-lvgl] status off'); }
}
class Display {
showAP() {
if (writeLvglCommand('show_ap')) {
log.info('display', '显示屏 → AP闪烁');
}
}
showConn() {
if (writeLvglCommand('show_conn')) {
log.info('display', '显示屏 → Conn闪烁');
}
}
showErr0() {
if (writeLvglCommand('show_err0')) {
log.info('display', '显示屏 → Err0');
}
}
showTime() {
if (writeLvglCommand('show_time')) {
log.info('display', '显示屏 → 时间');
}
}
showPin(pin) {
const s = String(pin || '').padStart(4, '0').slice(-4);
if (writeLvglCommand(`show_pin:${s}`)) {
log.info('display', `显示屏 → PIN: ${s}(闪烁)`);
}
}
}
class LanLed {
start() { log.debug('led', '[rk3588-lvgl] LAN start ignored'); }
stop() { log.debug('led', '[rk3588-lvgl] LAN stop ignored'); }
}
const led = new BasicLed('wifi');
led.bt = new BasicLed('bt');
led.status = new StatusLed();
led.display = new Display();
led.lan = new LanLed();
module.exports = led;