aem_workout_if.h 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277
  1. #ifndef _AEM_WORKOUT_IF_H_
  2. #define _AEM_WORKOUT_IF_H_
  3. #include <stdint.h>
  4. #include <stdbool.h>
  5. #include "aem_sensor_if.h"
  6. #include "aem_core_if.h"
  7. #include "res_include.h"
  8. // #include "aem_workout_id_info.h"
  9. #define WORKOUT_TOP_LIST_MAX 11
  10. #pragma pack(push, 1)
  11. // 运动分类
  12. typedef enum
  13. {
  14. WORKOUT_CATEGORY_GENERAL, // 日常运动
  15. WORKOUT_CATEGORY_MAX,
  16. } workout_category_e;
  17. // 运动类型的ID
  18. typedef enum
  19. {
  20. WORKOUT_ID_BEGIN = 0,
  21. WORKOUT_OUTDOOR_RUNNING = 0, // 0.户外跑步
  22. WORKOUT_INDOOR_RUNNING, // 室内跑步
  23. WORKOUT_HIKE, // 户外徒步
  24. WORKOUT_OUTDOOR_CYCLE, // 户外骑行
  25. WORKOUT_INDOOR_CYCLE, // 室内骑行
  26. WORKOUT_POOL_SWIM, // 泳池游泳
  27. WORKOUT_OPEN_WATER, // 开放水域游泳
  28. WORKOUT_BADMINTON, // 羽毛球
  29. WORKOUT_YOGA, // 瑜伽
  30. WORKOUT_TENNIS, // 网球
  31. WORKOUT_ROPE, // 跳绳
  32. WORKOUT_ID_MAX,
  33. WORKOUT_ID_INVALID = 0xff,
  34. } workout_id_e;
  35. typedef enum
  36. {
  37. WORKOUT_FIELD_BEGIN = 0,
  38. WORKOUT_DURATION_FIELD = 0, // 运动时长
  39. WORKOUT_DISTANCE_FIELD, // 距离
  40. WORKOUT_CALORIE_FIELD, // 卡路里
  41. WORKOUT_RT_HR_FIELD, // 实时心率
  42. WORKOUT_MAX_HR_FIELD, // 最大心率
  43. WORKOUT_MIN_HR_FIELD, // 最小心率
  44. WORKOUT_RT_PACE_FIELD, // 实时配速
  45. WORKOUT_AVERAGE_PACE_FIELD, // 平均配速
  46. WORKOUT_SPEED_FIELD, // 速度
  47. WORKOUT_AVERAGE_SPEED_FIELD, // 平均速度
  48. WORKOUT_STEPS_FIELD, // 步数(步)
  49. WORKOUT_RT_STRIDE_FREQ_FIELD, // 实时步频
  50. WORKOUT_AVG_CADENCE_FIELD, // 平均步频
  51. WORKOUT_ALTITUDE_FIELD, // 海拔高度
  52. WORKOUT_MAX_ALTITUDE_FIELD, // 最高海拔
  53. WORKOUT_MIN_ALTITUDE_FIELD, // 最低海拔
  54. WORKOUT_CUMULATIVE_RISE_FIELD, // 累计上升
  55. WORKOUT_LAPS_FIELD, // 趟数
  56. WORKOUT_ROPES_FIELD, // 跳绳数
  57. WORKOUT_MAX_FIELD_UNKNOW,
  58. WORKOUT_PARAM_INVALID = 0xff,
  59. } workout_data_type_e;
  60. typedef enum
  61. {
  62. WORKOUT_RUN = 0,
  63. WORKOUT_PAUSE = 1,
  64. } workout_state_e;
  65. typedef enum
  66. {
  67. UNIT_STR_KCAL, // 千卡, kcal
  68. UNIT_STR_DISTANCE_M, // 距离, 米
  69. UNIT_STR_DISTANCE_YARD, // 距离, 码
  70. UNIT_STR_DISTANCE_KM, // 距离, 千米
  71. UNIT_STR_DISTANCE_MILE, // 距离, 英里
  72. UNIT_STR_PACE_KM, // 配速, /千米
  73. UNIT_STR_PACE_MILE, // 配速, /英里
  74. UNIT_STR_SPEED_KMH, // 速度, 千米/时
  75. UNIT_STR_SPEED_MMH, // 速度, 英里/时
  76. UNIT_STR_LAPS, // 游泳趟数
  77. UNIT_STR_ROPES, // 跳绳次数
  78. UNIT_STR_STEPS, // 步数
  79. UNIT_STR_SPM, // 步频
  80. UNIT_STR_BPM, // 心率
  81. } unit_type_e;
  82. // 单个运动的信息
  83. typedef struct
  84. {
  85. uint8_t id;
  86. uint8_t category_id;
  87. uint32_t name_id;
  88. uint32_t icon_id;
  89. uint32_t big_icon_id;
  90. uint32_t bk_color;
  91. void *icon;
  92. void *big_icon;
  93. res_string_id_e name_key;
  94. // attribs
  95. uint32_t attr_gps : 1; // 需要GPS定位
  96. uint32_t attr_pool : 1; // 需要设置泳池长度
  97. uint32_t attr_running : 1; // 跑步类运动
  98. uint32_t attr_cycle : 1; // 骑行类运动
  99. } workout_info_t;
  100. typedef enum
  101. {
  102. WORKOUT_OK = 0,
  103. WORKOUT_FAIL,
  104. WORKOUT_INVALID_PARAM,
  105. WORKOUT_TYPE_ALGO_NO_SUPPORT,
  106. WORKOUT_OUT_OF_MEMORY,
  107. WORKOUT_TAG_NOT_EXIST,
  108. } workout_error_e;
  109. // 运动开关设置
  110. typedef struct
  111. {
  112. uint8_t auto_start; // 自动识别, 0x00:关闭; 0x01:打开; 0xff:忽略
  113. uint8_t auto_pause; // 自动暂停, 0x00:关闭; 0x01:打开; 0xff:忽略
  114. uint8_t auto_stop; // 自动结束, 0x00:关闭; 0x01:打开; 0xff:忽略
  115. uint8_t hr_alarm_enable; // 心率报警值是否开启, 0x00:关闭; 0x01:开启; 0xff:忽略
  116. uint8_t hr_alarm_value; // 心率报警值
  117. } workout_switch_settings_t;
  118. typedef struct
  119. {
  120. uint8_t s_workout_toplist[11];
  121. workout_switch_settings_t switch_settings;
  122. uint8_t pool_length; // 泳池长度
  123. } aem_workout_settings_t;
  124. typedef enum
  125. {
  126. GOAL_SETTING_NO_GOAL = 0, // 无目标
  127. GOAL_SETTING_DURAION, // 运动时长
  128. GOAL_SETTING_DISTANCE, // 运动距离
  129. GOAL_SETTING_CALORIE, // 消耗
  130. GOAL_SETTING_COUNT, // 次数,跳绳等
  131. GOAL_SETTING_MAX_UNKNOW,
  132. } workout_goal_type_e;
  133. typedef enum
  134. {
  135. WORKOUT_REMIND_BEGIN = 0,
  136. WORKOUT_REMIND_NO_REMIND = 0, // 无提醒
  137. WORKOUT_REMIND_DURATION, // 时间
  138. WORKOUT_REMIND_DISTANCE, // 距离
  139. WORKOUT_REMIND_COUNT, // 次数,跳绳等
  140. WORKOUT_REMIND_MAX_UNKNOW,
  141. } workout_remind_type_e;
  142. typedef struct
  143. {
  144. uint16_t distance; // 距离, km
  145. uint16_t durMin; // minutes
  146. uint16_t count;
  147. workout_remind_type_e active_remind; // 选中提醒类型
  148. } workout_remind_setting_t;
  149. typedef struct
  150. {
  151. uint16_t calories;
  152. uint16_t distance;
  153. uint16_t durMin; // minutes
  154. uint16_t count;
  155. workout_goal_type_e active_goal;
  156. } workout_goal_settings_t;
  157. typedef struct
  158. {
  159. workout_id_e id;
  160. workout_goal_settings_t goal;
  161. workout_remind_setting_t remind;
  162. } workout_goal_remind_t;
  163. typedef struct
  164. {
  165. workout_id_e workout_id; // 运动类型
  166. workout_goal_settings_t goal; // 运动目标
  167. workout_remind_setting_t remind; // 运动提醒
  168. sports_status_e status; // 运动状态
  169. bool is_save; // 运动结束后是否保存运动记录
  170. bool gps_enable;
  171. uint16_t target_pace; // 目标配速
  172. } workout_state_t;
  173. typedef struct
  174. {
  175. workout_id_e workout_id; // 运动类型
  176. uint32_t start_time; // 开始时间
  177. uint32_t end_time; // 结束时间
  178. uint32_t sport_time; // 运动时长
  179. uint32_t paused_time;
  180. uint16_t active_durations; // 单位 秒
  181. uint32_t calories; // 单位 大卡
  182. uint32_t steps; // 重复次数:步数或次数, 或跳绳次数
  183. uint32_t distances; // 单位 米 //表示实际运动过程中的值,不包括暂停时的增量
  184. uint32_t smart_distances; // 智能陪跑距离
  185. workout_rt_hr_t hr;
  186. rt_speed_info_t speed; // 速度信息
  187. rt_pace_info_t pace; // 配速信息
  188. altitude_info_t altitude;
  189. rt_swim_info_t swim; // 游泳信息
  190. aem_gps_rt_info_t gps;
  191. uint8_t avg_step_frequency; // 平均步频
  192. uint8_t cur_step_frequency; // 当前步频
  193. uint8_t max_step_frequency; // 最大步频
  194. uint8_t avg_step_len; // 平均步幅
  195. uint8_t max_step_len; // 最大步幅
  196. bool gps_enable;
  197. } workout_rt_info_t;
  198. typedef struct
  199. {
  200. workout_id_e workout_id;
  201. uint32_t start_time;
  202. uint32_t duration;
  203. uint32_t distance;
  204. uint32_t ropes;
  205. uint8_t index; // 运动记录历史index
  206. } aem_wk_record_brief_t;
  207. typedef struct
  208. {
  209. uint32_t ai_distance;
  210. uint16_t ai_pace;
  211. bool enable;
  212. } ai_pacer_data_t;
  213. typedef struct
  214. {
  215. workout_id_e workout_id; // 运动ID
  216. uint32_t start_time; // 开始时间
  217. uint32_t end_time; // 结束时间
  218. workout_goal_settings_t goal; // 7Bytes
  219. ai_pacer_data_t ai_pacer; // 智能陪跑数据,7Bytes
  220. uint16_t duration; // 时长s
  221. uint16_t calorie; // 卡路里
  222. uint32_t distance; // 距离,单位米
  223. uint8_t hr_max; // 最高心率
  224. uint8_t hr_min; // 最低心率
  225. uint8_t hr_avg; // 平均心率
  226. uint16_t fast_pace; // 最快配速
  227. uint16_t avg_pace; // 平均配速
  228. uint32_t speed_max; // 最大速度,单位m
  229. uint32_t speed_avg; // 平均速度
  230. uint16_t steps; // 步数
  231. uint8_t avg_stride; // 平均步幅 cm
  232. uint8_t avg_stride_freq; // 平均步频,次/分
  233. int16_t altitude_avg; // 平均海拔
  234. int16_t altitude_max; // 最大海拔
  235. int16_t altitude_min; // 最小海拔
  236. uint16_t cumulative_rise; // 累计上升
  237. uint16_t cumulative_fall; // 累计下降
  238. uint16_t laps; // 趟数
  239. uint16_t ropes; // 跳绳次数
  240. uint8_t gps_enable;
  241. } workout_result_t;
  242. #pragma pack(pop)
  243. #define is_workout_goal_setting(a) ((GOAL_SETTING_DURAION <= (a)) && ((a) < GOAL_SETTING_MAX_UNKNOW))
  244. #define is_workout_remind_valid(a) ((WORKOUT_REMIND_BEGIN <= (a)) && ((a) < WORKOUT_REMIND_MAX_UNKNOW))
  245. #endif //_WORKOUT_IF_H_INCLUDED