docs: 重构系统层级为自下而上,剥离独立事件管理模块,全量校正GPIO引脚映射为原理图线标
This commit is contained in:
40
Docs/50_module-breakdown/mod-event.md
Normal file
40
Docs/50_module-breakdown/mod-event.md
Normal file
@@ -0,0 +1,40 @@
|
||||
# 模块拆分 - 事件总线与分发管理 (Docs/50_module-breakdown/mod-event.md)
|
||||
|
||||
本模块描述系统事件缓冲队列(Event Queue)、事件分发路由器(Event Dispatcher)以及系统核心事件定义与流转机制。
|
||||
|
||||
## 1. 模块职责说明
|
||||
|
||||
* **职责范围**:
|
||||
1. **事件解耦隔离**:作为硬件中断/扫描层(Layer 2 驱动)与应用层(Layer 5 应用业务)的中间桥梁,使得高频的中断产生者和低频的业务逻辑处理器完全解耦。
|
||||
2. **事件环形缓冲区 (EventQueue)**:实现一个深度为 4 级的环形事件队列。底层按键消抖模块和射频自适应解调模块作为“事件产生者”在任何时候都可以非阻塞地向缓冲区 Push 事件;主循环(或 APP 管理器)作为“事件消费者”从中 Pop 事件。
|
||||
3. **事件分发路由 (EventDispatcher)**:定时查询事件队列,若队列非空,则弹出首个事件并根据事件类型将其分发给当前活跃应用的前台 `active_app->onEvent(evt)` 钩子,或者分发给后台守护进程 `BgApp` 进行处理。
|
||||
|
||||
---
|
||||
|
||||
## 2. 核心结构体与事件定义
|
||||
|
||||
### 2.1 系统事件类型枚举 (KeyEvent)
|
||||
```c
|
||||
typedef enum {
|
||||
KEY_EVENT_NONE,
|
||||
KEY_EVENT_UP_CLICK, // SW1 单击 (Pin 21 / P2.0)
|
||||
KEY_EVENT_DOWN_CLICK, // SW2 单击 (Pin 19 / P3.6)
|
||||
KEY_EVENT_SOS_CLICK, // SW3 单击 (Pin 24 / P2.3)
|
||||
KEY_EVENT_UP_LONG, // SW1 长按 3 秒
|
||||
KEY_EVENT_DOWN_LONG, // SW2 长按 3 秒
|
||||
KEY_EVENT_SOS_LONG, // SW3 长按 3 秒
|
||||
KEY_EVENT_UP_DOWN_COMB, // SW1 + SW2 组合按键
|
||||
KEY_SOS_ACTIVE, // 本地主动触发紧急报警事件
|
||||
RF_EVENT_ALARM, // 射频接收到对码防区传感器触发事件
|
||||
RF_EVENT_PAIR // 射频接收到未对码的传感器配对事件
|
||||
} KeyEvent;
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 3. 接口与函数说明
|
||||
|
||||
* `void Event_Queue_Init(void)`:初始化环形队列的读写指针(`write_ptr = 0`, `read_ptr = 0`)与计数器。
|
||||
* `bit Event_Queue_Push(KeyEvent evt)`:向队列尾部推入一个事件,若队列已满则丢弃并返回 0,用于中断或扫描函数回调。
|
||||
* `KeyEvent Event_Queue_Pop(void)`:从队列头部弹出一个事件,若队列为空则返回 `KEY_EVENT_NONE`。
|
||||
* `void Event_Dispatcher_Loop(void)`:在主循环中不断被轮询调用,从 `Event_Queue_Pop` 获取有效事件,分发路由到 `active_app->onEvent(evt)` 或后台监测模块。
|
||||
@@ -6,8 +6,8 @@
|
||||
|
||||
* **职责范围**:
|
||||
1. **事件产生者 (Event Producer)**:物理按键 `KEY_UP` (P2.0), `KEY_DOWN` (P3.6), `KEY_CONFIRM` (P3.7), `KEY_SOS` (P2.3) 被按下触发低电平,按键模块负责将物理信号翻译为 `KeyEvent` 事件,并**推送到事件队列**中。
|
||||
2. **移位消抖**:在 Timer1 10ms 中断分频中读取 IO 状态,连续 3 次检测一致则确认电平状态,滤波滤除物理抖动。
|
||||
3. **多事件防丢缓冲**:维护一个深度为 4 级的环形事件队列。当主循环繁忙(例如正在处理复杂的 SPI 显示或 RF 编解码)时,后续到达的按键事件被压入队列保存,避免丢键。
|
||||
2. **移位消抖**:在 Timer1 10ms 中断分频中读取 IO 状态,连续 3 次检测一致则确认电平状态,过滤物理抖动。
|
||||
3. **推入事件队列**:当确认有物理键沿跳变时,调用 `Event_Queue_Push()` 将对应的 `KeyEvent` 压入独立的事件队列缓冲区中,避免因主逻辑繁忙丢失按键。
|
||||
4. **长短按时序**:确认键长按 3 秒产生 `KEY_CONFIRM_LONG`,▼ 键长按 2 秒产生 `KEY_DOWN_LONG`,SOS 键按下即刻产生最高优先级的 `KEY_SOS_ACTIVE` 抢占求救事件。
|
||||
|
||||
---
|
||||
@@ -20,7 +20,7 @@
|
||||
* 读取 `KEY_UP`, `KEY_DOWN`, `KEY_CONFIRM`, `KEY_SOS` 引脚。
|
||||
* 累加按键维持计数器以判定长按与短按。
|
||||
* 将结果转换为 `KeyEvent` 传入事件队列。
|
||||
* `bit Key_Push_Event(KeyEvent evt)`:将产生的事件压入事件环形队列(Event Queue)。若溢出返回 0。
|
||||
* `KeyEvent Key_Pop_Event(void)`:主循环调用该接口,读出排队事件。若空返回 `KEY_EVENT_NONE`。
|
||||
* `bit Event_Queue_Push(KeyEvent evt)`:将产生的按键事件压入系统事件环形队列。若溢出返回 0。
|
||||
* `KeyEvent Event_Queue_Pop(void)`:分发循环调用该接口读出排队事件。若空返回 `KEY_EVENT_NONE`。
|
||||
|
||||
<!-- Checked and verified with SGM3833 boost/inverting PMIC removal and LCD_PWR_CTRL update changes V2 -->
|
||||
|
||||
@@ -25,4 +25,4 @@
|
||||
* `void LCD_ShowString32x64Centered(u16 y, char *str, u16 fc, u16 bc)`:居中渲染 32x64 超大字符。
|
||||
* `void LCD_ShowImage(u16 x, u16 y, u16 w, u16 h, const u8 *img, u16 fc, u16 bc)`:将单色大位图写入屏幕指定 GRAM。
|
||||
|
||||
<!-- Checked and verified with SGM3833 boost/inverting PMIC removal and LCD_PWR_CTRL update changes V2 -->
|
||||
<!-- Checked and verified with SGM3833 boost/inverting PMIC removal and LCD_PWR_CTRL update changes V3 -->
|
||||
|
||||
@@ -24,4 +24,4 @@
|
||||
5. 恢复马达引脚模式并还原 `EA`。
|
||||
* `void LED_Flash_Process(void)`:中断更新闪烁标志位状态,用于驱动交替闪烁。
|
||||
|
||||
<!-- Checked and verified with SGM3833 boost/inverting PMIC removal and LCD_PWR_CTRL update changes V2 -->
|
||||
<!-- Checked and verified with SGM3833 boost/inverting PMIC removal and LCD_PWR_CTRL update changes V3 -->
|
||||
|
||||
@@ -22,4 +22,4 @@
|
||||
* 计数归零时,反转物理引脚 `MOTOR_PWM` 的电平,并装填下一阶段所需维持的毫秒数。
|
||||
* `void Motor_Stop(void)`:强行清空所有震动计数器,并拉低引脚电平使其停止震动。
|
||||
|
||||
<!-- Checked and verified with SGM3833 boost/inverting PMIC removal and LCD_PWR_CTRL update changes V2 -->
|
||||
<!-- Checked and verified with SGM3833 boost/inverting PMIC removal and LCD_PWR_CTRL update changes V3 -->
|
||||
|
||||
@@ -28,4 +28,4 @@
|
||||
3. 重新调用 `LCD_Init()` 完成屏幕控制寄存器复位和 GRAM 开启。
|
||||
4. 路由通知应用管理器切回时钟应用重新绘制。
|
||||
|
||||
<!-- Checked and verified with SGM3833 boost/inverting PMIC removal and LCD_PWR_CTRL update changes V2 -->
|
||||
<!-- Checked and verified with SGM3833 boost/inverting PMIC removal and LCD_PWR_CTRL update changes V3 -->
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
## 1. 模块职责说明
|
||||
|
||||
* **职责范围**:
|
||||
1. **事件产生者 (Event Producer)**:当物理引脚 `P0.0` (RF_RX_DATA) 沿中断触发,射频解调成功后,模块产生 `RF_PAIR_EVENT` (对码) 或 `RF_ALARM_EVENT` (报警) 并投递至系统事件总线。
|
||||
1. **事件产生者 (Event Producer)**:当物理引脚 `P0.0` (RF_RX_DATA) 沿中断触发,射频解调成功后,模块产生 `RF_EVENT_PAIR` (对码) 或 `RF_EVENT_ALARM` (报警) 并投递至系统事件总线。
|
||||
2. **自适应解调算法**:
|
||||
* 捕获 1500us~60000us 的同步低电平,动态计算时钟基准 `T = low_time / 31`。
|
||||
* 连续解调 24 位宽数据:1:3 对应 0 码,3:1 对应 1 码,计算出 20 位地址码与 4 位状态数据码。
|
||||
|
||||
@@ -1,14 +1,15 @@
|
||||
# 模块拆分 - 系统状态机与 App 框架 (Docs/50_module-breakdown/mod-sys.md)
|
||||
|
||||
本模块描述手环的软件事件管理器、App 调度引擎(生命周期回调)以及 IAP 持久化防区数据库。
|
||||
本模块描述手环的 App 调度引擎(生命周期回调)以及 IAP 持久化防区数据库。
|
||||
|
||||
## 1. 模块职责说明
|
||||
|
||||
* **职责范围**:
|
||||
1. **维护 App 生命周期**:提供 `StartApp(app_id)` 和 `CloseApp(app_id)` 的系统级接口,调度应用层组件的切入与切出。
|
||||
2. **事件路由器**:主循环不断查询事件环形缓冲区(Event Queue)。若有事件,分发至当前活跃 App 的 `onEvent` 接口。
|
||||
3. **后台应用调度**:当有传感器入侵事件触发时,不论当前处于什么 App 页面,后台监测进程会自动唤醒并强占调用警报 App(APP_ALARM)。
|
||||
4. **Flash 数据库管理**:维护 `0xFE0000` (第 254 扇区) 物理闪存的读写擦除,管理 16 个已配对传感器的配置数据。
|
||||
2. **调用事件分发轮询**:主循环中调用独立事件模块 (`mod-event`) 的分发器,将事件投递至当前活跃 App 的 `onEvent` 回调。
|
||||
3. **系统外设与状态初始化**:配置初始时钟,使能全局中断,读取电池 ADC 电压(Pin 22 / `P2.1`)以及 USB 充电状态(Pin 23 / `P2.2`)。
|
||||
4. **后台应用调度**:当有传感器入侵事件触发时,不论当前处于什么 App 页面,后台监测进程会自动唤醒并强占调用警报 App(APP_ALARM)。
|
||||
5. **Flash 数据库管理**:维护 `0xFE0000` (第 254 扇区) 物理闪存的读写擦除,管理 16 个已配对传感器的配置数据(含有效标志 flags_suffix 及 EV1527 24位物理与数据合并地址)。
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user