diff --git a/lib/led.js b/lib/led.js index c778597..a03debf 100644 --- a/lib/led.js +++ b/lib/led.js @@ -46,6 +46,9 @@ function vfdTitleNormalize(raw) { .padEnd(4, ' '); } +// O_WRONLY | O_NONBLOCK:FIFO 无读端时立即抛 ENXIO 而非永久阻塞事件循环 +const VFD_OPEN_FLAGS = fs.constants.O_WRONLY | fs.constants.O_NONBLOCK; + function writeVfdPipeTitle(text4) { if (!vfdPipePresent()) return; const seg = vfdTitleNormalize(text4); @@ -58,7 +61,7 @@ function writeVfdPipeTitle(text4) { return; } try { - const fd = fs.openSync(VFD_PIPE, 'w'); + const fd = fs.openSync(VFD_PIPE, VFD_OPEN_FLAGS); fs.writeSync(fd, data); fs.closeSync(fd); } catch (e) { @@ -71,7 +74,7 @@ function writeVfdPipeClock() { const data = Buffer.alloc(VFD_BUF_SIZE); data.writeUInt16LE(VFD_MODE_CLOCK, 0); try { - const fd = fs.openSync(VFD_PIPE, 'w'); + const fd = fs.openSync(VFD_PIPE, VFD_OPEN_FLAGS); fs.writeSync(fd, data); fs.closeSync(fd); } catch (e) { @@ -256,13 +259,6 @@ class Display { this._stopBlink(); writeVfdPipeClock(); log.info('display', '显示屏 → 时间'); - // 每 30s 刷新一次,保持 vfdservice 持续从管道读取, - // 防止长时间无写入后管道"冷却",导致后续 showPin 写入阻塞 - const refresh = () => { - writeVfdPipeClock(); - this._blinkTimer = setTimeout(refresh, 30_000); - }; - this._blinkTimer = setTimeout(refresh, 30_000); } showPin(pin) {