From 16deeb666262a324bb054e7ab52bc1e594a6985b Mon Sep 17 00:00:00 2001 From: zouhaitao Date: Thu, 9 Jul 2026 17:45:35 +0800 Subject: [PATCH] docs: simplify pairing confirm, auto-detect sensor type and select suffix only --- Docs/20_requirements-detail/main.md | 8 ++--- Docs/30_architecture/main.md | 4 +-- Docs/40_ui-design/main.md | 18 +++++----- Docs/50_module-breakdown/mod-lcd.md | 2 +- Docs/60_coding/mod-key.md | 53 ++++++++-------------------- Docs/60_coding/mod-lcd.md | Bin 4350 -> 3849 bytes Docs/70_testing/main.md | 19 +++++----- 7 files changed, 41 insertions(+), 63 deletions(-) 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 402eb69b54439a199478af43a7f3f890b7771d45..40bc19e2327688818b7f8105c8f44fdf987d3a5e 100644 GIT binary patch delta 306 zcmeyT*eSQ6m5c4^uKuU}+b4H(spmbP)$(-x&gTmnpD$eZV%?JGUE7{DG(Op}_Whoo zCwmq=ZC(0eecRKH)lWM%098KUxclk6ZiR%B%7WAcg{Kocp7(8d+P~_>`rXg^Cp=%W z3#jSogudr{8Xy+DZ0LNpuR{aW7Vc>fEvE+5E{s zyPmboe>!so#EPdAdY>=fFu9gnc5*wf^<-N|{BruL=go~T8#~)AMxuvZwu8}TAS5QdKNGwt)sVqp1Pby7|HZq8{Mi>qkHi%WQRZx#s$0lb8mQz5MD=sNYE~wN{ zgX=en)ln!;%`46?iZ3WiP0OrEEsmaS&%>&ziDV*3S7M0s)3rSa*yS <` 箭头指示。按下确认键后能顺利切换至子修改界面或雷达对码界面。 -### 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 接收调试工具或逻辑分析仪抓取手环发射信号。