feat(led): add rk3588 lvgl display backend
This commit is contained in:
81
lib/led/rk3588-lvgl.js
Normal file
81
lib/led/rk3588-lvgl.js
Normal file
@@ -0,0 +1,81 @@
|
||||
'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;
|
||||
Reference in New Issue
Block a user