bll_imu.h 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. #ifndef __BLL_IMU_H__
  2. #define __BLL_IMU_H__
  3. #ifdef __cplusplus
  4. extern "C" {
  5. #endif
  6. /*Includes ------------------------------------------------------*/
  7. #include <stdbool.h>
  8. #include <stdint.h>
  9. #include <string.h>
  10. #include "sdk_common.h"
  11. #include "SEGGER_RTT.h"
  12. #include "usr_config.h"
  13. #include "fml_imu.h"
  14. /*Private macro ------------------------------------------------------------------------------------------------------------------------------------*/
  15. /*STRUCTION ----------------------------------------------------*/
  16. typedef fml_imu_param_t bll_imu_one_way_param_t;
  17. typedef fml_imu_data_t bll_imu_data_t;
  18. typedef fml_imu_data_notify_cb bll_imu_data_notify_cb;
  19. typedef enum{
  20. BLL_IMU_DATA_NOTIFY_CB_PRIORITY_0 = 0, //优先级 - 0 优先级越大,级别越高
  21. BLL_IMU_DATA_NOTIFY_CB_PRIORITY_1 = 1, //优先级 - 1 优先级越大,级别越高
  22. BLL_IMU_DATA_NOTIFY_CB_PRIORITY_NUM //优先级数量
  23. } BLL_IMU_DATA_NOTIFY_CB_PRIORITY_e;
  24. typedef enum{
  25. BLL_IMU_DIR_FRONT = FML_IMU_DIR_FRONT, //方向 - 前脚
  26. BLL_IMU_DIR_BACK = FML_IMU_DIR_BACK, //方向 - 后脚
  27. BLL_IMU_DIR_NUM = FML_IMU_DIR_NUM, //方向 - 方向数量
  28. } BLL_IMU_DIR_e;
  29. typedef struct
  30. {
  31. const bll_imu_one_way_param_t *config_param[FML_IMU_DIR_NUM]; //配置参数
  32. } bll_imu_param_t;
  33. typedef enum{
  34. BLL_IMU_CONFIG_FINISH = 0,
  35. BLL_IMU_CONFIG_DOING,
  36. BLL_IMU_CONFIG_VAILERROR,
  37. BLL_IMU_CONFIG_FAIL_FRONT_SIX_AXIS_GET_ID,
  38. BLL_IMU_CONFIG_FAIL_FRONT_MAG_GET_ID,
  39. BLL_IMU_CONFIG_FAIL_BACK_MAG_GET_ID,
  40. BLL_IMU_CONFIG_FAIL_FRONT_SIX_AXIS,
  41. BLL_IMU_CONFIG_FAIL_FRONT_MAG,
  42. BLL_IMU_CONFIG_FAIL_BACK_MAG,
  43. } BLL_IMU_CONFIG_RESULT;
  44. /*API -------------------------------------------------------*/
  45. /**
  46. @brief 初始化IMU业务逻辑层
  47. @param 无
  48. @return 错误代码 - [out] -1失败,0成功
  49. */
  50. int bll_imu_Init(void);
  51. /**
  52. @brief 注册IMU要进行配置的参数
  53. @param param - [in] IMU要进行配置的参数地址
  54. @return 错误代码 - [out] 0失败,成功返回参数地址
  55. */
  56. const bll_imu_param_t* bll_imu_Resume_config_param(const bll_imu_param_t *param);
  57. /**
  58. @brief 注销已注册的IMU配置参数并重新配置IMU
  59. @param param - [in] IMU配置参数的地址
  60. @return 错误代码 - [out] 0成功,-1地址异常,-2没有该注册的IMU配置参数
  61. */
  62. int bll_imu_Resume_unregister_config_param(const bll_imu_param_t* param);
  63. /**
  64. @brief 注册IMU数据通知回调函数
  65. @param priority - [in] 回调优先级
  66. @param cb - [in] 回调函数
  67. @return 错误代码 - [out] -1失败,0成功
  68. */
  69. int bll_imu_register_data_notify_callback(BLL_IMU_DATA_NOTIFY_CB_PRIORITY_e priority, bll_imu_data_notify_cb cb);
  70. /**
  71. @brief 开始配置。根据已注册IMU参数筛选出最高优先级进行配置,且只配置一次。
  72. @param 无
  73. @return 错误代码 - [out] -1失败,0成功
  74. */
  75. int bll_imu_start_config(void);
  76. /**
  77. @brief 查询IMU配置参数是否准备好
  78. @param dir - [in] 方向
  79. @param param - [in] 需要查询的IMU配置参数
  80. @return 查询结果 - [out] BLL_IMU_CONFIG_RESULT
  81. */
  82. BLL_IMU_CONFIG_RESULT bll_imu_query_config_param_is_ready(BLL_IMU_DIR_e dir, const bll_imu_param_t *param);
  83. /**
  84. @brief 读取当前IMU数据的数量
  85. @param dir - [in] 方向
  86. @return 返回当前IMU数据的数量
  87. */
  88. int bll_imu_get_data_num(BLL_IMU_DIR_e dir);
  89. /**
  90. @brief 获取当前IMU数据
  91. @param dir - [in] 方向
  92. @param index - [in] 数据索引
  93. @param pdata - [out] 返回的IMU数据指针
  94. @return 错误代码 - [out] -1失败,0成功
  95. */
  96. int bll_imu_get_data(BLL_IMU_DIR_e dir, int index, bll_imu_data_t *pdata);
  97. /**
  98. @brief 关闭IMU
  99. @return 错误代码 - [out] -1失败,0成功
  100. */
  101. int bll_imu_close(void);
  102. #ifdef __cplusplus
  103. }
  104. #endif
  105. #endif