From: penglei <1624952103@qq.com> Date: Thu, 11 Apr 2024 10:32:26 +0000 (+0800) Subject: 补交优化运动模式切换函数,添加静态模式切换函数 X-Git-Tag: release_V1.2.70_20241020_135402~1214 X-Git-Url: http://git.snicker.com.cn/css/static/gitweb.css?a=commitdiff_plain;h=333964805d8c630e665a617cb8afb58fcdbf1a5f;p=mirrors%2FFD230.git 补交优化运动模式切换函数,添加静态模式切换函数 --- diff --git a/code/sdk/drivers/peripheral/cywee/Inc/cywee_hal.h b/code/sdk/drivers/peripheral/cywee/Inc/cywee_hal.h index 9059742d9..9a9e69886 100644 --- a/code/sdk/drivers/peripheral/cywee/Inc/cywee_hal.h +++ b/code/sdk/drivers/peripheral/cywee/Inc/cywee_hal.h @@ -43,6 +43,14 @@ extern void CWM_OS_restoreData(uint8_t* data, uint32_t len); #define SPORT_ACTIVE_MODE_FREE_TRAINING 5001 // 自由運動 FreeTraining 5001 #define SPORT_ACTIVE_MODE_AR_ALERT 1001 // 長時間動作偵測 AR alert 1001 +#define INACTIVITY_MODE_NOTHING 0 // 无作用 +#define INACTIVITY_MODE_SEDENTARY 1 // 久坐和有效站立 +#define INACTIVITY_MODE_SLEEPING 2 // 睡眠 +#define INACTIVITY_MODE_SEDENTARY_AND_NAP 3 // 久坐、有效站立和小睡 +#define INACTIVITY_MODE_NAP 4 + + + #pragma pack(1) /** @@ -447,7 +455,27 @@ typedef struct int max_pace; int ar_alert_type; int MHR_zone; -}cywee_result_t; +}cywee_activity_result_t; + +typedef struct +{ + int inactivity_mode; + int sedentary_status; + int sleep_status; + int nap_status; + int stand_freq; + int month; + int day; + int hour; + int minute; + int total_sleep_time; + int total_nap_time; + int total_mild_sleep_time; + int total_deep_sleep_time; + int total_wake_time; + int total_rem_sleep_time; +}cywee_inactivity_result_t; + #pragma pack() typedef enum{ CYWEE_MSG_TYPE_NORMAL_UPDATE, @@ -458,6 +486,11 @@ typedef enum{ CYWEE_MSG_TYPE_FREE_TRAINING_UPDATE, CYWEE_MSG_TYPE_AR_ALERT_UPDATE, CYWEE_MSG_TYPE_EXTRA_INFO_UPDATE, + CYWEE_MSG_TYPE_SEDENTARY_UPDATE, + CYWEE_MSG_TYPE_SLEEPING_UPDATE, + CYWEE_MSG_TYPE_SLEEPING_ACCUMULATE_TIME_UPDATE, + CYWEE_MSG_TYPE_NAP_UPDATE, + CYWEE_MSG_TYPE_NAP_ACCUMULATE_TIME_UPDATE } cywee_msg_type_t; diff --git a/code/sdk/drivers/peripheral/cywee/service/cywee_service.c b/code/sdk/drivers/peripheral/cywee/service/cywee_service.c index 03bce95fe..50b7f7eeb 100644 --- a/code/sdk/drivers/peripheral/cywee/service/cywee_service.c +++ b/code/sdk/drivers/peripheral/cywee/service/cywee_service.c @@ -60,84 +60,149 @@ static void cywee_service_check_timer_callback(void* data); void cywee_msg_callback(uint8_t msg_type, uint8_t *msg_data, int32_t msg_datalen) { PRINT("cywee_msg_callback\r\n"); - cywee_result_t c_result_t; - memcpy(&c_result_t, msg_data, sizeof(cywee_result_t)); + cywee_activity_result_t c_activity_result_t; + cywee_inactivity_result_t c_inactivity_result_t; switch(msg_type) { //一般模式 case CYWEE_MSG_TYPE_NORMAL_UPDATE: - PRINT("CYWEE_MSG_TYPE_NORMAL_UPDATE"); + PRINT("CYWEE_MSG_TYPE_NORMAL_UPDATE\r\n"); + memcpy(&c_activity_result_t, msg_data, sizeof(cywee_activity_result_t)); PRINT("activit_mode[%d], steps[%d], distance[%d], calories[%d], step frequency[%d], step length[%d], pace[%d], BMR calories[%d], is_pause[%d],len[%d]\n", - c_result_t.activity_mode,c_result_t.steps,c_result_t.distance,c_result_t.calories,c_result_t.step_frequency, - c_result_t.step_length,c_result_t.pace,c_result_t.BMR_calories,c_result_t.is_pause,sizeof(cywee_result_t)); - CustomEventPublish(TOPIC_EVENT_NORMAL_UPDATE,&c_result_t,sizeof(cywee_result_t)); + c_activity_result_t.activity_mode,c_activity_result_t.steps,c_activity_result_t.distance,c_activity_result_t.calories,c_activity_result_t.step_frequency, + c_activity_result_t.step_length,c_activity_result_t.pace,c_activity_result_t.BMR_calories,c_activity_result_t.is_pause,sizeof(cywee_activity_result_t)); + CustomEventPublish(TOPIC_EVENT_NORMAL_UPDATE,&c_activity_result_t,sizeof(cywee_activity_result_t)); break; //跑步机模式 case CYWEE_MSG_TYPE_TREADMILL_UPDATE: - PRINT("CYWEE_MSG_TYPE_TREADMILL_UPDATE"); + PRINT("CYWEE_MSG_TYPE_TREADMILL_UPDATE\r\n"); + memcpy(&c_activity_result_t, msg_data, sizeof(cywee_activity_result_t)); PRINT("activit_mode[%d], steps[%d], distance[%d], calories[%d], step frequency[%d], step length[%d], pace[%d], BMR calories[%d], is_pause[%d],len[%d]\n", - c_result_t.activity_mode,c_result_t.steps,c_result_t.distance,c_result_t.calories,c_result_t.step_frequency, - c_result_t.step_length,c_result_t.pace,c_result_t.BMR_calories,c_result_t.is_pause,sizeof(cywee_result_t)); - CustomEventPublish(TOPIC_EVENT_TREADMILL_UPDATE,&c_result_t,sizeof(cywee_result_t)); + c_activity_result_t.activity_mode,c_activity_result_t.steps,c_activity_result_t.distance,c_activity_result_t.calories,c_activity_result_t.step_frequency, + c_activity_result_t.step_length,c_activity_result_t.pace,c_activity_result_t.BMR_calories,c_activity_result_t.is_pause,sizeof(cywee_activity_result_t)); + CustomEventPublish(TOPIC_EVENT_TREADMILL_UPDATE,&c_activity_result_t,sizeof(cywee_activity_result_t)); break; //户外跑步模式 case CYWEE_MSG_TYPE_OUTDOOR_RUNNING_UPDATE: - PRINT("CYWEE_MSG_TYPE_OUTDOOR_RUNNING_UPDATE"); + PRINT("CYWEE_MSG_TYPE_OUTDOOR_RUNNING_UPDATE\r\n"); + memcpy(&c_activity_result_t, msg_data, sizeof(cywee_activity_result_t)); PRINT("activit_mode[%d], steps[%d], distance[%d], calories[%d], step frequency[%d], step length[%d], pace[%d], BMR calories[%d], is_pause[%d],len[%d]\n", - c_result_t.activity_mode,c_result_t.steps,c_result_t.distance,c_result_t.calories,c_result_t.step_frequency, - c_result_t.step_length,c_result_t.pace,c_result_t.BMR_calories,c_result_t.is_pause,sizeof(cywee_result_t)); - CustomEventPublish(TOPIC_EVENT_OUTDOOR_RUNNING_UPDATE,&c_result_t,sizeof(cywee_result_t)); + c_activity_result_t.activity_mode,c_activity_result_t.steps,c_activity_result_t.distance,c_activity_result_t.calories,c_activity_result_t.step_frequency, + c_activity_result_t.step_length,c_activity_result_t.pace,c_activity_result_t.BMR_calories,c_activity_result_t.is_pause,sizeof(cywee_activity_result_t)); + CustomEventPublish(TOPIC_EVENT_OUTDOOR_RUNNING_UPDATE,&c_activity_result_t,sizeof(cywee_activity_result_t)); break; //室内跑步模式 case CYWEE_MSG_TYPE_INDOOR_RUNNING_UPDATE: - PRINT("CYWEE_MSG_TYPE_INDOOR_RUNNING_UPDATE"); + PRINT("CYWEE_MSG_TYPE_INDOOR_RUNNING_UPDATE\r\n"); + memcpy(&c_activity_result_t, msg_data, sizeof(cywee_activity_result_t)); PRINT("activit_mode[%d], steps[%d], distance[%d], calories[%d], step frequency[%d], step length[%d], pace[%d], BMR calories[%d], is_pause[%d],len[%d]\n", - c_result_t.activity_mode,c_result_t.steps,c_result_t.distance,c_result_t.calories,c_result_t.step_frequency, - c_result_t.step_length,c_result_t.pace,c_result_t.BMR_calories,c_result_t.is_pause,sizeof(cywee_result_t)); - CustomEventPublish(TOPIC_EVENT_INDOOR_RUNNING_UPDATE,&c_result_t,sizeof(cywee_result_t)); + c_activity_result_t.activity_mode,c_activity_result_t.steps,c_activity_result_t.distance,c_activity_result_t.calories,c_activity_result_t.step_frequency, + c_activity_result_t.step_length,c_activity_result_t.pace,c_activity_result_t.BMR_calories,c_activity_result_t.is_pause,sizeof(cywee_activity_result_t)); + CustomEventPublish(TOPIC_EVENT_INDOOR_RUNNING_UPDATE,&c_activity_result_t,sizeof(cywee_activity_result_t)); break; //防误触计步模式 case CYWEE_MSG_TYPE_FITNESS_PEDOMETERR_UPDATE: - PRINT("CYWEE_MSG_TYPE_FITNESS_PEDOMETERR_UPDATE"); + PRINT("CYWEE_MSG_TYPE_FITNESS_PEDOMETERR_UPDATE\r\n"); + memcpy(&c_activity_result_t, msg_data, sizeof(cywee_activity_result_t)); PRINT("activit_mode[%d], steps[%d], distance[%d], calories[%d], step frequency[%d], step length[%d], pace[%d], BMR calories[%d], is_pause[%d],len[%d]\n", - c_result_t.activity_mode,c_result_t.steps,c_result_t.distance,c_result_t.calories,c_result_t.step_frequency, - c_result_t.step_length,c_result_t.pace,c_result_t.BMR_calories,c_result_t.is_pause,sizeof(cywee_result_t)); - CustomEventPublish(TOPIC_EVENT_FITNESS_PEDOMETERR_UPDATE,&c_result_t,sizeof(cywee_result_t)); + c_activity_result_t.activity_mode,c_activity_result_t.steps,c_activity_result_t.distance,c_activity_result_t.calories,c_activity_result_t.step_frequency, + c_activity_result_t.step_length,c_activity_result_t.pace,c_activity_result_t.BMR_calories,c_activity_result_t.is_pause,sizeof(cywee_activity_result_t)); + CustomEventPublish(TOPIC_EVENT_FITNESS_PEDOMETERR_UPDATE,&c_activity_result_t,sizeof(cywee_activity_result_t)); break; //自由运动模式 case CYWEE_MSG_TYPE_FREE_TRAINING_UPDATE: - PRINT("CYWEE_MSG_TYPE_FREE_TRAINING_UPDATE"); + PRINT("CYWEE_MSG_TYPE_FREE_TRAINING_UPDATE\r\n"); + memcpy(&c_activity_result_t, msg_data, sizeof(cywee_activity_result_t)); PRINT("activit_mode[%d], calories[%d], duration[%d], MHR_zone[%d],len[%d]\n", - c_result_t.activity_mode,c_result_t.calories,c_result_t.duration,c_result_t.MHR_zone,sizeof(c_result_t)); - CustomEventPublish(TOPIC_EVENT_FREE_TRAINING_UPDATE,&c_result_t,sizeof(c_result_t)); + c_activity_result_t.activity_mode,c_activity_result_t.calories,c_activity_result_t.duration,c_activity_result_t.MHR_zone,sizeof(cywee_activity_result_t)); + CustomEventPublish(TOPIC_EVENT_FREE_TRAINING_UPDATE,&c_activity_result_t,sizeof(cywee_activity_result_t)); break; //长时间动作侦测模式 case CYWEE_MSG_TYPE_AR_ALERT_UPDATE: - PRINT("CYWEE_MSG_TYPE_AR_ALERT_UPDATE"); + PRINT("CYWEE_MSG_TYPE_AR_ALERT_UPDATE\r\n"); + memcpy(&c_activity_result_t, msg_data, sizeof(cywee_activity_result_t)); PRINT("activit_mode[%d], ar alert type[%d], len[%d]\n", - c_result_t.activity_mode,c_result_t.ar_alert_type,sizeof(cywee_result_t)); - CustomEventPublish(TOPIC_EVENT_AR_ALERT_UPDATE,&c_result_t,sizeof(cywee_result_t)); + c_activity_result_t.activity_mode,c_activity_result_t.ar_alert_type,sizeof(cywee_activity_result_t)); + CustomEventPublish(TOPIC_EVENT_AR_ALERT_UPDATE,&c_activity_result_t,sizeof(cywee_activity_result_t)); break; //额外信息 case CYWEE_MSG_TYPE_EXTRA_INFO_UPDATE: - PRINT("CYWEE_MSG_TYPE_EXTRA_INFO_UPDATE"); - PRINT("average step frequency[%d], average step length[%d], average pace[%d], max step frequency[%d], max pace[%d]\n", - c_result_t.avg_step_freq,c_result_t.avg_step_len,c_result_t.avg_pace,c_result_t.max_step_freq,c_result_t.max_pace,sizeof(cywee_result_t)); - CustomEventPublish(TOPIC_EVENT_EXTRA_INFO_UPDATE,&c_result_t,sizeof(cywee_result_t)); + PRINT("CYWEE_MSG_TYPE_EXTRA_INFO_UPDATE\r\n"); + memcpy(&c_activity_result_t, msg_data, sizeof(cywee_activity_result_t)); + PRINT("average step frequency[%d], average step length[%d], average pace[%d], max step frequency[%d], max pace[%d], len[%d]\n", + c_activity_result_t.avg_step_freq,c_activity_result_t.avg_step_len,c_activity_result_t.avg_pace,c_activity_result_t.max_step_freq,c_activity_result_t.max_pace,sizeof(cywee_activity_result_t)); + CustomEventPublish(TOPIC_EVENT_EXTRA_INFO_UPDATE,&c_activity_result_t,sizeof(cywee_activity_result_t)); break; + + //久坐 + case CYWEE_MSG_TYPE_SEDENTARY_UPDATE: + PRINT("CYWEE_MSG_TYPE_SEDENTARY_UPDATE\r\n"); + memcpy(&c_inactivity_result_t, msg_data, sizeof(cywee_inactivity_result_t)); + PRINT("inactivity_mode_number[%d], sedentary status[%d], stand freq[%d], len[%d]\n", + c_inactivity_result_t.inactivity_mode,c_inactivity_result_t.sedentary_status, + c_inactivity_result_t.stand_freq,sizeof(cywee_inactivity_result_t)); + //CustomEventPublish(TOPIC_EVENT_EXTRA_INFO_UPDATE,&c_activity_result_t,sizeof(cywee_activity_result_t)); + break; + + //睡眠 + case CYWEE_MSG_TYPE_SLEEPING_UPDATE: + PRINT("CYWEE_MSG_TYPE_SLEEPING_UPDATE\r\n"); + memcpy(&c_inactivity_result_t, msg_data, sizeof(cywee_inactivity_result_t)); + PRINT("inactivity_mode_number[%d], sleep status[%d], month[%d], day[%d], hour[%d], min[%d], len[%d]\n", + c_inactivity_result_t.inactivity_mode,c_inactivity_result_t.sleep_status, + c_inactivity_result_t.month,c_inactivity_result_t.day, + c_inactivity_result_t.hour,c_inactivity_result_t.minute, + sizeof(cywee_inactivity_result_t)); + //CustomEventPublish(TOPIC_EVENT_EXTRA_INFO_UPDATE,&c_activity_result_t,sizeof(cywee_activity_result_t)); + break; + + //睡眠累计 + case CYWEE_MSG_TYPE_SLEEPING_ACCUMULATE_TIME_UPDATE: + PRINT("CYWEE_MSG_TYPE_SLEEPING_ACCUMULATE_TIME_UPDATE\r\n"); + memcpy(&c_inactivity_result_t, msg_data, sizeof(cywee_inactivity_result_t)); + PRINT("inactivity_mode_number[%d], total sleep time[%d], total nap time[%d], total deep sleep time[%d], total wake time[%d], total rem sleep time[%d], len[%d]\n", + c_inactivity_result_t.inactivity_mode,c_inactivity_result_t.total_sleep_time,c_inactivity_result_t.total_mild_sleep_time, + c_inactivity_result_t.total_deep_sleep_time,c_inactivity_result_t.total_wake_time,c_inactivity_result_t.total_rem_sleep_time, + c_inactivity_result_t.stand_freq,sizeof(cywee_inactivity_result_t)); + //CustomEventPublish(TOPIC_EVENT_EXTRA_INFO_UPDATE,&c_activity_result_t,sizeof(cywee_activity_result_t)); + break; + + //小睡 + case CYWEE_MSG_TYPE_NAP_UPDATE: + PRINT("CYWEE_MSG_TYPE_NAP_UPDATE\r\n"); + memcpy(&c_inactivity_result_t, msg_data, sizeof(cywee_inactivity_result_t)); + PRINT("inactivity_mode_number[%d], nap status[%d], month[%d], day[%d], hour[%d], min[%d], len[%d]\n", + c_inactivity_result_t.inactivity_mode,c_inactivity_result_t.nap_status,c_inactivity_result_t.month, + c_inactivity_result_t.day,c_inactivity_result_t.hour,c_inactivity_result_t.minute,sizeof(cywee_inactivity_result_t)); + //CustomEventPublish(TOPIC_EVENT_EXTRA_INFO_UPDATE,&c_activity_result_t,sizeof(cywee_activity_result_t)); + break; + + //小睡累计 + case CYWEE_MSG_TYPE_NAP_ACCUMULATE_TIME_UPDATE: + PRINT("CYWEE_MSG_TYPE_NAP_ACCUMULATE_TIME_UPDATE\r\n"); + memcpy(&c_inactivity_result_t, msg_data, sizeof(cywee_inactivity_result_t)); + PRINT("inactivity_mode_number[%d], total nap time[%d], total mild time[%d], total deep sleep time[%d], total wake time[%d], total rem sleep time[%d], len[%d]\n", + c_inactivity_result_t.inactivity_mode,c_inactivity_result_t.total_nap_time,c_inactivity_result_t.total_mild_sleep_time, + c_inactivity_result_t.total_deep_sleep_time,c_inactivity_result_t.total_wake_time,c_inactivity_result_t.total_rem_sleep_time, + c_inactivity_result_t.stand_freq,sizeof(cywee_inactivity_result_t)); + //CustomEventPublish(TOPIC_EVENT_EXTRA_INFO_UPDATE,&c_activity_result_t,sizeof(cywee_activity_result_t)); + break; + default: + PRINT("Unknown sensor message type"); break; } } + static void cywee_service_timer_start_check(uint32_t rtc_ms) { diff --git a/code/sdk/drivers/peripheral/cywee/src/main_dml.c b/code/sdk/drivers/peripheral/cywee/src/main_dml.c index d88e0919e..d63e6ee67 100644 --- a/code/sdk/drivers/peripheral/cywee/src/main_dml.c +++ b/code/sdk/drivers/peripheral/cywee/src/main_dml.c @@ -12,6 +12,8 @@ #include "osal_mutex.h" #include "ppg_service.h" #include "custom_utils.h" +#include "sys/time.h" +#include "time.h" #define AP_ENABLE_DML_SDO_LISTEN @@ -30,7 +32,8 @@ static int16 right_falg=-1; SettingControl_t scl; -cywee_result_t c_result_t; +cywee_activity_result_t c_activity_result_t; +cywee_inactivity_result_t c_inactivity_result_t; static int cywee_installized = 0 ; static int free_training_installized = 0 ; @@ -43,32 +46,29 @@ static osTimerId_t g_cywee_oncharging_timer; CustomSensorData csd; -void free_training_task(void) +void time_sync(void) { - ppg_send_cmd_to_driver("hrs",1); -} - -errcode_t free_training_init(void) -{ - app_task_definition_t taskcfg={0}; - taskcfg.create_queue_handle = NULL; - taskcfg.attr.name="free_training_service"; - taskcfg.attr.priority = TASK_PRIORITY_CMD; - taskcfg.attr.stack_size = 1024*8; - taskcfg.func = free_training_task; - taskcfg.use_mem = USE_EXTEND_MEM; + time_t rawtime; + struct tm* timeinfo; + time(&rawtime); + timeinfo = localtime(&rawtime); + PRINT("year[%d], mon[%d], day[%d], hour[%d], min[%d], msc[%d] \r\n", + timeinfo->tm_year,timeinfo->tm_mon,timeinfo->tm_mday, + timeinfo->tm_hour,timeinfo->tm_min,timeinfo->tm_sec); - errcode_t ret=uapi_create_osThread_custom(&taskcfg); - if(ret != ERRCODE_SUCC) - { - PRINT("create free_training_task failed %d!\r\n",ret); - return ERRCODE_FAIL; - } - - return ERRCODE_SUCC; + memset(&scl, 0, sizeof(scl)); + scl.iData[0] = 1; + scl.iData[1] = timeinfo->tm_year; + scl.iData[2] = timeinfo->tm_mon; + scl.iData[3] = timeinfo->tm_mday; + scl.iData[4] = timeinfo->tm_hour; + scl.iData[5] = timeinfo->tm_min; + scl.iData[6] = timeinfo->tm_sec; + CWM_SettingControl(SCL_DATE_TIME, &scl); } + void cywee_hrs_check_timer_callback(void) { uint8_t hrs,wearstatus; @@ -96,6 +96,38 @@ void cywee_oncharging_check_timer_callback(void) } +void free_training_task(void) +{ + ppg_send_cmd_to_driver("hrs",1); +} + +errcode_t free_training_init(void) +{ + if(free_training_installized == 1) + return ERRCODE_FAIL; + free_training_installized = 1; + app_task_definition_t taskcfg={0}; + taskcfg.create_queue_handle = NULL; + taskcfg.attr.name="free_training_service"; + taskcfg.attr.priority = TASK_PRIORITY_CMD; + taskcfg.attr.stack_size = 1024*8; + taskcfg.func = free_training_task; + taskcfg.use_mem = USE_EXTEND_MEM; + + errcode_t ret=uapi_create_osThread_custom(&taskcfg); + if(ret != ERRCODE_SUCC) + { + PRINT("create free_training_task failed %d!\r\n",ret); + return ERRCODE_FAIL; + } + + g_cywee_hrs_timer = osTimerNew((osTimerFunc_t)cywee_hrs_check_timer_callback, osTimerPeriodic, NULL, NULL); + //g_cywee_wearstatus_timer = osTimerNew((osTimerFunc_t)cywee_wearstatus_check_timer_callback, osTimerPeriodic, NULL, NULL); + g_cywee_oncharging_timer = osTimerNew((osTimerFunc_t)cywee_oncharging_check_timer_callback, osTimerPeriodic, NULL, NULL); + + return ERRCODE_SUCC; +} + void watch_hand_updown(int fdata) { #if defined(SUPPORT_POWER_MANAGER) @@ -134,8 +166,8 @@ void activity_exit(void) scl.iData[0] = 1; CWM_SettingControl(SCL_REQ_ACTIVITY_EXIT, &scl); - if(cywee_installized == 1) - cywee_installized = 0; + // if(cywee_installized == 1) + // cywee_installized = 0; if(free_training_installized == 1) { free_training_installized = 0; @@ -148,7 +180,56 @@ void activity_exit(void) } } -void cyw_mode_init(int mode) +void cyw_inactivity_mode_change(int mode) +{ + switch (mode) + { + //無作用 + case INACTIVITY_MODE_NOTHING: + memset(&scl, 0, sizeof(scl)); + scl.iData[0] = 1; + scl.iData[1] = 0; + CWM_SettingControl(SCL_SET_INACTIVITY_MODE, &scl); + break; + + //久坐和有效站立 + case INACTIVITY_MODE_SEDENTARY: + memset(&scl, 0, sizeof(scl)); + scl.iData[0] = 1; + scl.iData[1] = 1; + CWM_SettingControl(SCL_SET_INACTIVITY_MODE, &scl); + break; + + //睡眠 + case INACTIVITY_MODE_SLEEPING: + memset(&scl, 0, sizeof(scl)); + scl.iData[0] = 1; + scl.iData[1] = 2; + CWM_SettingControl(SCL_SET_INACTIVITY_MODE, &scl); + break; + + //久坐、有效站立和小睡 + case INACTIVITY_MODE_SEDENTARY_AND_NAP: + memset(&scl, 0, sizeof(scl)); + scl.iData[0] = 1; + scl.iData[1] = 3; + CWM_SettingControl(SCL_SET_INACTIVITY_MODE, &scl); + break; + + //小睡 + case INACTIVITY_MODE_NAP: + memset(&scl, 0, sizeof(scl)); + scl.iData[0] = 1; + scl.iData[1] = 4; + CWM_SettingControl(SCL_SET_INACTIVITY_MODE, &scl); + break; + + default: + break; + } +} + +void cyw_activity_mode_change(int mode) { switch (mode) { @@ -198,7 +279,6 @@ void cyw_mode_init(int mode) //自由运动 case SPORT_ACTIVE_MODE_FREE_TRAINING: - free_training_installized = 1; free_training_init(); memset(&scl, 0, sizeof(scl)); scl.iData[0] = 1; @@ -206,24 +286,6 @@ void cyw_mode_init(int mode) CWM_SettingControl(SCL_SET_ACTIVITY_MODE, &scl); break; - //长时间动作侦测 - // case SPORT_ACTIVE_MODE_AR_ALERT: - // break; - - case 2: - memset(&scl, 0, sizeof(scl)); - scl.iData[0] = 1; - scl.iData[1] = 2; - CWM_SettingControl(SCL_SET_INACTIVITY_MODE, &scl); - break; - - case 1: - memset(&scl, 0, sizeof(scl)); - scl.iData[0] = 1; - scl.iData[1] = 1; - CWM_SettingControl(SCL_SET_INACTIVITY_MODE, &scl); - break; - default: break; } @@ -364,22 +426,91 @@ void CWM_AP_SensorListen(pSensorEVT_t sensorEVT) { CWM_OS_dbgPrintf("IDX_ALGO_SHAKE\n"); break; case IDX_ALGO_INACTIVITY_OUTPUT: + cywee_func = cywee_get_send_msg_callback_func(); CWM_OS_dbgPrintf("IDX_ALGO_INACTIVITY_OUTPUT\n"); - if((int)sensorEVT->fData[0] == 21) + if((int)sensorEVT->fData[0] == 20) { - CWM_OS_dbgPrintf("sleep status[%d], month[%d], day[%d], hour[%d], min[%d], mintue[%d], inactivity_mode_number[%d]\n", + CWM_OS_dbgPrintf("inactivity_mode_number[%d], sedentary status[%d], stand freq[%d]\n", + (int)sensorEVT->fData[15], + (int)sensorEVT->fData[2], + (int)sensorEVT->fData[3]); + memset(&c_inactivity_result_t,0,sizeof(cywee_inactivity_result_t)); + c_inactivity_result_t.inactivity_mode = (int)sensorEVT->fData[15]; + c_inactivity_result_t.sedentary_status = (int)sensorEVT->fData[2]; + c_inactivity_result_t.stand_freq = (int)sensorEVT->fData[3]; + cywee_func(CYWEE_MSG_TYPE_SEDENTARY_UPDATE,&c_inactivity_result_t,sizeof(cywee_inactivity_result_t)); + + }else if((int)sensorEVT->fData[0] == 21){ + CWM_OS_dbgPrintf("inactivity_mode_number[%d], sleep status[%d], month[%d], day[%d], hour[%d], min[%d]\n", + (int)sensorEVT->fData[15], (int)sensorEVT->fData[2], (int)sensorEVT->fData[3], (int)sensorEVT->fData[4], (int)sensorEVT->fData[5], - (int)sensorEVT->fData[6], - (int)sensorEVT->fData[8], - (int)sensorEVT->fData[9], - (int)sensorEVT->fData[10], - (int)sensorEVT->fData[15]); - } + (int)sensorEVT->fData[6]); + memset(&c_inactivity_result_t,0,sizeof(cywee_inactivity_result_t)); + c_inactivity_result_t.inactivity_mode = (int)sensorEVT->fData[15]; + c_inactivity_result_t.sleep_status = (int)sensorEVT->fData[2]; + c_inactivity_result_t.month = (int)sensorEVT->fData[3]; + c_inactivity_result_t.day = (int)sensorEVT->fData[4]; + c_inactivity_result_t.hour = (int)sensorEVT->fData[5]; + c_inactivity_result_t.minute = (int)sensorEVT->fData[6]; + cywee_func(CYWEE_MSG_TYPE_SLEEPING_UPDATE,&c_inactivity_result_t,sizeof(cywee_inactivity_result_t)); + + }else if((int)sensorEVT->fData[0] == 31){ + CWM_OS_dbgPrintf("inactivity_mode_number[%d], total sleep time[%d], total mild time[%d], total deep sleep time[%d], total wake time[%d], total rem sleep time[%d]\n", + (int)sensorEVT->fData[15], + (int)sensorEVT->fData[1], + (int)sensorEVT->fData[2], + (int)sensorEVT->fData[3], + (int)sensorEVT->fData[4], + (int)sensorEVT->fData[5]); + memset(&c_inactivity_result_t,0,sizeof(cywee_inactivity_result_t)); + c_inactivity_result_t.inactivity_mode = (int)sensorEVT->fData[15]; + c_inactivity_result_t.total_sleep_time = (int)sensorEVT->fData[1]; + c_inactivity_result_t.total_mild_sleep_time = (int)sensorEVT->fData[2]; + c_inactivity_result_t.total_deep_sleep_time = (int)sensorEVT->fData[3]; + c_inactivity_result_t.total_wake_time = (int)sensorEVT->fData[4]; + c_inactivity_result_t.total_rem_sleep_time = (int)sensorEVT->fData[5]; + cywee_func(CYWEE_MSG_TYPE_SLEEPING_ACCUMULATE_TIME_UPDATE,&c_inactivity_result_t,sizeof(cywee_inactivity_result_t)); + + }else if((int)sensorEVT->fData[0] == 22){ + CWM_OS_dbgPrintf("inactivity_mode_number[%d], nap status[%d], month[%d], day[%d], hour[%d], min[%d]\n", + (int)sensorEVT->fData[15], + (int)sensorEVT->fData[2], + (int)sensorEVT->fData[3], + (int)sensorEVT->fData[4], + (int)sensorEVT->fData[5], + (int)sensorEVT->fData[6]); + memset(&c_inactivity_result_t,0,sizeof(cywee_inactivity_result_t)); + c_inactivity_result_t.inactivity_mode = (int)sensorEVT->fData[15]; + c_inactivity_result_t.nap_status = (int)sensorEVT->fData[2]; + c_inactivity_result_t.month = (int)sensorEVT->fData[3]; + c_inactivity_result_t.day = (int)sensorEVT->fData[4]; + c_inactivity_result_t.hour = (int)sensorEVT->fData[5]; + c_inactivity_result_t.minute = (int)sensorEVT->fData[6]; + cywee_func(CYWEE_MSG_TYPE_NAP_UPDATE,&c_inactivity_result_t,sizeof(cywee_inactivity_result_t)); + + }else if((int)sensorEVT->fData[0] == 32){ + CWM_OS_dbgPrintf("inactivity_mode_number[%d], total nap time[%d], total mild time[%d], total deep sleep time[%d], total wake time[%d], total rem sleep time[%d]\n", + (int)sensorEVT->fData[15], + (int)sensorEVT->fData[1], + (int)sensorEVT->fData[2], + (int)sensorEVT->fData[3], + (int)sensorEVT->fData[4], + (int)sensorEVT->fData[5]); + memset(&c_inactivity_result_t,0,sizeof(cywee_inactivity_result_t)); + c_inactivity_result_t.inactivity_mode = (int)sensorEVT->fData[15]; + c_inactivity_result_t.total_nap_time = (int)sensorEVT->fData[1]; + c_inactivity_result_t.total_mild_sleep_time = (int)sensorEVT->fData[2]; + c_inactivity_result_t.total_deep_sleep_time = (int)sensorEVT->fData[3]; + c_inactivity_result_t.total_wake_time = (int)sensorEVT->fData[4]; + c_inactivity_result_t.total_rem_sleep_time = (int)sensorEVT->fData[5]; + cywee_func(CYWEE_MSG_TYPE_NAP_ACCUMULATE_TIME_UPDATE,&c_inactivity_result_t,sizeof(cywee_inactivity_result_t)); + } break; case IDX_ALGO_ACTIVITY_OUTPUT: + cywee_func = cywee_get_send_msg_callback_func(); if((int)sensorEVT->fData[0] == 100) { CWM_OS_dbgPrintf("average step frequency[%d], average step length[%d], average pace[%d], max step frequency[%d], max pace[%d]\n", @@ -389,14 +520,13 @@ void CWM_AP_SensorListen(pSensorEVT_t sensorEVT) { (int)sensorEVT->fData[4], (int)sensorEVT->fData[5]); - memset(&c_result_t,0,sizeof(cywee_result_t)); - c_result_t.avg_step_freq = (int)sensorEVT->fData[1]; - c_result_t.avg_step_len = (int)sensorEVT->fData[2]; - c_result_t.avg_pace = (int)sensorEVT->fData[3]; - c_result_t.max_step_freq = (int)sensorEVT->fData[4]; - c_result_t.max_pace = (int)sensorEVT->fData[5]; - cywee_func = cywee_get_send_msg_callback_func(); - cywee_func(CYWEE_MSG_TYPE_EXTRA_INFO_UPDATE,&c_result_t,sizeof(cywee_result_t)); + memset(&c_activity_result_t,0,sizeof(cywee_activity_result_t)); + c_activity_result_t.avg_step_freq = (int)sensorEVT->fData[1]; + c_activity_result_t.avg_step_len = (int)sensorEVT->fData[2]; + c_activity_result_t.avg_pace = (int)sensorEVT->fData[3]; + c_activity_result_t.max_step_freq = (int)sensorEVT->fData[4]; + c_activity_result_t.max_pace = (int)sensorEVT->fData[5]; + cywee_func(CYWEE_MSG_TYPE_EXTRA_INFO_UPDATE,&c_activity_result_t,sizeof(cywee_activity_result_t)); }else if((int)sensorEVT->fData[0] == 5001) { @@ -405,23 +535,21 @@ void CWM_AP_SensorListen(pSensorEVT_t sensorEVT) { (int)sensorEVT->fData[5], (int)sensorEVT->fData[6]); - memset(&c_result_t,0,sizeof(cywee_result_t)); - c_result_t.activity_mode = (int)sensorEVT->fData[0]; - c_result_t.calories = (int)sensorEVT->fData[1]; - c_result_t.duration = (int)sensorEVT->fData[5]; - c_result_t.MHR_zone = (int)sensorEVT->fData[6]; - cywee_func = cywee_get_send_msg_callback_func(); - cywee_func(CYWEE_MSG_TYPE_FREE_TRAINING_UPDATE,&c_result_t,sizeof(cywee_result_t)); + memset(&c_activity_result_t,0,sizeof(cywee_activity_result_t)); + c_activity_result_t.activity_mode = (int)sensorEVT->fData[0]; + c_activity_result_t.calories = (int)sensorEVT->fData[1]; + c_activity_result_t.duration = (int)sensorEVT->fData[5]; + c_activity_result_t.MHR_zone = (int)sensorEVT->fData[6]; + cywee_func(CYWEE_MSG_TYPE_FREE_TRAINING_UPDATE,&c_activity_result_t,sizeof(cywee_activity_result_t)); }else if((int)sensorEVT->fData[0] == 102) { CWM_OS_dbgPrintf("ar alert type : %d\n",(int)sensorEVT->fData[1]); - memset(&c_result_t,0,sizeof(cywee_result_t)); - c_result_t.activity_mode = (int)sensorEVT->fData[0]; - c_result_t.ar_alert_type = (int)sensorEVT->fData[1]; - cywee_func = cywee_get_send_msg_callback_func(); - cywee_func(CYWEE_MSG_TYPE_AR_ALERT_UPDATE,&c_result_t,sizeof(cywee_result_t)); + memset(&c_activity_result_t,0,sizeof(cywee_activity_result_t)); + c_activity_result_t.activity_mode = (int)sensorEVT->fData[0]; + c_activity_result_t.ar_alert_type = (int)sensorEVT->fData[1]; + cywee_func(CYWEE_MSG_TYPE_AR_ALERT_UPDATE,&c_activity_result_t,sizeof(cywee_activity_result_t)); }else{ CWM_OS_dbgPrintf("activity_mode[%d], steps[%d], distance[%d], calories[%d], step frequency[%d], step length[%d], pace[%d], BMR calories[%d], is_pause[%d]\n", @@ -435,38 +563,37 @@ void CWM_AP_SensorListen(pSensorEVT_t sensorEVT) { (int)sensorEVT->fData[8], (int)sensorEVT->fData[14]); int stepcount = (int)sensorEVT->fData[1]; - memset(&c_result_t,0,sizeof(cywee_result_t)); - c_result_t.activity_mode = (int)sensorEVT->fData[0]; - c_result_t.steps = (int)sensorEVT->fData[1]; - c_result_t.distance = (int)sensorEVT->fData[2]; - c_result_t.calories = (int)sensorEVT->fData[3]; - c_result_t.step_frequency = (int)sensorEVT->fData[5]; - c_result_t.step_length = (int)sensorEVT->fData[6]; - c_result_t.pace = (int)sensorEVT->fData[7]; - c_result_t.BMR_calories = (int)sensorEVT->fData[8]; - c_result_t.is_pause = (int)sensorEVT->fData[14]; - cywee_func = cywee_get_send_msg_callback_func(); + memset(&c_activity_result_t,0,sizeof(cywee_activity_result_t)); + c_activity_result_t.activity_mode = (int)sensorEVT->fData[0]; + c_activity_result_t.steps = (int)sensorEVT->fData[1]; + c_activity_result_t.distance = (int)sensorEVT->fData[2]; + c_activity_result_t.calories = (int)sensorEVT->fData[3]; + c_activity_result_t.step_frequency = (int)sensorEVT->fData[5]; + c_activity_result_t.step_length = (int)sensorEVT->fData[6]; + c_activity_result_t.pace = (int)sensorEVT->fData[7]; + c_activity_result_t.BMR_calories = (int)sensorEVT->fData[8]; + c_activity_result_t.is_pause = (int)sensorEVT->fData[14]; switch ((int)sensorEVT->fData[0]) { case SPORT_ACTIVE_MODE_NORMAL: - cywee_func(CYWEE_MSG_TYPE_NORMAL_UPDATE,&c_result_t,sizeof(cywee_result_t)); + cywee_func(CYWEE_MSG_TYPE_NORMAL_UPDATE,&c_activity_result_t,sizeof(cywee_activity_result_t)); break; case SPORT_ACTIVE_MODE_TREADMILL: - cywee_func(CYWEE_MSG_TYPE_TREADMILL_UPDATE,&c_result_t,sizeof(cywee_result_t)); + cywee_func(CYWEE_MSG_TYPE_TREADMILL_UPDATE,&c_activity_result_t,sizeof(cywee_activity_result_t)); break; case SPORT_ACTIVE_MODE_OUTDOOR_RUNNING: - cywee_func(CYWEE_MSG_TYPE_OUTDOOR_RUNNING_UPDATE,&c_result_t,sizeof(cywee_result_t)); + cywee_func(CYWEE_MSG_TYPE_OUTDOOR_RUNNING_UPDATE,&c_activity_result_t,sizeof(cywee_activity_result_t)); break; case SPORT_ACTIVE_MODE_INDOOR_RUNNING: - cywee_func(CYWEE_MSG_TYPE_INDOOR_RUNNING_UPDATE,&c_result_t,sizeof(cywee_result_t)); + cywee_func(CYWEE_MSG_TYPE_INDOOR_RUNNING_UPDATE,&c_activity_result_t,sizeof(cywee_activity_result_t)); break; case SPORT_ACTIVE_MODE_FITNESS_PEDOMETERR: - cywee_func(CYWEE_MSG_TYPE_FITNESS_PEDOMETERR_UPDATE,&c_result_t,sizeof(cywee_result_t)); + cywee_func(CYWEE_MSG_TYPE_FITNESS_PEDOMETERR_UPDATE,&c_activity_result_t,sizeof(cywee_activity_result_t)); break; default: @@ -532,377 +659,236 @@ void CWM_AP_dmlSensorDataOutput_listen(const dml_sensorData_t * pSdo) { int cywee_main_dml(int cmd) { - if (cywee_installized==1) + if (cywee_installized==0) { - CWM_OS_dbgPrintf("cywee_installized skip install\n"); - return 0; - - } - cywee_installized = 1; - int i; - memset(&scl, 0, sizeof(scl)); - scl.iData[0] = 1; - CWM_SettingControl(SCL_GET_LIB_INFO, &scl); - CWM_OS_dbgPrintf("version:%d.%d.%d.%d product:%d model:%d\n", scl.iData[1], scl.iData[2], scl.iData[3], scl.iData[4], scl.iData[5], scl.iData[6]); - CWM_OS_dbgPrintf("[DBG] ach: %d\n", scl.iData[7]); -#if USE_P813 - os_api api = { - .GetTimeNs = CWM_OS_GetTimeNs, - .dbgOutput = CWM_OS_dbgOutput, - .i2cRead = CWM_OS_i2cRead, - .i2cWrite = CWM_OS_i2cWrite, - .uSleep = CWM_OS_uSleep, - .free = CWM_OS_free, - .malloc = CWM_OS_malloc, - .spiRead = NULL, - .spiWrite = NULL, - }; - CWM_LibPreInit(&api); - -#else - OsAPI apiOS = { - .GetTimeNs = CWM_OS_GetTimeNs, - .dbgOutput = CWM_OS_dbgOutput, - .i2cRead = CWM_OS_i2cRead, - .i2cWrite = CWM_OS_i2cWrite, - .uSleep = CWM_OS_uSleep, - .free = CWM_OS_free, - .malloc = CWM_OS_malloc, - .i2cTransfer = CWM_OS_i2cTransfer, - .restoreData = CWM_OS_restoreData, - .saveData = CWM_OS_saveData, - .spiRead = NULL, - .spiWrite = NULL, - .securityCodeWrite = NULL, - .setGpio = NULL, - .enableGpioIRQ = NULL, - .disableGpioIRQ = NULL, - }; - CWM_LibPreInit(&apiOS); -#endif - //CWM_OS_dbgPrintf("[DBG] %s %d\n", __func__,__LINE__); - - //set mcu_chip information, must call this before CWM_LibPostInit() - - memset(&scl, 0, sizeof(scl)); - scl.iData[0] = 1; - scl.iData[1] = 2; // 0: mcu_auto_detect 2: skip_mcu_auto_detect - CWM_SettingControl(SCL_CHIP_VENDOR_CONFIG, &scl); - //CWM_OS_dbgPrintf("[DBG] %s %d\n", __func__,__LINE__); - - CWM_LibPostInit(CWM_AP_SensorListen); - //CWM_OS_dbgPrintf("[DBG] %s %d\n", __func__,__LINE__); - - //get chip information - - char chipInfo[64]; - - memset(&scl, 0, sizeof(scl)); - scl.iData[0] = 1; - scl.iData[1] = 1; - scl.iData[2] = (int)chipInfo; - scl.iData[3] = sizeof(chipInfo); - scl.iData[4] = 0; - scl.iData[5] = 0; - scl.iData[6] = 0; - CWM_SettingControl(SCL_GET_CHIP_INFO, &scl); - CWM_OS_dbgPrintf("have_security = %d.%d ret_buff_size = %d chipInfo = %s\n", scl.iData[5], scl.iData[6], scl.iData[4], chipInfo); - CWM_OS_dbgPrintf("chip_settings = %d, %d, %d\n", scl.iData[9], scl.iData[10], scl.iData[11]); - //CWM_OS_dbgPrintf("[DBG] %s %d\n", __func__,__LINE__); - - CWM_Dml_LibInit(); - //CWM_OS_dbgPrintf("[DBG] %s %d\n", __func__,__LINE__); - - #ifdef AP_ENABLE_DML_SDO_LISTEN - // This API allows customers to develop custom features. - // Specific settingControl commands needs to be called for this API to work. - // No need to enable or implement this function for general usage. - CWM_Dml_sensorDataOutput_register(CWM_AP_dmlSensorDataOutput_listen); + cywee_installized = 1; + int i; + memset(&scl, 0, sizeof(scl)); + scl.iData[0] = 1; + CWM_SettingControl(SCL_GET_LIB_INFO, &scl); + CWM_OS_dbgPrintf("version:%d.%d.%d.%d product:%d model:%d\n", scl.iData[1], scl.iData[2], scl.iData[3], scl.iData[4], scl.iData[5], scl.iData[6]); + CWM_OS_dbgPrintf("[DBG] ach: %d\n", scl.iData[7]); + #if USE_P813 + os_api api = { + .GetTimeNs = CWM_OS_GetTimeNs, + .dbgOutput = CWM_OS_dbgOutput, + .i2cRead = CWM_OS_i2cRead, + .i2cWrite = CWM_OS_i2cWrite, + .uSleep = CWM_OS_uSleep, + .free = CWM_OS_free, + .malloc = CWM_OS_malloc, + .spiRead = NULL, + .spiWrite = NULL, + }; + CWM_LibPreInit(&api); + + #else + OsAPI apiOS = { + .GetTimeNs = CWM_OS_GetTimeNs, + .dbgOutput = CWM_OS_dbgOutput, + .i2cRead = CWM_OS_i2cRead, + .i2cWrite = CWM_OS_i2cWrite, + .uSleep = CWM_OS_uSleep, + .free = CWM_OS_free, + .malloc = CWM_OS_malloc, + .i2cTransfer = CWM_OS_i2cTransfer, + .restoreData = CWM_OS_restoreData, + .saveData = CWM_OS_saveData, + .spiRead = NULL, + .spiWrite = NULL, + .securityCodeWrite = NULL, + .setGpio = NULL, + .enableGpioIRQ = NULL, + .disableGpioIRQ = NULL, + }; + CWM_LibPreInit(&apiOS); #endif - //CWM_OS_dbgPrintf("[DBG] %s %d\n", __func__,__LINE__); - - memset(&scl, 0, sizeof(scl)); - scl.iData[0] = 1; - CWM_SettingControl(SCL_DML_GET_LIB_INFO, &scl); - CWM_OS_dbgPrintf("dml version:%d.%d.%d.%d product:%d model:%d\n", scl.iData[1], scl.iData[2], scl.iData[3], scl.iData[4], scl.iData[5], scl.iData[6]); - - //CWM_OS_dbgPrintf("[DBG] %s %d\n", __func__,__LINE__); - - memset(&scl, 0, sizeof(scl)); - scl.iData[0] = 1; - scl.iData[1] = 18; //00000000000000000000000000010010 高位在前 - // CWM_SettingControl(SCL_DML_DEBUG, &scl); - - //设置acc gyro 相关参数 - memset(&scl, 0, sizeof(scl)); - scl.iData[0] = 1; - scl.iData[3] = 2; - scl.iData[4] = 2; //1 anytime 2 fifo - scl.iData[6] = 5; //先設定5 - scl.iData[7] = 5; - scl.iData[8] = 52; // for st sensor(52Hz) - CWM_SettingControl(SCL_DML_DRV_AG_CONFIG, &scl); - //CWM_OS_dbgPrintf("[DBG] %s %d\n", __func__,__LINE__); - - //设定搜寻哪种型号的传感器,以及要搜寻的属性 - memset(&scl, 0, sizeof(scl)); - scl.iData[0] = 1; - scl.iData[1] = 2; - scl.iData[6] = 3002502; - scl.iData[7] = (0|1|8|256|1024); - CWM_SettingControl(SCL_DML_DRV_HW_CONFIG, &scl); - //CWM_OS_dbgPrintf("[DBG] %s %d\n", __func__,__LINE__); + //CWM_OS_dbgPrintf("[DBG] %s %d\n", __func__,__LINE__); + + //set mcu_chip information, must call this before CWM_LibPostInit() + + memset(&scl, 0, sizeof(scl)); + scl.iData[0] = 1; + scl.iData[1] = 2; // 0: mcu_auto_detect 2: skip_mcu_auto_detect + CWM_SettingControl(SCL_CHIP_VENDOR_CONFIG, &scl); + //CWM_OS_dbgPrintf("[DBG] %s %d\n", __func__,__LINE__); + + CWM_LibPostInit(CWM_AP_SensorListen); + //CWM_OS_dbgPrintf("[DBG] %s %d\n", __func__,__LINE__); + + //get chip information + + char chipInfo[64]; + + memset(&scl, 0, sizeof(scl)); + scl.iData[0] = 1; + scl.iData[1] = 1; + scl.iData[2] = (int)chipInfo; + scl.iData[3] = sizeof(chipInfo); + scl.iData[4] = 0; + scl.iData[5] = 0; + scl.iData[6] = 0; + CWM_SettingControl(SCL_GET_CHIP_INFO, &scl); + CWM_OS_dbgPrintf("have_security = %d.%d ret_buff_size = %d chipInfo = %s\n", scl.iData[5], scl.iData[6], scl.iData[4], chipInfo); + CWM_OS_dbgPrintf("chip_settings = %d, %d, %d\n", scl.iData[9], scl.iData[10], scl.iData[11]); + //CWM_OS_dbgPrintf("[DBG] %s %d\n", __func__,__LINE__); + + CWM_Dml_LibInit(); + //CWM_OS_dbgPrintf("[DBG] %s %d\n", __func__,__LINE__); + + #ifdef AP_ENABLE_DML_SDO_LISTEN + // This API allows customers to develop custom features. + // Specific settingControl commands needs to be called for this API to work. + // No need to enable or implement this function for general usage. + CWM_Dml_sensorDataOutput_register(CWM_AP_dmlSensorDataOutput_listen); + #endif + //CWM_OS_dbgPrintf("[DBG] %s %d\n", __func__,__LINE__); + + memset(&scl, 0, sizeof(scl)); + scl.iData[0] = 1; + CWM_SettingControl(SCL_DML_GET_LIB_INFO, &scl); + CWM_OS_dbgPrintf("dml version:%d.%d.%d.%d product:%d model:%d\n", scl.iData[1], scl.iData[2], scl.iData[3], scl.iData[4], scl.iData[5], scl.iData[6]); + + //CWM_OS_dbgPrintf("[DBG] %s %d\n", __func__,__LINE__); + + memset(&scl, 0, sizeof(scl)); + scl.iData[0] = 1; + scl.iData[1] = 18; //00000000000000000000000000010010 高位在前 + // CWM_SettingControl(SCL_DML_DEBUG, &scl); + + //设置acc gyro 相关参数 + memset(&scl, 0, sizeof(scl)); + scl.iData[0] = 1; + scl.iData[3] = 2; + scl.iData[4] = 2; //1 anytime 2 fifo + scl.iData[6] = 5; //先設定5 + scl.iData[7] = 5; + scl.iData[8] = 52; // for st sensor(52Hz) + CWM_SettingControl(SCL_DML_DRV_AG_CONFIG, &scl); + //CWM_OS_dbgPrintf("[DBG] %s %d\n", __func__,__LINE__); + + //设定搜寻哪种型号的传感器,以及要搜寻的属性 + memset(&scl, 0, sizeof(scl)); + scl.iData[0] = 1; + scl.iData[1] = 2; + scl.iData[6] = 3002502; + scl.iData[7] = (0|1|8|256|1024); + CWM_SettingControl(SCL_DML_DRV_HW_CONFIG, &scl); + //CWM_OS_dbgPrintf("[DBG] %s %d\n", __func__,__LINE__); + + //搜寻是否接入传感器 + memset(&scl, 0, sizeof(scl)); + scl.iData[0] = 1; + scl.iData[1] = 1; + CWM_SettingControl(SCL_DML_DRV_INIT, &scl); + CWM_OS_dbgPrintf("DML device=%d\n", scl.iData[2]); + + //获取初始化 driver清单 + memset(&scl, 0, sizeof(scl)); + scl.iData[0] = 1; + CWM_SettingControl(SCL_DML_GET_INITED_LIST, &scl); + //CWM_OS_dbgPrintf("[DBG] %s %d\n", __func__,__LINE__); + + for (i = 0; i < scl.iData[2]; i ++) { + + CWM_OS_dbgPrintf("DML device[%d]: hw_id=%d hw_attr=%d\n", i, scl.iData[6 + i * 2], scl.iData[7 + i * 2]); + } - //搜寻是否接入传感器 - memset(&scl, 0, sizeof(scl)); - scl.iData[0] = 1; - scl.iData[1] = 1; - CWM_SettingControl(SCL_DML_DRV_INIT, &scl); - CWM_OS_dbgPrintf("DML device=%d\n", scl.iData[2]); + //设置抬腕功能 + memset(&scl, 0, sizeof(scl)); + scl.iData[0] = 1; + // scl.iData[1] = 5; + // scl.iData[2] = 5; + // scl.iData[3] = 5; + // scl.iData[4] = 5; + CWM_SettingControl(SCL_HAND_UPDOWN_CONFIG, &scl); - //获取初始化 driver清单 - memset(&scl, 0, sizeof(scl)); - scl.iData[0] = 1; - CWM_SettingControl(SCL_DML_GET_INITED_LIST, &scl); - //CWM_OS_dbgPrintf("[DBG] %s %d\n", __func__,__LINE__); + //配置跑步机模式相关参数(进入跑步机模式自动生效) + memset(&scl, 0, sizeof(scl)); + scl.iData[0] = 1; + CWM_SettingControl(SCL_PEDO_CONFIG, &scl); - for (i = 0; i < scl.iData[2]; i ++) { + memset(&scl, 0, sizeof(scl)); + scl.iData[0] = 1; + CWM_SettingControl(SCL_ACTIVITY_CONFIG, &scl); - CWM_OS_dbgPrintf("DML device[%d]: hw_id=%d hw_attr=%d\n", i, scl.iData[6 + i * 2], scl.iData[7 + i * 2]); - } + memset(&scl, 0, sizeof(scl)); + scl.iData[0] = 1; + CWM_SettingControl(SCL_PEDO_CONFIG, &scl); - //设置抬腕功能 - memset(&scl, 0, sizeof(scl)); - scl.iData[0] = 1; - // scl.iData[1] = 5; - // scl.iData[2] = 5; - // scl.iData[3] = 5; - // scl.iData[4] = 5; - CWM_SettingControl(SCL_HAND_UPDOWN_CONFIG, &scl); - -/* -int[0] = 1 -int[1] = floor_Height (cm)(設定樓層高度)(default: 380cm = 3.8m) - (0: default, 150 - 1000) -int[2] = Anti-misoperation (一般模式時的防誤計步等級) (default: 4) - (0: default, 1: 最容易誤計步, 2, 3, 4:預設等級, 5, 6, 7: 最不容易誤計步) -int[3] = 戶外跑步和一般模式時距離、配速和步距的調整 (default: 4) - (0: default, 1: 距離最短, 2, 3, 4:預設, 5, 6, 7:距離最長) -int[4] = enable_extra_packet (default: 不發送) - (0: default, 1: 發送, 2: 不發送) -int[5] = Treadmill__steps (跑步機校正參數)(steps) (default: 不校正) - (0: 不校正) -int[6] = Treadmill__average_step_frequency (跑步機校正參數) (steps/minute) (default: 不校正) - (0: 不校正) -int[7] = Treadmill__uncalibration_distance (跑步機校正參數)(meters) (default: 不校正) - (0: 不校正) -int[8] = Treadmill__ground_truth_distance (跑步機校正參數: 真實的跑步距離)(meters) (default: 不校正) - (0: 不校正) -int[9] = floor_sensitivity (樓層計算嚴謹度)(default: 3) - (0: default, 1:寬容, 2, 3, 4, 5, 7: 嚴格) -int[10] = 防高頻誤觸 (default: 開啟) - (0: default, 1: 開啟, 2: 關閉) -int[11] = 高步頻走路步距修正 (default: 開啟) - (0: default, 1: 開啟, 2: 關閉) -int[12] = 活動程度區間的中度活動步頻 (default: 60) - (0: default, 60 - 270) -int[13] = 活動程度區間的高度活動步頻 (default: 120) - (0: default, 60 - 270) - -*/ - //配置跑步机模式相关参数(进入跑步机模式自动生效) - memset(&scl, 0, sizeof(scl)); - scl.iData[0] = 1; - scl.iData[2] = 4; - scl.iData[3] = 4; - - scl.iData[5] = 0; - scl.iData[6] = 0; - scl.iData[7] = 0; - scl.iData[8] = 0; - - scl.iData[10] = 1; - scl.iData[11] = 1; - scl.iData[12] = 60; - scl.iData[13] = 120; - CWM_SettingControl(SCL_PEDO_CONFIG, &scl); - -/* -int[0] = 1 -int[1] = 卡路里計算是否包含基礎卡路里 (default: 不包含基礎卡路里) - (0: default, 1:包含基礎卡路里, 2:不包含基礎卡路里) -int[2] = 一般模式1001是否使用心率來計算卡路里 (default: 不使用心率) - (0: default, 1: 使用心率, 2:不使用心率) -int[3] = 靜態運動時是否持續計算卡路里 (default: 停止計算) - (0: default, 1: 持續計算, 2: 停止計算) -int[4] = 運動模式(包含一般模式1001)時,脫錶後是否持續計算卡路里 (default: 持續計算) - (0: default, 1: 持續計算, 2: 停止計算) -int[5] = ar_model (default: on) - (0: default, 1: on, 2: off) -int[6] = ar_pedo_mode (default: 平衡) - (0: 平衡, 1: 計步優先, 2: 防誤觸優先) -int[7] = 靜止時是否持續計算卡路里 (default: 持續計算) - (0: default, 1: 持續計算, 2: 停止計算) -int[8] = motionSensScale活動量的靈敏度 (default: 4) - (0: default, 1: 最靈敏, 2, 3, 4, 5, 6, 7: 最不靈敏) -int[9] = 軸向判斷 (default: 有軸向判斷) - (0: default, 1: 無軸向判斷, 2: 有軸向判斷) -int[10] = 感測器雜訊度等級 (default: 低雜訊) - (0: 低雜訊, 1: 高雜訊A, 2 - 4, 5: 高雜訊E) -*/ - memset(&scl, 0, sizeof(scl)); - scl.iData[0] = 1; - CWM_SettingControl(SCL_PEDO_CONFIG, &scl); - -/* -SCL_SLEEP_CONFIG - -int[0] = 1 -int[1] = reserved -int[2] = 是否使用心率來判斷睡眠狀態 (default: 不使用心率) -(0: default, 1: 使用心率, 2: 不使用心率) -int[3] = 入睡難易度 (default: 4) -(0: default, 1:不容易入睡, 2, 3, 4:標準, 5, 6, 7:容易入睡) -int[4] = 出睡難易度 (default: 4) -(0: default, 1:不容易出睡, 2, 3, 4:標準, 5, 6, 7:容易出睡) -int[5] = reserved -int[6] = 清醒難易度 (default: 4) -(0: default, 1:不容易清醒, 2, 3, 4:標準, 5, 6, 7:容易清醒) -int[7] = 硬體訊號等級 (default: 1) - (0: default, 1: 低雜訊, 2, 3, 4, 5, 6, 7: 高雜訊) -int[8] = reserved -int[9] = 睡眠間距 (default: 60) - (0: default, 1 - 180) -int[10] = 無心率時是否輸出REM (default: 會輸出REM) - (0: default, 1: 禁止輸出REM, 2: 會輸出REM) -int[11] = 長時間小睡 (default: turn_off) - (0: default, 1: turn_on, 2: turn_off) -int[12] = 靜態活動角度靈敏度 (default: 13) - (0: default, 1: 較難入睡 - 30: 容易入睡) -*/ - // memset(&scl, 0, sizeof(scl)); - // scl.iData[0] = 1; - // scl.iData[3] = 7; - // scl.iData[4] = 7; - // scl.iData[6] = 7; - // scl.iData[7] = 7; - // scl.iData[9] = 1; - // CWM_SettingControl(SCL_SLEEP_CONFIG, &scl); - -/* -SCL_REQ_SLEEPING_DATA -int[0] = 1 -int[1] = terminate_sleep -(0: 立刻輸出狀態,但不中止此段睡眠偵測, -1: 立刻輸出狀態,並中止此段睡眠偵測) -*/ - // memset(&scl, 0, sizeof(scl)); - // scl.iData[0] = 1; - // scl.iData[1] = 1; - // CWM_SettingControl(SCL_REQ_SLEEPING_DATA, &scl); - -/* -SCL_INACTIVITY_CONFIG -int[0] = 1 -int[1] = 感測器雜訊度等級 (default: 低雜訊) - (0: 低雜訊, 1: 高雜訊) -*/ - memset(&scl, 0, sizeof(scl)); - scl.iData[0] = 1; - scl.iData[1] = 1; - CWM_SettingControl(SCL_INACTIVITY_CONFIG, &scl); + memset(&scl, 0, sizeof(scl)); + scl.iData[0] = 1; + CWM_SettingControl(SCL_SLEEP_CONFIG, &scl); /* - SCL_DATE_TIME + SCL_REQ_SLEEPING_DATA int[0] = 1 - int[1] = year (1900 - 2100) - int[2] = month (1 - 12) - int[3] = day (1 - 31) - int[4] = hour (0 - 23) - int[5] = minute (0 - 59) - int[6] = second (0 - 59) + int[1] = terminate_sleep + (0: 立刻輸出狀態,但不中止此段睡眠偵測, + 1: 立刻輸出狀態,並中止此段睡眠偵測) */ + memset(&scl, 0, sizeof(scl)); + scl.iData[0] = 1; + scl.iData[1] = 0; + CWM_SettingControl(SCL_REQ_SLEEPING_DATA, &scl); - // char databuf[64] = {0}; - // int year,month,day,hour,min,sec; - // uapi_get_yyyymmddhhmmss_Date(databuf); - // PRINT("databuf : %s \r\n",databuf); - // sscanf(databuf, "%4d%2d%2d%2d%2d%2d", &year, &month, &day, &hour, &min, &sec); - // memset(&scl, 0, sizeof(scl)); - // scl.iData[0] = 1; - // scl.iData[1] = year; - // scl.iData[2] = month; - // scl.iData[3] = day; - // scl.iData[4] = hour; - // scl.iData[5] = min; - // scl.iData[6] = sec; - // CWM_SettingControl(SCL_DATE_TIME, &scl); - -/* -SCL_SEDENTARY - -int[0] = 1 -int[1] = reserved -int[2] = is_reminder_on (提醒功能)(default: turn_off) - (0: default, 1: turn on, 2: turn off) -int[3] = reminder_time (minutes)(提醒時間)(default: 5) - (0:default, 1 - 10) -int[4] = release_level (解除久坐狀態的等級)(default: 3) - (0:default, 1:容易解除, 2, 3, 4, 5:不容易解除) -int[5] = release_mode (解除久坐的算法模式)(default: 行走模式) - (0: default, 1: 行走模式, 2: 活動量模式) - -*/ - memset(&scl, 0, sizeof(scl)); - scl.iData[0] = 1; - scl.iData[2] = 1; - // int[2] = 3,代表開啟acc和gyro感測器 1代表开启acc - scl.iData[3] = 1; - scl.iData[4] = 3; - scl.iData[5] = 1; - CWM_SettingControl(SCL_SEDENTARY, &scl); - - - //呼叫任一個CWM_Sensor_Enable 前呼叫此指令 设置手动或自动模式 - memset(&scl, 0, sizeof(scl)); - scl.iData[0] = 1; - scl.iData[1] = 1; - // int[2] = 3,代表開啟acc和gyro感測器 1代表开启acc - scl.iData[2] = 1; - CWM_SettingControl(SCL_DML_DRV_ENABLE, &scl); - //CWM_OS_dbgPrintf("[DBG] %s %d\n", __func__,__LINE__); - - memset(&scl, 0, sizeof(scl)); - scl.iData[0] = 1; - scl.iData[3] = 3; - scl.iData[4] = 5; - // CWM_SettingControl(SCL_LOG, &scl); - - - g_cywee_hrs_timer = osTimerNew((osTimerFunc_t)cywee_hrs_check_timer_callback, osTimerPeriodic, NULL, NULL); - //g_cywee_wearstatus_timer = osTimerNew((osTimerFunc_t)cywee_wearstatus_check_timer_callback, osTimerPeriodic, NULL, NULL); - g_cywee_oncharging_timer = osTimerNew((osTimerFunc_t)cywee_oncharging_check_timer_callback, osTimerPeriodic, NULL, NULL); - - CWM_Sensor_Enable(IDX_REQUEST_SENSOR); - // //CWM_OS_dbgPrintf("[DBG] %s %d\n", __func__,__LINE__); - CWM_Sensor_Enable(IDX_ALGO_INACTIVITY_OUTPUT); + /* + SCL_INACTIVITY_CONFIG + int[0] = 1 + int[1] = 感測器雜訊度等級 (default: 低雜訊) + (0: 低雜訊, 1: 高雜訊) + */ + memset(&scl, 0, sizeof(scl)); + scl.iData[0] = 1; + CWM_SettingControl(SCL_INACTIVITY_CONFIG, &scl); + + memset(&scl, 0, sizeof(scl)); + scl.iData[0] = 1; + scl.iData[2] = 1; + // int[2] = 3,代表開啟acc和gyro感測器 1代表开启acc + scl.iData[3] = 1; + scl.iData[4] = 3; + scl.iData[5] = 1; + CWM_SettingControl(SCL_SEDENTARY, &scl); + + + //呼叫任一個CWM_Sensor_Enable 前呼叫此指令 设置手动或自动模式 + memset(&scl, 0, sizeof(scl)); + scl.iData[0] = 1; + scl.iData[1] = 1; + // int[2] = 3,代表開啟acc和gyro感測器 1代表开启acc + scl.iData[2] = 1; + CWM_SettingControl(SCL_DML_DRV_ENABLE, &scl); + //CWM_OS_dbgPrintf("[DBG] %s %d\n", __func__,__LINE__); + + memset(&scl, 0, sizeof(scl)); + scl.iData[0] = 1; + scl.iData[3] = 3; + scl.iData[4] = 5; + // CWM_SettingControl(SCL_LOG, &scl); + + CWM_Sensor_Enable(IDX_REQUEST_SENSOR); + // //CWM_OS_dbgPrintf("[DBG] %s %d\n", __func__,__LINE__); + CWM_Sensor_Enable(IDX_ALGO_INACTIVITY_OUTPUT); + + CWM_Sensor_Enable(IDX_ALGO_ACTIVITY_OUTPUT); + + CWM_Sensor_Enable(IDX_ACCEL); + //CWM_OS_dbgPrintf("[DBG] %s %d\n", __func__,__LINE__); + // CWM_Sensor_Enable(IDX_GYRO); + CWM_Sensor_Enable(IDX_ALGO_NO_MOTION); + //CWM_OS_dbgPrintf("[DBG] %s %d\n", __func__,__LINE__); + // CWM_Sensor_Enable(IDX_ALGO_ANY_MOTIOIN); + CWM_Sensor_Enable(IDX_ALGO_ABSOLUTE_STATIC); + //CWM_OS_dbgPrintf("[DBG] %s %d\n", __func__,__LINE__); + CWM_Sensor_Enable(IDX_ALGO_WATCH_HANDUP); + CWM_OS_dbgPrintf("cywee_installized skip install\n"); + } - CWM_Sensor_Enable(IDX_ALGO_ACTIVITY_OUTPUT); - - CWM_Sensor_Enable(IDX_ACCEL); - //CWM_OS_dbgPrintf("[DBG] %s %d\n", __func__,__LINE__); - // CWM_Sensor_Enable(IDX_GYRO); - CWM_Sensor_Enable(IDX_ALGO_NO_MOTION); - //CWM_OS_dbgPrintf("[DBG] %s %d\n", __func__,__LINE__); - // CWM_Sensor_Enable(IDX_ALGO_ANY_MOTIOIN); - CWM_Sensor_Enable(IDX_ALGO_ABSOLUTE_STATIC); - //CWM_OS_dbgPrintf("[DBG] %s %d\n", __func__,__LINE__); - CWM_Sensor_Enable(IDX_ALGO_WATCH_HANDUP); - - - cyw_mode_init(cmd); - + cyw_activity_mode_change(cmd); + if(cmd == SPORT_ACTIVE_MODE_NORMAL) + cyw_activity_mode_change(INACTIVITY_MODE_NOTHING); // memset(&scl, 0, sizeof(scl)); // scl.iData[0] = 1; // scl.iData[1] = SPORT_ACTIVE_MODE_NORMAL; //ACTIVITY_MODE_NORMAL 1001