From 636e498de3eeb6191713c2ee5b6d8b6d9ca9f136 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B8=A1=E5=8F=A3=E6=B5=AA=E4=BA=BA?= Date: Sun, 27 Sep 2026 10:46:18 +0800 Subject: [PATCH] fix: commit MCU RGB effects in calibrated order --- README.md | 2 +- SHA256SUMS | 4 ++-- app/pigway_pi_control.py | 11 +++++------ 3 files changed, 8 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 498313e..2383e3d 100644 --- a/README.md +++ b/README.md @@ -73,7 +73,7 @@ CHECK STORAGE ### 5. RGB 正常状态与告警引擎 -没有 active alert 时,RGB 默认全灭。`[led] normal_mode` 可改为自定义颜色常亮/闪烁,或 MCU 已确认的流水、呼吸、跑马、彩虹和炫彩效果。常亮与闪烁使用 0..255 的自定义 R/G/B;内置流水/呼吸使用 MCU 固定的红、绿、蓝、黄、紫、青、白七色和慢/中/快三档速度,跑马/彩虹/炫彩由 MCU 自行配色。内置效果只在模式切换时写一次寄存器,不循环刷 I²C。 +没有 active alert 时,RGB 默认全灭。`[led] normal_mode` 可改为自定义颜色常亮/闪烁,或 MCU 已确认的流水、呼吸、跑马、彩虹和炫彩效果。常亮与闪烁使用 0..255 的自定义 R/G/B;内置流水/呼吸使用 MCU 固定的红、绿、蓝、黄、紫、青、白七色和慢/中/快三档速度,跑马/彩虹/炫彩由 MCU 自行配色。内置效果只在模式切换时按 speed → color → effect 的实机校准顺序写一次寄存器,不循环刷 I²C。 任何 active alert 都会立即抢占正常效果。RGB 告警模式由当前 OLED 告警页决定;OLED 位于主页时则使用最高优先级 active owner。颜色表示故障对象:CPU负载、频率、throttling、温度与散热相关为红色,供电/欠压为橙色,内存为紫色,存储为白色,网络/Wi-Fi 为蓝色,服务/进程为青色。频率表示严重等级:默认 Warning 为1500ms亮/1500ms灭,Critical 为750ms亮/750ms灭,Emergency 为300ms亮/300ms灭。`[led]` 可分别配置六类对象的 R/G/B 值,以及三个严重等级的亮灯和灭灯时长,非法颜色值会限制到0..255,间隔最小为50ms。每次点亮使用 v3.2.0 已验证的完整 selector/R/G/B 写入顺序,只在亮/灭边沿写 MCU,不做高频软件 PWM。相邻页面 RGB mode 相同时不关闭、不重启节奏。动画不写循环日志,owner 变化记录 `DISPLAY_OWNER`,实际模式变化才记录 `RGB_MODE`。 diff --git a/SHA256SUMS b/SHA256SUMS index 4ec6000..1b5c41d 100644 --- a/SHA256SUMS +++ b/SHA256SUMS @@ -1,6 +1,6 @@ -549d0dc34db902925bb5d0376aae19c4b84ca259c000d43b2b96ecaca3623d47 README.md +8387ef104ac28e76dc73dd75b42b9c6c8a23ee96026a0677ec419d7ad4f202aa README.md 72c46162c33f9587c6ccb01ad53fbaaf4ecec8cd21014b909e87e8707e253e36 app/oled_font_5x7.bin -c3062ad1122c36a762bc3ca9d44ebcb5a6a5a37446a85fb68312de4fd8aa5db9 app/pigway_pi_control.py +d71d949643d31461f2e62ded3818e1a0f1711d1420756ad0cc32eb04cde0fad3 app/pigway_pi_control.py 3a13b4e8f9d306e77f82eba78b78fe9b1932488884d6f3f976754bfa94f0153d app/pigway_pi_control_api.py 75fa662ed21138a8e394de83e46281dab039433cc0d7a8f787e1a049f4b47ec8 config/pigway-pi-control.conf 1276369d600e9fd560d03e26146bcaeb40a353829978d1ebaa578d385b27af72 install.sh diff --git a/app/pigway_pi_control.py b/app/pigway_pi_control.py index d25b7d1..52d76fa 100755 --- a/app/pigway_pi_control.py +++ b/app/pigway_pi_control.py @@ -471,12 +471,11 @@ def rgb_normal_effect(mode): effect_name=mode.removeprefix("NORMAL_").lower() state=("effect",effect_name,NORMAL_EFFECT_SPEED,NORMAL_EFFECT_COLOR) if _last_rgb==state: return - # Seller protocol: close the previous RGB state, then set effect, speed and - # the limited built-in palette. Write this sequence once per mode change. - mcu(0x07,0x00); time.sleep(0.001) - mcu(0x04,RGB_EFFECTS[effect_name]); time.sleep(0.001) - mcu(0x05,NORMAL_EFFECT_SPEED); time.sleep(0.001) - mcu(0x06,RGB_EFFECT_COLORS[NORMAL_EFFECT_COLOR]) + # Hardware-calibrated order: speed and color are parameters; the final + # effect register write commits and starts the selected MCU animation. + mcu(0x05,NORMAL_EFFECT_SPEED); time.sleep(RGB_WRITE_DELAY_MS/1000.0) + mcu(0x06,RGB_EFFECT_COLORS[NORMAL_EFFECT_COLOR]); time.sleep(RGB_WRITE_DELAY_MS/1000.0) + mcu(0x04,RGB_EFFECTS[effect_name]) _last_rgb=state def render_home(cpu,temp,mem,disk):