#ifndef _AEM_WORKOUT_IF_H_ #define _AEM_WORKOUT_IF_H_ #include #include #include "aem_sensor_if.h" #include "aem_core_if.h" #include "res_include.h" // #include "aem_workout_id_info.h" #define WORKOUT_TOP_LIST_MAX 11 #pragma pack(push, 1) // 运动分类 typedef enum { WORKOUT_CATEGORY_GENERAL, // 日常运动 WORKOUT_CATEGORY_MAX, } workout_category_e; // 运动类型的ID typedef enum { WORKOUT_ID_BEGIN = 0, WORKOUT_OUTDOOR_RUNNING = 0, // 0.户外跑步 WORKOUT_INDOOR_RUNNING, // 室内跑步 WORKOUT_HIKE, // 户外徒步 WORKOUT_OUTDOOR_CYCLE, // 户外骑行 WORKOUT_INDOOR_CYCLE, // 室内骑行 WORKOUT_POOL_SWIM, // 泳池游泳 WORKOUT_OPEN_WATER, // 开放水域游泳 WORKOUT_BADMINTON, // 羽毛球 WORKOUT_YOGA, // 瑜伽 WORKOUT_TENNIS, // 网球 WORKOUT_ROPE, // 跳绳 WORKOUT_ID_MAX, WORKOUT_ID_INVALID = 0xff, } workout_id_e; typedef enum { WORKOUT_FIELD_BEGIN = 0, WORKOUT_DURATION_FIELD = 0, // 运动时长 WORKOUT_DISTANCE_FIELD, // 距离 WORKOUT_CALORIE_FIELD, // 卡路里 WORKOUT_RT_HR_FIELD, // 实时心率 WORKOUT_MAX_HR_FIELD, // 最大心率 WORKOUT_MIN_HR_FIELD, // 最小心率 WORKOUT_RT_PACE_FIELD, // 实时配速 WORKOUT_AVERAGE_PACE_FIELD, // 平均配速 WORKOUT_SPEED_FIELD, // 速度 WORKOUT_AVERAGE_SPEED_FIELD, // 平均速度 WORKOUT_STEPS_FIELD, // 步数(步) WORKOUT_RT_STRIDE_FREQ_FIELD, // 实时步频 WORKOUT_AVG_CADENCE_FIELD, // 平均步频 WORKOUT_ALTITUDE_FIELD, // 海拔高度 WORKOUT_MAX_ALTITUDE_FIELD, // 最高海拔 WORKOUT_MIN_ALTITUDE_FIELD, // 最低海拔 WORKOUT_CUMULATIVE_RISE_FIELD, // 累计上升 WORKOUT_LAPS_FIELD, // 趟数 WORKOUT_ROPES_FIELD, // 跳绳数 WORKOUT_MAX_FIELD_UNKNOW, WORKOUT_PARAM_INVALID = 0xff, } workout_data_type_e; typedef enum { WORKOUT_RUN = 0, WORKOUT_PAUSE = 1, } workout_state_e; typedef enum { UNIT_STR_KCAL, // 千卡, kcal UNIT_STR_DISTANCE_M, // 距离, 米 UNIT_STR_DISTANCE_YARD, // 距离, 码 UNIT_STR_DISTANCE_KM, // 距离, 千米 UNIT_STR_DISTANCE_MILE, // 距离, 英里 UNIT_STR_PACE_KM, // 配速, /千米 UNIT_STR_PACE_MILE, // 配速, /英里 UNIT_STR_SPEED_KMH, // 速度, 千米/时 UNIT_STR_SPEED_MMH, // 速度, 英里/时 UNIT_STR_LAPS, // 游泳趟数 UNIT_STR_ROPES, // 跳绳次数 UNIT_STR_STEPS, // 步数 UNIT_STR_SPM, // 步频 UNIT_STR_BPM, // 心率 } unit_type_e; // 单个运动的信息 typedef struct { uint8_t id; uint8_t category_id; uint32_t name_id; uint32_t icon_id; uint32_t big_icon_id; uint32_t bk_color; void *icon; void *big_icon; res_string_id_e name_key; // attribs uint32_t attr_gps : 1; // 需要GPS定位 uint32_t attr_pool : 1; // 需要设置泳池长度 uint32_t attr_running : 1; // 跑步类运动 uint32_t attr_cycle : 1; // 骑行类运动 } workout_info_t; typedef enum { WORKOUT_OK = 0, WORKOUT_FAIL, WORKOUT_INVALID_PARAM, WORKOUT_TYPE_ALGO_NO_SUPPORT, WORKOUT_OUT_OF_MEMORY, WORKOUT_TAG_NOT_EXIST, } workout_error_e; // 运动开关设置 typedef struct { uint8_t auto_start; // 自动识别, 0x00:关闭; 0x01:打开; 0xff:忽略 uint8_t auto_pause; // 自动暂停, 0x00:关闭; 0x01:打开; 0xff:忽略 uint8_t auto_stop; // 自动结束, 0x00:关闭; 0x01:打开; 0xff:忽略 uint8_t hr_alarm_enable; // 心率报警值是否开启, 0x00:关闭; 0x01:开启; 0xff:忽略 uint8_t hr_alarm_value; // 心率报警值 } workout_switch_settings_t; typedef struct { uint8_t s_workout_toplist[11]; workout_switch_settings_t switch_settings; uint8_t pool_length; // 泳池长度 } aem_workout_settings_t; typedef enum { GOAL_SETTING_NO_GOAL = 0, // 无目标 GOAL_SETTING_DURAION, // 运动时长 GOAL_SETTING_DISTANCE, // 运动距离 GOAL_SETTING_CALORIE, // 消耗 GOAL_SETTING_COUNT, // 次数,跳绳等 GOAL_SETTING_MAX_UNKNOW, } workout_goal_type_e; typedef enum { WORKOUT_REMIND_BEGIN = 0, WORKOUT_REMIND_NO_REMIND = 0, // 无提醒 WORKOUT_REMIND_DURATION, // 时间 WORKOUT_REMIND_DISTANCE, // 距离 WORKOUT_REMIND_COUNT, // 次数,跳绳等 WORKOUT_REMIND_MAX_UNKNOW, } workout_remind_type_e; typedef struct { uint16_t distance; // 距离, km uint16_t durMin; // minutes uint16_t count; workout_remind_type_e active_remind; // 选中提醒类型 } workout_remind_setting_t; typedef struct { uint16_t calories; uint16_t distance; uint16_t durMin; // minutes uint16_t count; workout_goal_type_e active_goal; } workout_goal_settings_t; typedef struct { workout_id_e id; workout_goal_settings_t goal; workout_remind_setting_t remind; } workout_goal_remind_t; typedef struct { workout_id_e workout_id; // 运动类型 workout_goal_settings_t goal; // 运动目标 workout_remind_setting_t remind; // 运动提醒 sports_status_e status; // 运动状态 bool is_save; // 运动结束后是否保存运动记录 bool gps_enable; uint16_t target_pace; // 目标配速 } workout_state_t; typedef struct { workout_id_e workout_id; // 运动类型 uint32_t start_time; // 开始时间 uint32_t end_time; // 结束时间 uint32_t sport_time; // 运动时长 uint32_t paused_time; uint16_t active_durations; // 单位 秒 uint32_t calories; // 单位 大卡 uint32_t steps; // 重复次数:步数或次数, 或跳绳次数 uint32_t distances; // 单位 米 //表示实际运动过程中的值,不包括暂停时的增量 uint32_t smart_distances; // 智能陪跑距离 workout_rt_hr_t hr; rt_speed_info_t speed; // 速度信息 rt_pace_info_t pace; // 配速信息 altitude_info_t altitude; rt_swim_info_t swim; // 游泳信息 aem_gps_rt_info_t gps; uint8_t avg_step_frequency; // 平均步频 uint8_t cur_step_frequency; // 当前步频 uint8_t max_step_frequency; // 最大步频 uint8_t avg_step_len; // 平均步幅 uint8_t max_step_len; // 最大步幅 bool gps_enable; } workout_rt_info_t; typedef struct { workout_id_e workout_id; uint32_t start_time; uint32_t duration; uint32_t distance; uint32_t ropes; uint8_t index; // 运动记录历史index } aem_wk_record_brief_t; typedef struct { uint32_t ai_distance; uint16_t ai_pace; bool enable; } ai_pacer_data_t; typedef struct { workout_id_e workout_id; // 运动ID uint32_t start_time; // 开始时间 uint32_t end_time; // 结束时间 workout_goal_settings_t goal; // 7Bytes ai_pacer_data_t ai_pacer; // 智能陪跑数据,7Bytes uint16_t duration; // 时长s uint16_t calorie; // 卡路里 uint32_t distance; // 距离,单位米 uint8_t hr_max; // 最高心率 uint8_t hr_min; // 最低心率 uint8_t hr_avg; // 平均心率 uint16_t fast_pace; // 最快配速 uint16_t avg_pace; // 平均配速 uint32_t speed_max; // 最大速度,单位m uint32_t speed_avg; // 平均速度 uint16_t steps; // 步数 uint8_t avg_stride; // 平均步幅 cm uint8_t avg_stride_freq; // 平均步频,次/分 int16_t altitude_avg; // 平均海拔 int16_t altitude_max; // 最大海拔 int16_t altitude_min; // 最小海拔 uint16_t cumulative_rise; // 累计上升 uint16_t cumulative_fall; // 累计下降 uint16_t laps; // 趟数 uint16_t ropes; // 跳绳次数 uint8_t gps_enable; } workout_result_t; #pragma pack(pop) #define is_workout_goal_setting(a) ((GOAL_SETTING_DURAION <= (a)) && ((a) < GOAL_SETTING_MAX_UNKNOW)) #define is_workout_remind_valid(a) ((WORKOUT_REMIND_BEGIN <= (a)) && ((a) < WORKOUT_REMIND_MAX_UNKNOW)) #endif //_WORKOUT_IF_H_INCLUDED