aem_sensor_if.h 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529
  1. #ifndef _AEM_SENSOR_IF_H_
  2. #define _AEM_SENSOR_IF_H_
  3. #include <stddef.h>
  4. #include <stdbool.h>
  5. #include <stdint.h>
  6. #define KM_TO_MI 0.6213712 /* 公里转英里 */
  7. #define MI_TO_KM 1.609344 /* 英里转公里 */
  8. #define CONVERT_KM_MI_COEFFICIENT 0.00062137 // 注意此系数是米转英里
  9. #define DAY_ACTVITY_MAX_COUNT 100
  10. #define HOUR_ACTIVITY_MAX_COUNT 10
  11. #define DAY_HR_MAX_COUNT 200
  12. #pragma pack(push, 1)
  13. typedef enum
  14. {
  15. HISTORY_REPORT_REASON_OLNY_UPDATE_BUF,
  16. HISTORY_REPORT_REASON_TIME_CHANGE,
  17. HISTORY_REPORT_REASON_POWER_OFF
  18. } event_report_t;
  19. typedef struct
  20. {
  21. uint8_t enable;
  22. uint8_t start_hour;
  23. uint8_t start_min;
  24. uint8_t end_hour;
  25. uint8_t end_min;
  26. uint8_t interval_time_min;
  27. } aem_setting_auto_meas_t;
  28. typedef aem_setting_auto_meas_t aem_setting_hr_auto_meas_t;
  29. typedef aem_setting_auto_meas_t aem_setting_bp_auto_meas_t;
  30. typedef aem_setting_auto_meas_t aem_setting_spo2_auto_meas_t;
  31. typedef aem_setting_auto_meas_t aem_setting_btemp_auto_meas_t;
  32. typedef struct
  33. {
  34. uint32_t step;
  35. uint32_t calories;
  36. uint32_t distance;
  37. } aem_step_info_t;
  38. typedef struct
  39. {
  40. uint8_t hr;
  41. uint8_t signalquality;
  42. } aem_rt_hr_info_t;
  43. typedef struct
  44. {
  45. uint8_t spo2_value;
  46. uint8_t signalquality;
  47. } aem_rt_spo2_info_t;
  48. typedef struct
  49. {
  50. uint8_t stress;
  51. } aem_rt_stress_info_t;
  52. typedef struct
  53. {
  54. uint8_t enable;
  55. uint8_t hr_remind_h;
  56. uint8_t hr_remind_l;
  57. } aem_hr_remind_t;
  58. typedef enum
  59. {
  60. MAG_ACCURACY_UNRELIABLE,
  61. MAG_ACCURACY_LOW,
  62. MAG_ACCURACY_MEDIUM,
  63. MAG_ACCURACY_HIGH,
  64. } aem_mag_accuracy_e;
  65. typedef struct
  66. {
  67. float x;
  68. float y;
  69. float z;
  70. } aem_acc_raw_data_t;
  71. typedef enum
  72. {
  73. PPG_HR,
  74. PPG_SPO2,
  75. } ppg_type_e;
  76. typedef enum
  77. {
  78. AEM_PPG_OPEN,
  79. AEM_PPG_CLOSE,
  80. } ppg_op_e;
  81. typedef enum
  82. {
  83. SENSOR_START,
  84. SENSOR_PASUE,
  85. SENSOR_STOP,
  86. } sensor_op_e;
  87. typedef struct
  88. {
  89. ppg_type_e type;
  90. ppg_op_e op;
  91. } ppgsensor_op_t;
  92. typedef struct
  93. {
  94. uint8_t version;
  95. uint8_t enable;
  96. uint8_t siesta_enable;
  97. uint8_t start_hour;
  98. uint8_t start_min;
  99. uint8_t end_hour;
  100. uint8_t end_min;
  101. } aem_setting_sedentary_t;
  102. typedef enum
  103. {
  104. NORMAL_STATUS,
  105. CHARGING_STATUS,
  106. LOWER_STATUS,
  107. SHUTDOWN_STATUS,
  108. CHARGING_COMPLETE_STATUS,
  109. } charger_status_e;
  110. // ar alert type(長時間動作類型)(0 : 未知(unknown), 1 : 走路(walk), 2 : 跑步(run), 3 : 騎車(ride), 4 : 划船機(rowing), 5 : 橢圓機(elliptical)) "
  111. typedef enum
  112. {
  113. AUTO_RECOGNITION_UNKNOWN = 0,
  114. AUTO_RECOGNITION_WALKING,
  115. AUTO_RECOGNITION_RUNNING,
  116. AUTO_RECOGNITION_BIKING,
  117. AUTO_RECOGNITION_ROWING,
  118. AUTO_RECOGNITION_ELLIPTICALMACHINE,
  119. AUTO_RECOGNITION_NUM,
  120. } workout_auto_recognition_e;
  121. typedef struct
  122. {
  123. uint8_t level;
  124. charger_status_e charger_status;
  125. } aem_battery_info_t;
  126. #define AEM_SLEEP_STAGE_DATA_MAX_CNT (200)
  127. typedef struct
  128. {
  129. // 入睡时间
  130. uint16_t fall_year;
  131. uint8_t fall_month;
  132. uint8_t fall_day;
  133. uint8_t fall_hour;
  134. uint8_t fall_minute;
  135. // 起床时间
  136. uint16_t getup_year;
  137. uint8_t getup_month;
  138. uint8_t getup_day;
  139. uint8_t getup_hour;
  140. uint8_t getup_minute;
  141. uint16_t total_time_mins; // 睡眠总时长
  142. uint16_t wake_mins; // 总清醒时长, 单位:分
  143. uint16_t doze_mins; // 总浅眠时长
  144. uint16_t rem_mins; // 总REM时长
  145. uint16_t deep_mins; // 总深眠时长
  146. uint8_t wake_count; // 清醒次数
  147. uint8_t doze_count; // 浅眠次数
  148. uint8_t rem_count; // 眼动次数
  149. uint8_t deep_count; // 深眠次数
  150. uint8_t sleep_score; // 睡眠得分
  151. } aem_sleep_summary_info_t;
  152. typedef enum
  153. {
  154. AEM_SLEEP_STATE_AWAKE = 1,
  155. AEM_SLEEP_STATE_REM,
  156. AEM_SLEEP_STATE_DOZE,
  157. AEM_SLEEP_STATE_DEEP,
  158. } aem_sleep_state_e;
  159. typedef struct
  160. {
  161. uint8_t stage; // 阶段 1:醒着 2:浅睡 3:深睡 4:快速眼动
  162. uint8_t duration; // 持续时长
  163. } aem_sleep_stage_t;
  164. typedef struct
  165. {
  166. uint16_t item_count;
  167. aem_sleep_stage_t data[AEM_SLEEP_STAGE_DATA_MAX_CNT];
  168. } aem_sleep_stage_data_t;
  169. typedef struct
  170. {
  171. aem_sleep_summary_info_t summary;
  172. aem_sleep_stage_data_t stage;
  173. } aem_rt_sleep_info_t;
  174. #define HEALTH_STRESS_MAX 100
  175. #define PRESS_MAX_LEVEL 4
  176. typedef enum
  177. {
  178. AEM_TWIST_SCREEN_OFF,
  179. AEM_TWIST_SCREEN_ON,
  180. AEM_TWIST_NO_ACTION,
  181. AEM_TWIST_MAX,
  182. } twist_evt_t;
  183. typedef enum
  184. {
  185. AEM_SLEEP_DEEP,
  186. AEM_SLEEP_RESTLESS,
  187. AEM_SLEEP_AWARE,
  188. AEM_SLEEP_INVIALD,
  189. AEM_SLEEP_MAX,
  190. } sleep_state_e;
  191. typedef enum
  192. {
  193. HANDS_WAKEUP_OFF,
  194. HANDS_WAKEUP_ON,
  195. } hands_wakeup_type_t;
  196. typedef struct
  197. {
  198. hands_wakeup_type_t status;
  199. } aem_hands_wakeup_t;
  200. typedef struct
  201. {
  202. uint8_t active_kcal;
  203. uint8_t resting_kcal;
  204. } activity_kcal_t;
  205. typedef struct
  206. {
  207. uint8_t activity_type;
  208. uint8_t time_minute;
  209. } activity_intensity_t;
  210. typedef struct
  211. {
  212. uint32_t timestamp;
  213. uint32_t steps;
  214. uint32_t calories;
  215. uint32_t stand;
  216. uint32_t times;
  217. uint32_t distance; // 距离m
  218. } aem_rt_activity_info_t;
  219. typedef struct
  220. {
  221. uint16_t steps;
  222. uint16_t calories;
  223. uint16_t distance;
  224. } activity_data_item_t;
  225. typedef enum
  226. {
  227. ACTIVITY_NO_REMIND = 0,
  228. ACTIVITY_REMIND_CALORIES,
  229. ACTIVITY_REMIND_STEP,
  230. ACTIVITY_REMIND_TIMES,
  231. } activity_remind_type_e;
  232. typedef struct
  233. {
  234. uint16_t steps;
  235. uint16_t calories;
  236. uint16_t times;
  237. } aem_activity_goal_t;
  238. typedef struct
  239. {
  240. uint16_t year;
  241. uint8_t mon;
  242. uint8_t day;
  243. aem_activity_goal_t goal;
  244. bool is_step_completed;
  245. bool is_calories_completed;
  246. bool is_times_completed;
  247. } activity_remind_state_t;
  248. typedef struct
  249. {
  250. activity_remind_type_e remind_type;
  251. uint8_t active_flag;
  252. uint32_t value;
  253. } activity_remind_t;
  254. typedef struct
  255. {
  256. uint16_t steps;
  257. uint16_t distances;
  258. uint16_t total_kcal;
  259. uint16_t dur_secs;
  260. } act_every_xmin_t;
  261. typedef struct
  262. {
  263. uint8_t current_resting_hr;
  264. uint8_t yesterday_resting_hr;
  265. } hr_resting_result_t;
  266. typedef struct
  267. {
  268. uint8_t cur_heart_rate;
  269. uint8_t max_heart_rate;
  270. uint8_t min_heart_rate;
  271. uint8_t avg_heart_rate;
  272. } workout_rt_hr_t;
  273. typedef struct
  274. {
  275. uint16_t cur_speed;
  276. uint16_t avg_speed;
  277. uint16_t max_speed;
  278. } rt_speed_info_t;
  279. typedef struct
  280. {
  281. uint16_t cur_km_pace; // 当前公里配速 s/km
  282. uint16_t max_km_pace; // 最快配速s/km,值最小公里配速最快
  283. uint16_t avg_km_pace; // 平均配速s/km
  284. } rt_pace_info_t;
  285. typedef enum
  286. {
  287. POSTURE_MEDLEY = 0, // 混合泳
  288. POSTURE_FREESTYLE, // 自由泳
  289. POSTURE_BREASTSTROKE, // 蛙泳
  290. POSTURE_BACKSTROKE, // 其他(仰泳)
  291. POSTURE_BUTTERFLYSTROKE, // 其他(蝶泳)
  292. POSTURE_OTHERS, // 其他
  293. POSTURE_ALL,
  294. } swim_posture_e;
  295. // 运动游泳数据
  296. typedef struct
  297. {
  298. uint8_t laps; // 趟数
  299. uint8_t posture; // 泳姿
  300. uint16_t distance; // 距离
  301. uint16_t strokes; // 划水次数
  302. uint16_t swim_time; // 游泳时长
  303. uint16_t swolf; // 50米的游泳时长+50米的划水次数
  304. uint32_t calories; // 卡路里
  305. uint16_t pace; // 配速 s/100m
  306. uint16_t ave_pace; // 平均配速 s/100m
  307. uint8_t frequency; // 频率
  308. } workout_swim_info_t;
  309. typedef struct
  310. {
  311. /* uint32_t strokes_frq; // 划水频率
  312. uint8_t main_posture; // 主泳姿
  313. uint8_t laps; // 趟数
  314. uint16_t last_swolf; // 最近一趟swolf
  315. uint16_t avg_swolf; // 平均
  316. uint16_t avg_pace; // 平均
  317. uint16_t strokes; // 划水次数
  318. uint16_t total_rest_time; // 总休息时间 */
  319. float total_distance; // meters
  320. float total_calories; // Kcal
  321. float strokes;
  322. float laps;
  323. float swim_time;
  324. float stroke_freq;
  325. float is_pause;
  326. } rt_swim_info_t;
  327. typedef struct
  328. {
  329. int16_t cur_altitude;
  330. int16_t avg_altitude;
  331. int16_t max_altitude;
  332. int16_t min_altitude;
  333. uint16_t cumulative_rise; // 累计上升 m
  334. uint16_t cumulative_fall; // 累计下降 m
  335. } altitude_info_t;
  336. typedef struct
  337. {
  338. int16_t cur_altitude;
  339. int16_t avg_altitude;
  340. int16_t max_altitude;
  341. int16_t min_altitude;
  342. } wk_altitude_info_t;
  343. typedef struct
  344. {
  345. float altitude;
  346. } rt_altitude_t;
  347. typedef struct
  348. {
  349. float orientation;
  350. } aem_rt_magnetism_info_t;
  351. typedef struct
  352. {
  353. float altitude;
  354. uint32_t air_pressure;
  355. } aem_rt_barometer_info_t;
  356. typedef enum
  357. {
  358. SPORT_IDLE = 0,
  359. SPORT_START,
  360. SPORT_PAUSE,
  361. SPORT_CONTINUE,
  362. SPORT_STOP,
  363. SPORT_MAX_UNKNOW,
  364. } sports_status_e;
  365. typedef struct
  366. {
  367. uint8_t ver;
  368. uint8_t is_on;
  369. uint8_t warn_value;
  370. } sports_hr_warning_t;
  371. typedef struct
  372. {
  373. uint32_t steps;
  374. uint32_t calories;
  375. uint32_t distance; // 距离 单位m
  376. uint32_t times; // 当天运动时长,s
  377. } activity_rt_info_t;
  378. typedef struct
  379. {
  380. uint32_t steps;
  381. uint32_t durations;
  382. uint32_t total_kcal;
  383. uint32_t distances;
  384. } activity_data_t;
  385. typedef enum
  386. {
  387. GESTURE_NONE = 0,
  388. GESTURE_WRIST_RAISE, // 抬腕
  389. GESTURE_PALMING, // 翻腕
  390. GESTURE_COVER_HAND, // TP捂手灭屏
  391. } gesture_status_type_e;
  392. typedef struct
  393. {
  394. uint32_t pressure_value;
  395. int16_t altitude_value;
  396. } aem_baro_data_t;
  397. typedef struct
  398. {
  399. double lat;
  400. double lon;
  401. bool valid;
  402. } aem_gps_info_t;
  403. #pragma pack(pop)
  404. typedef struct
  405. {
  406. uint32_t sleeping_hr_cnt;
  407. uint32_t sleeping_hr_sum;
  408. uint8_t last_sleeping_hr;
  409. } aem_hr_sleeping_t;
  410. #define MIN_HR_NUM 5
  411. typedef struct
  412. {
  413. uint32_t resting_hr_cnt;
  414. uint32_t resting_hr_sum;
  415. uint8_t avg_hr_f;
  416. uint8_t min_heart_rate[MIN_HR_NUM];
  417. hr_resting_result_t hr_strategy_resting_hr_result;
  418. aem_hr_sleeping_t hr_strategy_sleeping_hr_result;
  419. } hr_algo_resting_t;
  420. typedef enum
  421. {
  422. WORKOUT_GPS_STATE_CLOSED = 0,
  423. WORKOUT_GPS_STATE_SEARCHING,
  424. WORKOUT_GPS_STATE_LOCATE,
  425. WORKOUT_GPS_STATE_FAIL,
  426. WORKOUT_GPS_STATE_ERROR,
  427. WORKOUT_GPS_STATE_AGPS,
  428. WORKOUT_GPS_STATE_MOVE_TO_OPEN,
  429. WORKOUT_GPS_STATE_MAX
  430. } workout_gps_state_e;
  431. typedef enum
  432. {
  433. WORKOUT_GPS_SIGNAL_NONE = 0,
  434. WORKOUT_GPS_SIGNAL_LEVEL_1,
  435. WORKOUT_GPS_SIGNAL_LEVEL_2,
  436. WORKOUT_GPS_SIGNAL_LEVEL_3,
  437. WORKOUT_GPS_SIGNAL_LEVEL_4,
  438. WORKOUT_GPS_SIGNAL_LEVEL_5,
  439. WORKOUT_GPS_SIGNAL_LEVEL_MAX,
  440. } workout_gps_signal_e;
  441. typedef struct
  442. {
  443. aem_gps_info_t info;
  444. workout_gps_signal_e signal;
  445. workout_gps_state_e state;
  446. } aem_gps_rt_info_t;
  447. typedef struct
  448. {
  449. workout_gps_state_e state;
  450. uint8_t signal;
  451. } workout_gps_state_info_t;
  452. #define is_sports_status_valid(a) ((SPORT_IDLE <= (a)) && ((a) < SPORT_MAX_UNKNOW))
  453. #define is_workout_type_valid(a) ((WORKOUT_ID_BEGIN <= (a)) && ((a) < WORKOUT_ID_MAX))
  454. #endif