#ifndef __BLL_IMU_H__ #define __BLL_IMU_H__ #ifdef __cplusplus extern "C" { #endif /*Includes ------------------------------------------------------*/ #include #include #include #include "sdk_common.h" #include "SEGGER_RTT.h" #include "usr_config.h" #include "fml_imu.h" /*Private macro ------------------------------------------------------------------------------------------------------------------------------------*/ /*STRUCTION ----------------------------------------------------*/ typedef fml_imu_param_t bll_imu_one_way_param_t; typedef fml_imu_data_t bll_imu_data_t; typedef fml_imu_data_notify_cb bll_imu_data_notify_cb; typedef enum{ BLL_IMU_DATA_NOTIFY_CB_PRIORITY_0 = 0, //优先级 - 0 优先级越大,级别越高 BLL_IMU_DATA_NOTIFY_CB_PRIORITY_1 = 1, //优先级 - 1 优先级越大,级别越高 BLL_IMU_DATA_NOTIFY_CB_PRIORITY_NUM //优先级数量 } BLL_IMU_DATA_NOTIFY_CB_PRIORITY_e; typedef enum{ BLL_IMU_DIR_FRONT = FML_IMU_DIR_FRONT, //方向 - 前脚 BLL_IMU_DIR_BACK = FML_IMU_DIR_BACK, //方向 - 后脚 BLL_IMU_DIR_NUM = FML_IMU_DIR_NUM, //方向 - 方向数量 } BLL_IMU_DIR_e; typedef struct { const bll_imu_one_way_param_t *config_param[FML_IMU_DIR_NUM]; //配置参数 } bll_imu_param_t; typedef enum{ BLL_IMU_CONFIG_FAIL=0x0, BLL_IMU_CONFIG_DOING=(1<<6), BLL_IMU_CONFIG_FINISH=(2<<6), BLL_IMU_CONFIG_VAILERROR=(3<<6), } BLL_IMU_CONFIG_RESULT; /*API -------------------------------------------------------*/ /** @brief 初始化IMU业务逻辑层 @param 无 @return 错误代码 - [out] -1失败,0成功 */ int bll_imu_Init(void); /** @brief 注册IMU要进行配置的参数 @param param - [in] IMU要进行配置的参数地址 @return 错误代码 - [out] 0失败,成功返回参数地址 */ const bll_imu_param_t* bll_imu_Resume_config_param(const bll_imu_param_t *param); /** @brief 注销已注册的IMU配置参数并重新配置IMU @param param - [in] IMU配置参数的地址 @return 错误代码 - [out] 0成功,-1地址异常,-2没有该注册的IMU配置参数 */ int bll_imu_Resume_unregister_config_param(const bll_imu_param_t* param); /** @brief 注册IMU数据通知回调函数 @param priority - [in] 回调优先级 @param cb - [in] 回调函数 @return 错误代码 - [out] -1失败,0成功 */ int bll_imu_register_data_notify_callback(BLL_IMU_DATA_NOTIFY_CB_PRIORITY_e priority, bll_imu_data_notify_cb cb); /** @brief 开始配置。根据已注册IMU参数筛选出最高优先级进行配置,且只配置一次。 @param 无 @return 错误代码 - [out] -1失败,0成功 */ int bll_imu_start_config(void); /** @brief 查询IMU配置参数是否准备好 @param dir - [in] 方向 @param param - [in] 需要查询的IMU配置参数 @return 查询结果 - [out] [7:6]是状态,0:失败,1:配置中,2:成功,3:当前最高配置参数小于输入的配置参数或方向不符合; [0:5]是配置步骤. */ uint8_t bll_imu_query_config_param_is_ready(BLL_IMU_DIR_e dir, const bll_imu_param_t *param); /** @brief 读取当前IMU数据的数量 @param dir - [in] 方向 @return 返回当前IMU数据的数量 */ int bll_imu_get_data_num(BLL_IMU_DIR_e dir); /** @brief 获取当前IMU数据 @param dir - [in] 方向 @param index - [in] 数据索引 @param pdata - [out] 返回的IMU数据指针 @return 错误代码 - [out] -1失败,0成功 */ int bll_imu_get_data(BLL_IMU_DIR_e dir, int index, bll_imu_data_t *pdata); /** @brief 关闭IMU @return 错误代码 - [out] -1失败,0成功 */ int bll_imu_close(void); #ifdef __cplusplus } #endif #endif