From 1401e4d231b71c3987dc79467dce0f5be89ee41c Mon Sep 17 00:00:00 2001 From: zouhaitao Date: Mon, 6 Jul 2026 11:17:36 +0800 Subject: [PATCH] docs: update implementation plan and walkthrough --- Docs/walkthrough.md | 89 +++++++++++++++++++++++++++------------------ 1 file changed, 54 insertions(+), 35 deletions(-) diff --git a/Docs/walkthrough.md b/Docs/walkthrough.md index cb3300d..d40b165 100644 --- a/Docs/walkthrough.md +++ b/Docs/walkthrough.md @@ -4,42 +4,58 @@ ## 实现功能摘要 -1. **自适应射频解码兼容性**: - * 重构为**基于电平比例的自适应解码算法**。放宽绝对微秒窗口限制(高电平50~2500us,低电平1500~60000us),通过低/高电平比例(15~48倍,基准为31倍)自动识别 EV1527 帧并解析数据。 - * 优化串口调试输出,避免大量多行打印造成的 CPU 阻塞。 +### 1. 法语 UI 语言包支持 (French-Only UI) +* **全界面翻译**:手环所有的 UI 屏幕显示内容均已替换为法语。 +* **界面排版优化**:考虑到法语单词通常较长,所有中法文映射后的短语长度均严格限制在 120 像素宽的 OLED 屏幕边界内(每行最大 15 个字符),并通过调整绘图坐标和排版(如 "DESARME" 解锁图标与文字的 X 坐标微调),确保显示效果居中且不发生重叠。 + * `WATCH` ➔ `MONTRE` + * `ARMED` ➔ `ARME` + * `DISARM` ➔ `DESARME` + * `PAIR MENU` ➔ `MENU APPAI.` + * `DOOR SENSOR` ➔ `DETEC. PORTE` + * `PIR MOTION` ➔ `DETEC. PIR` + * `SMOKE DETECT` ➔ `DETEC. FUMEE` + * `GAS LEAK` ➔ `DETEC. GAZ` + * `WATER FLOOD` ➔ `DETEC. EAU` + * `SEARCHING...` ➔ `RECHERCHE...` + * `TRIGGER SENSOR` ➔ `DECLENCH. CAPT` + * `CODE FOUND` ➔ `CODE TROUVE` + * `HOLD SOS TO SAVE` ➔ `MAINTENIR SOS` + * `PAIR SUCCESS` ➔ `SUCCES APPAI.` + * `PAIR TIMEOUT` ➔ `DELAI DEPASSE` + * `NO SIGNAL FOUND` ➔ `AUCUN SIGNAL` + * `PAIR FAILED` ➔ `ECHEC APPAI.` + * `TYPE MISMATCH` ➔ `TYPE INCORRECT` + * `EMIT SOS` ➔ `SOS EMIS` + * `BAND TRIGGERED` ➔ `BRACELET ACTIF` + * `BINDING IPC` ➔ `LIAISON IPC` + * `TRANSMITTING...` ➔ `ENVOI EN COURS` -2. **严格匹配要求的按键与事件交互逻辑**: - * **进入配对菜单**:在待机模式下,同时长按 `▲`(上键)+ `▼`(下键) 3秒,进入传感器类型选择菜单(无震动与LED闪烁,保持菜单展示)。 - * **进入对码搜索 (Pair Wait)**:在菜单中选择好类型后,短按 `SOS` 确认,此时触发 1 次 100ms 短振确认,且 LED 开启白色快闪(3Hz),进入雷达扫描信号接收。 - * **主动呼救 (Emit SOS)**:在待机模式下,短按 `SOS` 键,立刻切入求救模式并开始向外循环发射 433MHz 警报信号。 - * **IPC 对码绑定**:在待机模式下,长按 `SOS` 键 5秒,显示 BINDING IPC 页面,向外发射 1 次 433MHz 绑定信号(数据码为 0x01),维持 2 秒后自动返回待机。 - * **解除求救模式**:在求救模式下,长按任意一个按键(UP、DOWN 或 SOS),即可主动解除警报退回时钟待机。 +### 2. 单线制幻彩 RGB LED (XL-2020RGBC-2812B) 驱动集成 +* **物理层引脚映射**:使用原 `LED_R` 所属引脚 `P0.0` 作为单线数据输入(DIN)引脚,将其配置为高速推挽输出。在系统初始化时主动输出熄灭状态,防止上电乱闪。 +* **精准 Bit-bang 驱动**:根据 `XL-2020` 的 800Kbps 时序规范(1T cycle ≈ 41.67ns @ 24MHz),实现了毫微秒级别的 `WS2812_Write24Bit(u8 g, u8 r, u8 b)` 与 `WS2812_Reset()` 软件驱动。在发送数据流时,关闭总中断 `EA = 0`,确保脉冲宽度不被中断打断。 +* **软件级虚拟 LED 兼容层**:将原有的 `LED_R`, `LED_G`, `LED_B` 重定义为全局 `bit` 软件变量。在 1ms `Timer1_Isr` 结尾捕获到虚拟 LED 的状态改变时,再自动调用 `WS2812` 驱动输出对应的 GRB 24 位电平。这使得应用层所有的 LED 闪烁及颜色逻辑无需任何改动,保证了系统的高稳定性与高扩展性。 -3. **不接收/解析他人 SOS 广播**: - * 手环只对已经配对存储在内部数据库(门磁、PIR、烟感、燃气、水浸)的传感器 ID 触发报警。 - * 防区轮询解码时严格过滤并排除 SOS 信号的被动接收,防止被其他设备的 SOS 广播误触发。 +### 3. 自适应射频解码兼容性 +* 重构为**基于电平比例的自适应解码算法**。放宽绝对微秒窗口限制,通过低/高电平比例(15~48倍,基准为31倍)自动识别 EV1527 帧并解析数据。 +* 优化串口调试输出,避免大量多行打印造成的 CPU 阻塞。 -4. **各传感器特定声光电反射与对码状态**: - * **对码流程**: - * 对码中:LED 维持 **白色快闪 (3Hz)**(R+G+B 全开闪烁)。 - * 对码成功:屏幕显示 PAIR SUCCESS,触发 **强力长振 1 次 (400ms)**,并且 LED **绿色常亮 2 秒**。 - * 对码失败/超时:双击快速短振 (100ms + 100ms),LED **红色快闪 3 次**。 - * **传感器报警触发模式** (5秒循环周期): - * **门磁**:LED 红色常亮,马达 1 次短振 300ms。 - * **PIR 人体感应**:LED 黄色(R+G 混色),马达 2 次短振 300ms (间隔 200ms)。 - * **烟雾**:LED 绿色,马达 3 次短振 200ms (间隔 150ms)。 - * **气体**:LED 紫色(R+B 混色),马达 4 次短振 200ms (间隔 100ms)。 - * **水浸**:LED 黄色(R+G 混色),马达 2 次长振 600ms (间隔 300ms)。 - * **手环主动 SOS 求救模式**: - * LED **红色极速闪烁 (5Hz)**。 - * 马达 **持续 1200ms 循环长振** (振动 1000ms,静止 200ms 循环)。 +### 4. 严格匹配要求的按键与事件交互逻辑 +* **进入配对菜单**:在待机模式下,同时长按 `▲` + `▼` 3秒,进入传感器类型选择菜单。 +* **进入对码搜索 (Pair Wait)**:在菜单中选择好类型后,短按 `SOS` 确认,此时触发 1 次 100ms 短振确认,且 LED 开启白色快闪(3Hz),进入雷达扫描信号接收。 +* **主动呼救 (Emit SOS)**:在待机模式下,短按 `SOS` 键,立刻切入求救模式并开始向外循环发射 433MHz 警报信号。 +* **IPC 对码绑定**:在待机模式下,长按 `SOS` 键 5秒,显示 BINDING IPC 页面,向外发射 1 次 433MHz 绑定信号(数据码为 0x01),维持 2 秒后自动返回待机。 +* **解除求救模式**:在求救模式下,长按任意一个按键(UP、DOWN 或 SOS),即可主动解除警报退回时钟待机。 -5. **电池百分号显示修复与坐标复原**: - * **字模基线对齐**:将 `%` 字符(0x25)的字模数据在 8x16 矩阵中向上平移 2 像素,使其与前面的数字处于同一水平基准线。 - * **坐标优化防重合**:将电池图标右移至 `X=92, Y=27`,电量百分比置于 `X=62, Y=24`。二者之间保留 6 像素间距,既美观又完美杜绝了贴合与重叠问题。 +### 5. 不接收/解析他人 SOS 广播 +* 手环只对已经配对存储在内部数据库(门磁、PIR、烟感、燃气、水浸)的传感器 ID 触发报警。 +* 防区轮询解码时客观过滤并排除 SOS 信号的被动接收。 -6. **对码捕获卡顿 Bug 修复**: - * 修复了 `while(1)` 循环开头无条件执行 `state_changed = 0` 导致在 Section 4 异步检测到射频匹配信号跳入 `STATE_PAIR_CONFIRM` 后重绘标记被强行抹除、屏幕始终卡死在搜索雷达页面的 Bug。现在已改在重绘判定内部重置,检测到对码信号即可瞬间跳转至“捕获成功”确认页。 +### 6. 电池百分号显示修复与坐标复原 +* **字模基线对齐**:将 `%` 字符(0x25)的字模数据在 8x16 矩阵中向上平移 2 像素,使其与前面的数字处于同一水平基准线。 +* **坐标优化防重合**:将电池图标右移至 `X=92, Y=27`,电量百分比置于 `X=62, Y=24`。二者之间保留 6 像素间距,既美观又完美杜绝了贴合与重叠问题。 + +### 7. 对码捕获卡顿 Bug 修复 +* 修复了 `while(1)` 循环开头无条件执行 `state_changed = 0` 导致在 Section 4 异步检测到射频匹配信号跳入 `STATE_PAIR_CONFIRM` 后重绘标记被强行抹除、屏幕始终卡死在搜索雷达页面的 Bug。现在已改在重绘判定内部重置,检测到对码信号即可瞬间跳转至“捕获成功”确认页。 ## 仿真模式扩展说明 @@ -52,10 +68,13 @@ * 发送 **`2`**:强制系统进入 **ARMED** 布防模式(门磁/PIR 此时被触发会立刻报警)。 * 发送 **`3`**:强制系统进入 **DISARMED** 撤防模式。 -## 编译结果 +## 编译与 Git 仓库同步信息 * **编译器**:Keil C251 V5.60.0.0 * **编译输出目标**:`Build\wristband.hex` -* **Errors**:0 -* **Warnings**:2 -* **Program Size**:data=104.1, edata+hdata=351, xdata=352, const=1395, code=13552 +* **编译状态**:0 Errors, 2 Warnings (均属于未调用辅助函数的警告,无任何影响) +* **Program Size**:data=104.7, edata+hdata=351, xdata=352, const=1390, code=13855 +* **Git 仓库地址**:`https://dev.xtell.cn/zouhaitao/stc32g128k.git` +* **Git 提交记录**: + * `feat: initial commit for stc32g12k128 wristband firmware` (含完整 `.gitignore` 规则,已成功忽略全部编译器生成的 `.obj` / `.lst` / `.hex` 等中间临时文件)。 + * `feat: translate UI to French and implement XL-2020RGBC-2812B addressable RGB LED driver` (添加了法语界面翻译与 WS2812B 精准时序单线驱动,并成功推送至远程 `master` 分支)。