82 lines
2.1 KiB
JavaScript
82 lines
2.1 KiB
JavaScript
'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_text:AP')) {
|
|
log.info('display', '显示屏 → AP');
|
|
}
|
|
}
|
|
|
|
showConn() {
|
|
if (writeLvglCommand('show_text:Conn')) {
|
|
log.info('display', '显示屏 → Conn');
|
|
}
|
|
}
|
|
|
|
showErr0() {
|
|
if (writeLvglCommand('show_text: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_text:${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;
|