hal_ser_imu_mode_manage.c 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339
  1. /*Includes ----------------------------------------------*/
  2. #include "system.h"
  3. #include "hal_ser_imu.h"
  4. #include "hal_ser_imu_mode_manage.h"
  5. /*Private macro ------------------------------------------------------------------------------------------------------------------------------------*/
  6. /*STRUCTION ------------------------------------------------------------------------------------------------------------------------------------*/
  7. typedef struct ser_imu_mode_manage
  8. {
  9. /*private member*/
  10. int mode_switch[HAL_SER_IMU_MODE_MANAGE_NUM]; //模式开关
  11. int ser_imu_handle_id[HAL_SER_IMU_MODE_MANAGE_NUM]; //模式的IMU服务句柄ID
  12. ser_imu_config_param_t ser_imu_param[HAL_SER_IMU_MODE_MANAGE_NUM][SER_IMU_DIR_NUM]; //模式的IMU配置参数
  13. ser_imu_data_t ser_imu_data[HAL_SER_IMU_MODE_MANAGE_NUM][SER_IMU_DIR_NUM]; //模式的IMU服务数据
  14. } Ser_Imu_Mode_Manage_t;
  15. /*Local Variable ------------------------------------------------------------------------------------------------------------------------------------*/
  16. static Ser_Imu_Mode_Manage_t ob_ser_imu_mode_manage; //模式管理服务对象
  17. static ser_imu_config_param_t imu_power_off_param; //关机配置参数
  18. /*Local Functions ------------------------------------------------------------------------------------------------------------------------------------*/
  19. static void hal_ser_imu_mode_manage_imu_power_off_init(ser_imu_config_param_t *p_param)
  20. {
  21. p_param->acc_power_mode = SER_IMU_ACC_POWER_MODE_NORMAL; //前脚 - 加速度正常模式
  22. p_param->gry_power_mode = SER_IMU_GRY_POWER_MODE_NORMAL; //前脚 - 陀螺仪正常模式
  23. p_param->timestamp_resolution = SER_IMU_TIMESTAMP_25US; //前脚 - 时间戳25US精度
  24. p_param->timestamp_switch = SER_IMU_TIMESTAMP_OFF; //前脚 - 时间戳关闭
  25. p_param->acc_fs = SER_IMU_ACC_FS_16G; //前脚 - 加速度量程 - 16G
  26. p_param->gry_fs = SER_IMU_GRY_FS_2000DPS; //前脚 - 陀螺仪量程 - 2000DPS
  27. p_param->mag_fs = SER_IMU_MAG_FS_30GS; //前脚 - 地磁计量程 - 30GS
  28. p_param->acc_odr = SER_IMU_ACC_ODR_OFF; //后脚 - 加速度采样频率 - 关闭
  29. p_param->gry_odr = SER_IMU_GRY_ODR_OFF; //前脚 - 陀螺仪采样频率 - 关闭
  30. p_param->mag_odr = SER_IMU_MAG_ODR_OFF; //前脚 - 地磁计采样频率 - 关闭
  31. p_param->fifo_odr = SER_IMU_FIFO_ODR_OFF; //前脚 - FIFO采样频率 - 关闭
  32. }
  33. static void hal_ser_imu_mode_manage_imu_standby_power_init(HAL_SER_IMU_MODE_MANAGE_e mode)
  34. {
  35. ob_ser_imu_mode_manage.ser_imu_param[mode][SER_IMU_DIR_FRONT].acc_power_mode = SER_IMU_ACC_POWER_MODE_NORMAL; //前脚 - 加速度正常模式
  36. ob_ser_imu_mode_manage.ser_imu_param[mode][SER_IMU_DIR_FRONT].gry_power_mode = SER_IMU_GRY_POWER_MODE_NORMAL; //前脚 - 陀螺仪正常模式
  37. ob_ser_imu_mode_manage.ser_imu_param[mode][SER_IMU_DIR_FRONT].timestamp_resolution = SER_IMU_TIMESTAMP_25US; //前脚 - 时间戳25US精度
  38. ob_ser_imu_mode_manage.ser_imu_param[mode][SER_IMU_DIR_FRONT].timestamp_switch = SER_IMU_TIMESTAMP_OFF; //前脚 - 时间戳关闭
  39. ob_ser_imu_mode_manage.ser_imu_param[mode][SER_IMU_DIR_FRONT].acc_fs = SER_IMU_ACC_FS_16G; //前脚 - 加速度量程 - 16G
  40. ob_ser_imu_mode_manage.ser_imu_param[mode][SER_IMU_DIR_FRONT].gry_fs = SER_IMU_GRY_FS_2000DPS; //前脚 - 陀螺仪量程 - 2000DPS
  41. ob_ser_imu_mode_manage.ser_imu_param[mode][SER_IMU_DIR_FRONT].mag_fs = SER_IMU_MAG_FS_30GS; //前脚 - 地磁计量程 - 30GS
  42. ob_ser_imu_mode_manage.ser_imu_param[mode][SER_IMU_DIR_FRONT].acc_odr = SER_IMU_ACC_ODR_12HZ5; //前脚 - 加速度采样频率 - 12.5HZ
  43. ob_ser_imu_mode_manage.ser_imu_param[mode][SER_IMU_DIR_FRONT].gry_odr = SER_IMU_GRY_ODR_OFF; //前脚 - 陀螺仪采样频率 - 关闭
  44. ob_ser_imu_mode_manage.ser_imu_param[mode][SER_IMU_DIR_FRONT].mag_odr = SER_IMU_MAG_ODR_OFF; //前脚 - 地磁计采样频率 - 关闭
  45. ob_ser_imu_mode_manage.ser_imu_param[mode][SER_IMU_DIR_FRONT].fifo_odr = SER_IMU_FIFO_ODR_OFF; //前脚 - FIFO采样频率 - 关闭
  46. ob_ser_imu_mode_manage.ser_imu_param[mode][SER_IMU_DIR_BACK].acc_power_mode = SER_IMU_ACC_POWER_MODE_NORMAL; //后脚 - 加速度正常模式
  47. ob_ser_imu_mode_manage.ser_imu_param[mode][SER_IMU_DIR_BACK].gry_power_mode = SER_IMU_GRY_POWER_MODE_NORMAL; //后脚 - 陀螺仪正常模式
  48. ob_ser_imu_mode_manage.ser_imu_param[mode][SER_IMU_DIR_BACK].timestamp_resolution = SER_IMU_TIMESTAMP_25US; //后脚 - 时间戳25US精度
  49. ob_ser_imu_mode_manage.ser_imu_param[mode][SER_IMU_DIR_BACK].timestamp_switch = SER_IMU_TIMESTAMP_OFF; //后脚 - 时间戳关闭
  50. ob_ser_imu_mode_manage.ser_imu_param[mode][SER_IMU_DIR_BACK].acc_fs = SER_IMU_ACC_FS_16G; //后脚 - 加速度量程 - 16G
  51. ob_ser_imu_mode_manage.ser_imu_param[mode][SER_IMU_DIR_BACK].gry_fs = SER_IMU_GRY_FS_2000DPS; //后脚 - 陀螺仪量程 - 2000DPS
  52. ob_ser_imu_mode_manage.ser_imu_param[mode][SER_IMU_DIR_BACK].mag_fs = SER_IMU_MAG_FS_30GS; //后脚 - 地磁计量程 - 30GS
  53. ob_ser_imu_mode_manage.ser_imu_param[mode][SER_IMU_DIR_BACK].acc_odr = SER_IMU_ACC_ODR_OFF; //后脚 - 加速度采样频率 - 关闭
  54. ob_ser_imu_mode_manage.ser_imu_param[mode][SER_IMU_DIR_BACK].gry_odr = SER_IMU_GRY_ODR_OFF; //后脚 - 陀螺仪采样频率 - 关闭
  55. ob_ser_imu_mode_manage.ser_imu_param[mode][SER_IMU_DIR_BACK].mag_odr = SER_IMU_MAG_ODR_10HZ; //后脚 - 地磁计采样频率 - 10HZ
  56. ob_ser_imu_mode_manage.ser_imu_param[mode][SER_IMU_DIR_BACK].fifo_odr = SER_IMU_FIFO_ODR_OFF; //后脚 - FIFO采样频率 - 关闭
  57. }
  58. static void hal_ser_imu_mode_manage_imu_low_power_init(HAL_SER_IMU_MODE_MANAGE_e mode)
  59. {
  60. ob_ser_imu_mode_manage.ser_imu_param[mode][SER_IMU_DIR_FRONT].acc_power_mode = SER_IMU_ACC_POWER_MODE_NORMAL; //前脚 - 加速度正常模式
  61. ob_ser_imu_mode_manage.ser_imu_param[mode][SER_IMU_DIR_FRONT].gry_power_mode = SER_IMU_GRY_POWER_MODE_NORMAL; //前脚 - 陀螺仪正常模式
  62. ob_ser_imu_mode_manage.ser_imu_param[mode][SER_IMU_DIR_FRONT].timestamp_resolution = SER_IMU_TIMESTAMP_25US; //前脚 - 时间戳25US精度
  63. ob_ser_imu_mode_manage.ser_imu_param[mode][SER_IMU_DIR_FRONT].timestamp_switch = SER_IMU_TIMESTAMP_OFF; //前脚 - 时间戳关闭
  64. ob_ser_imu_mode_manage.ser_imu_param[mode][SER_IMU_DIR_FRONT].acc_fs = SER_IMU_ACC_FS_16G; //前脚 - 加速度量程 - 16G
  65. ob_ser_imu_mode_manage.ser_imu_param[mode][SER_IMU_DIR_FRONT].gry_fs = SER_IMU_GRY_FS_2000DPS; //前脚 - 陀螺仪量程 - 2000DPS
  66. ob_ser_imu_mode_manage.ser_imu_param[mode][SER_IMU_DIR_FRONT].mag_fs = SER_IMU_MAG_FS_30GS; //前脚 - 地磁计量程 - 30GS
  67. ob_ser_imu_mode_manage.ser_imu_param[mode][SER_IMU_DIR_FRONT].acc_odr = SER_IMU_ACC_ODR_104HZ; //前脚 - 加速度采样频率 - 104HZ
  68. ob_ser_imu_mode_manage.ser_imu_param[mode][SER_IMU_DIR_FRONT].gry_odr = SER_IMU_GRY_ODR_OFF; //前脚 - 陀螺仪采样频率 - 关闭
  69. ob_ser_imu_mode_manage.ser_imu_param[mode][SER_IMU_DIR_FRONT].mag_odr = SER_IMU_MAG_ODR_100HZ; //前脚 - 地磁计采样频率 - 100HZ
  70. ob_ser_imu_mode_manage.ser_imu_param[mode][SER_IMU_DIR_FRONT].fifo_odr = SER_IMU_FIFO_ODR_104HZ; //前脚 - FIFO采样频率 - 104HZ
  71. ob_ser_imu_mode_manage.ser_imu_param[mode][SER_IMU_DIR_BACK].acc_power_mode = SER_IMU_ACC_POWER_MODE_NORMAL; //后脚 - 加速度正常模式
  72. ob_ser_imu_mode_manage.ser_imu_param[mode][SER_IMU_DIR_BACK].gry_power_mode = SER_IMU_GRY_POWER_MODE_NORMAL; //后脚 - 陀螺仪正常模式
  73. ob_ser_imu_mode_manage.ser_imu_param[mode][SER_IMU_DIR_BACK].timestamp_resolution = SER_IMU_TIMESTAMP_25US; //后脚 - 时间戳25US精度
  74. ob_ser_imu_mode_manage.ser_imu_param[mode][SER_IMU_DIR_BACK].timestamp_switch = SER_IMU_TIMESTAMP_OFF; //后脚 - 时间戳关闭
  75. ob_ser_imu_mode_manage.ser_imu_param[mode][SER_IMU_DIR_BACK].acc_fs = SER_IMU_ACC_FS_16G; //后脚 - 加速度量程 - 16G
  76. ob_ser_imu_mode_manage.ser_imu_param[mode][SER_IMU_DIR_BACK].gry_fs = SER_IMU_GRY_FS_2000DPS; //后脚 - 陀螺仪量程 - 2000DPS
  77. ob_ser_imu_mode_manage.ser_imu_param[mode][SER_IMU_DIR_BACK].mag_fs = SER_IMU_MAG_FS_30GS; //后脚 - 地磁计量程 - 30GS
  78. ob_ser_imu_mode_manage.ser_imu_param[mode][SER_IMU_DIR_BACK].acc_odr = SER_IMU_ACC_ODR_OFF; //后脚 - 加速度采样频率 - 关闭
  79. ob_ser_imu_mode_manage.ser_imu_param[mode][SER_IMU_DIR_BACK].gry_odr = SER_IMU_GRY_ODR_OFF; //后脚 - 陀螺仪采样频率 - 关闭
  80. ob_ser_imu_mode_manage.ser_imu_param[mode][SER_IMU_DIR_BACK].mag_odr = SER_IMU_MAG_ODR_OFF; //后脚 - 地磁计采样频率 - 关闭
  81. ob_ser_imu_mode_manage.ser_imu_param[mode][SER_IMU_DIR_BACK].fifo_odr = SER_IMU_FIFO_ODR_OFF; //后脚 - FIFO采样频率 - 关闭
  82. }
  83. static void hal_ser_imu_mode_manage_imu_full_power_init(HAL_SER_IMU_MODE_MANAGE_e mode)
  84. {
  85. ob_ser_imu_mode_manage.ser_imu_param[mode][SER_IMU_DIR_FRONT].acc_power_mode = SER_IMU_ACC_POWER_MODE_NORMAL; //前脚 - 加速度正常模式
  86. ob_ser_imu_mode_manage.ser_imu_param[mode][SER_IMU_DIR_FRONT].gry_power_mode = SER_IMU_GRY_POWER_MODE_NORMAL; //前脚 - 陀螺仪正常模式
  87. ob_ser_imu_mode_manage.ser_imu_param[mode][SER_IMU_DIR_FRONT].timestamp_resolution = SER_IMU_TIMESTAMP_25US; //前脚 - 时间戳25US精度
  88. ob_ser_imu_mode_manage.ser_imu_param[mode][SER_IMU_DIR_FRONT].timestamp_switch = SER_IMU_TIMESTAMP_ON; //前脚 - 时间戳开启
  89. ob_ser_imu_mode_manage.ser_imu_param[mode][SER_IMU_DIR_FRONT].acc_fs = SER_IMU_ACC_FS_16G; //前脚 - 加速度量程 - 16G
  90. ob_ser_imu_mode_manage.ser_imu_param[mode][SER_IMU_DIR_FRONT].gry_fs = SER_IMU_GRY_FS_2000DPS; //前脚 - 陀螺仪量程 - 2000DPS
  91. ob_ser_imu_mode_manage.ser_imu_param[mode][SER_IMU_DIR_FRONT].mag_fs = SER_IMU_MAG_FS_30GS; //前脚 - 地磁计量程 - 30GS
  92. ob_ser_imu_mode_manage.ser_imu_param[mode][SER_IMU_DIR_FRONT].acc_odr = SER_IMU_ACC_ODR_104HZ; //前脚 - 加速度采样频率 - 104HZ
  93. ob_ser_imu_mode_manage.ser_imu_param[mode][SER_IMU_DIR_FRONT].gry_odr = SER_IMU_GRY_ODR_104HZ; //前脚 - 陀螺仪采样频率 - 104HZ
  94. ob_ser_imu_mode_manage.ser_imu_param[mode][SER_IMU_DIR_FRONT].mag_odr = SER_IMU_MAG_ODR_200HZ; //前脚 - 地磁计采样频率 - 200HZ
  95. ob_ser_imu_mode_manage.ser_imu_param[mode][SER_IMU_DIR_FRONT].fifo_odr = SER_IMU_FIFO_ODR_104HZ; //前脚 - FIFO采样频率 - 104HZ
  96. ob_ser_imu_mode_manage.ser_imu_param[mode][SER_IMU_DIR_BACK].acc_power_mode = SER_IMU_ACC_POWER_MODE_NORMAL; //后脚 - 加速度正常模式
  97. ob_ser_imu_mode_manage.ser_imu_param[mode][SER_IMU_DIR_BACK].gry_power_mode = SER_IMU_GRY_POWER_MODE_NORMAL; //后脚 - 陀螺仪正常模式
  98. ob_ser_imu_mode_manage.ser_imu_param[mode][SER_IMU_DIR_BACK].timestamp_resolution = SER_IMU_TIMESTAMP_25US; //后脚 - 时间戳25US精度
  99. ob_ser_imu_mode_manage.ser_imu_param[mode][SER_IMU_DIR_BACK].timestamp_switch = SER_IMU_TIMESTAMP_OFF; //后脚 - 时间戳关闭
  100. ob_ser_imu_mode_manage.ser_imu_param[mode][SER_IMU_DIR_BACK].acc_fs = SER_IMU_ACC_FS_16G; //后脚 - 加速度量程 - 16G
  101. ob_ser_imu_mode_manage.ser_imu_param[mode][SER_IMU_DIR_BACK].gry_fs = SER_IMU_GRY_FS_2000DPS; //后脚 - 陀螺仪量程 - 2000DPS
  102. ob_ser_imu_mode_manage.ser_imu_param[mode][SER_IMU_DIR_BACK].mag_fs = SER_IMU_MAG_FS_30GS; //后脚 - 地磁计量程 - 30GS
  103. ob_ser_imu_mode_manage.ser_imu_param[mode][SER_IMU_DIR_BACK].acc_odr = SER_IMU_ACC_ODR_OFF; //后脚 - 加速度采样频率 - 关闭
  104. ob_ser_imu_mode_manage.ser_imu_param[mode][SER_IMU_DIR_BACK].gry_odr = SER_IMU_GRY_ODR_OFF; //后脚 - 陀螺仪采样频率 - 关闭
  105. ob_ser_imu_mode_manage.ser_imu_param[mode][SER_IMU_DIR_BACK].mag_odr = SER_IMU_MAG_ODR_200HZ; //后脚 - 地磁计采样频率 - 200HZ
  106. ob_ser_imu_mode_manage.ser_imu_param[mode][SER_IMU_DIR_BACK].fifo_odr = SER_IMU_FIFO_ODR_OFF; //后脚 - FIFO采样频率 - 关闭
  107. }
  108. static void hal_ser_imu_mode_manage_printf_Process(void)
  109. {
  110. SEGGER_RTT_printf(0,"hal_ser_imu_mode_manage----------------------------------------------------------------->\n");
  111. SEGGER_RTT_printf(0,"mode_switch:%d,%d,%d,%d,%d\n",ob_ser_imu_mode_manage.mode_switch[HAL_SER_IMU_MODE_MANAGE_STANDBY], \
  112. ob_ser_imu_mode_manage.mode_switch[HAL_SER_IMU_MODE_MANAGE_NORMAL], \
  113. ob_ser_imu_mode_manage.mode_switch[HAL_SER_IMU_MODE_MANAGE_SELF_CHECK], \
  114. ob_ser_imu_mode_manage.mode_switch[HAL_SER_IMU_MODE_MANAGE_GAME], \
  115. ob_ser_imu_mode_manage.mode_switch[HAL_SER_IMU_MODE_MANAGE_REALSTEP]);
  116. SEGGER_RTT_printf(0,"<-----------------------------------------------------------------hal_ser_imu_mode_manage\n");
  117. }
  118. /*API ------------------------------------------------------------------------------------------------------------------------------------*/
  119. /**
  120. @brief 初始化模式管理服务
  121. @param 无
  122. @return 错误代码 - [out] -1失败,0成功
  123. */
  124. int hal_ser_imu_mode_manage_Init(void)
  125. {
  126. int ret = 0;
  127. //初始化imu服务
  128. if(hal_ser_imu_Init() == -1)ret = -1;
  129. //重置模式管理服务结构体
  130. memset(&ob_ser_imu_mode_manage, 0, sizeof(ob_ser_imu_mode_manage));
  131. /*初始化模式管理服务结构体*/
  132. //初始化-待机模式配置
  133. ob_ser_imu_mode_manage.mode_switch[HAL_SER_IMU_MODE_MANAGE_STANDBY] = 0; //模式关闭
  134. hal_ser_imu_get_handle("HAL_SER_IMU_MODE_MANAGE_STANDBY", &ob_ser_imu_mode_manage.ser_imu_handle_id[HAL_SER_IMU_MODE_MANAGE_STANDBY]); //获取操作IMU服务句柄ID
  135. hal_ser_imu_mode_manage_imu_standby_power_init(HAL_SER_IMU_MODE_MANAGE_STANDBY); //设置IMU服务配置参数 - 待机配置
  136. //初始化-正常模式配置
  137. ob_ser_imu_mode_manage.mode_switch[HAL_SER_IMU_MODE_MANAGE_NORMAL] = 0; //模式关闭
  138. hal_ser_imu_get_handle("HAL_SER_IMU_MODE_MANAGE_NORMAL", &ob_ser_imu_mode_manage.ser_imu_handle_id[HAL_SER_IMU_MODE_MANAGE_NORMAL]); //获取操作IMU服务句柄ID
  139. hal_ser_imu_mode_manage_imu_low_power_init(HAL_SER_IMU_MODE_MANAGE_NORMAL); //设置IMU服务配置参数 - 低功耗配置
  140. //初始化-自检模式配置
  141. ob_ser_imu_mode_manage.mode_switch[HAL_SER_IMU_MODE_MANAGE_SELF_CHECK] = 0; //模式关闭
  142. hal_ser_imu_get_handle("HAL_SER_IMU_MODE_MANAGE_SELF_CHECK", &ob_ser_imu_mode_manage.ser_imu_handle_id[HAL_SER_IMU_MODE_MANAGE_SELF_CHECK]); //获取操作IMU服务句柄ID
  143. hal_ser_imu_mode_manage_imu_full_power_init(HAL_SER_IMU_MODE_MANAGE_SELF_CHECK); //设置IMU服务配置参数 - 全功率配置
  144. //初始化-游戏模式配置
  145. ob_ser_imu_mode_manage.mode_switch[HAL_SER_IMU_MODE_MANAGE_GAME] = 0; //模式关闭
  146. hal_ser_imu_get_handle("HAL_SER_IMU_MODE_MANAGE_GAME", &ob_ser_imu_mode_manage.ser_imu_handle_id[HAL_SER_IMU_MODE_MANAGE_GAME]); //获取操作IMU服务句柄ID
  147. hal_ser_imu_mode_manage_imu_full_power_init(HAL_SER_IMU_MODE_MANAGE_GAME); //设置IMU服务配置参数 - 全功率配置
  148. //初始化-校准模式配置
  149. ob_ser_imu_mode_manage.mode_switch[HAL_SER_IMU_MODE_MANAGE_CALIBRATION] = 0; //模式关闭
  150. hal_ser_imu_get_handle("HAL_SER_IMU_MODE_MANAGE_CALIBRATION", &ob_ser_imu_mode_manage.ser_imu_handle_id[HAL_SER_IMU_MODE_MANAGE_CALIBRATION]);//获取操作IMU服务句柄ID
  151. hal_ser_imu_mode_manage_imu_full_power_init(HAL_SER_IMU_MODE_MANAGE_CALIBRATION);
  152. //初始化-实时计步模式配置
  153. ob_ser_imu_mode_manage.mode_switch[HAL_SER_IMU_MODE_MANAGE_REALSTEP] = 0; //模式关闭
  154. hal_ser_imu_get_handle("HAL_SER_IMU_MODE_MANAGE_REALSTEP", &ob_ser_imu_mode_manage.ser_imu_handle_id[HAL_SER_IMU_MODE_MANAGE_REALSTEP]); //获取操作IMU服务句柄ID
  155. hal_ser_imu_mode_manage_imu_full_power_init(HAL_SER_IMU_MODE_MANAGE_REALSTEP); //设置IMU服务配置参数 - 全功率配置
  156. //初始化关机配置参数
  157. hal_ser_imu_mode_manage_imu_power_off_init(&imu_power_off_param);
  158. SEGGER_RTT_printf(0,"sizeof(%d)\n",sizeof(ob_ser_imu_mode_manage));
  159. // Process_Start(1000,"hal_ser_imu_mode_manage_printf_Process",hal_ser_imu_mode_manage_printf_Process);
  160. if(ret == -1)return -1;
  161. return 0;
  162. }
  163. /**
  164. @brief 请求需要的模式
  165. @param mode - [in] 需要请求的模式
  166. @param imu_mode_switch - [in] 请求的模式开关
  167. @return 错误代码 - [out] -1失败,0成功
  168. */
  169. int hal_ser_imu_mode_manage_set_required(HAL_SER_IMU_MODE_MANAGE_e mode, HAL_SER_IMU_MODE_MANAGE_IMU_MODE_SWITCH_e imu_mode_switch)
  170. {
  171. //操作模式不能超过模式数量
  172. if(mode >= HAL_SER_IMU_MODE_MANAGE_NUM)return -1;
  173. //设置模式开关
  174. switch(imu_mode_switch)
  175. {
  176. case HAL_SER_IMU_MODE_MANAGE_IMU_MODE_ON:
  177. if(ob_ser_imu_mode_manage.mode_switch[mode] == 0)ob_ser_imu_mode_manage.mode_switch[mode]++;
  178. break;
  179. case HAL_SER_IMU_MODE_MANAGE_IMU_MODE_OFF:
  180. if(ob_ser_imu_mode_manage.mode_switch[mode] != 0)ob_ser_imu_mode_manage.mode_switch[mode]--;
  181. break;
  182. }
  183. //设置各个模式下的配置
  184. for(int i = 0; i < HAL_SER_IMU_MODE_MANAGE_NUM; i++)
  185. {
  186. if(ob_ser_imu_mode_manage.mode_switch[i] > 0)//模式开启
  187. {
  188. //设置前脚IMU配置参数
  189. if(hal_ser_imu_set_required_param(ob_ser_imu_mode_manage.ser_imu_handle_id[i], SER_IMU_DIR_FRONT, &ob_ser_imu_mode_manage.ser_imu_param[i][SER_IMU_DIR_FRONT]) == -1)return -1;
  190. //设置后脚IMU配置参数
  191. if(hal_ser_imu_set_required_param(ob_ser_imu_mode_manage.ser_imu_handle_id[i], SER_IMU_DIR_BACK, &ob_ser_imu_mode_manage.ser_imu_param[i][SER_IMU_DIR_BACK]) == -1)return -1;
  192. }
  193. else //模式关闭
  194. {
  195. //设置前脚IMU配置参数
  196. if(hal_ser_imu_set_required_param(ob_ser_imu_mode_manage.ser_imu_handle_id[i], SER_IMU_DIR_FRONT, &imu_power_off_param) == -1)return -1;
  197. //设置后脚IMU配置参数
  198. if(hal_ser_imu_set_required_param(ob_ser_imu_mode_manage.ser_imu_handle_id[i], SER_IMU_DIR_BACK, &imu_power_off_param) == -1)return -1;
  199. }
  200. }
  201. return 0;
  202. }
  203. /**
  204. @brief 模式是否准备好
  205. @param mode - [in] 需要的模式
  206. @return 错误代码 - [out] -1失败,0成功
  207. */
  208. int hal_ser_imu_mode_manage_get_ready(HAL_SER_IMU_MODE_MANAGE_e mode)
  209. {
  210. //操作模式不能超过模式数量
  211. if(mode >= HAL_SER_IMU_MODE_MANAGE_NUM)return -1;
  212. if(ob_ser_imu_mode_manage.mode_switch[mode] == 0)
  213. {
  214. return -1;
  215. }
  216. else
  217. {
  218. //判断前脚IMU配置参数是否准备好
  219. if(hal_ser_imu_is_param_get_ready(SER_IMU_DIR_FRONT, &ob_ser_imu_mode_manage.ser_imu_param[mode][SER_IMU_DIR_FRONT]) != -1)
  220. {
  221. //判断后脚IMU配置参数是否准备好
  222. if(hal_ser_imu_is_param_get_ready(SER_IMU_DIR_BACK, &ob_ser_imu_mode_manage.ser_imu_param[mode][SER_IMU_DIR_BACK]) != -1)
  223. {
  224. return 0;
  225. }
  226. }
  227. }
  228. return -1;
  229. }
  230. /**
  231. @brief 获取当前模式的IMU当前数据数量
  232. @param mode - [in] 需要的模式
  233. @param dir - [in] IMU方向 - 前/后脚
  234. @return 错误代码 - [out] 返回数据数量
  235. */
  236. int hal_ser_imu_mode_manage_get_data_num(SER_IMU_DIR_e dir)
  237. {
  238. return hal_ser_imu_get_data_num(dir);
  239. }
  240. /**
  241. @brief 获取当前模式的IMU数据
  242. @param dir - [in] IMU方向 - 前/后脚
  243. @param index - [in] 第几组数据
  244. @param pdata - [out] IMU数据
  245. @return 错误代码 - [out] -1失败,0成功
  246. */
  247. int hal_ser_imu_mode_manage_get_data(SER_IMU_DIR_e dir, int index, ser_imu_data_t *pdata)
  248. {
  249. return hal_ser_imu_get_data(dir, index, pdata);
  250. }
  251. /**
  252. @brief 查询当前是否挂起模式
  253. @return 错误代码 - [out] -1 非挂起模式,0 挂起模式
  254. */
  255. int hal_ser_imu_mode_IsSuspend(void)
  256. {
  257. for(uint8_t i = HAL_SER_IMU_MODE_MANAGE_STANDBY;i< HAL_SER_IMU_MODE_MANAGE_NUM;i++){
  258. if( 0 == hal_ser_imu_mode_manage_get_ready((HAL_SER_IMU_MODE_MANAGE_e)i)){
  259. return -1;
  260. }
  261. }
  262. return 0;
  263. }