From: penglei <1624952103@qq.com> Date: Thu, 11 Apr 2024 10:34:20 +0000 (+0800) Subject: 补交优化运动模式切换函数,添加静态模式切换函数 X-Git-Tag: release_V1.2.70_20241020_135402~1213 X-Git-Url: http://git.snicker.com.cn/?a=commitdiff_plain;h=f1eff17f64019d196cded2b71656596b958d6d64;p=mirrors%2FFD230.git 补交优化运动模式切换函数,添加静态模式切换函数 --- f1eff17f64019d196cded2b71656596b958d6d64 diff --cc code/sdk/drivers/peripheral/cywee/src/main_dml.c index d63e6ee67,84e110b5b..e362b4e39 --- a/code/sdk/drivers/peripheral/cywee/src/main_dml.c +++ b/code/sdk/drivers/peripheral/cywee/src/main_dml.c @@@ -14,6 -14,6 +14,8 @@@ #include "custom_utils.h" #include "sys/time.h" #include "time.h" ++#include "sys/time.h" ++#include "time.h" #define AP_ENABLE_DML_SDO_LISTEN @@@ -160,26 -170,7 +161,27 @@@ void activity_setstatus(int cmd CWM_SettingControl(SCL_ACTIVITY_PAUSE, &scl); } - void activity_exit(void) + ++void cyw_inactivity_mode_change(int mode) +{ + memset(&scl, 0, sizeof(scl)); + scl.iData[0] = 1; + CWM_SettingControl(SCL_REQ_ACTIVITY_EXIT, &scl); + + // if(cywee_installized == 1) + // cywee_installized = 0; + if(free_training_installized == 1) + { + free_training_installized = 0; + //osTimerStop(g_cywee_wearstatus_timer); + osTimerStop(g_cywee_oncharging_timer); + osTimerStop(g_cywee_hrs_timer); + osTimerDelete(g_cywee_oncharging_timer); + osTimerDelete(g_cywee_hrs_timer); + ppg_send_cmd_to_driver("hrs",0); + } +} + void cyw_inactivity_mode_change(int mode) { switch (mode) @@@ -657,238 -657,236 +663,239 @@@ void CWM_AP_dmlSensorDataOutput_listen( #endif - int cywee_main_dml(int cmd) { + int cywee_main_dml(void) + { - 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__); - - //搜寻是否接入传感器 - 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]); + //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; - CWM_SettingControl(SCL_PEDO_CONFIG, &scl); - - - memset(&scl, 0, sizeof(scl)); - scl.iData[0] = 1; - CWM_SettingControl(SCL_ACTIVITY_CONFIG, &scl); - - memset(&scl, 0, sizeof(scl)); - scl.iData[0] = 1; - CWM_SettingControl(SCL_SLEEP_CONFIG, &scl); - - - memset(&scl, 0, sizeof(scl)); - scl.iData[0] = 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_SEDENTARY, &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); - - //呼叫任一個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); + //设置抬腕功能 + 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); + + //配置跑步机模式相关参数(进入跑步机模式自动生效) + memset(&scl, 0, sizeof(scl)); + scl.iData[0] = 1; + CWM_SettingControl(SCL_PEDO_CONFIG, &scl); + + memset(&scl, 0, sizeof(scl)); + scl.iData[0] = 1; + CWM_SettingControl(SCL_ACTIVITY_CONFIG, &scl); + + memset(&scl, 0, sizeof(scl)); + scl.iData[0] = 1; + CWM_SettingControl(SCL_PEDO_CONFIG, &scl); + + + memset(&scl, 0, sizeof(scl)); + scl.iData[0] = 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] = 0; + 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; + 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); - - memset(&scl, 0, sizeof(scl)); - scl.iData[0] = 1; - scl.iData[1] = SPORT_ACTIVE_MODE_NORMAL; - CWM_SettingControl(SCL_SET_ACTIVITY_MODE, &scl); - // CWM_SettingControl(SCL_SET_INACTIVITY_MODE, &scl); - //CWM_OS_dbgPrintf("[DBG] %s %d\n", __func__,__LINE__); - - - // cyw_activity_mode_change(cmd); - // cyw_inactivity_mode_change(); + 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