优化心率驱动,解决佩戴模式不能正确获取佩戴状态的问题,添加动态心率,优化运动模式切换流程 16/1 16/head
authorpenglei <1624952103@qq.com>
Tue, 16 Apr 2024 10:08:53 +0000 (18:08 +0800)
committerpenglei <1624952103@qq.com>
Tue, 16 Apr 2024 10:08:53 +0000 (18:08 +0800)
code/sdk/application/battery/service/battery_service.cpp
code/sdk/application/wearable/fd230app/nativeui/bloodoxygen/src/BloodOxygenPresenter.cpp
code/sdk/application/wearable/fd230app/nativeui/heartrate/src/HeartPresenter.cpp
code/sdk/application/wearable/fd230app/nativeui/traing/training_card/src/TraingCardPresenter.cpp
code/sdk/drivers/peripheral/cywee/Inc/cywee_hal.h
code/sdk/drivers/peripheral/cywee/Inc/cywee_service.h
code/sdk/drivers/peripheral/cywee/service/cywee_at_cmd.c
code/sdk/drivers/peripheral/cywee/service/cywee_service.c
code/sdk/drivers/peripheral/cywee/src/main_dml.c
code/sdk/drivers/peripheral/ppg/hx3695/hx3695.c
code/sdk/drivers/peripheral/ppg/service/ppg_service.cpp

index 62c22af..af7841c 100644 (file)
@@ -43,6 +43,8 @@ extern "C" {
 
 #include "custom_utils.h"
 
+#include "cywee_service.h"
+
 bool batteryservice_get_voltage_by_channel(float *voltage, uint8_t channel);
 battery_info_t *get_current_battery_info(void);
 static bool g_batter_service_initialled = false;
@@ -81,6 +83,8 @@ static unsigned long g_app_queue;
 
 static uint8_t g_check_count = 0;
 
+static int oncharging_status = 0;
+
 static void battery_check_timer_callback(void* data);
 errcode_t charger_plug_event_notify(uint8_t plugged);
 errcode_t charger_plug_event_ui_sendmsg_toUI(uint8_t plugged);
@@ -166,8 +170,15 @@ static void battery_check_chargement(void)
     uint8_t percent = batteryservice_get_voltage(&voltage);
     //获取电池温度
     batteryservice_get_battery_temp(&bat_temp);
-      
-    if(get_charge_stat() == 1){
+    
+    int status = get_charge_stat();
+    if(oncharging_status != status)
+    {
+        oncharging_status = status;
+        do_cywee_service_check_msg(CYWEE_SERVICE_CMD_ONCHARGING_CHANGE,&status);
+    }
+
+    if(status == 1){
         
         PRINT("charging enable charge !  bat-temp %.2f Vs highest temp value %.2f !\n",bat_temp,BATTERY_DISABLE_CHARGE_HI_TEMP_VALUE);
         /**
index 5f162a3..7b18e10 100644 (file)
@@ -32,6 +32,7 @@
 #include "displaybrightness/include/DisplayBrightnessModel.h"
 #include "power_display_service.h"
 #include "custom_utils.h"
+#include "cywee_service.h"
 extern "C" errcode_t uapi_get_timestampe_ms(uint64_t *tm);
 
 #define BLOODKEYABLE 0
@@ -233,6 +234,7 @@ namespace OHOS
                 uint8_t md = PPG_SERVICE_CMD_TYPE_STOP_SPO2_TEST;
                 send_ppg_cmd_msg(md);
                 startspo2 = true;
+                do_cywee_service_check_msg(CYWEE_SERVICE_CMD_NORMAL_MODE,NULL);
             }
         }
         if (BloodOxygenModel::GetInstance()->GetBloodCheckViewStatus() == false)
@@ -246,6 +248,7 @@ namespace OHOS
             BloodCheckView::GetInstance()->UpShowBloodText(); // 更新检测界面
             if (startspo2 == true)
             {
+                do_cywee_service_check_msg(CYWEE_SERVICE_CMD_EXIT,NULL);
                 WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GetCheckStatus : true");
                 uint8_t md = PPG_SERVICE_CMD_TYPE_DO_SPO2_TEST;
                 send_ppg_cmd_msg(md);
index c6f22d1..7586820 100644 (file)
@@ -26,6 +26,7 @@
 #include "heartrate/include/HeartCheckView.h"
 #include "heartrate/include/HeartBandoffView.h"
 #include "health_service.h"
+#include "cywee_service.h"
 
 #define HEARTKEYABLE 0
 
@@ -222,6 +223,7 @@ namespace OHOS
                 uint8_t md = PPG_SERVICE_CMD_TYPE_STOP_PPG_TEST;
                 send_ppg_cmd_msg(md);
                 startheart = true;
+                do_cywee_service_check_msg(CYWEE_SERVICE_CMD_NORMAL_MODE,NULL);
             }
         }
 
@@ -236,6 +238,7 @@ namespace OHOS
             HeartCheckView::GetInstance()->UpShowHeartText(); // 更新检测界面
             if (startheart == true)
             {
+                do_cywee_service_check_msg(CYWEE_SERVICE_CMD_EXIT,NULL);
                 WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GetCheckStatus : true");
                 uint8_t md = PPG_SERVICE_CMD_TYPE_DO_PPG_TEST;
                 send_ppg_cmd_msg(md);
index 87be72b..bac9ee6 100644 (file)
@@ -14,7 +14,7 @@
 #include <iomanip>\r
 #include <sstream>\r
 \r
-extern "C" void do_cywee_service_check_msg(int cmd);\r
+extern "C" void do_cywee_service_check_msg(int cmd,int data[]);\r
 \r
 extern "C"\r
 {\r
@@ -111,26 +111,26 @@ namespace OHOS
     {\r
         // 根据不同的运动项目进行不同的运动\r
         WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "TraingCardPresenter::OpenSensor!!");\r
-        do_cywee_service_check_msg(CYWEE_SERVICE_CMD_EXIT);\r
+        do_cywee_service_check_msg(CYWEE_SERVICE_CMD_EXIT,NULL);\r
         switch (type)\r
         {\r
         case ExerciseClass::NORMAL:\r
-            do_cywee_service_check_msg(CYWEE_SERVICE_CMD_NORMAL_MODE);\r
+            do_cywee_service_check_msg(CYWEE_SERVICE_CMD_NORMAL_MODE,NULL);\r
             break;\r
         case ExerciseClass::TREADMILL:\r
-            do_cywee_service_check_msg(CYWEE_SERVICE_CMD_TREADMILL_MODE);\r
+            do_cywee_service_check_msg(CYWEE_SERVICE_CMD_TREADMILL_MODE,NULL);\r
             break;\r
         case ExerciseClass::OUTDOOR:\r
-            do_cywee_service_check_msg(CYWEE_SERVICE_CMD_OUTDOOR_RUNNING_MODE);\r
+            do_cywee_service_check_msg(CYWEE_SERVICE_CMD_OUTDOOR_RUNNING_MODE,NULL);\r
             break;\r
         case ExerciseClass::INDOOR:\r
-            do_cywee_service_check_msg(CYWEE_SERVICE_CMD_INDOOR_RUNNING_MODE);\r
+            do_cywee_service_check_msg(CYWEE_SERVICE_CMD_INDOOR_RUNNING_MODE,NULL);\r
             break;\r
         case ExerciseClass::FITNESS_PEDOMETER:\r
-            do_cywee_service_check_msg(CYWEE_SERVICE_CMD_FITNESS_PEDOMETER_MODE);\r
+            do_cywee_service_check_msg(CYWEE_SERVICE_CMD_FITNESS_PEDOMETER_MODE,NULL);\r
             break;\r
         case ExerciseClass::FREE_TRAINING:\r
-            do_cywee_service_check_msg(CYWEE_SERVICE_CMD_FREE_TRAINING_MODE);\r
+            do_cywee_service_check_msg(CYWEE_SERVICE_CMD_FREE_TRAINING_MODE,NULL);\r
             break;\r
         default:\r
             break;\r
@@ -149,10 +149,10 @@ namespace OHOS
             OpenSensor(ExerciseClass::NORMAL);\r
             break;\r
         case ExerciseState::Pause:\r
-            do_cywee_service_check_msg(CYWEE_SERVICE_CMD_PAUSE);\r
+            do_cywee_service_check_msg(CYWEE_SERVICE_CMD_PAUSE,0);\r
             break;\r
         case ExerciseState::Continue:\r
-            do_cywee_service_check_msg(CYWEE_SERVICE_CMD_RESUME);\r
+            do_cywee_service_check_msg(CYWEE_SERVICE_CMD_RESUME,0);\r
             break;\r
         default:\r
             break;\r
index 31a214b..3c475d2 100644 (file)
@@ -504,8 +504,14 @@ typedef void (*cywee_msg_callback_t)(uint8_t msg_type, uint8_t *msg_data, int32_
 uint32_t cywee_register_msg_callback(cywee_msg_callback_t func);
 cywee_msg_callback_t cywee_get_send_msg_callback_func(void);
 
-void activity_setstatus(int cmd);
-void activity_exit(void);
+void activity_mode_setstatus(int cmd);
+void activity_mode_exit(void);
+void cywee_oncharging_update(int oncharging_status);
+void cywee_wearstatus_update(int wearstatus);
+void cywee_hrs_wearstatus_update(int hrs_data,int wearstatus);
+
+
+extern uint8_t hrs_mode_state;
 
 #pragma pack()
 
index 6f80326..a904ff9 100644 (file)
@@ -2,7 +2,7 @@
  * @Author: penglei 1624952103@qq.com
  * @Date: 2024-03-26 20:29:58
  * @LastEditors: penglei 1624952103@qq.com
- * @LastEditTime: 2024-04-11 19:01:22
+ * @LastEditTime: 2024-04-16 15:50:32
  * @FilePath: /FD230/code/sdk/drivers/peripheral/cywee/Inc/cywee_service.h
  * @Description: 
  * 
@@ -57,13 +57,17 @@ extern "C" {
 
 #define CYWEE_SERVICE_CMD_EXIT 0x1E
 
+#define CYWEE_SERVICE_CMD_WEAR_STATUS_CHANGE 0x1F
+#define CYWEE_SERVICE_CMD_ONCHARGING_CHANGE 0x20
+#define CYWEE_SERVICE_CMD_HRS_WEARSTATUS_CHANGE 0x21
+
 errcode_t uapi_cywee_service_init(void);
 void uapi_cywee_service_deinit(void);
 
 /**
  * 测试指令 参数cmd 选项: ACC_SERVICE_CMD_START_CHECK,ACC_SERVICE_CMD_STOP_CHECK
 */
-void do_cywee_service_check_msg(int cmd);
+void do_cywee_service_check_msg(int cmd,int data[]);
 
 
 #ifdef __cplusplus
index 6e5de78..583fce1 100644 (file)
@@ -60,42 +60,42 @@ static uint32_t cywee_do_test(uint8_t *para, uint32_t paraLen, char *strCommonCm
 
     if (strcmp(mode, "start") == 0) {
         PRINT("cywee start\n");
-        do_cywee_service_check_msg(CYWEE_SERVICE_CMD_START_CHECK);
+        do_cywee_service_check_msg(CYWEE_SERVICE_CMD_START_CHECK,NULL);
     } else if (strcmp(mode, "stop") == 0) {
         PRINT("cywee stop\n");
-        do_cywee_service_check_msg(CYWEE_SERVICE_CMD_STOP_CHECK);
+        do_cywee_service_check_msg(CYWEE_SERVICE_CMD_STOP_CHECK,NULL);
     } else if (strcmp(mode, "test") == 0) {
         PRINT("cywee test\n");
-        do_cywee_service_check_msg(CYWEE_SERVICE_CMD_TEST);
+        do_cywee_service_check_msg(CYWEE_SERVICE_CMD_TEST,NULL);
     } else if (strcmp(mode, "normal") == 0) {
         PRINT("cywee normal mode\n");
-        do_cywee_service_check_msg(CYWEE_SERVICE_CMD_NORMAL_MODE);
+        do_cywee_service_check_msg(CYWEE_SERVICE_CMD_NORMAL_MODE,NULL);
     } else if (strcmp(mode, "treadmill") == 0) {
         PRINT("cywee treadmill mode\n");
-        do_cywee_service_check_msg(CYWEE_SERVICE_CMD_TREADMILL_MODE);
+        do_cywee_service_check_msg(CYWEE_SERVICE_CMD_TREADMILL_MODE,NULL);
     } else if (strcmp(mode, "outdoor") == 0) {
         PRINT("cywee outdoor running mode\n");
-        do_cywee_service_check_msg(CYWEE_SERVICE_CMD_OUTDOOR_RUNNING_MODE);
+        do_cywee_service_check_msg(CYWEE_SERVICE_CMD_OUTDOOR_RUNNING_MODE,NULL);
     } else if (strcmp(mode, "indoor") == 0) {
         PRINT("cywee indoor running mode\n");
-        do_cywee_service_check_msg(CYWEE_SERVICE_CMD_INDOOR_RUNNING_MODE);
+        do_cywee_service_check_msg(CYWEE_SERVICE_CMD_INDOOR_RUNNING_MODE,NULL);
     } else if (strcmp(mode, "pedometer") == 0) {
         PRINT("cywee fitness pedometer mode\n");
-        do_cywee_service_check_msg(CYWEE_SERVICE_CMD_FITNESS_PEDOMETER_MODE);
+        do_cywee_service_check_msg(CYWEE_SERVICE_CMD_FITNESS_PEDOMETER_MODE,NULL);
     } else if (strcmp(mode, "free") == 0) {
         PRINT("cywee free training mode\n");
-        do_cywee_service_check_msg(CYWEE_SERVICE_CMD_FREE_TRAINING_MODE);
+        do_cywee_service_check_msg(CYWEE_SERVICE_CMD_FREE_TRAINING_MODE,NULL);
     } else if (strcmp(mode, "pause") == 0) {
         PRINT("cywee pause\n");
-        do_cywee_service_check_msg(CYWEE_SERVICE_CMD_PAUSE);
+        do_cywee_service_check_msg(CYWEE_SERVICE_CMD_PAUSE,NULL);
     } else if (strcmp(mode, "resume") == 0) {
         PRINT("cywee resume\n");
-        do_cywee_service_check_msg(CYWEE_SERVICE_CMD_RESUME);
+        do_cywee_service_check_msg(CYWEE_SERVICE_CMD_RESUME,NULL);
     } else if (strcmp(mode, "exit") == 0)
     {
         PRINT("cywee exit\n");
-        do_cywee_service_check_msg(CYWEE_SERVICE_CMD_EXIT);
-    }
+        do_cywee_service_check_msg(CYWEE_SERVICE_CMD_EXIT,NULL);
+    } 
     
     return ERRCODE_SUCC;
 }
index 9f4abd4..02d479f 100644 (file)
@@ -41,6 +41,7 @@
 typedef struct 
 {
     uint8_t cmd;
+    uint8_t data[2];
 } cywee_cmd_t;
 /***
  * 其他cmd在Header里定义,对外开放
@@ -207,7 +208,7 @@ static void cywee_service_check_timer_callback(void * data)
     unused(data);
     g_bat_timer_is_running = false;
     if(cywee_service_running_stat == true){
-        do_cywee_service_check_msg(CYWEE_SERVICE_CMD_TIMER_CHECK);
+        do_cywee_service_check_msg(CYWEE_SERVICE_CMD_TIMER_CHECK,NULL);
         // cywee_service_timer_start_check(CYWEE_CHECK_MS);
     }
 }
@@ -226,12 +227,14 @@ void uapi_cywee_service_deinit(void)
 
 
 
-void do_cywee_service_check_msg(int cmd)
+void do_cywee_service_check_msg(int cmd,int data[])
 {
     int ret;
 
     cywee_cmd_t mail = {0};
     mail.cmd = cmd;
+    mail.data[0] = data[0];
+    mail.data[1] = data[1];
     ret = osal_msg_queue_write_copy(g_cywee_queue, (void *)&mail, sizeof(cywee_cmd_t), 0);
     if (ret != OSAL_SUCCESS) {
         PRINT("Error cywee Check MSG 0x%02X send failed! err=0x%x! \r\n",cmd, ret);
@@ -296,13 +299,22 @@ static void cywee_service_check_task(void const *arg)
             cywee_main_dml(SPORT_ACTIVE_MODE_AR_ALERT);
             cywee_service_timer_start_check(CYWEE_CHECK_MS);
         }else if(mail.cmd == CYWEE_SERVICE_CMD_PAUSE){
-            activity_setstatus(1);
+            activity_mode_setstatus(1);
         }else if(mail.cmd == CYWEE_SERVICE_CMD_RESUME){
-            activity_setstatus(0);
+            activity_mode_setstatus(0);
         }else if(mail.cmd == CYWEE_SERVICE_CMD_EXIT){
             cywee_service_running_stat = false;
             if (g_cywee_service_timer != NULL) osTimerStop(g_cywee_service_timer);
-            activity_exit();
+            activity_mode_exit();
+        }else if(mail.cmd == CYWEE_SERVICE_CMD_ONCHARGING_CHANGE)
+        {
+            cywee_oncharging_update(mail.data[0]);
+        }else if(mail.cmd == CYWEE_SERVICE_CMD_WEAR_STATUS_CHANGE)
+        {
+            cywee_wearstatus_update(mail.data[0]);
+        }else if(mail.cmd == CYWEE_SERVICE_CMD_HRS_WEARSTATUS_CHANGE)
+        {
+            cywee_hrs_wearstatus_update(mail.data[0],mail.data[1]);
         }
     }
 }
@@ -338,7 +350,7 @@ errcode_t uapi_cywee_service_init(void)
     g_cywee_service_timer = osTimerNew((osTimerFunc_t)cywee_service_check_timer_callback, osTimerPeriodic, NULL, NULL);
   
     cywee_register_msg_callback(cywee_msg_callback);
-    do_cywee_service_check_msg(CYWEE_SERVICE_CMD_START_CHECK);
+    do_cywee_service_check_msg(CYWEE_SERVICE_CMD_START_CHECK,NULL);
     
     return ERRCODE_SUCC;
 }
index 41ad59a..5fa1a43 100644 (file)
@@ -19,9 +19,6 @@
 
 #define AP_ENABLE_DML_SDO_LISTEN
 
-int16_t gsensor_x[24] = {0};
-int16_t gsensor_y[24] = {0};
-int16_t gsensor_z[24] = {0};
 #define GSENSON_MSG_COUNT   16
 
 static gsenson_t gxyz_t;
@@ -38,25 +35,12 @@ cywee_activity_result_t c_activity_result_t;
 cywee_inactivity_result_t c_inactivity_result_t;
 static uint8_t cywee_installized = 0 ;
 
-static osTimerId_t g_cywee_hrs_timer;
-
-static osTimerId_t g_cywee_wearstatus_timer;
-
-static osTimerId_t g_cywee_oncharging_timer;
-
 CustomSensorData csd;
 
-
-
 static uint8_t hrs = 0;
-static uint8_t wearstatus = 0;
-static uint8_t wearstatus_tmp = 0;
-static uint8_t oncharging_tmp = 0;
-
 
-static unsigned long g_cywee_mode_init_queue;
 
-static uint8_t hrs_mode_state = 0;
+uint8_t hrs_mode_state = 0;
 static uint8_t wear_mode_state = 0;
 
 static uint8_t mail = 0;
@@ -126,54 +110,42 @@ void time_sync(void)
     CWM_SettingControl(SCL_DATE_TIME, &scl);
 }
 
-void cywee_hrs_check_timer_callback(void)
+void cywee_hrs_wearstatus_update(int hrs_data,int wearstatus)
 {
-    get_hrs_wearstatus(&hrs,&wearstatus);
+    uint8_t wear_status = 0;
+    hrs = hrs_data;
+    wear_status = wearstatus;
     CWM_OS_dbgPrintf("hrs : %d\r\n",hrs);
+    CWM_OS_dbgPrintf("wear_status : %d\r\n",wear_status);
+
     memset(&csd, 0, sizeof(CUSTOM_HEARTRATE));
     csd.sensorType = CUSTOM_HEARTRATE;
-    csd.fData[0] = hrs + 15;
+    csd.fData[0] = hrs;
     CWM_CustomSensorInput(&csd);
-    if(wearstatus_tmp != wearstatus)
-    {
-        wearstatus_tmp = wearstatus;
-        CWM_OS_dbgPrintf("222wearstatus : %d\r\n",wearstatus);
-        //CWM_OS_dbgPrintf("tmp : %d \r\n",tmp);
-        memset(&csd, 0, sizeof(CUSTOM_OFFBODY_DETECT));
-        csd.sensorType = CUSTOM_OFFBODY_DETECT;
-        csd.fData[0] = wearstatus;
-        CWM_CustomSensorInput(&csd);
-    }
+
+    memset(&csd, 0, sizeof(CUSTOM_OFFBODY_DETECT));
+    csd.sensorType = CUSTOM_OFFBODY_DETECT;
+    csd.fData[0] = wear_status;
+    CWM_CustomSensorInput(&csd);
+    
 }
 
-void cywee_oncharging_check_timer_callback(void)
+void cywee_oncharging_update(int oncharging_status)
 {
-    bool oncharging_status = uapi_get_charger_plug_status();
-    if(oncharging_tmp != oncharging_status)
-    {
-        oncharging_tmp = oncharging_status;
-        CWM_OS_dbgPrintf("oncharging_status : %d\r\n",oncharging_status);
-        memset(&csd, 0, sizeof(CUSTOM_ON_CHARGING));
-        csd.sensorType = CUSTOM_ON_CHARGING;
-        csd.fData[0] = oncharging_status;
-        CWM_CustomSensorInput(&csd);
-    }
+    CWM_OS_dbgPrintf("oncharging : %d\r\n",oncharging_status);
+    memset(&csd, 0, sizeof(CUSTOM_ON_CHARGING));
+    csd.sensorType = CUSTOM_ON_CHARGING;
+    csd.fData[0] = oncharging_status;
+    CWM_CustomSensorInput(&csd);
 }
 
-void cywee_wearstatus_check_timer_callback(void)
+void cywee_wearstatus_update(int wearstatus)
 {
-    get_wearstatus(&wearstatus);
-    //CWM_OS_dbgPrintf("tmp : %d \r\n",tmp);
-    if(wearstatus_tmp != wearstatus)
-    {
-        wearstatus_tmp = wearstatus;
-        CWM_OS_dbgPrintf("111wearstatus : %d\r\n",wearstatus);
-        //CWM_OS_dbgPrintf("tmp : %d \r\n",tmp);
-        memset(&csd, 0, sizeof(CUSTOM_OFFBODY_DETECT));
-        csd.sensorType = CUSTOM_OFFBODY_DETECT;
-        csd.fData[0] = wearstatus;
-        CWM_CustomSensorInput(&csd);
-    }
+    CWM_OS_dbgPrintf("111wearstatus : %d\r\n",wearstatus);
+    memset(&csd, 0, sizeof(CUSTOM_OFFBODY_DETECT));
+    csd.sensorType = CUSTOM_OFFBODY_DETECT;
+    csd.fData[0] = wearstatus;
+    CWM_CustomSensorInput(&csd);
 }
 
 void activity_mode_task(void)
@@ -181,13 +153,11 @@ void activity_mode_task(void)
     if(hrs_mode_state == 1)
     {
         ppg_send_cmd_to_driver("hrs",0);
-        //osTimerStop(g_cywee_hrs_timer);
         hrs_mode_state = 0;
     }
     if(wear_mode_state == 1)
     {
         ppg_send_cmd_to_driver("wear",0);
-        osTimerStop(g_cywee_wearstatus_timer);
         wear_mode_state = 0;
     }
     if(mail == 1 && hrs_mode_state == 0)
@@ -198,7 +168,6 @@ void activity_mode_task(void)
     else if(mail == 2 && wear_mode_state == 0)
     {
         ppg_send_cmd_to_driver("wear",1);
-        osTimerStart(g_cywee_wearstatus_timer,400);
         wear_mode_state = 1;
     }
 }
@@ -206,11 +175,9 @@ void activity_mode_task(void)
 void activity_mode_exit()
 {
     ppg_send_cmd_to_driver("wear",0);
-    osTimerStop(g_cywee_wearstatus_timer);
     wear_mode_state = 0;
 }
 
-
 errcode_t activity_mode_init(void)
 {
     app_task_definition_t taskcfg={0};
@@ -388,7 +355,7 @@ void gsensor_get_n_data(uint8_t cnt,gsenson_t t[])
         //     CWM_OS_dbgPrintf("get_gsonsen_xyz_fail\n");
         //     return;
         // }
-        CWM_OS_dbgPrintf("x : %d , y : %d , z : %d\n", gxyz_t_queue[left_falg].x, gxyz_t_queue[left_falg].y, gxyz_t_queue[left_falg].z);
+        //CWM_OS_dbgPrintf("x : %d , y : %d , z : %d\n", gxyz_t_queue[left_falg].x, gxyz_t_queue[left_falg].y, gxyz_t_queue[left_falg].z);
         t[i].x= gxyz_t_queue[left_falg].x;
         t[i].y= gxyz_t_queue[left_falg].y;
         t[i].z= gxyz_t_queue[left_falg].z;
@@ -423,7 +390,6 @@ void CWM_AP_SensorListen(pSensorEVT_t sensorEVT) {
             gxyz_t_queue[right_falg].x= sensorEVT->fData[0];
             gxyz_t_queue[right_falg].y= sensorEVT->fData[1];
             gxyz_t_queue[right_falg].z= sensorEVT->fData[2];
-
         }    
         else 
         {
@@ -435,7 +401,7 @@ void CWM_AP_SensorListen(pSensorEVT_t sensorEVT) {
             gxyz_t_queue[right_falg].x= sensorEVT->fData[0];
             gxyz_t_queue[right_falg].y= sensorEVT->fData[1];
             gxyz_t_queue[right_falg].z= sensorEVT->fData[2];
-            CWM_OS_dbgPrintf("write: x=%d, y=%d, z=%d\n", gxyz_t_queue[right_falg].x ,gxyz_t_queue[right_falg].y ,gxyz_t_queue[right_falg].z);
+            //CWM_OS_dbgPrintf("write: x=%d, y=%d, z=%d\n", gxyz_t_queue[right_falg].x ,gxyz_t_queue[right_falg].y ,gxyz_t_queue[right_falg].z);
         
         }
 
@@ -487,14 +453,7 @@ void CWM_AP_SensorListen(pSensorEVT_t sensorEVT) {
                     csd.sensorType = CUSTOM_OFFBODY_DETECT;
                     csd.fData[0] = 0;
                     CWM_CustomSensorInput(&csd);
-                    //if(mail == 2)
-                    //osTimerStart(g_cywee_wearstatus_timer,20); 
-                    // else
-                    //     osTimerStop(g_cywee_wearstatus_timer); 
-                }   
-                // else if((int)sensorEVT->fData[2] == 0)
-                //     osTimerStop(g_cywee_wearstatus_timer);
-                
+                }    
             }
             if((int)sensorEVT->fData[1] == CUSTOM_ON_CHARGING)
             {
@@ -503,21 +462,13 @@ void CWM_AP_SensorListen(pSensorEVT_t sensorEVT) {
                 {
                     memset(&csd, 0, sizeof(CUSTOM_ON_CHARGING));
                     csd.sensorType = CUSTOM_ON_CHARGING;
-                    csd.fData[0] = 0;
+                    csd.fData[0] = 1;
                     CWM_CustomSensorInput(&csd);
-                    osTimerStart(g_cywee_oncharging_timer,400); 
                 }   
-                else
-                    osTimerStop(g_cywee_oncharging_timer);
-
             }
             if((int)sensorEVT->fData[1] == CUSTOM_HEARTRATE)
             {
                 CWM_OS_dbgPrintf("CUSTOM_HEARTRATE !!! \r\n");
-                if((int)sensorEVT->fData[2] == 1)
-                    osTimerStart(g_cywee_hrs_timer,400);    
-                else
-                    osTimerStop(g_cywee_hrs_timer);
             }
              break;
         case IDX_ALGO_SHAKE:
@@ -936,9 +887,7 @@ int cywee_main_dml(int cmd)
 
         // 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 前呼叫此指令 设置手动或自动模式
         memset(&scl, 0, sizeof(scl));
@@ -973,7 +922,6 @@ int cywee_main_dml(int cmd)
     if(cmd == SPORT_ACTIVE_MODE_NORMAL)
     {
         cyw_inactivity_mode_change(INACTIVITY_MODE_SEDENTARY);
-        CWM_Sensor_Enable(IDX_ALGO_INACTIVITY_OUTPUT);
     }
     // memset(&scl, 0, sizeof(scl));
     // scl.iData[0] = 1;
index aa4a45d..14b4af8 100644 (file)
@@ -33,6 +33,7 @@
 // #include "app_task.h"\r
 \r
 #include "cywee_hal.h"\r
+#include "cywee_service.h"\r
 \r
 FT_CUSTOM_RESULTS_t hrsresult ={0};\r
 \r
@@ -40,7 +41,7 @@ int16_t gsen_fifo_x[64]={0};
 int16_t gsen_fifo_y[64]={0};\r
 int16_t gsen_fifo_z[64]={0};\r
 \r
-gsenson_t gsensordata[8];\r
+gsenson_t gsensordata[16];\r
 \r
 #ifdef SPO2_VECTOR\r
 #include "spo2_vec.h"\r
@@ -117,10 +118,9 @@ uint8_t alg_ram[11 * 1024] __attribute__((aligned(4)));
 //uint8_t alg_ram[10] = {0};\r
 ppg_sensor_data_t ppg_s_data;\r
 \r
-uint8_t free_trainning_hrs = 0;\r
-uint8_t free_trainning_wearstatus = 0;\r
+int hrs_data[2] = {0};\r
 \r
-uint8_t wear_mode_status = 0;\r
+int wear_mode_status = 0;\r
 \r
 //////// spo2 para and switches\r
 const  uint8_t   COUNT_BLOCK_NUM = 25;            //delay the block of some single good signal after a series of bad signal\r
@@ -162,17 +162,6 @@ static int32_t ir_jump_delta = 0;
 static int32_t cali_data_cnt = 0;\r
 #endif\r
 \r
-void get_hrs_wearstatus(uint8_t *hrs,uint8_t *wearstatus)\r
-{\r
-    *hrs = free_trainning_hrs;\r
-    *wearstatus = free_trainning_wearstatus;\r
-}\r
-\r
-void get_wearstatus(uint8_t *wearstatus)\r
-{\r
-    *wearstatus = wear_mode_status;\r
-}\r
-\r
 // us 延时函数, 客户需填写\r
 void hx3695_delay_us(uint32_t us)\r
 {\r
@@ -2744,34 +2733,35 @@ void hx3695_hrs_ppg_Int_handle(void)
        // result.gr_data_final = hrs_s_dat.green_data[0];\r
        // result.ir_data_final = hrs_s_dat.ir_data[0];\r
        // hx3695_factory_test_process(NULL, APP_FACTORY_TEST_HR_START, &result);\r
-\r
-    //gsensor_get_n_data(1,gsensordata);\r
-\r
-    for(ii=0; ii<*count; ii++)\r
-     {\r
-        // if(ii == 8)\r
-        // {\r
-        //     gsen_fifo_x_send[ii] = gsen_fifo_x_send[ii - 1];\r
-        //     gsen_fifo_y_send[ii] = gsen_fifo_y_send[ii - 1];\r
-        //     gsen_fifo_z_send[ii] = gsen_fifo_z_send[ii - 1];\r
-        // }\r
-        // else\r
-        // {\r
-        //     gsen_fifo_x_send[ii] = gsensordata[ii].x;\r
-        //     gsen_fifo_y_send[ii] = gsensordata[ii].y;\r
-        //     gsen_fifo_z_send[ii] = gsensordata[ii].z;\r
-        // }\r
-\r
-        //PRINT("hxdata:%d/%d %d %d %d %d %d %d\r\n" ,1+ii,*count,PPG_buf[ii],ir_buf[0],gsen_fifo_x[ii],gsen_fifo_y[ii],gsen_fifo_z[ii],ppg_s_data.green_cur);\r
-    }\r
-\r
-    hrs_wear_status = hx3695_hrs_get_wear_status();\r
-         PRINT("hrs_wear_status:    %d !!\r\n", hrs_wear_status);\r
-  \r
-    if(hrs_wear_status == MSG_HRS_WEAR)\r
+    PRINT("*count : %d \r\n",*count);\r
+    if(*count < 10)\r
     {\r
-        tyhx_hrs_alg_send_data(PPG_buf, *count, gsen_fifo_x_send, gsen_fifo_y_send, \r
-                         gsen_fifo_z_send, cal.Group1_Ledidac);\r
+      gsensor_get_n_data(16,gsensordata);\r
+      for(ii=0; ii<*count; ii++)\r
+      {\r
+          if(ii == 8)\r
+          {\r
+              gsen_fifo_x_send[ii] = gsen_fifo_x_send[ii - 1];\r
+              gsen_fifo_y_send[ii] = gsen_fifo_y_send[ii - 1];\r
+              gsen_fifo_z_send[ii] = gsen_fifo_z_send[ii - 1];\r
+          }\r
+          else\r
+          {\r
+              gsen_fifo_x_send[ii] = (gsensordata[ii*2].x + gsensordata[2*ii + 1].x)/2;\r
+              gsen_fifo_y_send[ii] = (gsensordata[ii*2].y + gsensordata[2*ii + 1].y)/2;\r
+              gsen_fifo_z_send[ii] = (gsensordata[ii*2].z + gsensordata[2*ii + 1].z)/2;\r
+          }\r
+          PRINT("hxdata:%d/%d %d %d %d %d %d %d\r\n" ,1+ii,*count,PPG_buf[ii],ir_buf[0],gsen_fifo_x_send[ii],gsen_fifo_y_send[ii],gsen_fifo_z_send[ii],ppg_s_data.green_cur);\r
+      }\r
+\r
+      hrs_wear_status = hx3695_hrs_get_wear_status();\r
+      PRINT("hrs_wear_status:    %d !!\r\n", hrs_wear_status);\r
+    \r
+      if(hrs_wear_status == MSG_HRS_WEAR)\r
+      {\r
+          tyhx_hrs_alg_send_data(PPG_buf, *count, gsen_fifo_x_send, gsen_fifo_y_send, \r
+          gsen_fifo_z_send, cal.Group1_Ledidac);\r
+      }\r
     }\r
 #endif\r
 \r
@@ -2809,9 +2799,13 @@ void hx3695_hrs_ppg_Int_handle(void)
     PRINT("hx3695 data_cnt: %d,  hr_living: %d, hr_living_qu: %d, hr_living_std: %d, hr_result:%d \r\n",\r
                alg_results.data_cnt,  hrsresult.hr_living, hrsresult.hr_living_qu, hrsresult.hr_living_std, hrsresult.lastesthrs);\r
 \r
-    free_trainning_hrs = hrsresult.lastesthrs;\r
-    free_trainning_wearstatus = hrs_wear_status;\r
+    if(hrs_mode_state)\r
+    {\r
+        hrs_data[0] = hrsresult.lastesthrs;\r
+        hrs_data[1] = hrs_wear_status;\r
 \r
+        do_cywee_service_check_msg(CYWEE_SERVICE_CMD_HRS_WEARSTATUS_CHANGE,hrs_data);\r
+    }\r
 \r
     if(hrsresult.lastesthrs > 0)\r
     {\r
@@ -3463,8 +3457,12 @@ void hx3695_wear_ppg_Int_handle(void)
     hx3695_check_touch_read(&ppg_s_data);\r
     hx3695_wear_status = hx3695_check_touch_send_data(ir_buf,*count);\r
     hrsresult.wearstatus = hx3695_wear_status;\r
-    wear_mode_status = hx3695_wear_status;\r
-    //PRINT("wear_mode_status : %d \r\n",wear_mode_status);\r
+    if(wear_mode_status != hx3695_wear_status)\r
+    {\r
+        wear_mode_status = hx3695_wear_status;\r
+        do_cywee_service_check_msg(CYWEE_SERVICE_CMD_WEAR_STATUS_CHANGE,&wear_mode_status);\r
+    }\r
+\r
        extern uint8_t notouch_cnt;\r
        extern uint8_t touch_cnt;\r
        \r
index fa7e7d8..eb733d1 100644 (file)
@@ -45,6 +45,8 @@ extern "C" {
 
 #include "hx3695_hal.h"
 #include "custom_utils.h"
+#include "cywee_hal.h"
+
 static bool g_ppg_service_initialled = false;
 
 uint8_t card_databuf[64] = {0};
@@ -55,7 +57,7 @@ uint8_t light_databuf[64] = {0};
 
 
 #define PPG_SERVICE_MSG_COUNT       16
-#define PPG_SERVICE_TASK_SIZE       0x800
+#define PPG_SERVICE_TASK_SIZE       0x900
 #define PPG_SERVICE_TASK_PRIO       5
 
 #define MAG_CHECK_MS 20