Merge #16 into xts_origin from refs/changes/16/head
author彭磊 <1624952103@qq.com>
Tue, 16 Apr 2024 13:08:42 +0000 (13:08 +0000)
committersnickersun@163.com <accounts_62b90f7fcf51ade33b6f628e@mail.teambition.com>
Tue, 16 Apr 2024 13:08:42 +0000 (13:08 +0000)
Code review from 彭磊

* refs/changes/16/head: (3 commits squashed)

  - 修改心率驱动,解决佩戴模式不能获得佩戴状态的问题,

  - Merge branch &#39;xts_origin&#39; of https://codeup.aliyun.com/64191456b9581d62e8f81ac0/FD230 into xts_origin

  - 优化心率驱动,解决佩戴模式不能正确获取佩戴状态的问题,添加动态心率,优化运动模式切换流程

Signed-off-by: aliyun6865282430 <1624952103@qq.com>
Commented-by: snickersun@163.com <accounts_62b90f7fcf51ade33b6f628e@mail.teambition.com>
Reviewed-by: snickersun@163.com <accounts_62b90f7fcf51ade33b6f628e@mail.teambition.com>
Merged-by: snickersun@163.com <accounts_62b90f7fcf51ade33b6f628e@mail.teambition.com>
link: https://codeup.aliyun.com/64191456b9581d62e8f81ac0/FD230/change/16
16 files changed:
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/hx3695/hx3695_check_touch.c
code/sdk/drivers/peripheral/ppg/hx3695/hx3695_hal.c
code/sdk/drivers/peripheral/ppg/hx3695/hx3695_hrs_agc.c
code/sdk/drivers/peripheral/ppg/hx3695/hx3695_hrs_agc.h
code/sdk/drivers/peripheral/ppg/service/ppg_service.cpp
code/sdk/drivers/peripheral/ppg/service/ppg_service.h

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 3caaf82..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()
 
@@ -530,6 +536,7 @@ void cywee_int_handler(void);
 void watch_hand_updown(int fdata);
 void cyw_inactivity_mode_change(int mode);
 void cyw_activity_mode_change(int mode);
+void set_user_info(int age,int gender,double weight,int height,int wearing_method);
 
 #ifdef __cplusplus
 #if __cplusplus
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 3134adc..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;
@@ -36,28 +33,58 @@ SettingControl_t scl;
 
 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 ;
+static uint8_t cywee_installized = 0 ;
 
-static osTimerId_t g_cywee_hrs_timer;
+CustomSensorData csd;
 
-// static osTimerId_t g_cywee_wearstatus_timer;
+static uint8_t hrs = 0;
 
-static osTimerId_t g_cywee_oncharging_timer;
 
-CustomSensorData csd;
+uint8_t hrs_mode_state = 0;
+static uint8_t wear_mode_state = 0;
+
+static uint8_t mail = 0;
+
+void watch_hand_updown(int fdata)
+{
+    #if defined(SUPPORT_POWER_MANAGER)
+    const power_display_svr_api_t *display_api = power_display_svr_get_api();
+    #endif
+    if (fdata == 2)
+    {
+    #if defined(SUPPORT_POWER_MANAGER)
+        display_api->set_screen_set_keepon_timeout(0);
+        CWM_OS_dbgPrintf("[cwyee] turn_off_screen");
+    #endif
+    }else if (fdata == 1)
+    {
+    #if defined(SUPPORT_POWER_MANAGER)
+        if (display_api->get_screen_state() != SCREEN_ON) {
+            CWM_OS_dbgPrintf("[cwyee] turn_on_screen");
+            display_api->turn_on_screen();
+        }
+        display_api->set_screen_set_keepon_timeout(5000);
+    #endif
+    }
+}
+
+void get_sleep_data(void)
+{
+    memset(&scl, 0, sizeof(scl));
+    scl.iData[0] = 1;
+    scl.iData[1] = 0;
+    CWM_SettingControl(SCL_REQ_SLEEPING_DATA, &scl);
+}
 
-static uint8_t hrs = 0;
-static uint8_t wearstatus = 0;
 
 void set_user_info(int age,int gender,double weight,int height,int wearing_method)
 {
     memset(&scl, 0, sizeof(scl));
     scl.iData[0] = 1;
     scl.iData[1] = age;
-    scl.iData[2] = weight;
+    scl.iData[2] = gender;
     scl.iData[3] = (int)weight;
-    scl.iData[4] = weight;
+    scl.iData[4] = height;
     scl.iData[5] = wearing_method;
     CWM_SettingControl(SCL_USER_INFO, &scl);
 }
@@ -69,7 +96,7 @@ void time_sync(void)
     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_year+1900,timeinfo->tm_mon+1,timeinfo->tm_mday,
     timeinfo->tm_hour,timeinfo->tm_min,timeinfo->tm_sec);
 
     memset(&scl, 0, sizeof(scl));
@@ -83,89 +110,95 @@ 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);
-    CWM_OS_dbgPrintf("hrs : %d,wearstatus : %d \r\n",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);
+
     memset(&csd, 0, sizeof(CUSTOM_OFFBODY_DETECT));
     csd.sensorType = CUSTOM_OFFBODY_DETECT;
-    csd.fData[0] = wearstatus;
+    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;
-    oncharging_status = uapi_get_charger_plug_status();
-    //CWM_OS_dbgPrintf("charging_status : %d\r\n",oncharging_status);
+    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_update(int wearstatus)
+{
+    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 free_training_task(void)
+void activity_mode_task(void)
 {
-    ppg_send_cmd_to_driver("hrs",1);
+    if(hrs_mode_state == 1)
+    {
+        ppg_send_cmd_to_driver("hrs",0);
+        hrs_mode_state = 0;
+    }
+    if(wear_mode_state == 1)
+    {
+        ppg_send_cmd_to_driver("wear",0);
+        wear_mode_state = 0;
+    }
+    if(mail == 1 && hrs_mode_state == 0)
+    {
+        ppg_send_cmd_to_driver("hrs",1);
+        hrs_mode_state = 1;
+    }
+    else if(mail == 2 && wear_mode_state == 0)
+    {
+        ppg_send_cmd_to_driver("wear",1);
+        wear_mode_state = 1;
+    }
 }
 
-errcode_t free_training_init(void)
+void activity_mode_exit()
+{
+    ppg_send_cmd_to_driver("wear",0);
+    wear_mode_state = 0;
+}
+
+errcode_t activity_mode_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.name="activity_mode_service";
     taskcfg.attr.priority = TASK_PRIORITY_CMD;
     taskcfg.attr.stack_size =  1024*8;
-    taskcfg.func = free_training_task;
+    taskcfg.func = activity_mode_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);
+        CWM_OS_dbgPrintf("create activity_mode_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)
-    const power_display_svr_api_t *display_api = power_display_svr_get_api();
-    #endif
-    if (fdata == 2)
-    {
-    #if defined(SUPPORT_POWER_MANAGER)
-        display_api->set_screen_set_keepon_timeout(0);
-        CWM_OS_dbgPrintf("[cwyee] turn_off_screen");
-    #endif
-    }else if (fdata == 1)
-    {
-    #if defined(SUPPORT_POWER_MANAGER)
-        if (display_api->get_screen_state() != SCREEN_ON) {
-            CWM_OS_dbgPrintf("[cwyee] turn_on_screen");
-            display_api->turn_on_screen();
-        }
-        display_api->set_screen_set_keepon_timeout(5000);
-    #endif
-    }
-}
-
 //0:resume , 1:pause
-void activity_setstatus(int cmd)
+void activity_mode_setstatus(int cmd)
 {
     memset(&scl, 0, sizeof(scl));
     scl.iData[0] = 1;
@@ -173,29 +206,9 @@ void activity_setstatus(int cmd)
     CWM_SettingControl(SCL_ACTIVITY_PAUSE, &scl);
 }
 
-
-void activity_exit(void)
-{
-    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)
 {
+    time_sync();
     switch (mode)
     {
         //無作用
@@ -208,7 +221,7 @@ void cyw_inactivity_mode_change(int mode)
 
         //久坐和有效站立
         case INACTIVITY_MODE_SEDENTARY:
-            PRINT("INACTIVITY_MODE_SEDENTARY\r\n");
+            CWM_OS_dbgPrintf("INACTIVITY_MODE_SEDENTARY\r\n");
             //training_mode_init();
             //配置久坐相关参数
             memset(&scl, 0, sizeof(scl));
@@ -264,6 +277,7 @@ void cyw_inactivity_mode_change(int mode)
 
 void cyw_activity_mode_change(int mode)
 {
+    activity_mode_init();
     switch (mode)
     {
         //一般模式(生活模式)
@@ -272,9 +286,6 @@ void cyw_activity_mode_change(int mode)
             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__);
-
             break;
 
         //跑步机
@@ -283,7 +294,6 @@ void cyw_activity_mode_change(int mode)
             scl.iData[0] = 1;
             scl.iData[1] = SPORT_ACTIVE_MODE_TREADMILL;
             CWM_SettingControl(SCL_SET_ACTIVITY_MODE, &scl);
-
             break;
 
         //户外跑步
@@ -312,7 +322,6 @@ void cyw_activity_mode_change(int mode)
 
         //自由运动
         case SPORT_ACTIVE_MODE_FREE_TRAINING:
-            free_training_init();
             memset(&scl, 0, sizeof(scl));
             scl.iData[0] = 1;
             scl.iData[1] = SPORT_ACTIVE_MODE_FREE_TRAINING;
@@ -346,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;
@@ -381,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 
         {
@@ -393,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);
         
         }
 
@@ -439,20 +447,28 @@ void CWM_AP_SensorListen(pSensorEVT_t sensorEVT) {
             if((int)sensorEVT->fData[1] == CUSTOM_OFFBODY_DETECT)
             {
                 CWM_OS_dbgPrintf("CUSTOM_OFFBODY_DETECT !!! \r\n");
-                // if(free_training_installized == 1)
-                //     osTimerStart(g_cywee_wearstatus_timer,20);
+                if((int)sensorEVT->fData[2] == 1)
+                {
+                    memset(&csd, 0, sizeof(CUSTOM_OFFBODY_DETECT));
+                    csd.sensorType = CUSTOM_OFFBODY_DETECT;
+                    csd.fData[0] = 0;
+                    CWM_CustomSensorInput(&csd);
+                }    
             }
             if((int)sensorEVT->fData[1] == CUSTOM_ON_CHARGING)
             {
                 CWM_OS_dbgPrintf("CUSTOM_ON_CHARGING !!! \r\n");
-                //if(free_training_installized == 1)
-                osTimerStart(g_cywee_oncharging_timer,20);
+                if((int)sensorEVT->fData[2] == 1)
+                {
+                    memset(&csd, 0, sizeof(CUSTOM_ON_CHARGING));
+                    csd.sensorType = CUSTOM_ON_CHARGING;
+                    csd.fData[0] = 1;
+                    CWM_CustomSensorInput(&csd);
+                }   
             }
             if((int)sensorEVT->fData[1] == CUSTOM_HEARTRATE)
             {
                 CWM_OS_dbgPrintf("CUSTOM_HEARTRATE !!! \r\n");
-                if(free_training_installized == 1)
-                    osTimerStart(g_cywee_hrs_timer,20);
             }
              break;
         case IDX_ALGO_SHAKE:
@@ -577,7 +593,7 @@ void CWM_AP_SensorListen(pSensorEVT_t sensorEVT) {
                 c_activity_result_t.MHR_zone = (int)sensorEVT->fData[6];
                 c_activity_result_t.hrs = hrs;
                 cywee_func(CYWEE_MSG_TYPE_ACTIVITY_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]);
@@ -672,6 +688,10 @@ void CWM_AP_dmlSensorDataOutput_listen(const dml_sensorData_t * pSdo) {
 
 int cywee_main_dml(int cmd) 
 {
+    if(cmd == SPORT_ACTIVE_MODE_NORMAL)
+        mail = 2;
+    else
+        mail = 1;
 
     if (cywee_installized==0)
     {
@@ -860,14 +880,16 @@ int cywee_main_dml(int cmd)
         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_SettingControl(SCL_LOG, &scl);
+        
+        
 
-        //呼叫任一個CWM_Sensor_Enable 前呼叫此指令 设置手动或自动模式
+            //呼叫任一個CWM_Sensor_Enable 前呼叫此指令 设置手动或自动模式
         memset(&scl, 0, sizeof(scl));
         scl.iData[0] = 1;
         scl.iData[1] = 1;
@@ -879,12 +901,10 @@ int cywee_main_dml(int cmd)
         memset(&scl, 0, sizeof(scl));
         scl.iData[0] = 1;
         scl.iData[3] = 3;
-        scl.iData[4] = 5;
-        // CWM_SettingControl(SCL_LOG, &scl);
-        
+            scl.iData[4] = 5;
+
         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);
 
@@ -897,12 +917,12 @@ int cywee_main_dml(int cmd)
         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");
     }
-    
     cyw_activity_mode_change(cmd);
     if(cmd == SPORT_ACTIVE_MODE_NORMAL)
-        cyw_activity_mode_change(INACTIVITY_MODE_NOTHING);
+    {
+        cyw_inactivity_mode_change(INACTIVITY_MODE_SEDENTARY);
+    }
     // memset(&scl, 0, sizeof(scl));
     // scl.iData[0] = 1;
     // scl.iData[1] = SPORT_ACTIVE_MODE_NORMAL; //ACTIVITY_MODE_NORMAL 1001
index 2a48240..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,8 +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
+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
@@ -160,13 +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
-\r
 // us 延时函数, 客户需填写\r
 void hx3695_delay_us(uint32_t us)\r
 {\r
@@ -427,12 +422,11 @@ uint16_t hx3695_read_fifo_data(int32_t *buf, uint8_t phase_num, uint8_t sig)
                        hx3695_brust_read_reg(0x22, databuf, 3);        \r
                        read_fifo_first_flg = 0;\r
                }       \r
-               hx3695_brust_read_reg(0x22, fifo_data_buf, fifo_read_bytes);\r
-    PRINT("hx3695_brust_read_reg !!! \r\n");           \r
-                                                       for(ii=0; ii<fifo_read_bytes; ii++)\r
-                                                       {\r
-                                                               PRINT("%d/%d, %d\r\n", ii+1,fifo_read_bytes,fifo_data_buf[ii]);                         \r
-                                                       }\r
+               hx3695_brust_read_reg(0x22, fifo_data_buf, fifo_read_bytes);    \r
+                                                       // for(ii=0; ii<fifo_read_bytes; ii++)\r
+                                                       // {\r
+                                                       //      PRINT("%d/%d, %d\r\n", ii+1,fifo_read_bytes,fifo_data_buf[ii]);                         \r
+                                                       // }\r
                for(ii=0; ii<fifo_read_length; ii++)\r
                {\r
                        if(sig==0)\r
@@ -2555,7 +2549,7 @@ typedef struct {
 \r
 void heart_rate_meas_timeout_handler(void * p_context)\r
 {\r
-       TYHX_LOG(" heart_rate_meas_timeout_handler  mode: %d \n", work_mode_flag);\r
+       //TYHX_LOG(" heart_rate_meas_timeout_handler  mode: %d \n", work_mode_flag);\r
        \r
     switch(work_mode_flag)\r
     {\r
@@ -2739,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
@@ -2804,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
@@ -3142,17 +3141,17 @@ void hx3695_spo2_ppg_Int_handle(void)
         DEBUG_PRINTF("\r\n send1  jlink cnt=%d\r\n",*count);   \r
   \r
   /*屏蔽*/\r
-//     for(ii=0; ii<*count; ii++)\r
-//     {\r
-//         gsen_fifo_x_send[ii] = gsen_fifo_x[32-*count+ii];\r
-//         gsen_fifo_y_send[ii] = gsen_fifo_y[32-*count+ii];\r
-//         gsen_fifo_z_send[ii] = gsen_fifo_z[32-*count+ii];\r
-// //          PRINT("hx3695  data: %d/%d %d %d %d %d %d %d\r\n" ,\r
-// //                  1+ii,*count,red_buf[ii],ir_buf[ii],green_buf[ii],gsen_fifo_x[ii],gsen_fifo_y[ii],gsen_fifo_z[ii]);\r
-// //          printf("FFF==>spo2  red_buf : %d,  %d,  %d,     %d \n", 1+ii, *count, red_buf[ii], ir_buf[0]);\r
+    // for(ii=0; ii<*count; ii++)\r
+    // {\r
+    //     gsen_fifo_x_send[ii] = gsen_fifo_x[32-*count+ii];\r
+    //     gsen_fifo_y_send[ii] = gsen_fifo_y[32-*count+ii];\r
+    //     gsen_fifo_z_send[ii] = gsen_fifo_z[32-*count+ii];\r
+               // PRINT("hxdata:%d/%d %d %d %d %d %d %d\r\n",\r
+               //      1+ii,*count,red_buf[ii],ir_buf[ii],green_buf[ii],gsen_fifo_x[ii],gsen_fifo_y[ii],gsen_fifo_z[ii]);\r
+               // //printf("FFF==>spo2  red_buf : %d,  %d,  %d,        %d \n", 1+ii, *count, red_buf[ii], ir_buf[0]);\r
                \r
 \r
-//     }\r
+    //  }\r
 \r
 //     ft_ppg_iir = spo2_s_dat.red_data[0];\r
 //     hx3695_factory_test_process(NULL, APP_FACTORY_TEST_SPO2_START, &ft_ppg_iir);\r
@@ -3456,21 +3455,25 @@ void hx3695_wear_ppg_Int_handle(void)
     hx3695_wear_msg_code_t hx3695_wear_status;\r
        \r
     hx3695_check_touch_read(&ppg_s_data);\r
-       \r
     hx3695_wear_status = hx3695_check_touch_send_data(ir_buf,*count);\r
     hrsresult.wearstatus = hx3695_wear_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
 //     PRINT("===> touch_cnt: %d, notouch_cnt: %d, wear status: %d,   \r\n", touch_cnt, notouch_cnt, hx3695_wear_status);\r
 \r
-       PRINT("hx3695_wear_ppg_Int_handle  wearstatus = %d\r\n", hrsresult.wearstatus);\r
-       PRINT("count : %d \r\n",*count);\r
-   for(int i=0;i<*count;i++)\r
-   {\r
-       PRINT("%d,%d,%d,%d,%d,%d\r\n",1+i,*count,ir_buf[i],ppg_s_data.s_buf[i*2],ppg_s_data.s_buf[i*2+1],hx3695_wear_status);\r
-   }\r
+       // PRINT("hx3695_wear_ppg_Int_handle  wearstatus = %d\r\n", hrsresult.wearstatus);\r
+       // PRINT("count : %d \r\n",*count);\r
+  //  for(int i=0;i<*count;i++)\r
+  //  {\r
+  //      PRINT("%d,%d,%d,%d,%d,%d\r\n",1+i,*count,ir_buf[i],ppg_s_data.s_buf[i*2],ppg_s_data.s_buf[i*2+1],hx3695_wear_status);\r
+  //  }\r
 }\r
 #endif\r
 \r
index c4b2e4d..a41375f 100644 (file)
@@ -8,7 +8,7 @@
 #include "tyhx_hrs_custom.h"\r
 #include "hx3695.h"\r
 #include "hx3695_check_touch.h"\r
-\r
+#include "hx3695_hrs_agc.h"\r
 \r
 \r
 hx3695_wear_msg_code_t hx3695_wear_status = MSG_NO_WEAR;\r
@@ -137,7 +137,7 @@ uint8_t hx3695_check_touch_read(ppg_sensor_data_t *s_dat)
          int32_t *green_data = &(s_dat->green_data[0]);\r
     int32_t *ir_buf =  &(s_dat->ir_data[0]);\r
     int32_t *s_buf =  &(s_dat->s_buf[0]);\r
-\r
+    int32_t IR_data[8] = {0};\r
 //    size = hx3695_read_fifo_size();\r
 //        \r
 //    if(size<2)\r
@@ -148,13 +148,14 @@ uint8_t hx3695_check_touch_read(ppg_sensor_data_t *s_dat)
 //    if (size && size <= 256)\r
 //    {\r
         fifo_out_size = hx3695_read_fifo_data(s_buf,hrs_phase_num,2);\r
-        PRINT("fifo_out_size : %d\r\n",fifo_out_size);\r
+        //PRINT("fifo_out_size : %d\r\n",fifo_out_size);\r
         s_dat->count = fifo_out_size;\r
+        read_hrs_data_packet(IR_data);\r
         for (i=0; i<fifo_out_size; i++)\r
         {   \r
                                          green_data[i] = (s_buf[i*3]);\r
             ir_buf[i] = (s_buf[i*3+2] );\r
-                                       TYHX_LOG("touch_green:%d/%d %d,  touch_ir: %d \r\n" ,1+i,fifo_out_size,green_data[i],s_buf[i*3+2]);\r
+                                       //TYHX_LOG("touch_green:%d/%d %d,  touch_ir: %d \r\n" ,1+i,fifo_out_size,green_data[i],s_buf[i*3+2]);\r
         }\r
 //    }\r
     return size;\r
@@ -164,20 +165,21 @@ hx3695_wear_msg_code_t hx3695_check_touch_send_data(int32_t *ir_data, uint8_t co
 {\r
     uint8_t ii;\r
     hx3695_wear_msg_code_t wear_status;\r
-    if(count==0)\r
-    {\r
-        return wear_status;\r
-    }\r
-    for(ii=0; ii<count; ii++)\r
-    {\r
-        wear_status = check_touch_alg(ir_data[ii]);\r
-    }\r
+    // if(count==0)\r
+    // {\r
+    //     return wear_status;\r
+    // }\r
+    // for(ii=0; ii<count; ii++)\r
+    // {\r
+        wear_status = check_touch_alg(ir_data);\r
+    //}\r
     return wear_status;\r
 }\r
 \r
 hx3695_wear_msg_code_t check_touch_alg(int32_t ir_data)\r
 {\r
-    PRINT("ir_data : %d \r\n",ir_data);\r
+    ir_data = Ir_data;\r
+    //PRINT("ir_data : %d \r\n",ir_data);\r
     if(ir_data>check_mode_wear_thre)\r
     {\r
         notouch_cnt = 0;\r
index 944aa79..e13ee4e 100644 (file)
@@ -2,8 +2,8 @@
  * @Author: penglei 1624952103@qq.com
  * @Date: 2024-03-13 15:08:38
  * @LastEditors: penglei 1624952103@qq.com
- * @LastEditTime: 2024-04-12 20:23:58
- * @FilePath: /FD230/code/sdk/drivers/peripheral/ppg/hx3695/hx3695_hal.c
+ * @LastEditTime: 2024-04-13 17:22:50
+ * @FilePath: /sdk/drivers/peripheral/ppg/hx3695/hx3695_hal.c
  * @Description: 
  * 
  * Copyright (c) 2024 by ${git_name_email}, All Rights Reserved. 
@@ -70,7 +70,7 @@ void ppg_send_cmd_to_driver(char* mode, uint8_t enable)
     } else {
 
     //    ppg_service_running_stat = false;
-       if(md == HRS_MODE|| md == FT_LEAK_LIGHT_MODE || md == FT_GRAY_CARD_MODE || md == FT_GRAY_CARD_MODE)
+       if(md == HRS_MODE|| md == FT_LEAK_LIGHT_MODE || md == FT_GRAY_CARD_MODE || md == WEAR_MODE)
         {
 #ifdef HRS_ALG_LIB   
             hx3695_hrs_disable();
index 98b7a7a..aa3fb23 100644 (file)
@@ -44,6 +44,8 @@ static hrs_wear_msg_code_t hrs_wear_status_pre = MSG_HRS_NO_WEAR;
 \r
 static uint8_t no_touch_cnt = 0;\r
 \r
+int32_t Ir_data = 0;\r
+\r
 void Init_hrs_PPG_Calibration_Routine(HRS_CAL_SET_T *calR)\r
 {\r
     calR->flag = CAL_FLG_LED_DR|CAL_FLG_LED_DAC|CAL_FLG_AMB_DAC|CAL_FLG_RF;\r
@@ -515,8 +517,8 @@ void read_hrs_data_packet(int32_t *s_buf)
                s_buf[6] = ((databuf4[0])|(databuf4[1]<<8)|(databuf4[2]<<16));  \r
     s_buf[7] = ((databuf4[3])|(databuf4[4]<<8)|(databuf4[5]<<16));\r
                \r
-//             SEGGER_RTT_printf(0,"phase7_data:  %d, phase8_data:  %d\r\n", s_buf[6],s_buf[7]);\r
-               \r
+               //PRINT("phase7_data:  %d, phase8_data:  %d   %d\r\n", s_buf[6],s_buf[7],s_buf[7] - s_buf[6]);\r
+               Ir_data = s_buf[7] - s_buf[6];\r
 }\r
 \r
 void read_hrs_ir_packet(int32_t *buf)\r
index 8f63744..91aea99 100644 (file)
@@ -112,4 +112,6 @@ hrs_wear_msg_code_t hx3695_hrs_wear_mode_check(WORK_MODE_T mode, int32_t infrare
 HRS_CAL_SET_T get_hrs_agc_status(void);\r
 void hx3695_hrs_data_reset(void);\r
 \r
+extern int32_t Ir_data;\r
+\r
 #endif\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
index 9f4e5e2..9940bee 100644 (file)
@@ -53,7 +53,7 @@ uint32_t ppg_suspend(void);
 uint32_t ppg_resume(void);
 
 void get_hrs_wearstatus(uint8_t *hrs,uint8_t *wearstatus);
-
+void get_wearstatus(uint8_t *wearstatus);
 typedef enum {
     PPG_TEST_MODE_HRS,
     PPG_TEST_MODE_SPO2,