Sensor消息处理¶
1. Sensor服务层核心接口说明¶
1.1 心率传感器(HR)相关接口¶
接口名 |
功能 |
关键参数与结构体 |
|---|---|---|
|
开启/关闭心率功能 |
|
|
处理APP层下发的命令 |
- |
|
心率算法周期性调度 |
- |
接口名 |
功能 |
关键参数与结构体 |
|---|---|---|
|
开启/关闭心率功能 |
|
|
处理APP层下发的命令 |
- |
|
心率算法周期性调度 |
- |
具体参见:solution\components\sensor\sensor_algo\hr\hr_algo.c
1.2 加速度计(GSensor)相关接口¶
接口名 |
功能 |
关键参数与结构体 |
|---|---|---|
|
开启/关闭GSensor功能 |
|
|
处理APP层下发的命令 |
- |
|
加速度计算法调度 |
- |
具体参见:solution\components\sensor\sensor_algo\gsensor\gsensor_algo.c
2. Sensor服务层与应用层的交互逻辑¶
2.1 核心消息传递接口¶
消息方向 |
接口定义 |
作用 |
|---|---|---|
Sensor(LCPU)→应用层(HCPU) |
|
Sensor向应用层上报数据/事件 |
应用层(HCPU)→Sensor(LCPU) |
|
应用层向Sensor下发控制命令 |
参数说明
type:消息ID,定义在sensor_service.c的sensor_app_t枚举中(如APP_SENSOR_GSENSOR_SETTING_REQ、APP_SENSOR_HR_SETTING_REQ);data:消息数据缓存的指针(指向具体数据结构体);len:消息数据的字节长度。
具体参见:solution\components\lcpu\lcpu_service.h
2.2 消息处理流程¶
2.2.1 应用层→Sensor(命令下发流程)¶
应用层调用
ipc_send_msg_to_lcpu,传入sensor_app_t枚举的消息ID(如运动模式命令APP_SENSOR_SPORT_MODE);消息由
lcpu_service.c的lcpu_service_comm_cb接收,根据消息类型转发至sensor_service.c的sensors_msg_process_in_lcpu_thread_cb;sensors_msg_process_in_lcpu_thread_cb按消息ID分支处理:若为GSensor相关命令(如
APP_SENSOR_GSENSOR_SETTING_REQ),调用gsensor_setting_req/gsensor_config_req;若为心率相关命令(如
APP_SENSOR_HR_SETTING_REQ),调用hr_setting_req/hr_config_req;
最终由对应传感器的接口驱动硬件配置。
2.2.2 Sensor服务层→应用层(数据上报流程)¶
Sensor调度传感器算法(如
gsensor_algo_scheduler)获取处理后的数据(如计步值);调用
ipc_send_lcpu_msg_to_hcpu,传入数据上报类消息ID(如计步实时数据SENSOR_APP_RT_STEP_INFO_IND);消息由
lcpu_service.c的app_service_comm_cb接收,转发至sensor_service.c的sensors_msg_process_in_hcpu_cb;sensors_msg_process_in_hcpu_cb按消息类型分发:实时事件(如心率变化):转发至GUI线程(
sensors_wakeup_msg_process_in_gui_thread_cb),更新界面;历史数据(如每日步数):转发至后台线程(
sensors_msg_process_in_bg_thread_cb);其他数据:调用
sensors_data_splitting_process_cb处理,按需转发至BLE模块(sensors_msg_process_in_ble_to_app)。
3. 自定义消息扩展步骤¶
3.1 应用层→Sensor(新增控制命令)¶
在
sensor_service.c的sensor_app_t枚举中添加新消息ID(如APP_SENSOR_NEW_CMD);在
sensors_msg_process_in_lcpu_thread_cb中新增该ID的处理分支,关联对应传感器的处理接口(如new_Sensor_config_req);应用层调用
ipc_send_msg_to_lcpu发送新命令,传入新ID、数据及长度。
3.2 Sensor→应用层(新增数据上报)¶
在
sensor_service.c的sensor_app_t枚举中添加新消息ID(如SENSOR_APP_NEW_DATA_IND);在
sensors_msg_process_in_hcpu_cb中新增该ID的分发逻辑(如转发至GUI线程更新界面);Sensor在算法获取数据后,调用
ipc_send_lcpu_msg_to_hcpu发送新消息。
4. HCPU与LCPU的Sensor框架部署差异¶
4.1 代码存放位置¶
芯片系列 |
Sensor+驱动层位置 |
核心区分宏 |
|---|---|---|
52x系列 |
HCPU |
|
55x/56x/58x系列 |
LCPU |
无 |
4.2 关键差异点¶
52x系列虽然只有HCPU,但仍通过
Sensor(LCPU)<-> 应用层(HCPU)消息服务交互,接口与其他芯片保持一致;时序适配:52x系列通过
SENSOR_IN_HCPU宏启用独立数据采集线程(sensor_data_thread),避免蓝牙中断干扰传感器数据读取。
5. 典型消息流向示例¶
5.1 应用层→驱动层(计步模式开启)¶
应用层(运动页面)调用
ipc_send_msg_to_lcpu(APP_SENSOR_SPORT_MODE, &sport_mode, sizeof(sport_mode_t));消息经
lcpu_service_comm_cb转发至sensors_msg_process_in_lcpu_thread_cb;回调识别
APP_SENSOR_SPORT_MODE,调用gsensor_config_req;gsensor_config_req转发至gSensor_para_process,最终配置GSensor驱动的运动模式参数。
5.2 Sensor→应用层(计步数据上报)¶
GSensor算法调度(
gsensor_algo_scheduler)计算计步值,生成step_info_t类型数据;Sensor调用
ipc_send_lcpu_msg_to_hcpu(SENSOR_APP_RT_STEP_INFO_IND, &step_info, sizeof(step_info_t));消息经
app_service_comm_cb转发至sensors_msg_process_in_hcpu_cb;回调将消息分发至GUI线程,更新运动页面计步数值,同时转发至BLE模块(若启用)同步给手机APP。