#ifndef _AEM_SENSOR_IF_H_ #define _AEM_SENSOR_IF_H_ #include #include #include #define KM_TO_MI 0.6213712 /* 公里转英里 */ #define MI_TO_KM 1.609344 /* 英里转公里 */ #define CONVERT_KM_MI_COEFFICIENT 0.00062137 // 注意此系数是米转英里 #define DAY_ACTVITY_MAX_COUNT 100 #define HOUR_ACTIVITY_MAX_COUNT 10 #define DAY_HR_MAX_COUNT 200 #pragma pack(push, 1) typedef enum { HISTORY_REPORT_REASON_OLNY_UPDATE_BUF, HISTORY_REPORT_REASON_TIME_CHANGE, HISTORY_REPORT_REASON_POWER_OFF } event_report_t; typedef struct { uint8_t enable; uint8_t start_hour; uint8_t start_min; uint8_t end_hour; uint8_t end_min; uint8_t interval_time_min; } aem_setting_auto_meas_t; typedef aem_setting_auto_meas_t aem_setting_hr_auto_meas_t; typedef aem_setting_auto_meas_t aem_setting_bp_auto_meas_t; typedef aem_setting_auto_meas_t aem_setting_spo2_auto_meas_t; typedef aem_setting_auto_meas_t aem_setting_btemp_auto_meas_t; typedef struct { uint32_t step; uint32_t calories; uint32_t distance; } aem_step_info_t; typedef struct { uint8_t hr; uint8_t signalquality; } aem_rt_hr_info_t; typedef struct { uint8_t spo2_value; uint8_t signalquality; } aem_rt_spo2_info_t; typedef struct { uint8_t stress; } aem_rt_stress_info_t; typedef struct { uint8_t enable; uint8_t hr_remind_h; uint8_t hr_remind_l; } aem_hr_remind_t; typedef enum { MAG_ACCURACY_UNRELIABLE, MAG_ACCURACY_LOW, MAG_ACCURACY_MEDIUM, MAG_ACCURACY_HIGH, } aem_mag_accuracy_e; typedef struct { float x; float y; float z; } aem_acc_raw_data_t; typedef enum { PPG_HR, PPG_SPO2, } ppg_type_e; typedef enum { AEM_PPG_OPEN, AEM_PPG_CLOSE, } ppg_op_e; typedef enum { SENSOR_START, SENSOR_PASUE, SENSOR_STOP, } sensor_op_e; typedef struct { ppg_type_e type; ppg_op_e op; } ppgsensor_op_t; typedef struct { uint8_t version; uint8_t enable; uint8_t siesta_enable; uint8_t start_hour; uint8_t start_min; uint8_t end_hour; uint8_t end_min; } aem_setting_sedentary_t; typedef enum { NORMAL_STATUS, CHARGING_STATUS, LOWER_STATUS, SHUTDOWN_STATUS, CHARGING_COMPLETE_STATUS, } charger_status_e; // ar alert type(長時間動作類型)(0 : 未知(unknown), 1 : 走路(walk), 2 : 跑步(run), 3 : 騎車(ride), 4 : 划船機(rowing), 5 : 橢圓機(elliptical)) " typedef enum { AUTO_RECOGNITION_UNKNOWN = 0, AUTO_RECOGNITION_WALKING, AUTO_RECOGNITION_RUNNING, AUTO_RECOGNITION_BIKING, AUTO_RECOGNITION_ROWING, AUTO_RECOGNITION_ELLIPTICALMACHINE, AUTO_RECOGNITION_NUM, } workout_auto_recognition_e; typedef struct { uint8_t level; charger_status_e charger_status; } aem_battery_info_t; #define AEM_SLEEP_STAGE_DATA_MAX_CNT (200) typedef struct { // 入睡时间 uint16_t fall_year; uint8_t fall_month; uint8_t fall_day; uint8_t fall_hour; uint8_t fall_minute; // 起床时间 uint16_t getup_year; uint8_t getup_month; uint8_t getup_day; uint8_t getup_hour; uint8_t getup_minute; uint16_t total_time_mins; // 睡眠总时长 uint16_t wake_mins; // 总清醒时长, 单位:分 uint16_t doze_mins; // 总浅眠时长 uint16_t rem_mins; // 总REM时长 uint16_t deep_mins; // 总深眠时长 uint8_t wake_count; // 清醒次数 uint8_t doze_count; // 浅眠次数 uint8_t rem_count; // 眼动次数 uint8_t deep_count; // 深眠次数 uint8_t sleep_score; // 睡眠得分 } aem_sleep_summary_info_t; typedef enum { AEM_SLEEP_STATE_AWAKE = 1, AEM_SLEEP_STATE_REM, AEM_SLEEP_STATE_DOZE, AEM_SLEEP_STATE_DEEP, } aem_sleep_state_e; typedef struct { uint8_t stage; // 阶段 1:醒着 2:浅睡 3:深睡 4:快速眼动 uint8_t duration; // 持续时长 } aem_sleep_stage_t; typedef struct { uint16_t item_count; aem_sleep_stage_t data[AEM_SLEEP_STAGE_DATA_MAX_CNT]; } aem_sleep_stage_data_t; typedef struct { aem_sleep_summary_info_t summary; aem_sleep_stage_data_t stage; } aem_rt_sleep_info_t; #define HEALTH_STRESS_MAX 100 #define PRESS_MAX_LEVEL 4 typedef enum { AEM_TWIST_SCREEN_OFF, AEM_TWIST_SCREEN_ON, AEM_TWIST_NO_ACTION, AEM_TWIST_MAX, } twist_evt_t; typedef enum { AEM_SLEEP_DEEP, AEM_SLEEP_RESTLESS, AEM_SLEEP_AWARE, AEM_SLEEP_INVIALD, AEM_SLEEP_MAX, } sleep_state_e; typedef enum { HANDS_WAKEUP_OFF, HANDS_WAKEUP_ON, } hands_wakeup_type_t; typedef struct { hands_wakeup_type_t status; } aem_hands_wakeup_t; typedef struct { uint8_t active_kcal; uint8_t resting_kcal; } activity_kcal_t; typedef struct { uint8_t activity_type; uint8_t time_minute; } activity_intensity_t; typedef struct { uint32_t timestamp; uint32_t steps; uint32_t calories; uint32_t stand; uint32_t times; uint32_t distance; // 距离m } aem_rt_activity_info_t; typedef struct { uint16_t steps; uint16_t calories; uint16_t distance; } activity_data_item_t; typedef enum { ACTIVITY_NO_REMIND = 0, ACTIVITY_REMIND_CALORIES, ACTIVITY_REMIND_STEP, ACTIVITY_REMIND_TIMES, } activity_remind_type_e; typedef struct { uint16_t steps; uint16_t calories; uint16_t times; } aem_activity_goal_t; typedef struct { uint16_t year; uint8_t mon; uint8_t day; aem_activity_goal_t goal; bool is_step_completed; bool is_calories_completed; bool is_times_completed; } activity_remind_state_t; typedef struct { activity_remind_type_e remind_type; uint8_t active_flag; uint32_t value; } activity_remind_t; typedef struct { uint16_t steps; uint16_t distances; uint16_t total_kcal; uint16_t dur_secs; } act_every_xmin_t; typedef struct { uint8_t current_resting_hr; uint8_t yesterday_resting_hr; } hr_resting_result_t; typedef struct { uint8_t cur_heart_rate; uint8_t max_heart_rate; uint8_t min_heart_rate; uint8_t avg_heart_rate; } workout_rt_hr_t; typedef struct { uint16_t cur_speed; uint16_t avg_speed; uint16_t max_speed; } rt_speed_info_t; typedef struct { uint16_t cur_km_pace; // 当前公里配速 s/km uint16_t max_km_pace; // 最快配速s/km,值最小公里配速最快 uint16_t avg_km_pace; // 平均配速s/km } rt_pace_info_t; typedef enum { POSTURE_MEDLEY = 0, // 混合泳 POSTURE_FREESTYLE, // 自由泳 POSTURE_BREASTSTROKE, // 蛙泳 POSTURE_BACKSTROKE, // 其他(仰泳) POSTURE_BUTTERFLYSTROKE, // 其他(蝶泳) POSTURE_OTHERS, // 其他 POSTURE_ALL, } swim_posture_e; // 运动游泳数据 typedef struct { uint8_t laps; // 趟数 uint8_t posture; // 泳姿 uint16_t distance; // 距离 uint16_t strokes; // 划水次数 uint16_t swim_time; // 游泳时长 uint16_t swolf; // 50米的游泳时长+50米的划水次数 uint32_t calories; // 卡路里 uint16_t pace; // 配速 s/100m uint16_t ave_pace; // 平均配速 s/100m uint8_t frequency; // 频率 } workout_swim_info_t; typedef struct { /* uint32_t strokes_frq; // 划水频率 uint8_t main_posture; // 主泳姿 uint8_t laps; // 趟数 uint16_t last_swolf; // 最近一趟swolf uint16_t avg_swolf; // 平均 uint16_t avg_pace; // 平均 uint16_t strokes; // 划水次数 uint16_t total_rest_time; // 总休息时间 */ float total_distance; // meters float total_calories; // Kcal float strokes; float laps; float swim_time; float stroke_freq; float is_pause; } rt_swim_info_t; typedef struct { int16_t cur_altitude; int16_t avg_altitude; int16_t max_altitude; int16_t min_altitude; uint16_t cumulative_rise; // 累计上升 m uint16_t cumulative_fall; // 累计下降 m } altitude_info_t; typedef struct { int16_t cur_altitude; int16_t avg_altitude; int16_t max_altitude; int16_t min_altitude; } wk_altitude_info_t; typedef struct { float altitude; } rt_altitude_t; typedef struct { float orientation; } aem_rt_magnetism_info_t; typedef struct { float altitude; uint32_t air_pressure; } aem_rt_barometer_info_t; typedef enum { SPORT_IDLE = 0, SPORT_START, SPORT_PAUSE, SPORT_CONTINUE, SPORT_STOP, SPORT_MAX_UNKNOW, } sports_status_e; typedef struct { uint8_t ver; uint8_t is_on; uint8_t warn_value; } sports_hr_warning_t; typedef struct { uint32_t steps; uint32_t calories; uint32_t distance; // 距离 单位m uint32_t times; // 当天运动时长,s } activity_rt_info_t; typedef struct { uint32_t steps; uint32_t durations; uint32_t total_kcal; uint32_t distances; } activity_data_t; typedef enum { GESTURE_NONE = 0, GESTURE_WRIST_RAISE, // 抬腕 GESTURE_PALMING, // 翻腕 GESTURE_COVER_HAND, // TP捂手灭屏 } gesture_status_type_e; typedef struct { uint32_t pressure_value; int16_t altitude_value; } aem_baro_data_t; typedef struct { double lat; double lon; bool valid; } aem_gps_info_t; #pragma pack(pop) typedef struct { uint32_t sleeping_hr_cnt; uint32_t sleeping_hr_sum; uint8_t last_sleeping_hr; } aem_hr_sleeping_t; #define MIN_HR_NUM 5 typedef struct { uint32_t resting_hr_cnt; uint32_t resting_hr_sum; uint8_t avg_hr_f; uint8_t min_heart_rate[MIN_HR_NUM]; hr_resting_result_t hr_strategy_resting_hr_result; aem_hr_sleeping_t hr_strategy_sleeping_hr_result; } hr_algo_resting_t; typedef enum { WORKOUT_GPS_STATE_CLOSED = 0, WORKOUT_GPS_STATE_SEARCHING, WORKOUT_GPS_STATE_LOCATE, WORKOUT_GPS_STATE_FAIL, WORKOUT_GPS_STATE_ERROR, WORKOUT_GPS_STATE_AGPS, WORKOUT_GPS_STATE_MOVE_TO_OPEN, WORKOUT_GPS_STATE_MAX } workout_gps_state_e; typedef enum { WORKOUT_GPS_SIGNAL_NONE = 0, WORKOUT_GPS_SIGNAL_LEVEL_1, WORKOUT_GPS_SIGNAL_LEVEL_2, WORKOUT_GPS_SIGNAL_LEVEL_3, WORKOUT_GPS_SIGNAL_LEVEL_4, WORKOUT_GPS_SIGNAL_LEVEL_5, WORKOUT_GPS_SIGNAL_LEVEL_MAX, } workout_gps_signal_e; typedef struct { aem_gps_info_t info; workout_gps_signal_e signal; workout_gps_state_e state; } aem_gps_rt_info_t; typedef struct { workout_gps_state_e state; uint8_t signal; } workout_gps_state_info_t; #define is_sports_status_valid(a) ((SPORT_IDLE <= (a)) && ((a) < SPORT_MAX_UNKNOW)) #define is_workout_type_valid(a) ((WORKOUT_ID_BEGIN <= (a)) && ((a) < WORKOUT_ID_MAX)) #endif