Sensor消息处理

1. Sensor服务层核心接口说明

1.1 心率传感器(HR)相关接口

接口名

功能

关键参数与结构体

hr_setting_req

开启/关闭心率功能

data:指向 hr_setting_t 类型(本质是 Sensor_state_t):
- state:功能状态(SENSOR_ON 开启/SENSOR_OFF 关闭)
- mode:测量方式(HR_MANU_MEAS 手动/HR_AUTO_MEAS 自动)
- type:传感器类型(SENSOR_HR 心率/Sensor_SPO2 血氧/SENSOR_BP 血压)
- interval_time:测量间隔(单位按需定义)

hr_config_req

处理APP层下发的命令

- msg_id:命令ID(新增命令需扩展枚举)
- data:命令数据(数据类型随 msg_id 变化)

hr_algo_scheduler

心率算法周期性调度

- period:调度周期(POLLING模式用 sensor_timer 周期,INT模式用心率专属周期)

接口名

功能

关键参数与结构体

hr_setting_req

开启/关闭心率功能

data:指向 hr_setting_t 类型(本质是 Sensor_state_t): - state:功能状态(SENSOR_ON 开启/SENSOR_OFF 关闭) - mode:测量方式(HR_MANU_MEAS 手动/HR_AUTO_MEAS 自动) - type:传感器类型(SENSOR_HR 心率/Sensor_SPO2 血氧/SENSOR_BP 血压) - interval_time:测量间隔(单位按需定义)

hr_config_req

处理APP层下发的命令

- msg_id:命令ID(新增命令需扩展枚举) - data:命令数据(数据类型随 msg_id 变化)

hr_algo_scheduler

心率算法周期性调度

- period:调度周期(POLLING模式用 sensor_timer 周期,INT模式用心率专属周期)

具体参见:solution\components\sensor\sensor_algo\hr\hr_algo.c

1.2 加速度计(GSensor)相关接口

接口名

功能

关键参数与结构体

gsensor_setting_req

开启/关闭GSensor功能

data:指向 gsensor_setting_t 类型(本质是 Sensor_state_t):
- mode/type/interval_time 暂未使用)

gsensor_config_req

处理APP层下发的命令

- msg_id:命令ID
- data:命令数据(数据类型随 msg_id 变化)

gsensor_algo_scheduler

加速度计算法调度

- period:调度周期(POLLING模式用 sensor_timer 周期)

具体参见:solution\components\sensor\sensor_algo\gsensor\gsensor_algo.c

2. Sensor服务层与应用层的交互逻辑

2.1 核心消息传递接口

消息方向

接口定义

作用

Sensor(LCPU)→应用层(HCPU)

ipc_send_lcpu_msg_to_hcpu(type, data, len)

Sensor向应用层上报数据/事件

应用层(HCPU)→Sensor(LCPU)

ipc_send_msg_to_lcpu(type, data, len)

应用层向Sensor下发控制命令

参数说明

  • type:消息ID,定义在 sensor_service.csensor_app_t 枚举中(如 APP_SENSOR_GSENSOR_SETTING_REQAPP_SENSOR_HR_SETTING_REQ);

  • data:消息数据缓存的指针(指向具体数据结构体);

  • len:消息数据的字节长度。

具体参见:solution\components\lcpu\lcpu_service.h

2.2 消息处理流程

2.2.1 应用层→Sensor(命令下发流程)

  1. 应用层调用 ipc_send_msg_to_lcpu,传入 sensor_app_t 枚举的消息ID(如运动模式命令 APP_SENSOR_SPORT_MODE);

  2. 消息由 lcpu_service.clcpu_service_comm_cb 接收,根据消息类型转发至 sensor_service.csensors_msg_process_in_lcpu_thread_cb

  3. 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

  4. 最终由对应传感器的接口驱动硬件配置。

2.2.2 Sensor服务层→应用层(数据上报流程)

  1. Sensor调度传感器算法(如 gsensor_algo_scheduler)获取处理后的数据(如计步值);

  2. 调用 ipc_send_lcpu_msg_to_hcpu,传入数据上报类消息ID(如计步实时数据 SENSOR_APP_RT_STEP_INFO_IND);

  3. 消息由 lcpu_service.capp_service_comm_cb 接收,转发至 sensor_service.csensors_msg_process_in_hcpu_cb

  4. 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(新增控制命令)

  1. sensor_service.csensor_app_t 枚举中添加新消息ID(如 APP_SENSOR_NEW_CMD);

  2. sensors_msg_process_in_lcpu_thread_cb 中新增该ID的处理分支,关联对应传感器的处理接口(如 new_Sensor_config_req);

  3. 应用层调用 ipc_send_msg_to_lcpu 发送新命令,传入新ID、数据及长度。

3.2 Sensor→应用层(新增数据上报)

  1. sensor_service.csensor_app_t 枚举中添加新消息ID(如 SENSOR_APP_NEW_DATA_IND);

  2. sensors_msg_process_in_hcpu_cb 中新增该ID的分发逻辑(如转发至GUI线程更新界面);

  3. Sensor在算法获取数据后,调用 ipc_send_lcpu_msg_to_hcpu 发送新消息。

4. HCPU与LCPU的Sensor框架部署差异

4.1 代码存放位置

芯片系列

Sensor+驱动层位置

核心区分宏

52x系列

HCPU

SENSOR_IN_HCPU

55x/56x/58x系列

LCPU

4.2 关键差异点

  • 52x系列虽然只有HCPU,但仍通过Sensor(LCPU)<-> 应用层(HCPU)消息服务交互,接口与其他芯片保持一致;

  • 时序适配:52x系列通过 SENSOR_IN_HCPU 宏启用独立数据采集线程(sensor_data_thread),避免蓝牙中断干扰传感器数据读取。

5. 典型消息流向示例

5.1 应用层→驱动层(计步模式开启)

  1. 应用层(运动页面)调用 ipc_send_msg_to_lcpu(APP_SENSOR_SPORT_MODE, &sport_mode, sizeof(sport_mode_t))

  2. 消息经 lcpu_service_comm_cb 转发至 sensors_msg_process_in_lcpu_thread_cb

  3. 回调识别 APP_SENSOR_SPORT_MODE,调用 gsensor_config_req

  4. gsensor_config_req 转发至 gSensor_para_process,最终配置GSensor驱动的运动模式参数。

5.2 Sensor→应用层(计步数据上报)

  1. GSensor算法调度(gsensor_algo_scheduler)计算计步值,生成 step_info_t 类型数据;

  2. Sensor调用 ipc_send_lcpu_msg_to_hcpu(SENSOR_APP_RT_STEP_INFO_IND, &step_info, sizeof(step_info_t))

  3. 消息经 app_service_comm_cb 转发至 sensors_msg_process_in_hcpu_cb

  4. 回调将消息分发至GUI线程,更新运动页面计步数值,同时转发至BLE模块(若启用)同步给手机APP。