diff --git a/Docs/20_requirements-detail/main.md b/Docs/20_requirements-detail/main.md
index 44ab2af..ab78510 100644
--- a/Docs/20_requirements-detail/main.md
+++ b/Docs/20_requirements-detail/main.md
@@ -24,7 +24,7 @@
| **主选择菜单 (STATE_MENU)** | 短按:菜单项向上滚动 | 短按:菜单项向下滚动 | 短按:确认进入选中分支;长按 3 秒:退出菜单返回时钟 | 短按/长按:立即跳转至发送 SOS 报警 |
| **时间修改 (STATE_SET_TIME)** | 短按:增加当前选中数值 | 短按:减少当前选中数值 | 短按:保存并切换到下一个修改位;长按 3 秒:放弃修改返回时钟 | 短按/长按:立即跳转至发送 SOS 报警 |
| **对码配对 (STATE_PAIR_SEARCH)** | 无动作 | 长按 2 秒:放弃对码返回主菜单 | 无动作 | 短按/长按:立即跳转至发送 SOS 报警 |
-| **对码确认微调 (STATE_PAIR_CONFIRM)** | **步骤1 (选类型)**:切换传感器类型
**步骤2 (选序号)**:自增后缀序号 (01->99) | **步骤1 (选类型)**:切换传感器类型
**步骤2 (选序号)**:自减后缀序号 (99->01) | **步骤1**:确认类型并进入步骤2 (选序号)
**步骤2**:确认保存配置并存入 Flash,返回时钟
*长按 3 秒:放弃保存返回时钟* | 短按/长按:立即跳转至发送 SOS 报警 |
+| **对码确认微调 (STATE_PAIR_CONFIRM)** | 短按:自增后缀序号 (01->99) | 短按:自减后缀序号 (99->01) | 短按:确认保存配置并存入 Flash,返回时钟;长按 3 秒:放弃保存返回时钟 | 短按/长按:立即跳转至发送 SOS 报警 |
| **布撤防手动设定 (STATE_ARM_DISARM_SELECT)** | 短按:切换布撤防高亮项 | 短按:切换布撤防高亮项 | 短按:保存选定状态返回时钟 | 短按/长按:立即跳转至发送 SOS 报警 |
| **IPC 绑定发送 (STATE_IPC_BIND)** | 无动作 | 长按 2 秒:放弃绑定返回时钟 | 短按:立刻再次发射绑定射频包;长按 3 秒:退出返回时钟 | 短按/长按:立即跳转至发送 SOS 报警 |
| **警报触发状态 (STATE_ALARMING)** | 短按:解除报警并退回时钟 | 短按:解除报警并退回时钟 | 短按:解除报警并退回时钟 | 短按/长按:解除报警并退回时钟 |
@@ -33,9 +33,9 @@
> [!NOTE]
> 1. **双 SOS 按键冗余**:上部的两个 SOS 键在电路与软件上完全等价。按下其中任意一个按键,均会触发相同的 SOS 信号采集与求救动作。
> 2. **一键报警优先级**:除了在报警状态和本地 SOS 发送状态下按 SOS 键为解除报警外,在其它任意状态下,短按或长按 SOS 键均拥有最高优先级,立刻强行中止当前业务并跳转至 SOS 呼救状态。
-> 3. **对码二步保存向导**:进入对码微调页面后,交互分为两个步骤:
-> * **第一步 (选择类型)**:屏幕上的类型字段(如 `[ PORTE ]`)带选择框,按 ▲/▼ 可手动修正所捕获的传感器类型。按 CONFIRM 键保存当前选择并切换到第二步。
-> * **第二步 (选择序号)**:屏幕上的序号选框(如 `[ 01 ]`)高亮,按 ▲/▼ 键微调该类型传感器的序号(01~99)。按 CONFIRM 键完成最终写入并存入 Flash 数据库。
+> 3. **对码自动类型识别与后缀选择**:
+> * 手环在接收到 433MHz 射频对码信号时,**自动根据数据码(Data Code)识别传感器类型**(如门磁、红外、烟感等,无须用户手动选择类型),并直接跳转到对码微调页面。
+> * 在微调确认页面中,传感器类型和图标为只读显示,用户仅需通过 ▲/▼ 键增减微调该传感器的后缀序号(01~99)。按 CONFIRM 键即可一键保存并写入 Flash 数据库。
> 4. **低功耗休眠与唤醒**:在待机、菜单或非报警页面下,若 **10秒内无任何按键操作**,系统将自动关闭 OLED 屏幕、切断 SGM3833 PMIC 电源,并将 MCU 挂起进入 Power-Down 停机模式。任何按键的按下或射频信号的接收都会通过中断将 CPU 瞬间唤醒。
## 2. 传感器对码与报警映射矩阵
diff --git a/Docs/30_architecture/main.md b/Docs/30_architecture/main.md
index 13f8a87..865dd72 100644
--- a/Docs/30_architecture/main.md
+++ b/Docs/30_architecture/main.md
@@ -57,8 +57,8 @@ stateDiagram-v2
STATE_SET_TIME --> STATE_CLOCK : 保存退出 / 10秒无操作超时
STATE_MENU --> STATE_PAIR_SEARCH : 选中 "2. APPAIRAGE" + 确认键单击
- STATE_PAIR_SEARCH --> STATE_PAIR_CONFIRM : 捕获 433MHz 传感器数据
- STATE_PAIR_CONFIRM --> STATE_CLOCK : CONFIRM/SOS 确认并保存配置
+ STATE_PAIR_SEARCH --> STATE_PAIR_CONFIRM : 捕获 433MHz 传感器数据 (自动识别传感器类型)
+ STATE_PAIR_CONFIRM --> STATE_CLOCK : 序号微调后 CONFIRM 确认保存
STATE_PAIR_SEARCH --> STATE_MENU : 长按 ▼ 键退出
STATE_MENU --> STATE_ARM_DISARM_SELECT : 选中 "3. ARM/DISARM" + 确认键单击
diff --git a/Docs/40_ui-design/main.md b/Docs/40_ui-design/main.md
index c402512..25db651 100644
--- a/Docs/40_ui-design/main.md
+++ b/Docs/40_ui-design/main.md
@@ -64,23 +64,25 @@
* **顶部标题**:显示 `APPAIRAGE`(配对)。
* **中央图案**:绘制雷达搜索波纹动画 `SEARCHING...`,并闪烁提示 `DECLENCH. SENS`(触发传感器)。
-#### 2.3.3 对码确认与二步微调界面 (STATE_PAIR_CONFIRM)
-当手环解码到传感器对码信号后,切入此确认页:
+#### 2.3.3 对码确认与序号微调界面 (STATE_PAIR_CONFIRM)
+当手环解码到传感器对码信号后,系统自动依据 4-bit 数据码解析出传感器类型,直接切入此确认页进行序号编辑:
```
+-----------------------------------------+
| ✓ RECU (Y=40)
|
-| PORTE (Y=90) <- 步骤1: 传感器类型 (可按 ▲/▼ 修改)
+| PORTE (Y=90) <- 传感器类型 (只读显示)
|
| [ 🚪 ICON ] (Y=130) <- 对应位图图标 (32x32px)
|
-| [ 01 ] (Y=180) <- 步骤2: 序号选框 (可按 ▲/▼ 修改)
+| [ 01 ] (Y=180) <- 序号微调选框 (当前高亮可编辑,按 ▲/▼ 修改)
+-----------------------------------------+
```
-* **二步选择焦点逻辑**:
- * **步骤1 (编辑类型)**:焦点在类型文字处(例如类型名称前后有闪烁括号 `[ PORTE ]`),此时按 ▲/▼ 键可在门磁、红外、烟感等 7 种传感器类型间循环切换,图标实时更换。点击 CONFIRM 键保存当前类型并锁定,焦点切换到步骤2。
- * **步骤2 (编辑序号)**:焦点切换在底部的序号选框 `[ 01 ]`。此时按 ▲/▼ 键自增或自减数字序号(01~99)。点击 CONFIRM 键完成最终保存并存入数据库,返回时钟待机。
- * *长按 CONFIRM 键 3 秒放弃修改并直接返回时钟待机*。
+* **交互逻辑**:
+ * 页面显示捕获到的传感器类型文字和 32x32px 对应的物理位图图标。该字段为只读,不允许修改。
+ * 页面焦点默认并唯一停留在下方的序号选框 `[ 01 ]` 上。
+ * 用户直接按 ▲/▼ 键增减数字序号(01~99)。
+ * 短按 CONFIRM 键完成最终保存并写入数据库,退回到时钟待机。
+ * *长按 CONFIRM 键 3 秒放弃保存并直接返回时钟待机*。
#### 2.3.4 系统布撤防手动选择界面 (STATE_ARM_DISARM_SELECT)
* **顶部标题**:显示 `REG. ALARME`。
diff --git a/Docs/50_module-breakdown/mod-lcd.md b/Docs/50_module-breakdown/mod-lcd.md
index b62e031..2bacc57 100644
--- a/Docs/50_module-breakdown/mod-lcd.md
+++ b/Docs/50_module-breakdown/mod-lcd.md
@@ -32,7 +32,7 @@
* `void UI_ShowArmDisarmSelectPage(u8 current_selection)`:渲染布撤防手动切换界面。
* `void UI_ShowAlarmPage(char *sensor_name, u8 zone)`:渲染防区告警页面,显示对应的传感器位图和法语名称。
* `void UI_ShowPairSearchPage(void)`:渲染对码等待搜索状态。
-* `void UI_ShowPairConfirmPage(u8 edit_focus, u8 type, u8 selected_suffix)`:渲染对码二步微调页。当 `edit_focus == 0` 时,类型字样显示为高亮选框形式;当 `edit_focus == 1` 时,后缀数字 `[ selected_suffix ]` 显示为高亮选框形式。
+* `void UI_ShowPairConfirmPage(u8 type, u8 selected_suffix)`:渲染对码序号微调页。其中传感器类型 `type` 文字和图标只读显示,后缀数字 `[ selected_suffix ]` 以高亮可编辑状态框形式闪烁展示。
* `void UI_ShowBindingPage(void)`:渲染与 IPC 绑定对码界面,并在屏幕底部居中显示手环自身的唯一 `Factory ID`。
diff --git a/Docs/60_coding/mod-key.md b/Docs/60_coding/mod-key.md
index 5b06652..d83f161 100644
--- a/Docs/60_coding/mod-key.md
+++ b/Docs/60_coding/mod-key.md
@@ -79,74 +79,51 @@ void Key_Scan_Process(void) {
}
```
-### 2.2 事件异步处理与分发 (Process_System_Event 示例)
+### 2.2 事件解调与微调分配分发 (Process_System_Event 示例)
在主循环事件分发中,对各个状态下的事件进行处理:
```c
void Process_System_Event(KeyEvent evt) {
switch (current_state) {
case STATE_MENU:
if (evt == KEY_UP_SHORT) {
- // 菜单滚动
if (menu_index > 0) menu_index--;
Redraw = 1;
} else if (evt == KEY_DOWN_SHORT) {
if (menu_index < 3) menu_index++;
Redraw = 1;
} else if (evt == KEY_CONFIRM_CLICK) {
- // 点击确认进入选中分支
Enter_Menu_Branch(menu_index);
} else if (evt == KEY_CONFIRM_LONG) {
- // 长按 3 秒退出菜单返回时钟待机
current_state = STATE_CLOCK;
Redraw = 1;
}
break;
case STATE_PAIR_CONFIRM:
- if (confirm_edit_focus == 0) {
- // 第一步:编辑传感器类型
- if (evt == KEY_UP_SHORT) {
- if (selected_type < 6) selected_type++;
- else selected_type = 0;
- Redraw = 1;
- } else if (evt == KEY_DOWN_SHORT) {
- if (selected_type > 0) selected_type--;
- else selected_type = 6;
- Redraw = 1;
- } else if (evt == KEY_CONFIRM_CLICK) {
- // 点击确认,锁定类型,跳入第二步选择序号
- confirm_edit_focus = 1;
- Redraw = 1;
- }
- } else if (confirm_edit_focus == 1) {
- // 第二步:编辑序号后缀
- if (evt == KEY_UP_SHORT) {
- if (selected_suffix < 99) selected_suffix++;
- Redraw = 1;
- } else if (evt == KEY_DOWN_SHORT) {
- if (selected_suffix > 1) selected_suffix--;
- Redraw = 1;
- } else if (evt == KEY_CONFIRM_CLICK) {
- // 点击确认,完成最终写入保存,返回时钟
- Add_Sensor(captured_addr, selected_type, selected_suffix);
- current_state = STATE_CLOCK;
- Redraw = 1;
- }
- }
- // 长按 CONFIRM 3 秒退出不保存
- if (evt == KEY_CONFIRM_LONG) {
+ // 直接进行后缀序号微调 (传感器类型已由射频数据码自动识别并锁定)
+ if (evt == KEY_UP_SHORT) {
+ if (selected_suffix < 99) selected_suffix++;
+ Redraw = 1;
+ } else if (evt == KEY_DOWN_SHORT) {
+ if (selected_suffix > 1) selected_suffix--;
+ Redraw = 1;
+ } else if (evt == KEY_CONFIRM_CLICK) {
+ // 点击 CONFIRM,直接将自动解析的类型和调整好的序号写入数据库
+ Add_Sensor(captured_addr, auto_detected_type, selected_suffix);
+ current_state = STATE_CLOCK;
+ Redraw = 1;
+ } else if (evt == KEY_CONFIRM_LONG) {
+ // 长按 3 秒放弃保存返回时钟
current_state = STATE_CLOCK;
Redraw = 1;
}
break;
case STATE_IPC_BIND:
- // IPC 绑定连发状态中支持物理长按退出
if (evt == KEY_CONFIRM_LONG || evt == KEY_DOWN_LONG) {
current_state = STATE_CLOCK;
Redraw = 1;
} else if (evt == KEY_CONFIRM_CLICK) {
- // 重发绑定信号
EV1527_Transmit(bracelet_factory_id, 0x01);
}
break;
diff --git a/Docs/60_coding/mod-lcd.md b/Docs/60_coding/mod-lcd.md
index 402eb69..40bc19e 100644
Binary files a/Docs/60_coding/mod-lcd.md and b/Docs/60_coding/mod-lcd.md differ
diff --git a/Docs/70_testing/main.md b/Docs/70_testing/main.md
index c344b5f..5eb933b 100644
--- a/Docs/70_testing/main.md
+++ b/Docs/70_testing/main.md
@@ -8,11 +8,11 @@
| 串口发送字符 | 对应仿真的物理事件与说明 | 预期系统响应 |
| :--- | :--- | :--- |
-| **`u`** | 仿真短按 **侧边 ▲ 键** | 菜单向上滚动 / 序号自增 / 增加数值 / 切换类型 |
-| **`d`** | 仿真短按 **侧边 ▼ 键** | 菜单向下滚动 / 序号自减 / 减少数值 / 切换类型 |
+| **`u`** | 仿真短按 **侧边 ▲ 键** | 菜单向上滚动 / 序号自增 / 增加数值 |
+| **`d`** | 仿真短按 **侧边 ▼ 键** | 菜单向下滚动 / 序号自减 / 减少数值 |
| **`D`** | 仿真长按 **侧边 ▼ 键** (2 秒) | 解除警报退回时钟 / 放弃 IPC 绑定返回时钟 |
-| **`e`** | 仿真短按 **侧边 ■ 确认键 (CONFIRM)** | 确认选中进入 / 切换对码二步编辑 / 保存退出 |
-| **`E`** | 仿真长按 **侧边 ■ 确认键 (CONFIRM)** (3 秒) | 从时钟待机进入菜单 / 菜单返回时钟 / 放弃对码或绑定返回时钟 |
+| **`e`** | 仿真短按 **侧边 ■ 确认键 (CONFIRM)** | 确认选中进入 / 确认保存退出 |
+| **`E`** | 仿真长按 **侧边 ■ 确认键 (CONFIRM)** (3 秒) | 从时钟待机进入菜单 / 菜单返回时钟 / 放弃保存或绑定返回时钟 |
| **`s` / `S`** | 仿真短按 / 长按 **上部 SOS 1 键** | 触发本地主动 SOS 报警发送 / 解除警报退回时钟 |
| **`x` / `X`** | 仿真短按 / 长按 **上部 SOS 2 键** | 验证双 SOS 键并联触发等效性 |
| **`a`** | 仿真捕获到**已配对门磁**报警信号 | 系统跳转到门磁报警界面,亮红灯,振动 1 次 |
@@ -54,15 +54,14 @@
1. 长按 3 秒后,屏幕立刻切换显示 `- MENU -` 选项卡,且默认首项高亮。
2. 滚动选择灵活响应,高亮行外围有 `> <` 箭头指示。按下确认键后能顺利切换至子修改界面或雷达对码界面。
-### 3.4 对码二步保存与微调向导
+### 3.4 对码自动识别与序号微调验证
* **测试方法**:
1. 同时长按 ▲+▼ 3秒进入对码,触发门磁信号对码成功。
- 2. 观察屏幕,此时类型字样 `[ PORTE ]` 高亮,按 ▲/▼ 键确认类型名称是否可以修改切换。
- 3. 点击 **■ 确认键**,查看屏幕焦点是否移入到序号 `[ 01 ]` 上。
- 4. 此时按 ▲/▼ 键,观察序号数值是否可以进行增减微调。
- 5. 最后点击 **■ 确认键**,手环是否将数据写入 Flash 数据库,并立刻退回到待机时钟页。
+ 2. 观察屏幕,手环应**自动根据射频数据码识别出传感器类型为 PORTE**,并直接显示只读名称及门磁图标。
+ 3. 序号选框 `[ 01 ]` 默认高亮,按 ▲/▼ 键确认序号数值是否可以进行增减微调。
+ 4. 点击 **■ 确认键**,手环是否将数据写入 Flash 数据库,并立刻退回到待机时钟页。
* **预期结果**:
- 对码成功进入微调后,系统按步骤顺序先选择传感器分类、后微调序号,点击确认后成功保存数据库退回时钟。整个过程按 CONFIRM 长按 3s 均可放弃退出。
+ 对码成功进入微调后,传感器类型自动填入,用户仅微调序号,点击 CONFIRM 键直接保存退回时钟。按 CONFIRM 长按 3s 可放弃退出。
### 3.5 手环主动发射 SOS 与 Factory ID 验证
* **测试方法**:短按或长按上部任意一个 SOS 键触发紧急求救,使用 433MHz 接收调试工具或逻辑分析仪抓取手环发射信号。