docs: restructure framework, extract app execution module, group event collection & align GPIOs
This commit is contained in:
@@ -1,53 +1,36 @@
|
||||
# 模块拆分 - 系统状态机与 App 框架 (Docs/50_module-breakdown/mod-sys.md)
|
||||
# 模块拆分 - 系统初始化与 IAP 数据库 (Docs/50_module-breakdown/mod-sys.md)
|
||||
|
||||
本模块描述手环的 App 调度引擎(生命周期回调)以及 IAP 持久化防区数据库。
|
||||
本模块描述手环的系统基础时钟/中断配置、IAP 闪存数据库以及电池/充电硬件状态采样。
|
||||
|
||||
## 1. 模块职责说明
|
||||
|
||||
* **职责范围**:
|
||||
1. **维护 App 生命周期**:提供 `StartApp(app_id)` 和 `CloseApp(app_id)` 的系统级接口,调度应用层组件的切入与切出。
|
||||
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位物理与数据合并地址)。
|
||||
1. **系统外设与状态初始化**:配置初始时钟,使能全局中断,初始化基本寄存器状态。
|
||||
2. **ADC 电量与充电读取**:通过硬件 ADC 通道 8 (Pin 29 / `P0.0`) 采样电池电压,并读取充电检测引脚 (Pin 28 / `P2.7`) 判断 USB 是否正在充电。
|
||||
3. **Flash 数据库管理**:维护 `0xFE0000` (第 254 扇区) 物理闪存的读写擦除,管理 16 个已配对传感器的配置数据(含有效位 flags_suffix 及 EV1527 24位地址)。
|
||||
|
||||
---
|
||||
|
||||
## 2. 核心结构体与接口定义
|
||||
|
||||
### 2.1 应用程序结构体原型 (WristbandApp)
|
||||
### 2.1 传感器存储插槽定义 (Sensor_Slot)
|
||||
```c
|
||||
typedef struct {
|
||||
u8 app_id; // 应用程序 ID
|
||||
void (*OnStart)(void); // 启动接口:渲染初始画面、装载应用资源
|
||||
void (*onRun)(void); // 循环接口:主循环轮空调用,执行非阻塞业务逻辑
|
||||
void (*onClose)(void); // 关闭接口:退出前台,保存状态、复位相关驱动
|
||||
void (*onEvent)(KeyEvent evt); // 事件处理:接收并消耗事件队列分配的按键/射频事件
|
||||
} WristbandApp;
|
||||
```
|
||||
typedef struct {
|
||||
u8 flags_suffix; // 属性字节:Bit 7 代表有效标志 (1: 有效, 0: 空闲);Bit 0~6 代表法语防区名称的后缀序号 (01~99)
|
||||
u8 addr[3]; // 24位射频物理地址 (EV1527 地址 + 4位状态数据码)
|
||||
} Sensor_Slot;
|
||||
|
||||
### 2.2 APP 管理器全局状态
|
||||
```c
|
||||
extern WristbandApp* active_app; // 指向当前前台活跃应用的指针
|
||||
extern u16 inactivity_timer; // 无操作自动睡眠计时器
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 3. 接口与函数说明
|
||||
|
||||
* `void App_Manager_Init(void)`:注册所有支持的应用实例(待机时钟、主菜单、时间设置、对码、布撤防、主动SOS、被动报警),默认设置 `active_app` 指向时钟应用并执行 `active_app->OnStart()`。
|
||||
* `void StartApp(u8 app_id)`:
|
||||
1. 执行当前 `active_app->onClose()` 清理现场。
|
||||
2. 切换 `active_app` 指向目标 `app_id` 实例。
|
||||
3. 执行新应用的 `active_app->OnStart()`,并置 `Redraw = 1`。
|
||||
* `void System_Init(void)`:配置 STC32G 系统时钟与中断,初始化各外设模块的 GPIO 状态。
|
||||
* `void Load_Database(void)`:读取 `0xFE0000` 扇区,载入 16 组 `Sensor_Slot` 数据。
|
||||
* `void Save_Database(void)`:擦除 IAP 扇区并写回当前缓存的配对记录。
|
||||
* `void Add_Sensor(u32 addr, u8 suffix_idx)`:添加配对(保存物理地址与后缀序号)并持久化。
|
||||
* `void Save_Database(void)`:擦除 IAP 扇区并写回当前缓存 of 配对记录。
|
||||
* `void Add_Sensor_To_Flash(u32 addr, u8 flags_suffix)`:添加配对并写入闪存。
|
||||
* `bit Check_Sensor_ID(u32 addr, u8 *out_slot_index)`:在数据库中匹配已对码的传感器 ID,获取槽位。
|
||||
* `u8 Read_Battery_Percent(void)`:通过硬件 ADC 通道 8 (Pin 29 / `P0.0`) 采样计算当前电量。
|
||||
* `bit Is_Charging(void)`:读取检测引脚 (Pin 28 / `P2.7`) 判定 USB 是否正在充电。
|
||||
|
||||
<!-- 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 -->
|
||||
|
||||
Reference in New Issue
Block a user