fix(display): 用 printf 代替 echo,修复 VFD 写入失败及数字显示偏移问题

Made-with: Cursor
This commit is contained in:
stswangzhiping
2026-03-19 08:37:00 +08:00
parent e887f5b8e2
commit 33046948b9

View File

@@ -97,9 +97,9 @@ const DISPLAY_PATH = '/sys/devices/platform/openvfd/attr/led';
* #s1 系统时钟模式,显示当前时间 * #s1 系统时钟模式,显示当前时间
*/ */
class Display { class Display {
/** 网络断开 / AP 模式 → 显示 "AP " */ /** 网络断开 / AP 模式 → 显示 "AP " */
showAP() { showAP() {
this._write('#m3 AP '); this._write('#m3AP ');
log.info('display', '显示屏 → AP'); log.info('display', '显示屏 → AP');
} }
@@ -113,14 +113,15 @@ class Display {
showPinMiddle4(pin) { showPinMiddle4(pin) {
const s = String(pin || ''); const s = String(pin || '');
const mid4 = s.length >= 6 ? s.slice(1, 5) : s.padStart(4, '0').slice(-4); const mid4 = s.length >= 6 ? s.slice(1, 5) : s.padStart(4, '0').slice(-4);
this._write('#m3 ' + mid4); // 不加空格分隔符,内容直接跟在 #m3 后,否则空格占用第一个显示位
this._write('#m3' + mid4);
log.info('display', `显示屏 → PIN 中间4位: ${mid4}`); log.info('display', `显示屏 → PIN 中间4位: ${mid4}`);
} }
_write(val) { _write(val) {
try { try {
// 用 shell 管道写入,与 echo "..." | tee ... 行为完全一致 // 用 printf 避免 echo 的换行符导致 sysfs 写入失败
execSync(`echo "${val}" | tee ${DISPLAY_PATH} > /dev/null`, { timeout: 3000 }); execSync(`printf '%s' "${val}" | tee ${DISPLAY_PATH} > /dev/null`, { timeout: 3000 });
} catch (e) { } catch (e) {
log.warn('display', `写入失败: ${e.message}`); log.warn('display', `写入失败: ${e.message}`);
} }