屏蔽运动不需要的topic,优化燃脂时间计算,合入3695新驱动,支持hrv测量
authorpenglei <1624952103@qq.com>
Mon, 27 Oct 2025 07:10:08 +0000 (15:10 +0800)
committerpenglei <1624952103@qq.com>
Mon, 27 Oct 2025 07:10:08 +0000 (15:10 +0800)
34 files changed:
code/sdk/application/wearable/fd230/nativeapp/nativeui/traing/src/TraingModel.cpp
code/sdk/application/wearable/fd230/service/broadcast/include/broadcast_feature.h
code/sdk/application/wearable/fd230/service/broadcast/src/broadcast_implement.c
code/sdk/application/wearable/fd230/service/msg_center/src/msg_center_customer.cpp
code/sdk/application/wearable/fd272/nativeapp/nativeui/traing/src/TraingModel.cpp
code/sdk/application/wearable/fd272/service/broadcast/include/broadcast_feature.h
code/sdk/application/wearable/fd272/service/broadcast/src/broadcast_implement.c
code/sdk/application/wearable/fd272/service/msg_center/src/msg_center_customer.cpp
code/sdk/application/wearable/n9/nativeapp/nativeui/traing/src/TraingModel.cpp
code/sdk/application/wearable/n9/service/broadcast/include/broadcast_feature.h
code/sdk/application/wearable/n9/service/broadcast/src/broadcast_implement.c
code/sdk/application/wearable/n9/service/msg_center/src/msg_center_customer.cpp
code/sdk/zhihui/drivers/cywee/dml/cywee_dml.c
code/sdk/zhihui/drivers/ppg/hx3695/CMakeLists.txt
code/sdk/zhihui/drivers/ppg/hx3695/hx3695.c
code/sdk/zhihui/drivers/ppg/hx3695/hx3695.h
code/sdk/zhihui/drivers/ppg/hx3695/hx3695_agc.c [new file with mode: 0644]
code/sdk/zhihui/drivers/ppg/hx3695/hx3695_agc.h [new file with mode: 0644]
code/sdk/zhihui/drivers/ppg/hx3695/hx3695_factory_test.c
code/sdk/zhihui/drivers/ppg/hx3695/hx3695_factory_test.h
code/sdk/zhihui/drivers/ppg/hx3695/hx3695_hrs_agc.c
code/sdk/zhihui/drivers/ppg/hx3695/hx3695_hrs_agc.h
code/sdk/zhihui/drivers/ppg/hx3695/hx3695_hrv_agc.c
code/sdk/zhihui/drivers/ppg/hx3695/hx3695_hrv_agc.h
code/sdk/zhihui/drivers/ppg/hx3695/hx3695_spo2_agc.c
code/sdk/zhihui/drivers/ppg/hx3695/hx3695_spo2_agc.h
code/sdk/zhihui/drivers/ppg/hx3695/libHX3697_hs_20240607_3333__02_spo.a [new file with mode: 0644]
code/sdk/zhihui/drivers/ppg/hx3695/libHX3697_hs_20241230_103__01_hrv.a [new file with mode: 0644]
code/sdk/zhihui/drivers/ppg/hx3695/libHX3697_hs_20241230_3153__01_hrs.a [new file with mode: 0644]
code/sdk/zhihui/drivers/ppg/hx3695/tyhx_hrs_alg.h
code/sdk/zhihui/drivers/ppg/hx3695/tyhx_hrs_custom.h
code/sdk/zhihui/drivers/ppg/hx3695/tyhx_hrv_alg.h
code/sdk/zhihui/drivers/ppg/hx3695/tyhx_spo2_alg.h
code/sdk/zhihui/services/factorytest_service/factorytest_protocol.c

index 6b98910..ff45122 100644 (file)
      return;
    }
    //训练基本信息更新
-   if (request->msgId == TOPIC_EVENT_ACTIVITY_UPDATE) {
-     act_result_t *cyweeInfo = new act_result_t();
-     int rets = memcpy_s(cyweeInfo, sizeof(act_result_t),
-                         (act_result_t *)request->data, request->len);
-     if (rets != EOK) {
-       delete cyweeInfo; // 处理内存分配失败的情况
-       cyweeInfo = NULL;
-       WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,
-                     "memcpy_s act_result_t fail ret = %d", rets);
-       return;
-     }
-     TraingModel::GetInstance()->AnalysisData(cyweeInfo);
-     // 更新其他目标完成度
-     TraingModel::GetInstance()->CheckSportTag();
-     delete cyweeInfo; // 释放内存
-   }
-   //训练额外信息
-   if (request->msgId == TOPIC_EVENT_ACTIVITY_EXTRA_INFO_UPDATE) {
-     act_ext_result_t *cyweeInfo_ext = new act_ext_result_t();
-     int rets = memcpy_s(cyweeInfo_ext, sizeof(act_ext_result_t),
-                         (act_ext_result_t *)request->data, request->len);
-     if (rets != EOK) {
-       delete cyweeInfo_ext; // 处理内存分配失败的情况
-       cyweeInfo_ext = NULL;
-       WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,
-                     "memcpy_s act_ext_result_t fail ret = %d", rets);
-       return;
-     }
-     TraingModel::GetInstance()->AnalysisExtraData(cyweeInfo_ext);
-     delete cyweeInfo_ext; // 释放内存
-   }
+  //  if (request->msgId == TOPIC_EVENT_ACTIVITY_UPDATE) {
+  //    act_result_t *cyweeInfo = new act_result_t();
+  //    int rets = memcpy_s(cyweeInfo, sizeof(act_result_t),
+  //                        (act_result_t *)request->data, request->len);
+  //    if (rets != EOK) {
+  //      delete cyweeInfo; // 处理内存分配失败的情况
+  //      cyweeInfo = NULL;
+  //      WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,
+  //                    "memcpy_s act_result_t fail ret = %d", rets);
+  //      return;
+  //    }
+  //    TraingModel::GetInstance()->AnalysisData(cyweeInfo);
+  //    // 更新其他目标完成度
+  //    TraingModel::GetInstance()->CheckSportTag();
+  //    delete cyweeInfo; // 释放内存
+  //  }
+  //  //训练额外信息
+  //  if (request->msgId == TOPIC_EVENT_ACTIVITY_EXTRA_INFO_UPDATE) {
+  //    act_ext_result_t *cyweeInfo_ext = new act_ext_result_t();
+  //    int rets = memcpy_s(cyweeInfo_ext, sizeof(act_ext_result_t),
+  //                        (act_ext_result_t *)request->data, request->len);
+  //    if (rets != EOK) {
+  //      delete cyweeInfo_ext; // 处理内存分配失败的情况
+  //      cyweeInfo_ext = NULL;
+  //      WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,
+  //                    "memcpy_s act_ext_result_t fail ret = %d", rets);
+  //      return;
+  //    }
+  //    TraingModel::GetInstance()->AnalysisExtraData(cyweeInfo_ext);
+  //    delete cyweeInfo_ext; // 释放内存
+  //  }
    //训练心率
-   if (request->msgId == TOPIC_EVENT_HEARTRATE_UPDATA) {
-     uint8_t heart = *((u_int8_t *)(request->data)); // 进行类型转换
-     TraingModel::GetInstance()->AnalysisHeartData(heart);
-   }
+  //  if (request->msgId == TOPIC_EVENT_HEARTRATE_UPDATA) {
+  //    uint8_t heart = *((u_int8_t *)(request->data)); // 进行类型转换
+  //    TraingModel::GetInstance()->AnalysisHeartData(heart);
+  //  }
  #endif
  }
  #ifdef __cplusplus
index ce6030c..42f1f92 100644 (file)
@@ -51,16 +51,16 @@ typedef enum {
     TOPIC_EVENT_SPORT_DISTANCE,\r
     TOPIC_EVENT_LOCATION,\r
     TOPIC_EVENT_HFP_HINT,\r
-// #ifdef SUPPORT_CYWEE_SERVICE\r
-    TOPIC_EVENT_ACTIVITY_UPDATE,\r
-    TOPIC_EVENT_ACTIVITY_EXTRA_INFO_UPDATE,\r
+#ifdef SUPPORT_CYWEE_SERVICE\r
+    // TOPIC_EVENT_ACTIVITY_UPDATE,\r
+    // TOPIC_EVENT_ACTIVITY_EXTRA_INFO_UPDATE,\r
     TOPIC_EVENT_AR_ALERT_TYPE_UPDATE,\r
     TOPIC_EVENT_INACTIVITY_UPDATE,\r
-    TOPIC_EVENT_INACTIVITY_ACCUMULATE_TIME_UPDATE,\r
+    // TOPIC_EVENT_INACTIVITY_ACCUMULATE_TIME_UPDATE,\r
+#endif\r
     TOPIC_EVENT_BLE_TRAINING,\r
     TOPIC_EVENT_BLE_TRANSMIT,\r
     TOPIC_EVENT_GOAL_SHOW_VIEW,\r
-// #endif\r
     TOPIC_EVENT_CHARGE_PLUG,\r
     TOPIC_EVENT_CHARGE_UNPLUG,\r
     TOPIC_EVENT_LOWPOWER_ALARM,\r
index 963c28c..5ec2a32 100644 (file)
@@ -30,15 +30,14 @@ static const TopicToCore topicToCoreArray[] = {
     {TOPIC_EVENT_STATIC_HEARTRATE_UPDATA, A_CORE_MASK, 1},
     {TOPIC_EVENT_BLE_TRAINING,A_CORE_MASK,1},
     {TOPIC_EVENT_BLE_TRANSMIT,A_CORE_MASK,1},
-#ifdef CYWEE_SPORT    
-    {TOPIC_EVENT_ACTIVITY_UPDATE, A_CORE_MASK, 1},
-    {TOPIC_EVENT_ACTIVITY_EXTRA_INFO_UPDATE, A_CORE_MASK, 1},
+#ifdef SUPPORT_CYWEE_SERVICE    
+    // {TOPIC_EVENT_ACTIVITY_UPDATE, A_CORE_MASK, 1},
+    // {TOPIC_EVENT_ACTIVITY_EXTRA_INFO_UPDATE, A_CORE_MASK, 1},
     {TOPIC_EVENT_AR_ALERT_TYPE_UPDATE, A_CORE_MASK, 1},
     {TOPIC_EVENT_INACTIVITY_UPDATE, A_CORE_MASK, 1},
-    {TOPIC_EVENT_INACTIVITY_ACCUMULATE_TIME_UPDATE, A_CORE_MASK, 1},
-    {TOPIC_EVENT_GOAL_SHOW_VIEW,A_CORE_MASK,1},
-    
+    // {TOPIC_EVENT_INACTIVITY_ACCUMULATE_TIME_UPDATE, A_CORE_MASK, 1},
 #endif
+    {TOPIC_EVENT_GOAL_SHOW_VIEW,A_CORE_MASK,1},
 #ifdef SUPPORT_SPO2_NOTIFICATION
     {TOPIC_EVENT_SPO2_UPDATE, A_CORE_MASK, 1},
     {TOPIC_EVENT_START_HRS_MONITORING, A_CORE_MASK, 1},
index c311cc7..e5c15c5 100644 (file)
@@ -118,14 +118,14 @@ const PriorityMapper PRI_MAPPER[] = {
 #endif
     {TOPIC_EVENT_ON_TIME,PRIORITY_TWO},
 
-#if 0
-    {TOPIC_EVENT_ACTIVITY_UPDATE,PRIORITY_TWO},
-    {TOPIC_EVENT_ACTIVITY_EXTRA_INFO_UPDATE,PRIORITY_TWO},
+#ifdef SUPPORT_CYWEE_SERVICE
+    // {TOPIC_EVENT_ACTIVITY_UPDATE,PRIORITY_TWO},
+    // {TOPIC_EVENT_ACTIVITY_EXTRA_INFO_UPDATE,PRIORITY_TWO},
     {TOPIC_EVENT_AR_ALERT_TYPE_UPDATE,PRIORITY_TWO},
     {TOPIC_EVENT_INACTIVITY_UPDATE,PRIORITY_TWO},
-    {TOPIC_EVENT_INACTIVITY_ACCUMULATE_TIME_UPDATE,PRIORITY_TWO},
-    {TOPIC_EVENT_GOAL_SHOW_VIEW,PRIORITY_TWO},
+    // {TOPIC_EVENT_INACTIVITY_ACCUMULATE_TIME_UPDATE,PRIORITY_TWO},
 #endif
+    {TOPIC_EVENT_GOAL_SHOW_VIEW,PRIORITY_TWO},
     {TOPIC_EVENT_STEPDATA_UPDATE,PRIORITY_TWO},
 
 
@@ -179,11 +179,11 @@ void MsgCenterSubscribe()
     MsgCenterSubscribeTopic(TOPIC_EVENT_HFP_PHONE_TO_WATCH);
     MsgCenterSubscribeTopic(TOPIC_EVENT_HFP_WATCH_TO_PHONE);
     MsgCenterSubscribeTopic(TOPIC_EVENT_HFP_HINT);
-    MsgCenterSubscribeTopic(TOPIC_EVENT_ACTIVITY_UPDATE);
-    MsgCenterSubscribeTopic(TOPIC_EVENT_ACTIVITY_EXTRA_INFO_UPDATE);
+    // MsgCenterSubscribeTopic(TOPIC_EVENT_ACTIVITY_UPDATE);
+    // MsgCenterSubscribeTopic(TOPIC_EVENT_ACTIVITY_EXTRA_INFO_UPDATE);
     MsgCenterSubscribeTopic(TOPIC_EVENT_AR_ALERT_TYPE_UPDATE);
     MsgCenterSubscribeTopic(TOPIC_EVENT_INACTIVITY_UPDATE);
-    MsgCenterSubscribeTopic(TOPIC_EVENT_INACTIVITY_ACCUMULATE_TIME_UPDATE);
+    // MsgCenterSubscribeTopic(TOPIC_EVENT_INACTIVITY_ACCUMULATE_TIME_UPDATE);
     MsgCenterSubscribeTopic(TOPIC_EVENT_BLE_TRAINING);
     MsgCenterSubscribeTopic(TOPIC_EVENT_BLE_TRANSMIT);
     MsgCenterSubscribeTopic(TOPIC_EVENT_GOAL_SHOW_VIEW);
@@ -1136,92 +1136,92 @@ void MsgCenterNotifyCat1FailEProc(const Topic topic, Request* req)
 
 
     }
-#if 0
+#ifdef SUPPORT_CYWEE_SERVICE    
     //每日训练数据刷新
-    void MsgCenterNotifyActivityProc(const Topic topic, Request* req)
-    {
-        unused(topic);
-        cywee_activity_result_t* c_activity_result_t =  (cywee_activity_result_t *) malloc(req->len);
-        if(c_activity_result_t==NULL)
-        {
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Memory allocation failure");
-            return;
-        }
-
-        int rets = memcpy_s(c_activity_result_t, req->len, (cywee_activity_result_t*)req->data, req->len);
-        if (rets != EOK)
-        {
-            free(c_activity_result_t);
-            c_activity_result_t = NULL;
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "memcpy_s c_activity_result_t failed, ret = %d", rets);
-            return;
-        }
-        if(c_activity_result_t->activity_mode == SPORT_ACTIVE_MODE_NORMAL)
-        {
-            /*更新卡路里数据*/
-            //if(c_activity_result_t->calories!=0)
-            {
-                set_calories_data(c_activity_result_t->calories);
-    #if DIALDATASET
-                uint32_t calories= OHOS::GoalModel::GetInstance().show_data_calories_refresh();
+    // void MsgCenterNotifyActivityProc(const Topic topic, Request* req)
+    // {
+    //     unused(topic);
+    //     cywee_activity_result_t* c_activity_result_t =  (cywee_activity_result_t *) malloc(req->len);
+    //     if(c_activity_result_t==NULL)
+    //     {
+    //         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Memory allocation failure");
+    //         return;
+    //     }
+
+    //     int rets = memcpy_s(c_activity_result_t, req->len, (cywee_activity_result_t*)req->data, req->len);
+    //     if (rets != EOK)
+    //     {
+    //         free(c_activity_result_t);
+    //         c_activity_result_t = NULL;
+    //         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "memcpy_s c_activity_result_t failed, ret = %d", rets);
+    //         return;
+    //     }
+    //     if(c_activity_result_t->activity_mode == SPORT_ACTIVE_MODE_NORMAL)
+    //     {
+    //         /*更新卡路里数据*/
+    //         //if(c_activity_result_t->calories!=0)
+    //         {
+    //             set_calories_data(c_activity_result_t->calories);
+    // #if DIALDATASET
+    //             uint32_t calories= OHOS::GoalModel::GetInstance().show_data_calories_refresh();
                 
-                DialModelCalorie::GetInstance()->UpdateCalorie(calories);
-    #endif
-            }
-            /*更新距离数据*/
-            //if(c_activity_result_t->distance != 0)
-            {
-                set_distance_data(c_activity_result_t->distance);  
-    #if DIALDATASET
-                float  distance= OHOS::GoalModel::GetInstance().show_data_distance_refresh();
-                DialModelDistance::GetInstance()->UpdateDistance(distance);
-    #endif 
-            }
-        }
-        else if(c_activity_result_t->activity_mode == SPORT_ACTIVE_MODE_FREE_TRAINING && c_activity_result_t->MHR_zone >= 2)
-        {
-            /*更新燃脂时间数据*/
-            set_fat_time_data(1);
-        }
+    //             DialModelCalorie::GetInstance()->UpdateCalorie(calories);
+    // #endif
+    //         }
+    //         /*更新距离数据*/
+    //         //if(c_activity_result_t->distance != 0)
+    //         {
+    //             set_distance_data(c_activity_result_t->distance);  
+    // #if DIALDATASET
+    //             float  distance= OHOS::GoalModel::GetInstance().show_data_distance_refresh();
+    //             DialModelDistance::GetInstance()->UpdateDistance(distance);
+    // #endif 
+    //         }
+    //     }
+    //     else if(c_activity_result_t->activity_mode == SPORT_ACTIVE_MODE_FREE_TRAINING && c_activity_result_t->MHR_zone >= 2)
+    //     {
+    //         /*更新燃脂时间数据*/
+    //         set_fat_time_data(1);
+    //     }
         
-        free(c_activity_result_t);
-        c_activity_result_t = NULL;
-    }
-    static int train_fat_time = 0;
-    void MsgCenterNotifyActivityExtraInfoProc(const Topic topic, Request* req)
-    {
-        unused(topic);
-        cywee_activity_result_extre_info_t* c_activity_result_extre_info_t =  (cywee_activity_result_extre_info_t *) malloc(req->len);
-        if(c_activity_result_extre_info_t==NULL)
-        {
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Memory allocation failure");
-            return;
-        }
-
-        int rets = memcpy_s(c_activity_result_extre_info_t, req->len, (cywee_activity_result_extre_info_t*)req->data, req->len);
-        if (rets != EOK)
-        {
-            free(c_activity_result_extre_info_t);
-            c_activity_result_extre_info_t = NULL;
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "memcpy_s c_activity_result_extre_info_t failed, ret = %d", rets);
-            return;
-        }
-
-        if(uapi_dev_runtime_get_train_status() && c_activity_result_extre_info_t->ativity_zone_high_duration)
-        {
-            train_fat_time = c_activity_result_extre_info_t->ativity_zone_high_duration;
-        }
-        /*更新燃脂时间数据*/
-        else if(uapi_dev_runtime_get_train_status() == 0 && train_fat_time)
-        {
-            set_fat_time_data(train_fat_time);
-            train_fat_time = 0;
-        }
+    //     free(c_activity_result_t);
+    //     c_activity_result_t = NULL;
+    // }
+    // static int train_fat_time = 0;
+    // void MsgCenterNotifyActivityExtraInfoProc(const Topic topic, Request* req)
+    // {
+    //     unused(topic);
+    //     cywee_activity_result_extre_info_t* c_activity_result_extre_info_t =  (cywee_activity_result_extre_info_t *) malloc(req->len);
+    //     if(c_activity_result_extre_info_t==NULL)
+    //     {
+    //         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Memory allocation failure");
+    //         return;
+    //     }
+
+    //     int rets = memcpy_s(c_activity_result_extre_info_t, req->len, (cywee_activity_result_extre_info_t*)req->data, req->len);
+    //     if (rets != EOK)
+    //     {
+    //         free(c_activity_result_extre_info_t);
+    //         c_activity_result_extre_info_t = NULL;
+    //         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "memcpy_s c_activity_result_extre_info_t failed, ret = %d", rets);
+    //         return;
+    //     }
+
+    //     if(uapi_dev_runtime_get_train_status() && c_activity_result_extre_info_t->ativity_zone_high_duration)
+    //     {
+    //         train_fat_time = c_activity_result_extre_info_t->ativity_zone_high_duration;
+    //     }
+    //     /*更新燃脂时间数据*/
+    //     else if(uapi_dev_runtime_get_train_status() == 0 && train_fat_time)
+    //     {
+    //         set_fat_time_data(train_fat_time);
+    //         train_fat_time = 0;
+    //     }
+
+    //     free(c_activity_result_extre_info_t);
+    //     c_activity_result_extre_info_t = NULL;
+    // }
 
-        free(c_activity_result_extre_info_t);
-        c_activity_result_extre_info_t = NULL;
-    }
-#endif
 /*运动识别*/
 void MsgCenterNotifyArAlertProc(const Topic topic, Request* req)
 {
@@ -1244,7 +1244,6 @@ void MsgCenterNotifyArAlertProc(const Topic topic, Request* req)
 void MsgCenterNotifyInactivityProc(const Topic topic, Request *req)
 {
     WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "MsgCenterNotifyInactivityProc !");
-#ifdef SUPPORT_CYWEE_SERVICE
     inact_result_t *cywee_Inactivity_Info = (inact_result_t *)malloc(req->len);
     if (!cywee_Inactivity_Info)
     {
@@ -1286,9 +1285,10 @@ void MsgCenterNotifyInactivityProc(const Topic topic, Request *req)
     
     free(cywee_Inactivity_Info);
     cywee_Inactivity_Info = NULL;
-#endif
 }
 
+#endif
+
 //查找手表通知
 void MsgCenterNotifyFindWatchProc(const Topic topic, Request* req)
 {
@@ -1521,14 +1521,14 @@ static MsgCenterNotifyTable g_msgCenterNotifyTable[] = {
     {TOPIC_EVENT_HFP_PHONE_TO_WATCH, MsgCenterNotifyHfpWatchProc},
     {TOPIC_EVENT_HFP_HINT,             MsgCenterNotifyHfpWatchHintProc},
     
-#if 0
-    {TOPIC_EVENT_ACTIVITY_UPDATE,       MsgCenterNotifyActivityProc},
-    {TOPIC_EVENT_ACTIVITY_EXTRA_INFO_UPDATE,       MsgCenterNotifyActivityExtraInfoProc},
+#ifdef SUPPORT_CYWEE_SERVICE
+    // {TOPIC_EVENT_ACTIVITY_UPDATE,       MsgCenterNotifyActivityProc},
+    // {TOPIC_EVENT_ACTIVITY_EXTRA_INFO_UPDATE,       MsgCenterNotifyActivityExtraInfoProc},
     {TOPIC_EVENT_AR_ALERT_TYPE_UPDATE,       MsgCenterNotifyArAlertProc},
     {TOPIC_EVENT_INACTIVITY_UPDATE,       MsgCenterNotifyInactivityProc},
-    {TOPIC_EVENT_INACTIVITY_ACCUMULATE_TIME_UPDATE,       MsgCenterNotifyInactivityAccumulateTimeProc},
-    {TOPIC_EVENT_GOAL_SHOW_VIEW,    MsgCenterNotifygoalnotificationviewProc},
+    // {TOPIC_EVENT_INACTIVITY_ACCUMULATE_TIME_UPDATE,       MsgCenterNotifyInactivityAccumulateTimeProc},
 #endif
+    // {TOPIC_EVENT_GOAL_SHOW_VIEW,    MsgCenterNotifygoalnotificationviewProc},//编译不过
     {TOPIC_EVENT_BLE_TRANSMIT,       MsgCenterNotifybleTransmit},
 
     {TOPIC_EVENT_CHARGE_PLUG,        MsgCenterNotifyChargePlugProc},
index 6b98910..c755e30 100644 (file)
      return;
    }
    //训练基本信息更新
-   if (request->msgId == TOPIC_EVENT_ACTIVITY_UPDATE) {
-     act_result_t *cyweeInfo = new act_result_t();
-     int rets = memcpy_s(cyweeInfo, sizeof(act_result_t),
-                         (act_result_t *)request->data, request->len);
-     if (rets != EOK) {
-       delete cyweeInfo; // 处理内存分配失败的情况
-       cyweeInfo = NULL;
-       WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,
-                     "memcpy_s act_result_t fail ret = %d", rets);
-       return;
-     }
-     TraingModel::GetInstance()->AnalysisData(cyweeInfo);
-     // 更新其他目标完成度
-     TraingModel::GetInstance()->CheckSportTag();
-     delete cyweeInfo; // 释放内存
-   }
-   //训练额外信息
-   if (request->msgId == TOPIC_EVENT_ACTIVITY_EXTRA_INFO_UPDATE) {
-     act_ext_result_t *cyweeInfo_ext = new act_ext_result_t();
-     int rets = memcpy_s(cyweeInfo_ext, sizeof(act_ext_result_t),
-                         (act_ext_result_t *)request->data, request->len);
-     if (rets != EOK) {
-       delete cyweeInfo_ext; // 处理内存分配失败的情况
-       cyweeInfo_ext = NULL;
-       WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,
-                     "memcpy_s act_ext_result_t fail ret = %d", rets);
-       return;
-     }
-     TraingModel::GetInstance()->AnalysisExtraData(cyweeInfo_ext);
-     delete cyweeInfo_ext; // 释放内存
-   }
-   //训练心率
-   if (request->msgId == TOPIC_EVENT_HEARTRATE_UPDATA) {
-     uint8_t heart = *((u_int8_t *)(request->data)); // 进行类型转换
-     TraingModel::GetInstance()->AnalysisHeartData(heart);
-   }
+  //  if (request->msgId == TOPIC_EVENT_ACTIVITY_UPDATE) {
+  //    act_result_t *cyweeInfo = new act_result_t();
+  //    int rets = memcpy_s(cyweeInfo, sizeof(act_result_t),
+  //                        (act_result_t *)request->data, request->len);
+  //    if (rets != EOK) {
+  //      delete cyweeInfo; // 处理内存分配失败的情况
+  //      cyweeInfo = NULL;
+  //      WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,
+  //                    "memcpy_s act_result_t fail ret = %d", rets);
+  //      return;
+  //    }
+  //    TraingModel::GetInstance()->AnalysisData(cyweeInfo);
+  //    // 更新其他目标完成度
+  //    TraingModel::GetInstance()->CheckSportTag();
+  //    delete cyweeInfo; // 释放内存
+  //  }
+  //  //训练额外信息
+  //  if (request->msgId == TOPIC_EVENT_ACTIVITY_EXTRA_INFO_UPDATE) {
+  //    act_ext_result_t *cyweeInfo_ext = new act_ext_result_t();
+  //    int rets = memcpy_s(cyweeInfo_ext, sizeof(act_ext_result_t),
+  //                        (act_ext_result_t *)request->data, request->len);
+  //    if (rets != EOK) {
+  //      delete cyweeInfo_ext; // 处理内存分配失败的情况
+  //      cyweeInfo_ext = NULL;
+  //      WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,
+  //                    "memcpy_s act_ext_result_t fail ret = %d", rets);
+  //      return;
+  //    }
+  //    TraingModel::GetInstance()->AnalysisExtraData(cyweeInfo_ext);
+  //    delete cyweeInfo_ext; // 释放内存
+  //  }
+  //  //训练心率
+  //  if (request->msgId == TOPIC_EVENT_HEARTRATE_UPDATA) {
+  //    uint8_t heart = *((u_int8_t *)(request->data)); // 进行类型转换
+  //    TraingModel::GetInstance()->AnalysisHeartData(heart);
+  //  }
  #endif
  }
  #ifdef __cplusplus
index ce6030c..42f1f92 100644 (file)
@@ -51,16 +51,16 @@ typedef enum {
     TOPIC_EVENT_SPORT_DISTANCE,\r
     TOPIC_EVENT_LOCATION,\r
     TOPIC_EVENT_HFP_HINT,\r
-// #ifdef SUPPORT_CYWEE_SERVICE\r
-    TOPIC_EVENT_ACTIVITY_UPDATE,\r
-    TOPIC_EVENT_ACTIVITY_EXTRA_INFO_UPDATE,\r
+#ifdef SUPPORT_CYWEE_SERVICE\r
+    // TOPIC_EVENT_ACTIVITY_UPDATE,\r
+    // TOPIC_EVENT_ACTIVITY_EXTRA_INFO_UPDATE,\r
     TOPIC_EVENT_AR_ALERT_TYPE_UPDATE,\r
     TOPIC_EVENT_INACTIVITY_UPDATE,\r
-    TOPIC_EVENT_INACTIVITY_ACCUMULATE_TIME_UPDATE,\r
+    // TOPIC_EVENT_INACTIVITY_ACCUMULATE_TIME_UPDATE,\r
+#endif\r
     TOPIC_EVENT_BLE_TRAINING,\r
     TOPIC_EVENT_BLE_TRANSMIT,\r
     TOPIC_EVENT_GOAL_SHOW_VIEW,\r
-// #endif\r
     TOPIC_EVENT_CHARGE_PLUG,\r
     TOPIC_EVENT_CHARGE_UNPLUG,\r
     TOPIC_EVENT_LOWPOWER_ALARM,\r
index 970db02..b9ee08e 100644 (file)
@@ -30,14 +30,14 @@ static const TopicToCore topicToCoreArray[] = {
     {TOPIC_EVENT_STATIC_HEARTRATE_UPDATA, A_CORE_MASK, 1},
     {TOPIC_EVENT_BLE_TRANSMIT,A_CORE_MASK,1},
     {TOPIC_EVENT_BLE_TRAINING,A_CORE_MASK,1},
-#ifdef CYWEE_SPORT    
-    {TOPIC_EVENT_ACTIVITY_UPDATE, A_CORE_MASK, 1},
-    {TOPIC_EVENT_ACTIVITY_EXTRA_INFO_UPDATE, A_CORE_MASK, 1},
+#ifdef SUPPORT_CYWEE_SERVICE    
+    // {TOPIC_EVENT_ACTIVITY_UPDATE, A_CORE_MASK, 1},
+    // {TOPIC_EVENT_ACTIVITY_EXTRA_INFO_UPDATE, A_CORE_MASK, 1},
     {TOPIC_EVENT_AR_ALERT_TYPE_UPDATE, A_CORE_MASK, 1},
     {TOPIC_EVENT_INACTIVITY_UPDATE, A_CORE_MASK, 1},
-    {TOPIC_EVENT_INACTIVITY_ACCUMULATE_TIME_UPDATE, A_CORE_MASK, 1},
-    {TOPIC_EVENT_GOAL_SHOW_VIEW,A_CORE_MASK,1},
+    // {TOPIC_EVENT_INACTIVITY_ACCUMULATE_TIME_UPDATE, A_CORE_MASK, 1},
 #endif
+    {TOPIC_EVENT_GOAL_SHOW_VIEW,A_CORE_MASK,1},
 #ifdef SUPPORT_SPO2_NOTIFICATION
     {TOPIC_EVENT_SPO2_UPDATE, A_CORE_MASK, 1},
     {TOPIC_EVENT_START_HRS_MONITORING, A_CORE_MASK, 1},
index 5ece3e4..9f602a2 100644 (file)
@@ -115,16 +115,16 @@ const PriorityMapper PRI_MAPPER[] = {
 #endif
     {TOPIC_EVENT_ON_TIME,PRIORITY_TWO},
 
-#if 0
-    {TOPIC_EVENT_ACTIVITY_UPDATE,PRIORITY_TWO},
-    {TOPIC_EVENT_ACTIVITY_EXTRA_INFO_UPDATE,PRIORITY_TWO},
+#ifdef SUPPORT_CYWEE_SERVICE
+    // {TOPIC_EVENT_ACTIVITY_UPDATE,PRIORITY_TWO},
+    // {TOPIC_EVENT_ACTIVITY_EXTRA_INFO_UPDATE,PRIORITY_TWO},
     {TOPIC_EVENT_AR_ALERT_TYPE_UPDATE,PRIORITY_TWO},
-    {TOPIC_EVENT_STEPDATA_UPDATE,PRIORITY_TWO},
+    // {TOPIC_EVENT_STEPDATA_UPDATE,PRIORITY_TWO},
     {TOPIC_EVENT_INACTIVITY_UPDATE,PRIORITY_TWO},
-    {TOPIC_EVENT_INACTIVITY_ACCUMULATE_TIME_UPDATE,PRIORITY_TWO},
-    {TOPIC_EVENT_GOAL_SHOW_VIEW,PRIORITY_TWO},
-#endif
+    // {TOPIC_EVENT_INACTIVITY_ACCUMULATE_TIME_UPDATE,PRIORITY_TWO}
 
+#endif
+    {TOPIC_EVENT_GOAL_SHOW_VIEW,PRIORITY_TWO},
     {TOPIC_EVENT_BLE_TRAINING,PRIORITY_TWO},
     {TOPIC_EVENT_BLE_TRANSMIT,PRIORITY_ONE},
 
@@ -175,11 +175,11 @@ void MsgCenterSubscribe()
     MsgCenterSubscribeTopic(TOPIC_EVENT_HFP_PHONE_TO_WATCH);
     MsgCenterSubscribeTopic(TOPIC_EVENT_HFP_WATCH_TO_PHONE);
     MsgCenterSubscribeTopic(TOPIC_EVENT_HFP_HINT);
-    MsgCenterSubscribeTopic(TOPIC_EVENT_ACTIVITY_UPDATE);
-    MsgCenterSubscribeTopic(TOPIC_EVENT_ACTIVITY_EXTRA_INFO_UPDATE);
+    // MsgCenterSubscribeTopic(TOPIC_EVENT_ACTIVITY_UPDATE);
+    // MsgCenterSubscribeTopic(TOPIC_EVENT_ACTIVITY_EXTRA_INFO_UPDATE);
     MsgCenterSubscribeTopic(TOPIC_EVENT_AR_ALERT_TYPE_UPDATE);
     MsgCenterSubscribeTopic(TOPIC_EVENT_INACTIVITY_UPDATE);
-    MsgCenterSubscribeTopic(TOPIC_EVENT_INACTIVITY_ACCUMULATE_TIME_UPDATE);
+    // MsgCenterSubscribeTopic(TOPIC_EVENT_INACTIVITY_ACCUMULATE_TIME_UPDATE);
     MsgCenterSubscribeTopic(TOPIC_EVENT_BLE_TRAINING);
     MsgCenterSubscribeTopic(TOPIC_EVENT_BLE_TRANSMIT);
     MsgCenterSubscribeTopic(TOPIC_EVENT_GOAL_SHOW_VIEW);
@@ -1151,91 +1151,96 @@ void MsgCenterNotifyCat1FailEProc(const Topic topic, Request* req)
 
 
     }
-    //每日训练数据刷新
-    void MsgCenterNotifyActivityProc(const Topic topic, Request* req)
-    {
-        unused(topic);
-        cywee_activity_result_t* c_activity_result_t =  (cywee_activity_result_t *) malloc(req->len);
-        if(c_activity_result_t==NULL)
-        {
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Memory allocation failure");
-            return;
-        }
 
-        int rets = memcpy_s(c_activity_result_t, req->len, (cywee_activity_result_t*)req->data, req->len);
-        if (rets != EOK)
-        {
-            free(c_activity_result_t);
-            c_activity_result_t = NULL;
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "memcpy_s c_activity_result_t failed, ret = %d", rets);
-            return;
-        }
-        if(c_activity_result_t->activity_mode == SPORT_ACTIVE_MODE_NORMAL)
-        {
-            /*更新卡路里数据*/
-            //if(c_activity_result_t->calories!=0)
-            {
-                set_calories_data(c_activity_result_t->calories);
-    #if DIALDATASET
-                uint32_t calories= OHOS::GoalModel::GetInstance().show_data_calories_refresh();
+#endif
+
+#ifdef SUPPORT_CYWEE_SERVICE    
+
+//     //每日训练数据刷新
+//     void MsgCenterNotifyActivityProc(const Topic topic, Request* req)
+//     {
+//         unused(topic);
+//         cywee_activity_result_t* c_activity_result_t =  (cywee_activity_result_t *) malloc(req->len);
+//         if(c_activity_result_t==NULL)
+//         {
+//             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Memory allocation failure");
+//             return;
+//         }
+
+//         int rets = memcpy_s(c_activity_result_t, req->len, (cywee_activity_result_t*)req->data, req->len);
+//         if (rets != EOK)
+//         {
+//             free(c_activity_result_t);
+//             c_activity_result_t = NULL;
+//             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "memcpy_s c_activity_result_t failed, ret = %d", rets);
+//             return;
+//         }
+//         if(c_activity_result_t->activity_mode == SPORT_ACTIVE_MODE_NORMAL)
+//         {
+//             /*更新卡路里数据*/
+//             //if(c_activity_result_t->calories!=0)
+//             {
+//                 set_calories_data(c_activity_result_t->calories);
+//     #if DIALDATASET
+//                 uint32_t calories= OHOS::GoalModel::GetInstance().show_data_calories_refresh();
                 
-                DialModelCalorie::GetInstance()->UpdateCalorie(calories);
-    #endif
-            }
-            /*更新距离数据*/
-            //if(c_activity_result_t->distance != 0)
-            {
-                set_distance_data(c_activity_result_t->distance);  
-    #if DIALDATASET
-                float  distance= OHOS::GoalModel::GetInstance().show_data_distance_refresh();
-                DialModelDistance::GetInstance()->UpdateDistance(distance);
-    #endif 
-            }
-        }
-        else if(c_activity_result_t->activity_mode == SPORT_ACTIVE_MODE_FREE_TRAINING && c_activity_result_t->MHR_zone >= 2)
-        {
-            /*更新燃脂时间数据*/
-            set_fat_time_data(1);
-        }
+//                 DialModelCalorie::GetInstance()->UpdateCalorie(calories);
+//     #endif
+//             }
+//             /*更新距离数据*/
+//             //if(c_activity_result_t->distance != 0)
+//             {
+//                 set_distance_data(c_activity_result_t->distance);  
+//     #if DIALDATASET
+//                 float  distance= OHOS::GoalModel::GetInstance().show_data_distance_refresh();
+//                 DialModelDistance::GetInstance()->UpdateDistance(distance);
+//     #endif 
+//             }
+//         }
+//         else if(c_activity_result_t->activity_mode == SPORT_ACTIVE_MODE_FREE_TRAINING && c_activity_result_t->MHR_zone >= 2)
+//         {
+//             /*更新燃脂时间数据*/
+//             set_fat_time_data(1);
+//         }
         
-        free(c_activity_result_t);
-        c_activity_result_t = NULL;
-    }
-    static int train_fat_time = 0;
-    void MsgCenterNotifyActivityExtraInfoProc(const Topic topic, Request* req)
-    {
-        unused(topic);
-        cywee_activity_result_extre_info_t* c_activity_result_extre_info_t =  (cywee_activity_result_extre_info_t *) malloc(req->len);
-        if(c_activity_result_extre_info_t==NULL)
-        {
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Memory allocation failure");
-            return;
-        }
-
-        int rets = memcpy_s(c_activity_result_extre_info_t, req->len, (cywee_activity_result_extre_info_t*)req->data, req->len);
-        if (rets != EOK)
-        {
-            free(c_activity_result_extre_info_t);
-            c_activity_result_extre_info_t = NULL;
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "memcpy_s c_activity_result_extre_info_t failed, ret = %d", rets);
-            return;
-        }
-
-        if(uapi_dev_runtime_get_train_status() && c_activity_result_extre_info_t->ativity_zone_high_duration)
-        {
-            train_fat_time = c_activity_result_extre_info_t->ativity_zone_high_duration;
-        }
-        /*更新燃脂时间数据*/
-        else if(uapi_dev_runtime_get_train_status() == 0 && train_fat_time)
-        {
-            set_fat_time_data(train_fat_time);
-            train_fat_time = 0;
-        }
+//         free(c_activity_result_t);
+//         c_activity_result_t = NULL;
+//     }
+//     static int train_fat_time = 0;
+//     void MsgCenterNotifyActivityExtraInfoProc(const Topic topic, Request* req)
+//     {
+//         unused(topic);
+//         cywee_activity_result_extre_info_t* c_activity_result_extre_info_t =  (cywee_activity_result_extre_info_t *) malloc(req->len);
+//         if(c_activity_result_extre_info_t==NULL)
+//         {
+//             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Memory allocation failure");
+//             return;
+//         }
+
+//         int rets = memcpy_s(c_activity_result_extre_info_t, req->len, (cywee_activity_result_extre_info_t*)req->data, req->len);
+//         if (rets != EOK)
+//         {
+//             free(c_activity_result_extre_info_t);
+//             c_activity_result_extre_info_t = NULL;
+//             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "memcpy_s c_activity_result_extre_info_t failed, ret = %d", rets);
+//             return;
+//         }
+
+//         if(uapi_dev_runtime_get_train_status() && c_activity_result_extre_info_t->ativity_zone_high_duration)
+//         {
+//             train_fat_time = c_activity_result_extre_info_t->ativity_zone_high_duration;
+//         }
+//         /*更新燃脂时间数据*/
+//         else if(uapi_dev_runtime_get_train_status() == 0 && train_fat_time)
+//         {
+//             set_fat_time_data(train_fat_time);
+//             train_fat_time = 0;
+//         }
+
+//         free(c_activity_result_extre_info_t);
+//         c_activity_result_extre_info_t = NULL;
+//     }
 
-        free(c_activity_result_extre_info_t);
-        c_activity_result_extre_info_t = NULL;
-    }
-#endif
 /*运动识别*/
 void MsgCenterNotifyArAlertProc(const Topic topic, Request* req)
 {
@@ -1258,7 +1263,6 @@ void MsgCenterNotifyArAlertProc(const Topic topic, Request* req)
 void MsgCenterNotifyInactivityProc(const Topic topic, Request *req)
 {
     WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "MsgCenterNotifyInactivityProc !");
-#ifdef SUPPORT_CYWEE_SERVICE
     inact_result_t *cywee_Inactivity_Info = (inact_result_t *)malloc(req->len);
     if (!cywee_Inactivity_Info)
     {
@@ -1300,9 +1304,10 @@ void MsgCenterNotifyInactivityProc(const Topic topic, Request *req)
     
     free(cywee_Inactivity_Info);
     cywee_Inactivity_Info = NULL;
-#endif
 }
 
+#endif
+
 //查找手表通知
 void MsgCenterNotifyFindWatchProc(const Topic topic, Request* req)
 {
@@ -1534,15 +1539,16 @@ static MsgCenterNotifyTable g_msgCenterNotifyTable[] = {
     {TOPIC_EVENT_HFP_PHONE_TO_WATCH, MsgCenterNotifyHfpWatchProc},
     {TOPIC_EVENT_HFP_HINT,             MsgCenterNotifyHfpWatchHintProc},
     
-#if 0
-    {TOPIC_EVENT_ACTIVITY_UPDATE,       MsgCenterNotifyActivityProc},
-    {TOPIC_EVENT_ACTIVITY_EXTRA_INFO_UPDATE,       MsgCenterNotifyActivityExtraInfoProc},
+#ifdef SUPPORT_CYWEE_SERVICE
+    // {TOPIC_EVENT_ACTIVITY_UPDATE,       MsgCenterNotifyActivityProc},
+    // {TOPIC_EVENT_ACTIVITY_EXTRA_INFO_UPDATE,       MsgCenterNotifyActivityExtraInfoProc},
     {TOPIC_EVENT_AR_ALERT_TYPE_UPDATE,       MsgCenterNotifyArAlertProc},
     {TOPIC_EVENT_INACTIVITY_UPDATE,       MsgCenterNotifyInactivityProc},
-    {TOPIC_EVENT_INACTIVITY_ACCUMULATE_TIME_UPDATE,       MsgCenterNotifyInactivityAccumulateTimeProc},
-    {TOPIC_EVENT_BLE_TRAINING,       MsgCenterNotifybleAPPtraining},
-    {TOPIC_EVENT_GOAL_SHOW_VIEW,    MsgCenterNotifygoalnotificationviewProc},
+    // {TOPIC_EVENT_INACTIVITY_ACCUMULATE_TIME_UPDATE,       MsgCenterNotifyInactivityAccumulateTimeProc},
 #endif
+    {TOPIC_EVENT_BLE_TRAINING,       MsgCenterNotifybleAPPtraining},
+   // {TOPIC_EVENT_GOAL_SHOW_VIEW,    MsgCenterNotifygoalnotificationviewProc},//编译不过
+
     {TOPIC_EVENT_BLE_TRANSMIT,       MsgCenterNotifybleTransmit},
 
     {TOPIC_EVENT_CHARGE_PLUG,        MsgCenterNotifyChargePlugProc},
index 6b98910..c755e30 100644 (file)
      return;
    }
    //训练基本信息更新
-   if (request->msgId == TOPIC_EVENT_ACTIVITY_UPDATE) {
-     act_result_t *cyweeInfo = new act_result_t();
-     int rets = memcpy_s(cyweeInfo, sizeof(act_result_t),
-                         (act_result_t *)request->data, request->len);
-     if (rets != EOK) {
-       delete cyweeInfo; // 处理内存分配失败的情况
-       cyweeInfo = NULL;
-       WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,
-                     "memcpy_s act_result_t fail ret = %d", rets);
-       return;
-     }
-     TraingModel::GetInstance()->AnalysisData(cyweeInfo);
-     // 更新其他目标完成度
-     TraingModel::GetInstance()->CheckSportTag();
-     delete cyweeInfo; // 释放内存
-   }
-   //训练额外信息
-   if (request->msgId == TOPIC_EVENT_ACTIVITY_EXTRA_INFO_UPDATE) {
-     act_ext_result_t *cyweeInfo_ext = new act_ext_result_t();
-     int rets = memcpy_s(cyweeInfo_ext, sizeof(act_ext_result_t),
-                         (act_ext_result_t *)request->data, request->len);
-     if (rets != EOK) {
-       delete cyweeInfo_ext; // 处理内存分配失败的情况
-       cyweeInfo_ext = NULL;
-       WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,
-                     "memcpy_s act_ext_result_t fail ret = %d", rets);
-       return;
-     }
-     TraingModel::GetInstance()->AnalysisExtraData(cyweeInfo_ext);
-     delete cyweeInfo_ext; // 释放内存
-   }
-   //训练心率
-   if (request->msgId == TOPIC_EVENT_HEARTRATE_UPDATA) {
-     uint8_t heart = *((u_int8_t *)(request->data)); // 进行类型转换
-     TraingModel::GetInstance()->AnalysisHeartData(heart);
-   }
+  //  if (request->msgId == TOPIC_EVENT_ACTIVITY_UPDATE) {
+  //    act_result_t *cyweeInfo = new act_result_t();
+  //    int rets = memcpy_s(cyweeInfo, sizeof(act_result_t),
+  //                        (act_result_t *)request->data, request->len);
+  //    if (rets != EOK) {
+  //      delete cyweeInfo; // 处理内存分配失败的情况
+  //      cyweeInfo = NULL;
+  //      WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,
+  //                    "memcpy_s act_result_t fail ret = %d", rets);
+  //      return;
+  //    }
+  //    TraingModel::GetInstance()->AnalysisData(cyweeInfo);
+  //    // 更新其他目标完成度
+  //    TraingModel::GetInstance()->CheckSportTag();
+  //    delete cyweeInfo; // 释放内存
+  //  }
+  //  //训练额外信息
+  //  if (request->msgId == TOPIC_EVENT_ACTIVITY_EXTRA_INFO_UPDATE) {
+  //    act_ext_result_t *cyweeInfo_ext = new act_ext_result_t();
+  //    int rets = memcpy_s(cyweeInfo_ext, sizeof(act_ext_result_t),
+  //                        (act_ext_result_t *)request->data, request->len);
+  //    if (rets != EOK) {
+  //      delete cyweeInfo_ext; // 处理内存分配失败的情况
+  //      cyweeInfo_ext = NULL;
+  //      WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,
+  //                    "memcpy_s act_ext_result_t fail ret = %d", rets);
+  //      return;
+  //    }
+  //    TraingModel::GetInstance()->AnalysisExtraData(cyweeInfo_ext);
+  //    delete cyweeInfo_ext; // 释放内存
+  //  }
+  //  //训练心率
+  //  if (request->msgId == TOPIC_EVENT_HEARTRATE_UPDATA) {
+  //    uint8_t heart = *((u_int8_t *)(request->data)); // 进行类型转换
+  //    TraingModel::GetInstance()->AnalysisHeartData(heart);
+  //  }
  #endif
  }
  #ifdef __cplusplus
index ce6030c..42f1f92 100644 (file)
@@ -51,16 +51,16 @@ typedef enum {
     TOPIC_EVENT_SPORT_DISTANCE,\r
     TOPIC_EVENT_LOCATION,\r
     TOPIC_EVENT_HFP_HINT,\r
-// #ifdef SUPPORT_CYWEE_SERVICE\r
-    TOPIC_EVENT_ACTIVITY_UPDATE,\r
-    TOPIC_EVENT_ACTIVITY_EXTRA_INFO_UPDATE,\r
+#ifdef SUPPORT_CYWEE_SERVICE\r
+    // TOPIC_EVENT_ACTIVITY_UPDATE,\r
+    // TOPIC_EVENT_ACTIVITY_EXTRA_INFO_UPDATE,\r
     TOPIC_EVENT_AR_ALERT_TYPE_UPDATE,\r
     TOPIC_EVENT_INACTIVITY_UPDATE,\r
-    TOPIC_EVENT_INACTIVITY_ACCUMULATE_TIME_UPDATE,\r
+    // TOPIC_EVENT_INACTIVITY_ACCUMULATE_TIME_UPDATE,\r
+#endif\r
     TOPIC_EVENT_BLE_TRAINING,\r
     TOPIC_EVENT_BLE_TRANSMIT,\r
     TOPIC_EVENT_GOAL_SHOW_VIEW,\r
-// #endif\r
     TOPIC_EVENT_CHARGE_PLUG,\r
     TOPIC_EVENT_CHARGE_UNPLUG,\r
     TOPIC_EVENT_LOWPOWER_ALARM,\r
index b7f5254..5ec2a32 100644 (file)
@@ -30,14 +30,14 @@ static const TopicToCore topicToCoreArray[] = {
     {TOPIC_EVENT_STATIC_HEARTRATE_UPDATA, A_CORE_MASK, 1},
     {TOPIC_EVENT_BLE_TRAINING,A_CORE_MASK,1},
     {TOPIC_EVENT_BLE_TRANSMIT,A_CORE_MASK,1},
-#ifdef CYWEE_SPORT    
-    {TOPIC_EVENT_ACTIVITY_UPDATE, A_CORE_MASK, 1},
-    {TOPIC_EVENT_ACTIVITY_EXTRA_INFO_UPDATE, A_CORE_MASK, 1},
+#ifdef SUPPORT_CYWEE_SERVICE    
+    // {TOPIC_EVENT_ACTIVITY_UPDATE, A_CORE_MASK, 1},
+    // {TOPIC_EVENT_ACTIVITY_EXTRA_INFO_UPDATE, A_CORE_MASK, 1},
     {TOPIC_EVENT_AR_ALERT_TYPE_UPDATE, A_CORE_MASK, 1},
     {TOPIC_EVENT_INACTIVITY_UPDATE, A_CORE_MASK, 1},
-    {TOPIC_EVENT_INACTIVITY_ACCUMULATE_TIME_UPDATE, A_CORE_MASK, 1},
-    {TOPIC_EVENT_GOAL_SHOW_VIEW,A_CORE_MASK,1},
+    // {TOPIC_EVENT_INACTIVITY_ACCUMULATE_TIME_UPDATE, A_CORE_MASK, 1},
 #endif
+    {TOPIC_EVENT_GOAL_SHOW_VIEW,A_CORE_MASK,1},
 #ifdef SUPPORT_SPO2_NOTIFICATION
     {TOPIC_EVENT_SPO2_UPDATE, A_CORE_MASK, 1},
     {TOPIC_EVENT_START_HRS_MONITORING, A_CORE_MASK, 1},
index 4ddd246..a95b72a 100644 (file)
@@ -115,16 +115,15 @@ const PriorityMapper PRI_MAPPER[] = {
 #endif
     {TOPIC_EVENT_ON_TIME,PRIORITY_TWO},
 
-#if 0
-    {TOPIC_EVENT_ACTIVITY_UPDATE,PRIORITY_TWO},
-    {TOPIC_EVENT_ACTIVITY_EXTRA_INFO_UPDATE,PRIORITY_TWO},
+#ifdef SUPPORT_CYWEE_SERVICE
+    // {TOPIC_EVENT_ACTIVITY_UPDATE,PRIORITY_TWO},
+    // {TOPIC_EVENT_ACTIVITY_EXTRA_INFO_UPDATE,PRIORITY_TWO},
     {TOPIC_EVENT_AR_ALERT_TYPE_UPDATE,PRIORITY_TWO},
-    {TOPIC_EVENT_STEPDATA_UPDATE,PRIORITY_TWO},
+    // {TOPIC_EVENT_STEPDATA_UPDATE,PRIORITY_TWO},
     {TOPIC_EVENT_INACTIVITY_UPDATE,PRIORITY_TWO},
-    {TOPIC_EVENT_INACTIVITY_ACCUMULATE_TIME_UPDATE,PRIORITY_TWO},
-    {TOPIC_EVENT_GOAL_SHOW_VIEW,PRIORITY_TWO},
+    // {TOPIC_EVENT_INACTIVITY_ACCUMULATE_TIME_UPDATE,PRIORITY_TWO},
 #endif
-
+    {TOPIC_EVENT_GOAL_SHOW_VIEW,PRIORITY_TWO},
     {TOPIC_EVENT_BLE_TRAINING,PRIORITY_TWO},
     {TOPIC_EVENT_BLE_TRANSMIT,PRIORITY_ONE},
 
@@ -175,11 +174,11 @@ void MsgCenterSubscribe()
     MsgCenterSubscribeTopic(TOPIC_EVENT_HFP_PHONE_TO_WATCH);
     MsgCenterSubscribeTopic(TOPIC_EVENT_HFP_WATCH_TO_PHONE);
     MsgCenterSubscribeTopic(TOPIC_EVENT_HFP_HINT);
-    MsgCenterSubscribeTopic(TOPIC_EVENT_ACTIVITY_UPDATE);
-    MsgCenterSubscribeTopic(TOPIC_EVENT_ACTIVITY_EXTRA_INFO_UPDATE);
+    // MsgCenterSubscribeTopic(TOPIC_EVENT_ACTIVITY_UPDATE);
+    // MsgCenterSubscribeTopic(TOPIC_EVENT_ACTIVITY_EXTRA_INFO_UPDATE);
     MsgCenterSubscribeTopic(TOPIC_EVENT_AR_ALERT_TYPE_UPDATE);
-    MsgCenterSubscribeTopic(TOPIC_EVENT_INACTIVITY_UPDATE);
-    MsgCenterSubscribeTopic(TOPIC_EVENT_INACTIVITY_ACCUMULATE_TIME_UPDATE);
+    // MsgCenterSubscribeTopic(TOPIC_EVENT_INACTIVITY_UPDATE);
+    // MsgCenterSubscribeTopic(TOPIC_EVENT_INACTIVITY_ACCUMULATE_TIME_UPDATE);
     MsgCenterSubscribeTopic(TOPIC_EVENT_BLE_TRAINING);
     MsgCenterSubscribeTopic(TOPIC_EVENT_BLE_TRANSMIT);
     MsgCenterSubscribeTopic(TOPIC_EVENT_GOAL_SHOW_VIEW);
@@ -1013,7 +1012,7 @@ void MsgCenterNotifyCat1FailEProc(const Topic topic, Request* req)
 
 
 
-#if 0
+#if 0  //编译不过
     //每日活动
     void MsgCenterNotifygoalnotificationviewProc(const Topic topic, Request* req)
     {
@@ -1148,94 +1147,98 @@ void MsgCenterNotifyCat1FailEProc(const Topic topic, Request* req)
             #endif
         }
 
+    }
 
+#endif
 
-    }
-    //每日训练数据刷新
-    void MsgCenterNotifyActivityProc(const Topic topic, Request* req)
-    {
-        unused(topic);
-        cywee_activity_result_t* c_activity_result_t =  (cywee_activity_result_t *) malloc(req->len);
-        if(c_activity_result_t==NULL)
-        {
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Memory allocation failure");
-            return;
-        }
+#ifdef SUPPORT_CYWEE_SERVICE
 
-        int rets = memcpy_s(c_activity_result_t, req->len, (cywee_activity_result_t*)req->data, req->len);
-        if (rets != EOK)
-        {
-            free(c_activity_result_t);
-            c_activity_result_t = NULL;
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "memcpy_s c_activity_result_t failed, ret = %d", rets);
-            return;
-        }
-        if(c_activity_result_t->activity_mode == SPORT_ACTIVE_MODE_NORMAL)
-        {
-            /*更新卡路里数据*/
-            //if(c_activity_result_t->calories!=0)
-            {
-                set_calories_data(c_activity_result_t->calories);
-    #if DIALDATASET
-                uint32_t calories= OHOS::GoalModel::GetInstance().show_data_calories_refresh();
+    // //每日训练数据刷新
+    // void MsgCenterNotifyActivityProc(const Topic topic, Request* req)
+    // {
+    //     unused(topic);
+    //     cywee_activity_result_t* c_activity_result_t =  (cywee_activity_result_t *) malloc(req->len);
+    //     if(c_activity_result_t==NULL)
+    //     {
+    //         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Memory allocation failure");
+    //         return;
+    //     }
+
+    //     int rets = memcpy_s(c_activity_result_t, req->len, (cywee_activity_result_t*)req->data, req->len);
+    //     if (rets != EOK)
+    //     {
+    //         free(c_activity_result_t);
+    //         c_activity_result_t = NULL;
+    //         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "memcpy_s c_activity_result_t failed, ret = %d", rets);
+    //         return;
+    //     }
+    //     if(c_activity_result_t->activity_mode == SPORT_ACTIVE_MODE_NORMAL)
+    //     {
+    //         /*更新卡路里数据*/
+    //         //if(c_activity_result_t->calories!=0)
+    //         {
+    //             set_calories_data(c_activity_result_t->calories);
+    // #if DIALDATASET
+    //             uint32_t calories= OHOS::GoalModel::GetInstance().show_data_calories_refresh();
                 
-                DialModelCalorie::GetInstance()->UpdateCalorie(calories);
-    #endif
-            }
-            /*更新距离数据*/
-            //if(c_activity_result_t->distance != 0)
-            {
-                set_distance_data(c_activity_result_t->distance);  
-    #if DIALDATASET
-                float  distance= OHOS::GoalModel::GetInstance().show_data_distance_refresh();
-                DialModelDistance::GetInstance()->UpdateDistance(distance);
-    #endif 
-            }
-        }
-        else if(c_activity_result_t->activity_mode == SPORT_ACTIVE_MODE_FREE_TRAINING && c_activity_result_t->MHR_zone >= 2)
-        {
-            /*更新燃脂时间数据*/
-            set_fat_time_data(1);
-        }
+    //             DialModelCalorie::GetInstance()->UpdateCalorie(calories);
+    // #endif
+    //         }
+    //         /*更新距离数据*/
+    //         //if(c_activity_result_t->distance != 0)
+    //         {
+    //             set_distance_data(c_activity_result_t->distance);  
+    // #if DIALDATASET
+    //             float  distance= OHOS::GoalModel::GetInstance().show_data_distance_refresh();
+    //             DialModelDistance::GetInstance()->UpdateDistance(distance);
+    // #endif 
+    //         }
+    //     }
+    //     else if(c_activity_result_t->activity_mode == SPORT_ACTIVE_MODE_FREE_TRAINING && c_activity_result_t->MHR_zone >= 2)
+    //     {
+    //         /*更新燃脂时间数据*/
+    //         set_fat_time_data(1);
+    //     }
         
-        free(c_activity_result_t);
-        c_activity_result_t = NULL;
-    }
-    static int train_fat_time = 0;
-    void MsgCenterNotifyActivityExtraInfoProc(const Topic topic, Request* req)
-    {
-        unused(topic);
-        cywee_activity_result_extre_info_t* c_activity_result_extre_info_t =  (cywee_activity_result_extre_info_t *) malloc(req->len);
-        if(c_activity_result_extre_info_t==NULL)
-        {
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Memory allocation failure");
-            return;
-        }
-
-        int rets = memcpy_s(c_activity_result_extre_info_t, req->len, (cywee_activity_result_extre_info_t*)req->data, req->len);
-        if (rets != EOK)
-        {
-            free(c_activity_result_extre_info_t);
-            c_activity_result_extre_info_t = NULL;
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "memcpy_s c_activity_result_extre_info_t failed, ret = %d", rets);
-            return;
-        }
+    //     free(c_activity_result_t);
+    //     c_activity_result_t = NULL;
+    // }
 
-        if(uapi_dev_runtime_get_train_status() && c_activity_result_extre_info_t->ativity_zone_high_duration)
-        {
-            train_fat_time = c_activity_result_extre_info_t->ativity_zone_high_duration;
-        }
-        /*更新燃脂时间数据*/
-        else if(uapi_dev_runtime_get_train_status() == 0 && train_fat_time)
-        {
-            set_fat_time_data(train_fat_time);
-            train_fat_time = 0;
-        }
+    // static int train_fat_time = 0;
+    // void MsgCenterNotifyActivityExtraInfoProc(const Topic topic, Request* req)
+    // {
+    //     unused(topic);
+    //     cywee_activity_result_extre_info_t* c_activity_result_extre_info_t =  (cywee_activity_result_extre_info_t *) malloc(req->len);
+    //     if(c_activity_result_extre_info_t==NULL)
+    //     {
+    //         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Memory allocation failure");
+    //         return;
+    //     }
+
+    //     int rets = memcpy_s(c_activity_result_extre_info_t, req->len, (cywee_activity_result_extre_info_t*)req->data, req->len);
+    //     if (rets != EOK)
+    //     {
+    //         free(c_activity_result_extre_info_t);
+    //         c_activity_result_extre_info_t = NULL;
+    //         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "memcpy_s c_activity_result_extre_info_t failed, ret = %d", rets);
+    //         return;
+    //     }
+
+    //     if(uapi_dev_runtime_get_train_status() && c_activity_result_extre_info_t->ativity_zone_high_duration)
+    //     {
+    //         train_fat_time = c_activity_result_extre_info_t->ativity_zone_high_duration;
+    //     }
+    //     /*更新燃脂时间数据*/
+    //     else if(uapi_dev_runtime_get_train_status() == 0 && train_fat_time)
+    //     {
+    //         set_fat_time_data(train_fat_time);
+    //         train_fat_time = 0;
+    //     }
+
+    //     free(c_activity_result_extre_info_t);
+    //     c_activity_result_extre_info_t = NULL;
+    // }
 
-        free(c_activity_result_extre_info_t);
-        c_activity_result_extre_info_t = NULL;
-    }
-#endif
 /*运动识别*/
 void MsgCenterNotifyArAlertProc(const Topic topic, Request* req)
 {
@@ -1258,7 +1261,7 @@ void MsgCenterNotifyArAlertProc(const Topic topic, Request* req)
 void MsgCenterNotifyInactivityProc(const Topic topic, Request *req)
 {
     WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "MsgCenterNotifyInactivityProc !");
-#ifdef SUPPORT_CYWEE_SERVICE
+
     inact_result_t *cywee_Inactivity_Info = (inact_result_t *)malloc(req->len);
     if (!cywee_Inactivity_Info)
     {
@@ -1300,9 +1303,10 @@ void MsgCenterNotifyInactivityProc(const Topic topic, Request *req)
     
     free(cywee_Inactivity_Info);
     cywee_Inactivity_Info = NULL;
-#endif
 }
 
+#endif
+
 //查找手表通知
 void MsgCenterNotifyFindWatchProc(const Topic topic, Request* req)
 {
@@ -1534,14 +1538,16 @@ static MsgCenterNotifyTable g_msgCenterNotifyTable[] = {
     {TOPIC_EVENT_HFP_PHONE_TO_WATCH, MsgCenterNotifyHfpWatchProc},
     {TOPIC_EVENT_HFP_HINT,             MsgCenterNotifyHfpWatchHintProc},
     
-#if 0
-    {TOPIC_EVENT_ACTIVITY_UPDATE,       MsgCenterNotifyActivityProc},
-    {TOPIC_EVENT_ACTIVITY_EXTRA_INFO_UPDATE,       MsgCenterNotifyActivityExtraInfoProc},
+#ifdef SUPPORT_CYWEE_SERVICE
+    // {TOPIC_EVENT_ACTIVITY_UPDATE,       MsgCenterNotifyActivityProc},
+    // {TOPIC_EVENT_ACTIVITY_EXTRA_INFO_UPDATE,       MsgCenterNotifyActivityExtraInfoProc},
     {TOPIC_EVENT_AR_ALERT_TYPE_UPDATE,       MsgCenterNotifyArAlertProc},
     {TOPIC_EVENT_INACTIVITY_UPDATE,       MsgCenterNotifyInactivityProc},
-    {TOPIC_EVENT_INACTIVITY_ACCUMULATE_TIME_UPDATE,       MsgCenterNotifyInactivityAccumulateTimeProc},
-    {TOPIC_EVENT_GOAL_SHOW_VIEW,    MsgCenterNotifygoalnotificationviewProc},
+    // {TOPIC_EVENT_INACTIVITY_ACCUMULATE_TIME_UPDATE,       MsgCenterNotifyInactivityAccumulateTimeProc},
 #endif
+
+    // {TOPIC_EVENT_GOAL_SHOW_VIEW,    MsgCenterNotifygoalnotificationviewProc}, //编译不过
+
     {TOPIC_EVENT_BLE_TRAINING,       MsgCenterNotifybleAPPtraining},
     {TOPIC_EVENT_BLE_TRANSMIT,       MsgCenterNotifybleTransmit},
 
index b9a419d..8ad6000 100644 (file)
@@ -67,6 +67,37 @@ static int new_fat=0; //存燃脂数据
 static int history_fat=0; //历史数据
 static int history_fat_=0; //一小时前燃脂数据
 
+// 燃脂时间计算相关变量
+static uint32_t last_fat_burn_timestamp = 0;  // 上次燃脂状态更新的时间戳
+static int last_mhr_zone = -1;                // 上次的心率区间状态
+
+/**
+ * @brief 更新燃脂时间
+ * @param current_mhr_zone 当前心率区间 (2表示燃脂区间)
+ */
+static void update_fat_burn_time(int current_mhr_zone)
+{
+    uint32_t current_timestamp = 0;
+    uapi_get_timestampe_ss(&current_timestamp);
+    
+    // 如果上次时间戳有效且上次是燃脂状态
+    if (last_fat_burn_timestamp > 0 && last_mhr_zone == 2) {
+        // 计算时间差 (秒)
+        uint32_t time_diff = current_timestamp - last_fat_burn_timestamp;
+        
+        // 防止异常时间跳跃 (超过10分钟认为异常)
+        if (time_diff > 0 && time_diff <= 600) {
+            new_fat += time_diff;
+            CWM_OS_dbgPrintf("Fat burn time updated: +%d seconds, total: %d seconds\n", 
+                           time_diff, new_fat);
+        }
+    }
+    
+    // 更新状态
+    last_fat_burn_timestamp = current_timestamp;
+    last_mhr_zone = current_mhr_zone;
+}
+
 static char chipInfo[64] = {0};
 
 static int sedentary_interval = 1;
@@ -978,6 +1009,10 @@ void cywee_reset_history_daily_data(void)
     history_distances=0;
     history_fat=0;
     // new_fat = 0; //当前燃脂数据
+
+    // 重置燃脂时间计算相关状态
+    last_fat_burn_timestamp = 0;
+    last_mhr_zone = -1;
 }
 
 void cywee_reset_daily_data(void)
@@ -1587,6 +1622,9 @@ void CWM_AP_SensorListen(pSensorEVT_t sensorEVT) {
                 c_act_ext_result_t.MHR_zone = (int)sensorEVT->fData[13];
                 c_act_ext_result_t.distance_motion = (int)sensorEVT->fData[14];
 
+                // 燃脂时间计算:当MHR_zone = 2时表示燃脂状态
+                update_fat_burn_time(c_act_ext_result_t.MHR_zone);
+
                 // cywee_func(CYWEE_MSG_TYPE_ACTIVITY_EXTRA_INFO_UPDATE,&c_act_ext_result_t,sizeof(act_ext_result_t));
                 //CustomEventPublish(TOPIC_EVENT_ACTIVITY_EXTRA_INFO_UPDATE, &c_act_ext_result_t, sizeof(act_ext_result_t));
                 // CWM_OS_dbgPrintf("PAH:avg_step_freq[%d], avg_step_len[%f],avg_pace[%d], max_step_freq[%d], max_pace[%d]\n",
@@ -1601,6 +1639,10 @@ void CWM_AP_SensorListen(pSensorEVT_t sensorEVT) {
                 c_act_result_t.calories = (int)sensorEVT->fData[1];
                 c_act_result_t.duration = (int)sensorEVT->fData[5];
                 c_act_result_t.MHR_zone = (int)sensorEVT->fData[6];
+
+                // 燃脂时间计算:当MHR_zone = 2时表示燃脂状态
+                update_fat_burn_time(c_act_result_t.MHR_zone);
+
                 // c_act_result_t.hrs = hrs;
                 // hrs = 0; //每次上报完 清除心率值
                 // cywee_func(CYWEE_MSG_TYPE_ACTIVITY_UPDATE,&c_act_result_t,sizeof(act_result_t));
index 243189e..53bbac2 100644 (file)
@@ -7,13 +7,15 @@ set(COMPONENT_NAME "ppg_sensor_hx3695")
 if("PPG_HX3695" IN_LIST DEFINES)
 set(SOURCES ${SOURCES}
     ${CMAKE_CURRENT_SOURCE_DIR}/hx3695.c
-    ${CMAKE_CURRENT_SOURCE_DIR}/hx3695_check_touch.c
+    # ${CMAKE_CURRENT_SOURCE_DIR}/hx3695_check_touch.c
     ${CMAKE_CURRENT_SOURCE_DIR}/hx3695_factory_test.c
-    ${CMAKE_CURRENT_SOURCE_DIR}/hx3695_hrs_agc.c
-    ${CMAKE_CURRENT_SOURCE_DIR}/hx3695_hrv_agc.c
-    ${CMAKE_CURRENT_SOURCE_DIR}/hx3695_spo2_agc.c
+    # ${CMAKE_CURRENT_SOURCE_DIR}/hx3695_hrs_agc.c
+    # ${CMAKE_CURRENT_SOURCE_DIR}/hx3695_hrv_agc.c
+    # ${CMAKE_CURRENT_SOURCE_DIR}/hx3695_spo2_agc.c
     #${CMAKE_CURRENT_SOURCE_DIR}/hx3695_hal.c
     ${CMAKE_CURRENT_SOURCE_DIR}/hx3695_hrs_custom.c
+    ${CMAKE_CURRENT_SOURCE_DIR}/hx3695_agc.c
+    
 )
 set(PUBLIC_HEADER
     ${CMAKE_CURRENT_SOURCE_DIR}
@@ -55,7 +57,16 @@ set(MAIN_COMPONENT
 
 if("PPG_HX3695" IN_LIST DEFINES)
     find_library(LIB_PATH_HX3695 libhx3695.a ${CMAKE_CURRENT_SOURCE_DIR})
-    target_link_libraries(${TARGET_NAME} PRIVATE -Wl,--whole-archive ${LIB_PATH_HX3695} PRIVATE -Wl,--whole-archive)
+    find_library(LIB_PATH_HX3695_HRV libHX3697_hs_20241230_103__01_hrv.a ${CMAKE_CURRENT_SOURCE_DIR})
+    find_library(LIB_PATH_HX3695_HRS libHX3697_hs_20241230_3153__01_hrs.a ${CMAKE_CURRENT_SOURCE_DIR})
+    find_library(LIB_PATH_HX3695_SPO libHX3697_hs_20240607_3333__02_spo.a ${CMAKE_CURRENT_SOURCE_DIR})
+
+    target_link_libraries(${TARGET_NAME} PRIVATE -Wl,--whole-archive 
+    # ${LIB_PATH_HX3695} 
+    ${LIB_PATH_HX3695_HRV} 
+    ${LIB_PATH_HX3695_HRS} 
+    ${LIB_PATH_HX3695_SPO} 
+    PRIVATE -Wl,--whole-archive)
 endif()
 build_component()
 
index f166ffb..03fd50a 100644 (file)
@@ -5,32 +5,28 @@
 #include <math.h>\r
 \r
 #include "tyhx_hrs_custom.h"\r
-//#include "tyhx_mems.h"\r
-\r
-#ifdef CHIP_HX3695\r
 #include "hx3695.h"\r
-#ifdef HRS_ALG_LIB\r
-#include "hx3695_hrs_agc.h"\r
+#ifdef  TYHX_DEMO\r
+#include "demo_ctrl.h"\r
+#include "twi_master.h"\r
+#include "SEGGER_RTT.h"\r
+#include "app_timer.h"\r
+#include "nrf_delay.h"\r
+#include "nrf_gpio.h"\r
+#include "nrf_drv_gpiote.h"\r
+#include "drv_oled.h"\r
+#include "opr_oled.h"\r
+\r
+#include "oled_iic.h"\r
+#include "word.h"\r
+#include "iic.h"\r
+#endif\r
+#include "hx3695_agc.h"\r
 #include "tyhx_hrs_alg.h"\r
-#endif\r
-#ifdef SPO2_ALG_LIB\r
-#include "hx3695_spo2_agc.h"\r
-#include "tyhx_spo2_alg.h"\r
-#endif\r
-#ifdef HRV_ALG_LIB\r
-#include "hx3695_hrv_agc.h"\r
 #include "tyhx_hrv_alg.h"\r
-#endif\r
-#ifdef CHECK_TOUCH_LIB\r
-#include "hx3695_check_touch.h"\r
-#endif\r
+#include "tyhx_spo2_alg.h"\r
 #include "hx3695_factory_test.h"\r
-//#include "app_ble_factory_test.h"\r
 \r
-// #include "ui.h"\r
-// #include "app_heart_rate.h"\r
-// #include "lv_dev.h"\r
-// #include "app_task.h"\r
 \r
 #ifdef SUPPORT_CYWEE_SERVICE\r
 #include "cywee_hal.h"\r
 \r
 #include "ppg_hal.h"\r
 \r
+uint8_t read_fifo_first_flg = 0;\r
+uint8_t s_ppg_state = 0;\r
+uint8_t s_cal_state = 0;\r
+uint8_t check_touch_cnt = 0;\r
+static wear_msg_code_t wear_status = MSG_NO_WEAR;\r
+static wear_msg_code_t wear_status_pre = MSG_NO_INIT;\r
+WORK_MODE_T work_mode_flag = HRS_MODE;\r
+ppg_sensor_data_t ppg_sensor_data;\r
+int16_t gsen_data_x_fifo[64];\r
+int16_t gsen_data_y_fifo[64];\r
+int16_t gsen_data_z_fifo[64];\r
 \r
-FT_CUSTOM_RESULTS_t hrsresult ={0};\r
-\r
-int16_t gsen_fifo_x[64]={0};\r
-int16_t gsen_fifo_y[64]={0};\r
-int16_t gsen_fifo_z[64]={0};\r
-\r
+static uint8_t hrs_ble_falg = 0;\r
+// static int history_wear_status = -1;\r
+static uint8_t wear_result = 0;\r
+static uint8_t spo2_ret = 0;\r
+static int32_t factory_data = 0;\r
+static uint8_t hx3695_chip_id = 0;\r
 #ifdef SUPPORT_CYWEE_SERVICE\r
-gsenson_t gsensordata[32];\r
+static gsenson_t gsensordata[32];\r
 #endif\r
+// static uint8_t his_wear = 2;\r
+// static uint8_t wear_cnt = 0;\r
 \r
-static uint8_t msg_count = 0;\r
-\r
-#ifdef SPO2_VECTOR\r
-#include "spo2_vec.h"\r
-uint32_t spo2_send_cnt = 0;\r
-uint32_t spo2_send_cnt1 = 0;\r
-int32_t red_buf_vec[8];\r
-int32_t ir_buf_vec[8];\r
-int32_t green_buf_vec[8];\r
-#endif\r
+uint8_t alg_ram[11 * 1024] __attribute__((aligned(4)));\r
 \r
-#ifdef HR_VECTOR\r
-#include "hr_vec.h"\r
-uint32_t vec_send_cnt = 0;\r
-int32_t PPG_buf_vec[8];\r
-#endif\r
 \r
-#ifdef HRV_TESTVEC\r
-#include "hrv_testvec.h"\r
-#endif\r
-// #include "sys_init.h"\r
-// #include "cwm_api.h"\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
+const uint8_t SPO2_LOW_XCORR_THRE = 30;       //(64*xcorr)'s square below this threshold, means error signal\r
+const uint8_t SPO2_CALI = 1;                  // spo2_result cali mode\r
+const uint8_t XCORR_MODE = 1;                 // xcorr mode switch\r
+const uint8_t QUICK_RESULT = 1;               // come out the spo2 result quickly ;0 is normal,1 is quick\r
+const uint16_t MEAN_NUM = 32;                 // the length of smooth-average ;the value of MEAN_NUM can be given only 256 and 512\r
+const uint8_t G_SENSOR = 0;                   // if =1, open the gsensor mode\r
+const uint8_t SPO2_GSEN_POW_THRE = 150;       // gsen pow judge move, range:0-200;\r
+const uint32_t SPO2_BASE_LINE_INIT = 153000;  // spo2 baseline init, = 103000 + ratio(a variable quantity,depends on different cases)*SPO2_SLOPE\r
+const int32_t SOP2_DEGLITCH_THRE = 100000;    // remove signal glitch over this threshold\r
+const int32_t SPO2_REMOVE_JUMP_THRE = 50000;  // remove signal jump over this threshold\r
+const uint32_t SPO2_SLOPE = 50000;            // increase this slope, spo2 reduce more\r
+const uint16_t SPO2_LOW_CLIP_END_TIME = 1500; // low clip mode before this data_cnt, normal clip mode after this\r
+const uint16_t SPO2_LOW_CLIP_DN = 150;        // spo2 reduce 0.15/s at most in low clip mode\r
+const uint16_t SPO2_NORMAL_CLIP_DN = 500;     // spo2 reduce 0.5/s at most in normal clip mode\r
+const uint8_t SPO2_LOW_SNR_THRE = 40;         // snr below this threshold, means error signal\r
+const uint16_t IR_AC_TOUCH_THRE = 200;        // AC_min*0.3\r
+const uint16_t IR_FFT_POW_THRE = 500;         // fft_pow_min\r
+const uint8_t SLOPE_PARA_MAX = 28;\r
+const uint8_t SLOPE_PARA_MIN = 3;\r
 \r
-static uint8_t hrs_ble_falg = 0;\r
-#define PPG_DATA_LEN_MAX 17\r
-int32_t s_buf[256];\r
-uint32_t cnt_num = 0;\r
-uint32_t  phase3_rdy_num = 0;\r
-uint8_t fifo_data_buf[768];\r
-uint8_t hrs_phase_num= 3;\r
-uint8_t spo2_phase_num= 4;\r
-uint8_t hrv_phase_num = 4;\r
-extern uint8_t data_count;\r
-extern uint8_t hr_no_living_dur;\r
-extern uint8_t spo2_no_living_dur;\r
-\r
-extern int tyhx_long_timer_tick;       \r
-//spo2 agc\r
-const uint8_t  hx3695_spo2_agc_red_idac = RED_AGC_OFFSET;\r
-const uint8_t  hx3695_spo2_agc_ir_idac = IR_AGC_OFFSET;\r
-const uint8_t  hx3695_spo2_agc_ir_idac1 = IR_AGC_OFFSET;\r
-const uint8_t  hx3695_spo2_agc_ir_idac2 = IR_AGC_OFFSET;\r
-const uint8_t  hx3695_spo2_agc_green_idac = GREEN_AGC_OFFSET;\r
-//hrs agc\r
-const uint8_t  hx3695_hrs_agc_idac = HR_GREEN_AGC_OFFSET;\r
-const uint8_t  hx3695_hrs_g1_agc_idac = HR_GREEN1_AGC_OFFSET;\r
-const uint8_t  hx3695_hrs_g2_agc_idac = HR_GREEN2_AGC_OFFSET;                     \r
-const uint8_t  hx3695_hrs_g3_agc_idac = HR_GREEN3_AGC_OFFSET;\r
-//hrv agc\r
-const uint8_t  hx3695_hrv_agc_idac = HR_GREEN_AGC_OFFSET;\r
-\r
-const uint8_t  green_led_max_init = 255;\r
-const uint8_t  red_led_max_init = 255;\r
-const uint8_t  ir_led_max_init = 255;\r
-\r
-uint8_t low_vbat_flag =0;\r
-WORK_MODE_T work_mode_flag = HRS_MODE;\r
 const uint16_t static_thre_val = 150;\r
 const uint8_t gsen_lv_val = 0;\r
-uint8_t read_fifo_first_flg = 0;\r
-\r
-//HRS_INFRARED_THRES\r
-const int32_t  hrs_ir_unwear_thres = 10000;\r
-const int32_t  hrs_ir_wear_thres = 15000;\r
-//HRV_INFRARED_THRES\r
-const int32_t  hrv_ir_unwear_thres = 8000;      //demo143b  25000\r
-const int32_t  hrv_ir_wear_thres = 10000;\r
-//SPO2_INFRARED_THRES\r
-const int32_t  spo2_ir_unwear_thres = 8000;     //demo143b  25000   30000\r
-const int32_t  spo2_ir_wear_thres = 10000;\r
-const uint8_t  spo2_ir_wear_offset = 15;\r
-//CHECK_WEAR_MODE_THRES\r
-const int32_t  check_mode_unwear_thre = 20000;\r
-const int32_t  check_mode_wear_thre = 22000;\r
-\r
-\r
-uint8_t alg_ram[11 * 1024] __attribute__((aligned(4)));\r
-//uint8_t alg_ram[10] = {0};\r
-ppg_sensor_data_t ppg_s_data;\r
-\r
-static int history_wear_status = -1;\r
-static uint8_t wear_status = 0;\r
-static uint8_t spo2_result = 0;\r
-static int32_t factory_data = 0;\r
-static uint8_t hx3695_chip_id = 0;\r
 \r
-// static int timeout = 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
-const  uint8_t   SPO2_LOW_XCORR_THRE = 30;        //(64*xcorr)'s square below this threshold, means error signal\r
-const  uint8_t   SPO2_CALI = 1;                       //spo2_result cali mode\r
-const  uint8_t   XCORR_MODE = 1;                  //xcorr mode switch\r
-const  uint8_t   QUICK_RESULT = 1;                //come out the spo2 result quickly ;0 is normal,1 is quick\r
-const  uint16_t  MEAN_NUM = 32;                  //the length of smooth-average ;the value of MEAN_NUM can be given only 256 and 512\r
-const  uint8_t   G_SENSOR = 0;                      //if =1, open the gsensor mode\r
-const  uint8_t   SPO2_GSEN_POW_THRE = 150;         //gsen pow judge move, range:0-200;\r
-const  uint32_t  SPO2_BASE_LINE_INIT = 138000;    //spo2 baseline init, = 103000 + ratio(a variable quantity,depends on different cases)*SPO2_SLOPE\r
-const  int32_t   SOP2_DEGLITCH_THRE = 100000;     //remove signal glitch over this threshold\r
-const  int32_t   SPO2_REMOVE_JUMP_THRE = 50000;  //remove signal jump over this threshold\r
-const  uint32_t  SPO2_SLOPE = 50000;              //increase this slope, spo2 reduce more\r
-const  uint16_t  SPO2_LOW_CLIP_END_TIME = 1500;   //low clip mode before this data_cnt, normal clip mode after this\r
-const  uint16_t  SPO2_LOW_CLIP_DN  = 150;         //spo2 reduce 0.15/s at most in low clip mode\r
-const  uint16_t  SPO2_NORMAL_CLIP_DN  = 500;      //spo2 reduce 0.5/s at most in normal clip mode\r
-const  uint8_t   SPO2_LOW_SNR_THRE = 40;          //snr below this threshold, means error signal\r
-const  uint16_t  IR_AC_TOUCH_THRE = 200;          //AC_min*0.3\r
-const  uint16_t  IR_FFT_POW_THRE = 500;           //fft_pow_min\r
-const  uint8_t   SLOPE_PARA_MAX = 28;\r
-const  uint8_t   SLOPE_PARA_MIN = 3;\r
-\r
-#ifdef SPO2_DATA_CALI\r
-static int32_t red_data_fifo[4] = {0};\r
-static int32_t ir_data_fifo[4] = {0};\r
-static int32_t red_dc_temp = 0;\r
-static int32_t ir_dc_temp = 0;\r
-static int32_t red_data_pre = 0;\r
-static int32_t ir_data_pre = 0;\r
-static int32_t red_jump_delta = 0;\r
-static int32_t ir_jump_delta = 0;\r
-static int32_t cali_data_cnt = 0;\r
-#endif\r
-\r
-// us 延时函数, 客户需填写\r
+void hx3695_spi_bus_init(void)\r
+{\r
+  \r
+}\r
+// us ��ʱ������ �ͻ�����д\r
 void hx3695_delay_us(uint32_t us)\r
 {\r
     tyhx_delay_us(us);\r
@@ -183,17 +102,16 @@ void hx3695_delay_us(uint32_t us)
 \r
 void hx3695_delay_ms(uint32_t ms)\r
 {\r
-    tyhx_delay_ms(ms);\r
+  tyhx_delay_ms(ms);\r
 }\r
 \r
 // i2c 写函数, 客户需填写, 地址0x44(7bit)\r
 bool hx3695_write_reg(uint8_t addr, uint8_t data)\r
 {\r
-    custom_i2c_write_reg(HX3695_I2C_DEV_8ADDR,addr,1,&data,1,I2C_BUS_2);\r
+  custom_i2c_write_reg(HX3695_I2C_DEV_8ADDR,addr,1,&data,1,I2C_BUS_2);\r
     return true;\r
 }\r
 \r
-// i2c 读函数, 客户需填写\r
 uint8_t hx3695_read_reg(uint8_t addr)\r
 {\r
     uint8_t data_buf = 0;\r
@@ -203,79 +121,10 @@ uint8_t hx3695_read_reg(uint8_t addr)
 }\r
 \r
 // i2c 连读函数, 客户需填写\r
-bool hx3695_brust_read_reg(uint8_t addr, uint8_t *buf, uint16_t length)\r
+void hx3695_brust_read_reg(uint8_t addr, uint8_t *buf, uint16_t length)\r
 {\r
     //TYHX_LOG("brust read\r\n");\r
     custom_i2c_read_regs(HX3695_I2C_DEV_8ADDR,addr,1,buf,length,I2C_BUS_2);\r
-    return true;\r
-}\r
-\r
-void Efuse_Mode_Check(void)\r
-{\r
-#if    1//def TEST_RELEASE_USE\r
-       PRINT("@@@@@@@@@ Efuse_Mode_Check\r\n");\r
-    uint8_t REG_50_E, REG_51_E, REG_52_E, REG_53_E;\r
-       \r
-       hx3695_write_reg(0x5c, 0x08) ; //0x5c\r
-       hx3695_write_reg(0x5d, 0x02) ; //0x5d\r
-       hx3695_delay_us(10);\r
-       \r
-       hx3695_write_reg(0x5a,0x10);  //0x5A\r
-       \r
-       hx3695_write_reg(0x5b,0x04);\r
-       hx3695_write_reg(0x5b,0x00);\r
-    hx3695_delay_us(10);\r
-       hx3695_write_reg(0x5b,0x44);\r
-       hx3695_write_reg(0x5b,0x40);\r
-       \r
-       REG_50_E = hx3695_read_reg(0x50);\r
-       REG_51_E = hx3695_read_reg(0x51);\r
-       REG_52_E = hx3695_read_reg(0x52);\r
-       REG_53_E = hx3695_read_reg(0x53);\r
-               \r
-    hx3695_write_reg(0x5a,0x20);  //0x5A\r
-    hx3695_write_reg(0x50,REG_50_E);\r
-    hx3695_write_reg(0x51,REG_51_E);\r
-    hx3695_write_reg(0x52,REG_52_E);\r
-    hx3695_write_reg(0x53,REG_53_E);\r
-\r
-    TYHX_LOG("EFUSE MC2: 0x50=0x%2x  0x51= 0x%2x  0x52= 0x%2x  0x53= 0x%2x \r\n",REG_50_E,REG_51_E,REG_52_E,REG_53_E);\r
-   \r
-       hx3695_write_reg(0x5a,0x00);    \r
-    hx3695_write_reg(0x5c,0x00); //0x5c\r
-    hx3695_write_reg(0x5d,0x00); //0x5d\r
-#endif     \r
-}\r
-bool Efuse_judge(void)\r
-{\r
-     uint8_t REG_50, REG_51, REG_52, REG_53,REG_50_A;\r
-    \r
-     REG_50 = hx3695_read_reg(0x50);   //32k\r
-     REG_51 = hx3695_read_reg(0x51);\r
-        REG_52 = hx3695_read_reg(0x52);        \r
-     REG_53 = hx3695_read_reg(0x53);   //bit<7>  efuse trim flg ==1\r
-  \r
-//     hx3695_write_reg(0x5d,0x00);     \r
-//     hx3695_write_reg(0x5a,0x20);  \r
-//     REG_50_A=REG_50+1;\r
-//     hx3695_write_reg(0x50,REG_50_A);  //  REG_50+1    \r
-//     TYHX_LOG("EFUSE 0x50=%x  \r\n",REG_50_A);\r
-//     hx3695_write_reg(0x50,REG_51);     \r
-//     hx3695_write_reg(0x50,REG_52); \r
-//     hx3695_write_reg(0x50,REG_53); \r
-    \r
-       //TYHX_LOG("EFUSE MC1 :0x50=0x%2x  0x51= 0x%2x  0x52= 0x%2x  0x53= 0x%2x        \r\n",REG_50,REG_51,REG_52,REG_53);\r
-    if ((REG_50 == 0x40) && (REG_51 ==0x50) && (REG_52 ==0x10) && (REG_53 ==0x22))\r
-    {             \r
-        Efuse_Mode_Check();        \r
-        //TYHX_LOG("this chip is before MC \r\n");        \r
-    }\r
-    else\r
-    {\r
-        //TYHX_LOG("EFUSE MC3 :0x50=0x%2x  0x51= 0x%2x  0x52= 0x%2x  0x53= 0x%2x  \r\n",REG_50,REG_51,REG_52,REG_53);\r
-        //TYHX_LOG("this chip is after MC \r\n");\r
-    }\r
-       return true;\r
 }\r
 \r
 uint32_t hx3695_wear_mode_timers_start(void)\r
@@ -312,9 +161,8 @@ uint32_t gsen_read_timers_stop(void)
 }\r
 \r
 \r
-/* 完成读取PPG数据定时器接口, 循环调用, 默认320ms\r
-void heart_rate_meas_timeout_handler(void * p_context)\r
-*/\r
+/* ��ɶ�ȡPPG���ݶ�ʱ���ӿڣ� ѭ�����ã� Ĭ��320ms*/\r
+// void heart_rate_meas_timeout_handler(void *p_context)\r
 void hx3695_320ms_timer_cfg(bool en)\r
 {\r
     if(en)\r
@@ -354,22 +202,52 @@ void hx3695_5000ms_timer_cfg(bool en)
 }\r
 \r
 \r
-#if defined(INT_MODE)\r
-/* 如采用中断模式, 如完成中断开启和关闭接口\r
-void hx3695_ppg_Int_handle(void)\r
-*/\r
 void hx3695_gpioint_cfg(bool en)\r
 {\r
-    if(en)\r
-    {\r
-        hx3695_gpioint_enable();\r
-    }\r
-    else\r
-    {\r
-        hx3695_gpioint_disable();\r
-    }\r
+    // if (en)\r
+    // {\r
+    //     hx3695_gpioint_enable();\r
+    // }\r
+    // else\r
+    // {\r
+    //     hx3695_gpioint_disable();\r
+    // }\r
+}\r
+\r
+void Efuse_Mode_Check(void)\r
+{\r
+    uint8_t REG_50_E, REG_51_E, REG_52_E, REG_53_E;\r
+\r
+       hx3695_write_reg(0x5c, 0x08);\r
+       hx3695_write_reg(0x5d, 0x02);\r
+       hx3695_delay_us(10);\r
+\r
+       hx3695_write_reg(0x5a,0x10);\r
+\r
+       hx3695_write_reg(0x5b,0x04);\r
+       hx3695_write_reg(0x5b,0x00);\r
+    hx3695_delay_us(10);\r
+       hx3695_write_reg(0x5b,0x44);\r
+       hx3695_write_reg(0x5b,0x40);\r
+\r
+       REG_50_E = hx3695_read_reg(0x50);\r
+       REG_51_E = hx3695_read_reg(0x51);\r
+       REG_52_E = hx3695_read_reg(0x52);\r
+       REG_53_E = hx3695_read_reg(0x53);\r
+\r
+    hx3695_write_reg(0x5a,0x20);\r
+    hx3695_write_reg(0x50,REG_50_E);\r
+    hx3695_write_reg(0x51,REG_51_E);\r
+    hx3695_write_reg(0x52,REG_52_E);\r
+    hx3695_write_reg(0x53,REG_53_E);\r
+\r
+//    DEBUG_PRINTF("EFUSE MC2: 0x50=0x%2x  0x51= 0x%2x  0x52= 0x%2x  0x53= 0x%2x \r\n",REG_50_E,REG_51_E,REG_52_E,REG_53_E);\r
+\r
+       hx3695_write_reg(0x5a,0x00);\r
+    hx3695_write_reg(0x5c,0x00); //0x5c\r
+    hx3695_write_reg(0x5d,0x00); //0x5d\r
+\r
 }\r
-#endif\r
 \r
 uint8_t hx3695_chip_check(void)\r
 {\r
@@ -396,121 +274,154 @@ uint8_t hx3695_chip_check(void)
     return chip_id;\r
 }\r
 \r
-void hx3695_get_id(uint8_t *ppg_id)\r
-{\r
-    *ppg_id = hx3695_chip_id;\r
-}\r
-\r
 uint8_t hx3695_read_fifo_size(void)\r
 {\r
-          uint8_t  data_len_h,data_len_l;\r
-          uint16_t fifo_data_length;\r
-               data_len_h = hx3695_read_reg(0x21);\r
-               data_len_l = hx3695_read_reg(0x20);\r
-               fifo_data_length = (((data_len_h&0x01)<<8)|data_len_l);\r
-\r
+    uint8_t data_len_h, data_len_l;\r
+    uint16_t fifo_data_length;\r
+    data_len_h = hx3695_read_reg(0x21);\r
+    data_len_l = hx3695_read_reg(0x20);\r
+    fifo_data_length = (((data_len_h & 0x01) << 8) | data_len_l);\r
     return fifo_data_length;\r
 }\r
 \r
+uint16_t hx3695_led_data_analysis(ppg_sensor_data_t *ppg_sensor_dat, uint16_t fifo_read_length, uint8_t sig)\r
+{\r
+    int32_t data_temp = 0;\r
+    uint8_t fifo_data_flag = 0;\r
+    uint16_t count = 0;\r
+    uint32_t ii = 0;\r
+    for(ii=0; ii<fifo_read_length; ii++)\r
+    {\r
+        fifo_data_flag = ppg_sensor_dat->s_buf[ii*3+2]>>5;\r
+        count = ii/ppg_sensor_dat->led_activated;\r
+        if(sig==0)\r
+        {\r
+            data_temp = (int32_t)(ppg_sensor_dat->s_buf[ii*3]|(ppg_sensor_dat->s_buf[ii*3+1]<<8)|((ppg_sensor_dat->s_buf[ii*3+2]&0x1f)<<16));\r
+        }\r
+        else\r
+        {\r
+            if((ppg_sensor_dat->s_buf[ii*3+2]&0x10)!=0)\r
+            {\r
+                data_temp = (int32_t)(ppg_sensor_dat->s_buf[ii*3]|(ppg_sensor_dat->s_buf[ii*3+1]<<8)|((ppg_sensor_dat->s_buf[ii*3+2]&0x0f)<<16))-1048576;\r
+            }\r
+            else\r
+            {\r
+                data_temp = (int32_t)(ppg_sensor_dat->s_buf[ii*3]|(ppg_sensor_dat->s_buf[ii*3+1]<<8)|((ppg_sensor_dat->s_buf[ii*3+2]&0x1f)<<16));\r
+            }\r
+        }\r
+               //DEBUG_PRINTF("fifo_data: %d %d\r\n", ii, data_temp);\r
+        ppg_sensor_dat->led_data[fifo_data_flag].data_val[count] = data_temp;\r
+    }\r
+    for(ii=0;ii<4;ii++)\r
+    {\r
+        if(ppg_sensor_dat->led_data[ii].led_state == Activated)\r
+        {\r
+            ppg_sensor_dat->led_data[ii].data_count = count+1;\r
+        }\r
+    }\r
+       return count+1;\r
+}\r
 \r
-uint16_t hx3695_read_fifo_data(int32_t *buf, uint8_t phase_num, uint8_t sig)\r
+void hx3695_get_led_para(ppg_sensor_data_t *ppg_sensor_dat)\r
 {\r
-        uint8_t data_flg_start = 0;\r
-        uint8_t data_flg_end = 0;\r
-//    int32_t data;\r
-        uint8_t databuf[3];\r
-        uint32_t ii=0;\r
-               uint16_t data_len_h = 0;\r
-               uint16_t data_len_l = 0;\r
-               uint16_t fifo_data_length = 0;\r
-               uint16_t fifo_read_length = 0;\r
-               uint16_t fifo_read_bytes = 0;\r
-               uint16_t fifo_out_length = 0;\r
-               uint16_t fifo_out_count = 0;\r
-               \r
-               data_len_h = hx3695_read_reg(0x21);\r
-               data_len_l = hx3695_read_reg(0x20);\r
-               fifo_data_length = (((data_len_h&0x01)<<8)|data_len_l);\r
-//       SEGGER_RTT_printf(0,"fifo_data_length =  %d\r\n", fifo_data_length);  \r
-               if(fifo_data_length<2*phase_num)\r
-               {\r
-                       return 0;\r
-               }\r
-               fifo_read_length = ((fifo_data_length-phase_num)/phase_num)*phase_num;\r
-//             SEGGER_RTT_printf(0,"fifo_data_length_change =  %d\r\n", fifo_read_length);\r
-               fifo_read_bytes = fifo_read_length*3;\r
-               if(read_fifo_first_flg == 1)\r
-               {\r
-                       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
-                                                       // 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
-                       {\r
-                               buf[ii] = (int32_t)(fifo_data_buf[ii*3]|(fifo_data_buf[ii*3+1]<<8)|((fifo_data_buf[ii*3+2]&0x1f)<<16));\r
-                       }\r
-                       else\r
-                       {\r
-                               if((fifo_data_buf[ii*3+2]&0x10)!=0)\r
-                               {\r
-                                       buf[ii] = (int32_t)(fifo_data_buf[ii*3]|(fifo_data_buf[ii*3+1]<<8)|((fifo_data_buf[ii*3+2]&0x0f)<<16))-1048576;\r
-                               }\r
-                               else\r
-                               {\r
-                                       buf[ii] = (int32_t)(fifo_data_buf[ii*3]|(fifo_data_buf[ii*3+1]<<8)|((fifo_data_buf[ii*3+2]&0x1f)<<16));\r
-                               }\r
-                       }\r
-                       SEGGER_RTT_printf(0,"fifo_length =  %d/%d, %d %d\r\n", ii+1,fifo_read_length,buf[ii],fifo_data_buf[ii*3+2]>>5);                         \r
-               }\r
-               data_flg_start = fifo_data_buf[2]>>5;\r
-               data_flg_end = fifo_data_buf[fifo_read_bytes-1]>>5;\r
-               fifo_out_length = fifo_read_length;\r
-               if(data_flg_start>0)\r
-               {\r
-                       fifo_out_length = fifo_read_length-phase_num + data_flg_start;\r
-                       for(ii=0; ii<fifo_out_length; ii++)\r
-                       {\r
-                               buf[ii] = buf[ii+ phase_num - data_flg_start];\r
-                       }\r
-                       for(ii= fifo_out_length; ii< fifo_read_length; ii++)\r
-                       {\r
-                               buf[ii] = 0;\r
-                       }\r
-               }\r
-               if(data_flg_end < phase_num -1)\r
-               {\r
-                       for(ii=fifo_out_length; ii<fifo_out_length+phase_num-data_flg_end-1; ii++)\r
-                       hx3695_brust_read_reg(0x22, databuf, 3);\r
-                       buf[ii] = (int32_t)(databuf[0]|(databuf[1]<<8)|((databuf[2]&0x1f)<<16)); \r
-               }   \r
-               for(ii=0; ii<fifo_out_length; ii++)\r
+       uint8_t led_index = 0;\r
+       for(led_index=0;led_index<4;led_index++)\r
+       {\r
+               if(ppg_sensor_dat->led_data[led_index].led_state == Activated)\r
                {\r
-//                     SEGGER_RTT_printf(0,"fifo_buf  %d/%d, %d\r\n", ii+1,fifo_out_length,buf[ii]);                           \r
+                       hx3695_write_reg(0X43, led_index*2+1);\r
+                       ppg_sensor_dat->led_data[led_index].led_current = hx3695_read_reg(0x45);\r
+                       ppg_sensor_dat->led_data[led_index].offset_idac = hx3695_read_reg(0x48);\r
+                       ppg_sensor_dat->led_data[led_index].tia_rf = hx3695_read_reg(0x44)&0x0f;\r
                }\r
-               fifo_out_length = fifo_out_length+phase_num-data_flg_end - 1;\r
-               fifo_out_count = fifo_out_length/phase_num;\r
-               return fifo_out_count;\r
+       }\r
 }\r
 \r
-void hx3695_vin_check(uint16_t led_vin)\r
+uint16_t hx3695_read_fifo_data(ppg_sensor_data_t *ppg_sensor_dat)\r
 {\r
-    low_vbat_flag = 0;\r
-    if(led_vin < 3700)\r
+    uint8_t databuf[3];\r
+//    uint32_t ii=0;\r
+    uint16_t data_len_h = 0;\r
+    uint16_t data_len_l = 0;\r
+    uint16_t fifo_data_length = 0;\r
+    uint16_t fifo_read_length = 0;\r
+    uint16_t fifo_read_bytes = 0;\r
+       uint16_t fifo_out_count = 0;\r
+\r
+    data_len_h = hx3695_read_reg(0x21);\r
+    data_len_l = hx3695_read_reg(0x20);\r
+    fifo_data_length = (((data_len_h&0x01)<<8)|data_len_l);\r
+\r
+               DEBUG_PRINTF("fifo_data_length: %d\r\n", fifo_data_length);\r
+       \r
+               if (fifo_data_length>FIFO_DATA_LENGTH)\r
+               {\r
+                               fifo_data_length = FIFO_DATA_LENGTH;\r
+               }\r
+               \r
+    if(fifo_data_length<2*ppg_sensor_dat->led_activated)\r
+    {\r
+        return 0;\r
+    }\r
+    fifo_read_length = ((fifo_data_length-ppg_sensor_dat->led_activated)/ppg_sensor_dat->led_activated)*ppg_sensor_dat->led_activated;\r
+    fifo_read_bytes = fifo_read_length*3;\r
+    if(read_fifo_first_flg == 1)\r
     {\r
-        low_vbat_flag = 1;\r
+        hx3695_brust_read_reg(0x22, databuf, 3);\r
+        read_fifo_first_flg = 0;\r
     }\r
+    hx3695_brust_read_reg(0x22, ppg_sensor_dat->s_buf, fifo_read_bytes);\r
+    fifo_out_count = hx3695_led_data_analysis(ppg_sensor_dat,fifo_read_length,1);\r
+\r
+       hx3695_get_led_para(ppg_sensor_dat);\r
+\r
+    return fifo_out_count;\r
 }\r
 \r
-void hx3695_ppg_off(void)\r
+void hx3695_read_phase_data(int32_t *s_buf)\r
 {\r
+    uint8_t  databuf1[6] = {0};\r
+    uint8_t  databuf2[6] = {0};\r
+    uint8_t  databuf3[6] = {0};\r
+       uint8_t  databuf4[6] = {0};\r
+\r
+    hx3695_brust_read_reg(0x03, databuf1, 6);\r
+    hx3695_brust_read_reg(0x09, databuf2, 6);\r
+    hx3695_brust_read_reg(0x0f, databuf3, 6);\r
+    hx3695_brust_read_reg(0x15, databuf4, 6);\r
+\r
+    s_buf[0] = ((databuf1[0])|(databuf1[1]<<8)|(databuf1[2]<<16));\r
+       s_buf[1] = ((databuf1[3])|(databuf1[4]<<8)|(databuf1[5]<<16));\r
+       s_buf[2] = ((databuf2[0])|(databuf2[1]<<8)|(databuf2[2]<<16));\r
+    s_buf[3] = ((databuf2[3])|(databuf2[4]<<8)|(databuf2[5]<<16));\r
+    s_buf[4] = ((databuf3[0])|(databuf3[1]<<8)|(databuf3[2]<<16));\r
+       s_buf[5] = ((databuf3[3])|(databuf3[4]<<8)|(databuf3[5]<<16));\r
+       s_buf[6] = ((databuf4[0])|(databuf4[1]<<8)|(databuf4[2]<<16));\r
+    s_buf[7] = ((databuf4[3])|(databuf4[4]<<8)|(databuf4[5]<<16));\r
+       DEBUG_PRINTF("phase_buf = %d,%d,%d,%d,%d,%d,%d,%d \r\n", s_buf[0],s_buf[1],s_buf[2],s_buf[3],s_buf[4],s_buf[5],s_buf[6],s_buf[7]);\r
+}\r
 \r
-    hx3695_delay_ms(5);\r
+void hx3695_read_led_data(int32_t *s_buf)\r
+{\r
+    uint8_t  databuf1[3] = {0};\r
+    uint8_t  databuf2[3] = {0};\r
+    uint8_t  databuf3[3] = {0};\r
+       uint8_t  databuf4[3] = {0};\r
+\r
+    hx3695_brust_read_reg(0x06, databuf1, 3);\r
+    hx3695_brust_read_reg(0x0c, databuf2, 3);\r
+    hx3695_brust_read_reg(0x12, databuf3, 3);\r
+    hx3695_brust_read_reg(0x18, databuf4, 3);\r
+\r
+    s_buf[0] = ((databuf1[0])|(databuf1[1]<<8)|(databuf1[2]<<16));\r
+       s_buf[1] = ((databuf2[0])|(databuf2[1]<<8)|(databuf2[2]<<16));\r
+    s_buf[2] = ((databuf3[0])|(databuf3[1]<<8)|(databuf3[2]<<16));\r
+       s_buf[3] = ((databuf4[0])|(databuf4[1]<<8)|(databuf4[2]<<16));\r
+//     DEBUG_PRINTF("led_buf = %d,%d,%d,%d\r\n", s_buf[0],s_buf[1],s_buf[2],s_buf[3]);\r
+}\r
+\r
+void hx3695_ppg_off(void)\r
+{\r
     hx3695_write_reg(0x02, 0x01);\r
 }\r
 \r
@@ -520,3353 +431,1099 @@ void hx3695_ppg_on(void)
     hx3695_delay_ms(5);\r
 }\r
 \r
-void hx3695_data_reset(void)\r
+void hx3695_software_reset(void)\r
 {\r
-#if defined(TIMMER_MODE)\r
-    hx3695_320ms_timer_cfg(false);\r
-    hx3695_40ms_timer_cfg(false);\r
-#elif defined(INT_MODE)\r
-    hx3695_gpioint_cfg(false);\r
-#endif\r
-#if defined(HRS_ALG_LIB)\r
-    hx3695_hrs_data_reset();\r
-#endif\r
-#if defined(SPO2_ALG_LIB)\r
-    hx3695_spo2_data_reset();\r
-#endif\r
-#if defined(HRV_ALG_LIB)\r
-    hx3695_hrv_data_reset();\r
-#endif\r
-    AGC_LOG("hx3695 data reset!\r\n");\r
+       uint8_t ii = 0;\r
+       ppg_sensor_data.mode = NULL_MODE;\r
+       ppg_sensor_data.fs = 25;\r
+       ppg_sensor_data.watermark = 0;\r
+       ppg_sensor_data.led_activated = 0;\r
+       for(ii=0;ii<4;ii++)\r
+       {\r
+               ppg_sensor_data.led_data[ii].isneed_cal_start = false;\r
+               ppg_sensor_data.led_data[ii].led_current = 0;\r
+               ppg_sensor_data.led_data[ii].offset_idac = 0;\r
+               ppg_sensor_data.led_data[ii].tia_rf = 0;\r
+               ppg_sensor_data.led_data[ii].led_state = InActivated;\r
+       }\r
+       read_fifo_first_flg = 0;\r
+       s_ppg_state = 0;\r
+       s_cal_state = 0;\r
+    check_touch_cnt = 0;\r
+       hx3695_agc_reset();\r
+       #if defined(INT_MODE)\r
+       hx3695_gpioint_cfg(false);\r
+       #else\r
+       hx3695_320ms_timer_cfg(false);\r
+       hx3695_40ms_timer_cfg(false);\r
+       #endif\r
 }\r
 \r
-#ifdef HRS_ALG_LIB\r
-// 心率模式下ppg 初始化配置\r
-void hx3695_hrs_ppg_init(void) // ppg fs=25hz, phase conversion ready interupt en\r
+bool hx3695_check_wear(ppg_sensor_data_t *ppg_sensor_dat)\r
 {\r
-    uint16_t sample_rate = 25;                  /*config the data rate of chip alps2_fm ,uint is Hz*/\r
-    uint32_t prf_clk_num = 32000/sample_rate;   /*period in clk num, num = Fclk/fs */\r
-         \r
-       uint16_t fifo_watermark= 81 ;\r
-    uint8_t adc_rst_post_num=0;       /* 00=16,01=32,10=64,11=128*/      \r
-    uint8_t samp_delay_leden_num = 0; /* 00=8,01=16,10=32,11=64*/ \r
-    uint8_t samp_copy_avg = 0;        /* 0=1, 1=2, 2=4 ,3=8, 4=16*/\r
-    uint8_t data_avg_num = 0;         /* 0 = 1 ; 1 = 2; 2 =4 ; 3 =8 ; 4 =16 ;*/\r
-    uint8_t phase7_8_internal = 0;    /* phase7 and phase8 prf internal cfg */\r
-               \r
-    uint8_t phase1_enable = 1;     /*phase1_enable  , 1 mean enable ; 0 mean disable */ \r
-    uint8_t phase2_enable = 1;     /*phase2_enable  , 1 mean enable ; 0 mean disable */ \r
-    uint8_t phase3_enable = 1;     /*phase3_enable  , 1 mean enable ; 0 mean disable */ \r
-    uint8_t phase4_enable = 1;     /*phase4_enable  , 1 mean enable ; 0 mean disable */\r
-    uint8_t phase5_enable = 1;     /*phase5_enable  , 1 mean enable ; 0 mean disable */ \r
-    uint8_t phase6_enable = 1;     /*phase6_enable  , 1 mean enable ; 0 mean disable */ \r
-    uint8_t phase7_enable = 1;     /*phase7_enable  , 1 mean enable ; 0 mean disable */        \r
-    uint8_t phase8_enable = 1;     /*phase8_enable  , 1 mean enable ; 0 mean disable */ \r
-\r
-    uint8_t phase1_adc_osr = 3;    /* 0 = 128 ; 1 = 256 ; 2 = 512 ; 3 = 1024 ; 4 = 2048*/\r
-    uint8_t phase2_adc_osr = 3;    /* 0 = 128 ; 1 = 256 ; 2 = 512 ; 3 = 1024 ; 4 = 2048*/\r
-    uint8_t phase3_adc_osr = 3;    /* 0 = 128 ; 1 = 256 ; 2 = 512 ; 3 = 1024 ; 4 = 2048*/\r
-    uint8_t phase4_adc_osr = 3;    /* 0 = 128 ; 1 = 256 ; 2 = 512 ; 3 = 1024 ; 4 = 2048*/\r
-    uint8_t phase5_adc_osr = 3;    /* 0 = 128 ; 1 = 256 ; 2 = 512 ; 3 = 1024 ; 4 = 2048*/\r
-    uint8_t phase6_adc_osr = 3;    /* 0 = 128 ; 1 = 256 ; 2 = 512 ; 3 = 1024 ; 4 = 2048*/\r
-    uint8_t phase7_adc_osr = 3;    /* 0 = 128 ; 1 = 256 ; 2 = 512 ; 3 = 1024 ; 4 = 2048*/\r
-    uint8_t phase8_adc_osr = 3;    /* 0 = 128 ; 1 = 256 ; 2 = 512 ; 3 = 1024 ; 4 = 2048*/\r
-         \r
-    uint8_t phase1_mux_sel = 0;    /* sel phase1*/\r
-    uint8_t phase2_mux_sel = 1;    /* sel phase2*/\r
-    uint8_t phase3_mux_sel = 2;    /* sel phase3*/\r
-    uint8_t phase4_mux_sel = 3;    /* sel phase4*/\r
-    uint8_t phase5_mux_sel = 4;    /* sel phase5*/\r
-    uint8_t phase6_mux_sel = 5;    /* sel phase6*/\r
-    uint8_t phase7_mux_sel = 6;    /* sel phase7*/\r
-    uint8_t phase8_mux_sel = 7;    /* sel phase8*/\r
-       \r
+    uint8_t ii = 0;\r
+    \r
+    for(ii=0;ii<ppg_sensor_dat->led_data[3].data_count;ii++)\r
+    {\r
+        if(ppg_sensor_dat->led_data[3].data_val[ii] > CHECK_WEAR_THRE)\r
+        {\r
+            if(check_touch_cnt < CHECK_TOUCH_NUM)\r
+            {\r
+                check_touch_cnt++; \r
+            }  \r
+            if(check_touch_cnt >= CHECK_TOUCH_NUM)  \r
+            {\r
+                wear_status = MSG_WEAR;\r
+            }   \r
+        }\r
+        else if(ppg_sensor_dat->led_data[3].data_val[ii] < CHECK_UNWEAR_THRE)\r
+        {\r
+            if(check_touch_cnt>0)\r
+            {\r
+                check_touch_cnt--;\r
+            }\r
+            if(check_touch_cnt == 0)\r
+            {\r
+                wear_status = MSG_NO_WEAR;                \r
+            }      \r
+        }\r
+\r
+        DEBUG_PRINTF("data:%d, wear_status_pre:%d, wear_status:%d \r\n",ppg_sensor_dat->led_data[3].data_val[ii],wear_status_pre, wear_status);\r
+\r
+        if(wear_status_pre != wear_status)\r
+        {\r
+            // printf("wear_status:%d\n",wear_status);\r
+            wear_status_pre = wear_status;\r
+#ifdef SUPPORT_CYWEE_SERVICE\r
+            cywee_wear_status_update(&wear_status);\r
+#endif\r
+            // if(wear_status == MSG_NO_WEAR)\r
+            // {\r
+            //     hx3695_wear_low_power(ppg_sensor_dat);                 \r
+            // }\r
+            // else if(wear_status == MSG_WEAR)\r
+            // {\r
+            //     hx3695_init(work_mode_flag);\r
+            // }  \r
+        }  \r
+    }\r
+       return 1;\r
+}\r
 \r
-    uint8_t phase1_inner_avg = 0;   /* phase1 adc avg num 0=1, 1=2, 2=4, 3=8 , 4=16*/\r
-    uint8_t phase1_tia_res = 0;     /* 0= 10K; 1= 20k; 2= 50k; 3= 100k; 4= 150k; 5= 200k; 6= 500k; 7= 1M*/\r
-    uint8_t phase1_tia_cap = 4;     /* 0= ; 1= ; 2= ; 3= ; 4= ; 5= ; 6= ; 7= */\r
-    uint8_t phase1_led_drv1_cha_sel = 0;     /* 1 = ldr1  NG; 2 = ldr2   GR; 4 = ldr3  IR; 8 = ldr4 RED; */\r
-    uint8_t phase1_led_drv2_cha_sel = 0;    /*ldr5:0x20  ldr6: 0x40 red    ldr8 0x80  ir      */\r
-       uint8_t phase1_pd_sel = HRS_PD;   //0x03       /* 1 = pd1; 2 = pd2; 4 = pd3*/\r
-    uint8_t phase1_als_offset_idac = 0; /* 0~255 = 0 ~ 128ua , step = 0.5ua */\r
-    uint8_t phase1_led_offset_idac = 0; /* 0~255 = 0 ~ 64ua , step = 0.25ua */\r
-    uint8_t phase1_ldr1_cur = 0;     /* 0~255 = 0 ~ 200ma, step = 0.8ma */\r
-    uint8_t phase1_ldr2_cur = 0;\r
+void hx3695_ppg_para_init(ppg_sensor_data_t *ppg_sensor_dat)\r
+{\r
+    uint16_t sample_rate = 25;\r
+    uint32_t prf_clk_num = 32000/sample_rate;\r
+//     uint16_t watermark = 40;\r
+\r
+    uint8_t adc_rst_post_num=0;\r
+               uint8_t samp_delay_leden_num = 0;\r
+    uint8_t samp_copy_avg = 0;\r
+    uint8_t data_avg_num = 0;\r
+               uint8_t phase7_8_internal = 0;\r
+\r
+    uint8_t phase1_enable = 0;\r
+    uint8_t phase2_enable = 0;\r
+    uint8_t phase3_enable = 0;\r
+    uint8_t phase4_enable = 0;\r
+    uint8_t phase5_enable = 0;\r
+    uint8_t phase6_enable = 0;\r
+    uint8_t phase7_enable = 0;\r
+               uint8_t phase8_enable = 0;\r
+\r
+    uint8_t phase1_adc_osr = 3;\r
+    uint8_t phase2_adc_osr = 3;\r
+    uint8_t phase3_adc_osr = 3;\r
+    uint8_t phase4_adc_osr = 3;\r
+    uint8_t phase5_adc_osr = 3;\r
+       uint8_t phase6_adc_osr = 3;\r
+    uint8_t phase7_adc_osr = 3;\r
+       uint8_t phase8_adc_osr = 3;\r
+\r
+       uint8_t phase1_mux_sel = 0;\r
+       uint8_t phase2_mux_sel = 1;\r
+       uint8_t phase3_mux_sel = 2;\r
+       uint8_t phase4_mux_sel = 3;\r
+       uint8_t phase5_mux_sel = 4;\r
+       uint8_t phase6_mux_sel = 5;\r
+       uint8_t phase7_mux_sel = 6;\r
+       uint8_t phase8_mux_sel = 7;\r
+\r
+       uint8_t phase1_inner_avg = 0;\r
+    uint8_t phase1_tia_res = 0;\r
+       uint8_t phase1_tia_cap = 4;\r
+    uint8_t phase1_led_drv1_cha_sel = 0;\r
+    uint8_t phase1_led_drv2_cha_sel = 0;\r
+       uint8_t phase1_pd_sel = LED0_PD_SEL;\r
+    uint8_t phase1_als_offset_idac = 0;\r
+       uint8_t phase1_led_offset_idac = 0;\r
+    uint8_t phase1_ldr1_cur = 0;\r
+       uint8_t phase1_ldr2_cur = 0;\r
     uint8_t phase1_ad_inr_ctrl = 3;\r
     uint8_t phase1_ad_of_idac_ctrl = 0;\r
-    uint8_t phase1_led_en = 1;      /* phase1 led enable*/             \r
-    uint8_t phase1_dsp_mov_avg_num = 0; /* 0=bypass ; 1=2 ; 2=4 ; 3=8 */\r
-    uint8_t phase1_dsp_iir_lp_coeff = 0; /* 0=bypass ; 1=1/2 ; 2=1/4 ; 3=1/8 ,...,7=1/128 */\r
-\r
-\r
-\r
-    uint8_t phase2_inner_avg = 0;   /* phase1 adc avg num 0=1, 1=2, 2=4, 3=8 , 4=16*/\r
-    uint8_t phase2_tia_res = 0;     /* 0= 10K; 1= 20k; 2= 50k; 3= 100k; 4= 150k; 5= 200k; 6= 500k; 7= 1M*/\r
-    uint8_t phase2_tia_cap = 4;     /* 0= ; 1= ; 2= ; 3= ; 4= ; 5= ; 6= ; 7= */\r
-    uint8_t phase2_led_drv1_cha_sel = GREEN_LED_SLE;   //0x10  //GREEN_LED_SLE;     /* 1 = ldr1; 2 = ldr2; 4 = ldr3; 8 = ldr4 ; */\r
-    uint8_t phase2_led_drv2_cha_sel = 0;\r
-               uint8_t phase2_pd_sel = HRS_PD;  //0x0C  //0x03   /* 1 = pd1; 2 = pd2; 4 = pd3*/\r
-    uint8_t phase2_als_offset_idac = 0; /* 0~255 = 0 ~ 128ua , step = 0.5ua */\r
-    uint8_t phase2_led_offset_idac = 0; /* 0~255 = 0 ~ 64ua , step = 0.25ua */\r
-    uint8_t phase2_ldr1_cur = 0;     /* 0~255 = 0 ~ 200ma, step = 0.8ma */\r
-    uint8_t phase2_ldr2_cur = 0;\r
+    uint8_t phase1_led_en = 1;\r
+       uint8_t phase1_dsp_mov_avg_num = 0;\r
+    uint8_t phase1_dsp_iir_lp_coeff = 0;\r
+\r
+       uint8_t phase2_inner_avg = 0;\r
+    uint8_t phase2_tia_res = 0;\r
+    uint8_t phase2_tia_cap = 4;\r
+    uint8_t phase2_led_drv1_cha_sel = LED0_LDR_SEL;\r
+    uint8_t phase2_led_drv2_cha_sel = LED0_LDR_SEL;\r
+       uint8_t phase2_pd_sel = LED0_PD_SEL;\r
+    uint8_t phase2_als_offset_idac = 0;\r
+       uint8_t phase2_led_offset_idac = 0;\r
+    uint8_t phase2_ldr1_cur = 0;\r
+       uint8_t phase2_ldr2_cur = 0;\r
     uint8_t phase2_ad_inr_ctrl = 3;\r
     uint8_t phase2_ad_of_idac_ctrl = 0;\r
-    uint8_t phase2_led_en = 1;      /* phase1 led enable*/             \r
-    uint8_t phase2_dsp_mov_avg_num = 0; /* 0=bypass ; 1=2 ; 2=4 ; 3=8 */\r
-    uint8_t phase2_dsp_iir_lp_coeff = 0; /* 0=bypass ; 1=1/2 ; 2=1/4 ; 3=1/8 ,...,7=1/128 */\r
-\r
-               \r
-    uint8_t phase3_inner_avg = 0;   /* phase1 adc avg num 0=1, 1=2, 2=4, 3=8 , 4=16*/\r
-    uint8_t phase3_tia_res = 0;     /* 0= 10K; 1= 20k; 2= 50k; 3= 100k; 4= 150k; 5= 200k; 6= 500k; 7= 1M*/\r
-    uint8_t phase3_tia_cap = 4;     /* 0= ; 1= ; 2= ; 3= ; 4= ; 5= ; 6= ; 7= */\r
-    uint8_t phase3_led_drv1_cha_sel = 0;     /* 1 = ldr1; 2 = ldr2; 4 = ldr3; 8 = ldr4 ; */\r
+    uint8_t phase2_led_en = 1;\r
+       uint8_t phase2_dsp_mov_avg_num = 0;\r
+    uint8_t phase2_dsp_iir_lp_coeff = 0;\r
+\r
+    uint8_t phase3_inner_avg = 0;\r
+    uint8_t phase3_tia_res = 0;\r
+       uint8_t phase3_tia_cap = 4;\r
+    uint8_t phase3_led_drv1_cha_sel = 0;\r
     uint8_t phase3_led_drv2_cha_sel = 0;\r
-               uint8_t phase3_pd_sel = HRS_PD;   //0x03       /* 1 = pd1; 2 = pd2; 4 = pd3*/\r
-    uint8_t phase3_als_offset_idac = 0; /* 0~255 = 0 ~ 128ua , step = 0.5ua */\r
-    uint8_t phase3_led_offset_idac = 0; /* 0~255 = 0 ~ 64ua , step = 0.25ua */\r
-    uint8_t phase3_ldr1_cur = 0;     /* 0~255 = 0 ~ 200ma, step = 0.8ma */\r
-    uint8_t phase3_ldr2_cur = 0;\r
+       uint8_t phase3_pd_sel = LED1_PD_SEL;\r
+    uint8_t phase3_als_offset_idac = 0;\r
+       uint8_t phase3_led_offset_idac = 0;\r
+    uint8_t phase3_ldr1_cur = 0;\r
+       uint8_t phase3_ldr2_cur = 0;\r
     uint8_t phase3_ad_inr_ctrl = 3;\r
     uint8_t phase3_ad_of_idac_ctrl = 0;\r
-    uint8_t phase3_led_en = 1;      /* phase1 led enable*/             \r
-    uint8_t phase3_dsp_mov_avg_num = 0; /* 0=bypass ; 1=2 ; 2=4 ; 3=8 */\r
-    uint8_t phase3_dsp_iir_lp_coeff = 0; /* 0=bypass ; 1=1/2 ; 2=1/4 ; 3=1/8 ,...,7=1/128 */\r
-\r
-               \r
-    uint8_t phase4_inner_avg = 0;   /* phase1 adc avg num 0=1, 1=2, 2=4, 3=8 , 4=16*/\r
-    uint8_t phase4_tia_res = 0;     /* 0= 10K; 1= 20k; 2= 50k; 3= 100k; 4= 150k; 5= 200k; 6= 500k; 7= 1M*/\r
-    uint8_t phase4_tia_cap = 4;     /* 0= ; 1= ; 2= ; 3= ; 4= ; 5= ; 6= ; 7= */\r
-    uint8_t phase4_led_drv1_cha_sel = 0;     /* 1 = ldr1; 2 = ldr2; 4 = ldr3; 8 = ldr4 ; */\r
-    uint8_t phase4_led_drv2_cha_sel = 0;\r
-               uint8_t phase4_pd_sel = HRS_PD;   //0x0C   /* 1 = pd1; 2 = pd2; 4 = pd3*/\r
-    uint8_t phase4_als_offset_idac = 0; /* 0~255 = 0 ~ 128ua , step = 0.5ua */\r
-               uint8_t phase4_led_offset_idac = 0; /* 0~255 = 0 ~ 64ua , step = 0.25ua */\r
-    uint8_t phase4_ldr1_cur = 0;     /* 0~255 = 0 ~ 200ma, step = 0.8ma */\r
-               uint8_t phase4_ldr2_cur = 0;\r
-//             uint8_t phase4_of_idac1_cur = 0;\r
-//    uint8_t phase4_of_idac2_cur = 0;\r
+    uint8_t phase3_led_en = 1;\r
+       uint8_t phase3_dsp_mov_avg_num = 0;\r
+    uint8_t phase3_dsp_iir_lp_coeff = 0;\r
+\r
+    uint8_t phase4_inner_avg = 0;\r
+    uint8_t phase4_tia_res = 0;\r
+       uint8_t phase4_tia_cap = 4;\r
+    uint8_t phase4_led_drv1_cha_sel = LED1_LDR_SEL;\r
+    uint8_t phase4_led_drv2_cha_sel = LED1_LDR_SEL;\r
+       uint8_t phase4_pd_sel = LED1_PD_SEL;\r
+       #ifdef DOUBLE_GREEN\r
+       if(ppg_sensor_dat->mode == HRS_MODE)\r
+       {\r
+               phase4_led_drv1_cha_sel = LED1N_LDR_SEL;\r
+               phase4_led_drv2_cha_sel = LED1N_LDR_SEL;\r
+               phase4_pd_sel = LED1N_PD_SEL;\r
+       }\r
+       #endif\r
+    uint8_t phase4_als_offset_idac = 0;\r
+       uint8_t phase4_led_offset_idac = 0;\r
+    uint8_t phase4_ldr1_cur = 0;\r
+       uint8_t phase4_ldr2_cur = 0;\r
     uint8_t phase4_ad_inr_ctrl = 3;\r
     uint8_t phase4_ad_of_idac_ctrl = 0;\r
-//    uint8_t phase4_afe_offset  =  0;\r
-    uint8_t phase4_led_en = 1;      /* phase1 led enable*/\r
-               \r
-               uint8_t phase4_dsp_mov_avg_num = 0; /* 0=bypass ; 1=2 ; 2=4 ; 3=8 */\r
-    uint8_t phase4_dsp_iir_lp_coeff = 0; /* 0=bypass ; 1=1/2 ; 2=1/4 ; 3=1/8 ,...,7=1/128 */\r
-\r
-    uint8_t phase5_inner_avg = 0;   /* phase1 adc avg num 0=1, 1=2, 2=4, 3=8 , 4=16*/\r
-    uint8_t phase5_tia_res = 0;     /* 0= 10K; 1= 20k; 2= 50k; 3= 100k; 4= 150k; 5= 200k; 6= 500k; 7= 1M*/\r
-               uint8_t phase5_tia_cap = 4;     /* 0= ; 1= ; 2= ; 3= ; 4= ; 5= ; 6= ; 7= */\r
-    uint8_t phase5_led_drv1_cha_sel = 0;   //0x10  /* 1 = ldr1; 2 = ldr2; 4 = ldr3; 8 = ldr4 ; */\r
+    uint8_t phase4_led_en = 1;\r
+       uint8_t phase4_dsp_mov_avg_num = 0;\r
+    uint8_t phase4_dsp_iir_lp_coeff = 0;\r
+\r
+    uint8_t phase5_inner_avg = 0;\r
+    uint8_t phase5_tia_res = 0;\r
+       uint8_t phase5_tia_cap = 4;\r
+    uint8_t phase5_led_drv1_cha_sel = 0;\r
     uint8_t phase5_led_drv2_cha_sel = 0;\r
-               uint8_t phase5_pd_sel = HRS_PD;   //0x0C    /* 1 = pd1; 2 = pd2; */\r
-    uint8_t phase5_als_offset_idac = 0; /* 0~255 = 0 ~ 128ua , step = 0.5ua */\r
-               uint8_t phase5_led_offset_idac = 0; /* 0~255 = 0 ~ 64ua , step = 0.25ua */\r
-    uint8_t phase5_ldr1_cur = 0;     /* 0~255 = 0 ~ 200ma, step = 0.8ma */\r
-               uint8_t phase5_ldr2_cur = 0;\r
-//             uint8_t phase5_of_idac1_cur = 0;\r
-//    uint8_t phase5_of_idac2_cur = 0;\r
+       uint8_t phase5_pd_sel = LED2_PD_SEL;\r
+    uint8_t phase5_als_offset_idac = 0;\r
+       uint8_t phase5_led_offset_idac = 0;\r
+    uint8_t phase5_ldr1_cur = 0;\r
+       uint8_t phase5_ldr2_cur = 0;\r
     uint8_t phase5_ad_inr_ctrl = 3;\r
     uint8_t phase5_ad_of_idac_ctrl = 0;\r
-//    uint8_t phase5_afe_offset  =  0;\r
-    uint8_t phase5_led_en = 1;      /* phase1 led enable*/\r
-               \r
-               uint8_t phase5_dsp_mov_avg_num = 0; /* 0=bypass ; 1=2 ; 2=4 ; 3=8 */\r
-    uint8_t phase5_dsp_iir_lp_coeff = 0; /* 0=bypass ; 1=1/2 ; 2=1/4 ; 3=1/8 ,...,7=1/128 */\r
-\r
-    uint8_t phase6_inner_avg = 0;   /* phase1 adc avg num 0=1, 1=2, 2=4, 3=8 , 4=16*/\r
-    uint8_t phase6_tia_res = 0;     /* 0= 10K; 1= 20k; 2= 50k; 3= 100k; 4= 150k; 5= 200k; 6= 500k; 7= 1M*/\r
-               uint8_t phase6_tia_cap = 4;     /* 0= ; 1= ; 2= ; 3= ; 4= ; 5= ; 6= ; 7= */\r
-    uint8_t phase6_led_drv1_cha_sel = 0;     /* 1 = ldr1; 2 = ldr2; 4 = ldr3; 8 = ldr4 ; */\r
-    uint8_t phase6_led_drv2_cha_sel = 0;\r
-               uint8_t phase6_pd_sel = HRS_PD; //0x0C     /* 1 = pd1; 2 = pd2; */\r
-    uint8_t phase6_als_offset_idac = 0; /* 0~255 = 0 ~ 128ua , step = 0.5ua */\r
-               uint8_t phase6_led_offset_idac = 0; /* 0~255 = 0 ~ 64ua , step = 0.25ua */\r
-    uint8_t phase6_ldr1_cur = 0;     /* 0~255 = 0 ~ 200ma, step = 0.8ma */\r
-               uint8_t phase6_ldr2_cur = 0;\r
-//             uint8_t phase6_of_idac1_cur = 0;\r
-//    uint8_t phase6_of_idac2_cur = 0;\r
+    uint8_t phase5_led_en = 1;\r
+       uint8_t phase5_dsp_mov_avg_num = 0;\r
+    uint8_t phase5_dsp_iir_lp_coeff = 0;\r
+\r
+    uint8_t phase6_inner_avg = 0;\r
+    uint8_t phase6_tia_res = 0;\r
+       uint8_t phase6_tia_cap = 4;\r
+    uint8_t phase6_led_drv1_cha_sel = LED2_LDR_SEL;\r
+    uint8_t phase6_led_drv2_cha_sel = LED2_LDR_SEL;\r
+               uint8_t phase6_pd_sel = LED2_PD_SEL;\r
+    uint8_t phase6_als_offset_idac = 0;\r
+       uint8_t phase6_led_offset_idac = 0;\r
+    uint8_t phase6_ldr1_cur = 0;\r
+       uint8_t phase6_ldr2_cur = 0;\r
     uint8_t phase6_ad_inr_ctrl = 3;\r
     uint8_t phase6_ad_of_idac_ctrl = 0;\r
-//    uint8_t phase6_afe_offset  =  0;\r
-    uint8_t phase6_led_en = 1;      /* phase1 led enable*/\r
-               \r
-               uint8_t phase6_dsp_mov_avg_num = 0; /* 0=bypass ; 1=2 ; 2=4 ; 3=8 */\r
-    uint8_t phase6_dsp_iir_lp_coeff = 0; /* 0=bypass ; 1=1/2 ; 2=1/4 ; 3=1/8 ,...,7=1/128 */\r
-\r
-    uint8_t phase7_inner_avg = 0;   /* phase1 adc avg num 0=1, 1=2, 2=4, 3=8 , 4=16*/\r
-    uint8_t phase7_tia_res = 0;     /* 0= 10K; 1= 20k; 2= 50k; 3= 100k; 4= 150k; 5= 200k; 6= 500k; 7= 1M*/\r
-               uint8_t phase7_tia_cap = 4;     /* 0= ; 1= ; 2= ; 3= ; 4= ; 5= ; 6= ; 7= */\r
-    uint8_t phase7_led_drv1_cha_sel = 0;     /* 1 = ldr1; 2 = ldr2; 4 = ldr3; 8 = ldr4 ; */\r
+    uint8_t phase6_led_en = 1;\r
+       uint8_t phase6_dsp_mov_avg_num = 0;\r
+    uint8_t phase6_dsp_iir_lp_coeff = 0;\r
+\r
+    uint8_t phase7_inner_avg = 0;\r
+    uint8_t phase7_tia_res = 1;\r
+       uint8_t phase7_tia_cap = 4;\r
+    uint8_t phase7_led_drv1_cha_sel = 0;\r
     uint8_t phase7_led_drv2_cha_sel = 0;\r
-               uint8_t phase7_pd_sel = SPO2_PD;  //0x0C     /* 1 = pd1; 2 = pd2; */\r
-    uint8_t phase7_als_offset_idac = 0; /* 0~255 = 0 ~ 128ua , step = 0.5ua */\r
-               uint8_t phase7_led_offset_idac = 0; /* 0~255 = 0 ~ 64ua , step = 0.25ua */\r
-    uint8_t phase7_ldr1_cur = 0;     /* 0~255 = 0 ~ 200ma, step = 0.8ma */\r
-               uint8_t phase7_ldr2_cur = 0;\r
-//             uint8_t phase7_of_idac1_cur = 0;\r
-//    uint8_t phase7_of_idac2_cur = 0;\r
+       uint8_t phase7_pd_sel = LED3_PD_SEL;\r
+    uint8_t phase7_als_offset_idac = 0;\r
+       uint8_t phase7_led_offset_idac = 0;\r
+    uint8_t phase7_ldr1_cur = 0;\r
+       uint8_t phase7_ldr2_cur = 0;\r
     uint8_t phase7_ad_inr_ctrl = 3;\r
     uint8_t phase7_ad_of_idac_ctrl = 0;\r
-//    uint8_t phase7_afe_offset  =  0;\r
-    uint8_t phase7_led_en = 1;      /* phase1 led enable*/\r
-               \r
-               uint8_t phase7_dsp_mov_avg_num = 0; /* 0=bypass ; 1=2 ; 2=4 ; 3=8 */\r
-    uint8_t phase7_dsp_iir_lp_coeff = 0; /* 0=bypass ; 1=1/2 ; 2=1/4 ; 3=1/8 ,...,7=1/128 */\r
-\r
-    uint8_t phase8_inner_avg = 0;   /* phase1 adc avg num 0=1, 1=2, 2=4, 3=8 , 4=16*/\r
-    uint8_t phase8_tia_res = 0;     /* 0= 10K; 1= 20k; 2= 50k; 3= 100k; 4= 150k; 5= 200k; 6= 500k; 7= 1M*/\r
-               uint8_t phase8_tia_cap = 4;     /* 0= ; 1= ; 2= ; 3= ; 4= ; 5= ; 6= ; 7= */\r
-    uint8_t phase8_led_drv1_cha_sel = IR_LED_SLE; //0x40  //IR_LED_SLE;     /* 1 = ldr1; 2 = ldr2; 4 = ldr3; 8 = ldr4 ; */\r
-    uint8_t phase8_led_drv2_cha_sel = 0;\r
-               uint8_t phase8_pd_sel = SPO2_PD;  //0x0C     /* 1 = pd1; 2 = pd2; */\r
-    uint8_t phase8_als_offset_idac = 0; /* 0~255 = 0 ~ 128ua , step = 0.5ua */\r
-               uint8_t phase8_led_offset_idac = 0; /* 0~255 = 0 ~ 64ua , step = 0.25ua */\r
-    uint8_t phase8_ldr1_cur = 32;     /* 0~255 = 0 ~ 200ma, step = 0.8ma */\r
-               uint8_t phase8_ldr2_cur = 0;\r
-//             uint8_t phase8_of_idac1_cur = 0;\r
-//    uint8_t phase8_of_idac2_cur = 0;\r
+    uint8_t phase7_led_en = 1;\r
+       uint8_t phase7_dsp_mov_avg_num = 0;\r
+    uint8_t phase7_dsp_iir_lp_coeff = 0;\r
+\r
+    uint8_t phase8_inner_avg = 0;\r
+    uint8_t phase8_tia_res = 1;\r
+       uint8_t phase8_tia_cap = 4;\r
+    uint8_t phase8_led_drv1_cha_sel = LED3_LDR_SEL;\r
+    uint8_t phase8_led_drv2_cha_sel = LED3_LDR_SEL;\r
+       uint8_t phase8_pd_sel = LED3_PD_SEL;\r
+    uint8_t phase8_als_offset_idac = 0;\r
+       uint8_t phase8_led_offset_idac = 0;\r
+    uint8_t phase8_ldr1_cur = 20;\r
+       uint8_t phase8_ldr2_cur = 0;\r
     uint8_t phase8_ad_inr_ctrl = 3;\r
     uint8_t phase8_ad_of_idac_ctrl = 0;\r
-//    uint8_t phase8_afe_offset  =  0;\r
-    uint8_t phase8_led_en = 1;      /* phase1 led enable*/\r
-               \r
-               uint8_t phase8_dsp_mov_avg_num = 0; /* 0=bypass ; 1=2 ; 2=4 ; 3=8 */\r
-    uint8_t phase8_dsp_iir_lp_coeff = 0; /* 0=bypass ; 1=1/2 ; 2=1/4 ; 3=1/8 ,...,7=1/128 */\r
-\r
-    uint8_t init_wait_delay = 5 ; /* 0 = 31clk ; 1 = 64clk ; 2 = 127clk ; 3 = 255clk(d) ;\r
-                                     4 = 511clk; 5 = 1023clk; 6 = 2047; 7 = 4095clk */         \r
-                                                                                                                                                \r
-    uint8_t afe_reset = 3;        /* 0 = 15clk ; 1 = 31clk ; 2 = 63clk ; 3 = 127clk(d) ;\r
-                                     4 = 255clk; 5 = 511clk; 6 = 1024; 7 = 2047clk */\r
-                                                                                                                                                \r
-               uint8_t afe_rst_cnvt = 1;               /* 0 = 15clk ; 1 = 31clk ; 2 = 63clk ; 3 = 127clk(d)*/\r
-    \r
-    uint8_t led_en_idac_pre    = 2;    /* 0 = 8clk ; 1 = 16clk ; 2 = 32clk ; 3 = 64clk(d)*/ \r
-               \r
-               uint8_t led_en_idac     =       1;        /* 0 = 4clk ; 1 = 8clk ; 2 = 16clk ; 3 = 32clk(d)*/ \r
-                                                                                                                                                \r
-    uint8_t led_on_time = 2;      /* 0 = 32clk=8us ; 1 = 64clk=16us; 2=128clk=32us ; 3 = 256clk=64us ;\r
-                                     4 = 512clk=128us ; 5 = 1024clk=256us; 6= 2048clk=512us; 7 = 4096clk=1024us */\r
-                                                                                                                                                \r
-    hx3695_delay_ms(10);               \r
-               \r
-    hx3695_write_reg(0X2a, (uint8_t)prf_clk_num);    // prf bit<7:0>6\r
-    hx3695_write_reg(0X2b, (uint8_t)(prf_clk_num>>8)); // prf bit<15:8>\r
-    hx3695_write_reg(0X2c, (uint8_t)(prf_clk_num>>16)); // prf bit<23:16>      \r
-                  \r
-    hx3695_write_reg(0X25, (afe_rst_cnvt<<4| led_en_idac_pre<<2|led_en_idac)); \r
-               hx3695_write_reg(0X2d, phase7_8_internal); \r
-               hx3695_write_reg(0X2e, 0x33);// gpio ctrl \r
+    uint8_t phase8_led_en = 1;\r
+       uint8_t phase8_dsp_mov_avg_num = 0;\r
+    uint8_t phase8_dsp_iir_lp_coeff = 0;\r
+\r
+    uint8_t init_wait_delay = 5;\r
+    uint8_t afe_reset = 3;\r
+       uint8_t afe_rst_cnvt = 1;\r
+    uint8_t led_en_idac_pre    = 2;\r
+       uint8_t led_en_idac     = 1;\r
+    uint8_t led_on_time = 3;\r
+\r
+    hx3695_write_reg(0x02,0x00);\r
+    hx3695_delay_ms(10);\r
+\r
+    hx3695_write_reg(0X2a, (uint8_t)prf_clk_num);\r
+    hx3695_write_reg(0X2b, (uint8_t)(prf_clk_num>>8));\r
+    hx3695_write_reg(0X2c, (uint8_t)(prf_clk_num>>16));\r
+\r
+    hx3695_write_reg(0X25, (afe_rst_cnvt<<4| led_en_idac_pre<<2|led_en_idac));\r
+       hx3695_write_reg(0X2d, phase7_8_internal);\r
+       hx3695_write_reg(0X2e, 0x33);\r
     hx3695_write_reg(0X2f, ((afe_reset<<4)| init_wait_delay));\r
-               hx3695_write_reg(0X30, (phase8_led_en<<7 | phase7_led_en<<6 |phase6_led_en<<5 |phase5_led_en<<4 |phase4_led_en<<3 | phase3_led_en<<2 | phase2_led_en<<1 | phase1_led_en) );\r
+       hx3695_write_reg(0X30, (phase8_led_en<<7 | phase7_led_en<<6 |phase6_led_en<<5 |phase5_led_en<<4 |phase4_led_en<<3 | phase3_led_en<<2 | phase2_led_en<<1 | phase1_led_en) );\r
     hx3695_write_reg(0X72, (phase8_led_en<<7 | phase7_led_en<<6 |phase6_led_en<<5 |phase5_led_en<<4 |phase4_led_en<<3 | phase3_led_en<<2 | phase2_led_en<<1 | phase1_led_en) );\r
 \r
-\r
-    hx3695_write_reg(0X31, (led_on_time<<4| 0x00));\r
-               hx3695_write_reg(0X33, 0x83);// 中断极性及宽度配置;\r
-               hx3695_write_reg(0X34, 0x00);// 中断特殊配置;\r
-               hx3695_write_reg(0X36, 0x00);// phase data ready 标志设置;\r
-               hx3695_write_reg(0X38, 0x00);\r
-               \r
-    hx3695_write_reg(0X3a, (phase1_inner_avg | (phase2_inner_avg<<4)));  \r
-    hx3695_write_reg(0X3b, (phase3_inner_avg | (phase4_inner_avg<<4)));  \r
-    hx3695_write_reg(0X3c, (phase5_inner_avg | (phase6_inner_avg<<4)));        \r
-    hx3695_write_reg(0X3d, (phase7_inner_avg | (phase8_inner_avg<<4)));        \r
-    hx3695_write_reg(0X3e, adc_rst_post_num<<6 | samp_delay_leden_num<<4 | samp_copy_avg); \r
+    hx3695_write_reg(0X31, led_on_time<<4);\r
+    hx3695_write_reg(0X33, 0x83);\r
+    hx3695_write_reg(0X34, 0x00);\r
+    hx3695_write_reg(0X36, 0x00);\r
+    hx3695_write_reg(0X38, 0x00);\r
+\r
+    hx3695_write_reg(0X3a, (phase1_inner_avg | (phase2_inner_avg<<4)));\r
+    hx3695_write_reg(0X3b, (phase3_inner_avg | (phase4_inner_avg<<4)));\r
+    hx3695_write_reg(0X3c, (phase5_inner_avg | (phase6_inner_avg<<4)));\r
+    hx3695_write_reg(0X3d, (phase7_inner_avg | (phase8_inner_avg<<4)));\r
+    hx3695_write_reg(0X3e, adc_rst_post_num<<6 | samp_delay_leden_num<<4 | samp_copy_avg);\r
     hx3695_write_reg(0X3f, data_avg_num<<4 | data_avg_num );\r
     hx3695_write_reg(0X40, data_avg_num<<4 | data_avg_num );\r
-               hx3695_write_reg(0X41, data_avg_num<<4 | data_avg_num );\r
-               hx3695_write_reg(0X42, data_avg_num<<4 | data_avg_num );\r
-               \r
-               hx3695_write_reg(0X43, phase1_mux_sel);  \r
-               hx3695_write_reg(0X44, phase1_tia_cap<<4|phase1_tia_res); \r
-               hx3695_write_reg(0X45, phase1_ldr1_cur);    //LED_DRV1_CUR\r
-               hx3695_write_reg(0x70, phase1_ldr2_cur);   //ps8--ps1  led_drv2_cur\r
-               hx3695_write_reg(0X46, (phase1_pd_sel<<4 | 0x00));\r
-               hx3695_write_reg(0X47, phase1_als_offset_idac);\r
-               hx3695_write_reg(0X48, phase1_led_offset_idac);\r
-\r
-    hx3695_write_reg(0X49, phase1_ad_inr_ctrl<<4|phase1_ad_of_idac_ctrl); \r
-               hx3695_write_reg(0X4a, phase1_led_drv1_cha_sel);\r
-               hx3695_write_reg(0X4b, phase1_led_drv2_cha_sel);\r
-               hx3695_write_reg(0X71, phase1_dsp_mov_avg_num | phase1_dsp_iir_lp_coeff<<4);\r
-\r
-//    hx3695_write_reg(0X4e, thred_value);\r
-//    hx3695_write_reg(0X4f, thred_value>>5);\r
-               \r
-    hx3695_write_reg(0X43, phase2_mux_sel);  \r
-               hx3695_write_reg(0X44, phase2_tia_cap<<4|phase2_tia_res); \r
-               hx3695_write_reg(0X45, phase2_ldr1_cur);    //LED_DRV1_CUR\r
-               hx3695_write_reg(0x70, phase2_ldr2_cur);   //ps8--ps1  led_drv2_cur\r
-               hx3695_write_reg(0X46, (phase2_pd_sel<<4 | 0x00));\r
-               hx3695_write_reg(0X47, phase2_als_offset_idac);\r
-               hx3695_write_reg(0X48, phase2_led_offset_idac);\r
-//             hx3695_write_reg(0X48, phase1_led_offset_idac);\r
-    hx3695_write_reg(0X49,  phase2_ad_inr_ctrl<<4|phase2_ad_of_idac_ctrl); \r
-               hx3695_write_reg(0X4a, phase2_led_drv1_cha_sel);\r
-               hx3695_write_reg(0X4b, phase2_led_drv2_cha_sel);\r
-               hx3695_write_reg(0X71, phase2_dsp_mov_avg_num | phase2_dsp_iir_lp_coeff<<4);\r
-               \r
-//phase3 sel\r
-\r
-    hx3695_write_reg(0X43, phase3_mux_sel);  \r
-               hx3695_write_reg(0X44, phase3_tia_cap<<4|phase3_tia_res); \r
-               hx3695_write_reg(0X45, phase3_ldr1_cur);    //LED_DRV1_CUR\r
-               hx3695_write_reg(0x70, phase3_ldr2_cur);   //ps8--ps1  led_drv2_cur\r
-               hx3695_write_reg(0X46, (phase3_pd_sel<<4 | 0x00));\r
-               hx3695_write_reg(0X47, phase3_als_offset_idac);\r
-               hx3695_write_reg(0X48, phase3_led_offset_idac);\r
-//             hx3695_write_reg(0X48, phase1_led_offset_idac);\r
-    hx3695_write_reg(0X49,  phase3_ad_inr_ctrl<<4|phase3_ad_of_idac_ctrl); \r
-               hx3695_write_reg(0X4a, phase3_led_drv1_cha_sel);\r
-               hx3695_write_reg(0X4b, phase3_led_drv2_cha_sel);\r
-               hx3695_write_reg(0X71, phase3_dsp_mov_avg_num | phase3_dsp_iir_lp_coeff<<4);\r
-               \r
-//phase4 sel\r
-\r
-    hx3695_write_reg(0X43, phase4_mux_sel);  \r
-               hx3695_write_reg(0X44, phase4_tia_cap<<4|phase4_tia_res); \r
-               hx3695_write_reg(0X45, phase4_ldr1_cur);    //LED_DRV1_CUR\r
-               hx3695_write_reg(0x70, phase4_ldr2_cur);   //ps8--ps1  led_drv2_cur\r
-               hx3695_write_reg(0X46, (phase4_pd_sel<<4 | 0x00));\r
-               hx3695_write_reg(0X47, phase4_als_offset_idac);\r
-               hx3695_write_reg(0X48, phase4_led_offset_idac);\r
-//             hx3695_write_reg(0X48, phase1_led_offset_idac);\r
-    hx3695_write_reg(0X49,  phase4_ad_inr_ctrl<<4|phase4_ad_of_idac_ctrl); \r
-               hx3695_write_reg(0X4a, phase4_led_drv1_cha_sel);\r
-               hx3695_write_reg(0X4b, phase4_led_drv2_cha_sel);\r
-               hx3695_write_reg(0X71, phase4_dsp_mov_avg_num | phase4_dsp_iir_lp_coeff<<4);\r
-\r
-               hx3695_write_reg(0X43, phase5_mux_sel);  \r
-               hx3695_write_reg(0X44, phase5_tia_cap<<4|phase5_tia_res); \r
-               hx3695_write_reg(0X45, phase5_ldr1_cur);    //LED_DRV1_CUR\r
-               hx3695_write_reg(0x70, phase5_ldr2_cur);   //ps8--ps1  led_drv2_cur\r
-               hx3695_write_reg(0X46, (phase5_pd_sel<<4 | 0x00));\r
-               hx3695_write_reg(0X47, phase5_als_offset_idac);\r
-               hx3695_write_reg(0X48, phase5_led_offset_idac);\r
-//             hx3695_write_reg(0X48, phase1_led_offset_idac);\r
-    hx3695_write_reg(0X49,  phase5_ad_inr_ctrl<<4|phase5_ad_of_idac_ctrl); \r
-               hx3695_write_reg(0X4a, phase5_led_drv1_cha_sel);\r
-               hx3695_write_reg(0X4b, phase5_led_drv2_cha_sel);\r
-               hx3695_write_reg(0X71, phase5_dsp_mov_avg_num | phase5_dsp_iir_lp_coeff<<4);\r
-               \r
-               \r
-         hx3695_write_reg(0X43, phase6_mux_sel);  \r
-               hx3695_write_reg(0X44, phase6_tia_cap<<4|phase6_tia_res); \r
-               hx3695_write_reg(0X45, phase6_ldr1_cur);    //LED_DRV1_CUR\r
-               hx3695_write_reg(0x70, phase6_ldr2_cur);   //ps8--ps1  led_drv2_cur\r
-               hx3695_write_reg(0X46, (phase6_pd_sel<<4 | 0x00));\r
-               hx3695_write_reg(0X47, phase6_als_offset_idac);\r
-               hx3695_write_reg(0X48, phase6_led_offset_idac);\r
-//             hx3695_write_reg(0X48, phase6_led_offset_idac);\r
-    hx3695_write_reg(0X49,  phase6_ad_inr_ctrl<<4|phase6_ad_of_idac_ctrl); \r
-               hx3695_write_reg(0X4a, phase6_led_drv1_cha_sel);\r
-               hx3695_write_reg(0X4b, phase6_led_drv2_cha_sel);\r
-               hx3695_write_reg(0X71, phase6_dsp_mov_avg_num | phase6_dsp_iir_lp_coeff<<4);\r
-               \r
-       \r
-         hx3695_write_reg(0X43, phase7_mux_sel);  \r
-               hx3695_write_reg(0X44, phase7_tia_cap<<4|phase7_tia_res); \r
-               hx3695_write_reg(0X45, phase7_ldr1_cur);    //LED_DRV1_CUR\r
-               hx3695_write_reg(0x70, phase7_ldr2_cur);   //ps8--ps1  led_drv2_cur\r
-               hx3695_write_reg(0X46, (phase7_pd_sel<<4 | 0x00));\r
-               hx3695_write_reg(0X47, phase7_als_offset_idac);\r
-               hx3695_write_reg(0X48, phase7_led_offset_idac);\r
-//             hx3695_write_reg(0X48, phase7_led_offset_idac);\r
-    hx3695_write_reg(0X49,  phase7_ad_inr_ctrl<<4|phase7_ad_of_idac_ctrl); \r
-               hx3695_write_reg(0X4a, phase7_led_drv1_cha_sel);\r
-               hx3695_write_reg(0X4b, phase7_led_drv2_cha_sel);\r
-               hx3695_write_reg(0X71, phase7_dsp_mov_avg_num | phase7_dsp_iir_lp_coeff<<4);\r
-               \r
-       \r
-         hx3695_write_reg(0X43, phase8_mux_sel);  \r
-               hx3695_write_reg(0X44, phase8_tia_cap<<4|phase8_tia_res); \r
-               hx3695_write_reg(0X45, phase8_ldr1_cur);    //LED_DRV1_CUR\r
-               hx3695_write_reg(0x70, phase8_ldr2_cur);   //ps8--ps1  led_drv2_cur\r
-               hx3695_write_reg(0X46, (phase8_pd_sel<<4 | 0x00));\r
-               hx3695_write_reg(0X47, phase8_als_offset_idac);\r
-               hx3695_write_reg(0X48, phase8_led_offset_idac);\r
-//             hx3695_write_reg(0X48, phas8_led_offset_idac);\r
-    hx3695_write_reg(0X49,  phase8_ad_inr_ctrl<<4|phase8_ad_of_idac_ctrl); \r
-               hx3695_write_reg(0X4a, phase8_led_drv1_cha_sel);\r
-               hx3695_write_reg(0X4b, phase8_led_drv2_cha_sel);\r
-               hx3695_write_reg(0X71, phase8_dsp_mov_avg_num | phase8_dsp_iir_lp_coeff<<4);\r
-               \r
-\r
-// analog circuit cfg \r
-    hx3695_write_reg(0X60, 0x14);      //\r
-               hx3695_write_reg(0X61, 0xf0);   \r
-               hx3695_write_reg(0X62, 0x22); \r
-               hx3695_write_reg(0X63, 0x15); \r
-                                                                                                                                                                                                                               \r
-               hx3695_write_reg(0X64, 0x08);   \r
-               hx3695_write_reg(0X65, 0x88); //bug\r
-               \r
-               hx3695_write_reg(0X66, 0x30);   // bits<3>=adc selftest en     0x30\r
-               hx3695_write_reg(0X67, 0x23);   \r
-               hx3695_write_reg(0X68, 0x46);   \r
-               hx3695_write_reg(0X69, 0x42);   \r
-               \r
-               hx3695_write_reg(0X39, 0xff);   // ofset idac1 phase enable cfg\r
-               hx3695_write_reg(0x73, 0xff);    //led_offset_idac phase enable\r
-               \r
-    hx3695_write_reg(0X6a, 0X0f);      \r
-               hx3695_write_reg(0X6b, 0X22);   \r
-               hx3695_write_reg(0X6c, 0X00);   \r
-               hx3695_write_reg(0X6d, 0X37);   \r
-               hx3695_write_reg(0X6e, 0X82);   \r
+    hx3695_write_reg(0X41, data_avg_num<<4 | data_avg_num );\r
+    hx3695_write_reg(0X42, data_avg_num<<4 | data_avg_num );\r
+\r
+    hx3695_write_reg(0X43, phase1_mux_sel);\r
+    hx3695_write_reg(0X44, phase1_tia_cap<<4|phase1_tia_res);\r
+    hx3695_write_reg(0X45, phase1_ldr1_cur);\r
+    hx3695_write_reg(0x70, phase1_ldr2_cur);\r
+    hx3695_write_reg(0X46, phase1_pd_sel<<4);\r
+    hx3695_write_reg(0X47, phase1_als_offset_idac);\r
+    hx3695_write_reg(0X48, phase1_led_offset_idac);\r
+    hx3695_write_reg(0X49, phase1_ad_inr_ctrl<<4|phase1_ad_of_idac_ctrl);\r
+    hx3695_write_reg(0X4a, phase1_led_drv1_cha_sel);\r
+    hx3695_write_reg(0X4b, phase1_led_drv2_cha_sel);\r
+    hx3695_write_reg(0X71, phase1_dsp_mov_avg_num | phase1_dsp_iir_lp_coeff<<4);\r
+\r
+    hx3695_write_reg(0X43, phase2_mux_sel);\r
+    hx3695_write_reg(0X44, phase2_tia_cap<<4|phase2_tia_res);\r
+    hx3695_write_reg(0X45, phase2_ldr1_cur);\r
+    hx3695_write_reg(0x70, phase2_ldr2_cur);\r
+    hx3695_write_reg(0X46, phase2_pd_sel<<4);\r
+    hx3695_write_reg(0X47, phase2_als_offset_idac);\r
+    hx3695_write_reg(0X48, phase2_led_offset_idac);\r
+    hx3695_write_reg(0X49, phase2_ad_inr_ctrl<<4|phase2_ad_of_idac_ctrl);\r
+    hx3695_write_reg(0X4a, phase2_led_drv1_cha_sel);\r
+    hx3695_write_reg(0X4b, phase2_led_drv2_cha_sel);\r
+    hx3695_write_reg(0X71, phase2_dsp_mov_avg_num | phase2_dsp_iir_lp_coeff<<4);\r
+\r
+    hx3695_write_reg(0X43, phase3_mux_sel);\r
+    hx3695_write_reg(0X44, phase3_tia_cap<<4|phase3_tia_res);\r
+    hx3695_write_reg(0X45, phase3_ldr1_cur);\r
+    hx3695_write_reg(0x70, phase3_ldr2_cur);\r
+    hx3695_write_reg(0X46, phase3_pd_sel<<4);\r
+    hx3695_write_reg(0X47, phase3_als_offset_idac);\r
+    hx3695_write_reg(0X48, phase3_led_offset_idac);\r
+    hx3695_write_reg(0X49, phase3_ad_inr_ctrl<<4|phase3_ad_of_idac_ctrl);\r
+    hx3695_write_reg(0X4a, phase3_led_drv1_cha_sel);\r
+    hx3695_write_reg(0X4b, phase3_led_drv2_cha_sel);\r
+    hx3695_write_reg(0X71, phase3_dsp_mov_avg_num | phase3_dsp_iir_lp_coeff<<4);\r
+\r
+    hx3695_write_reg(0X43, phase4_mux_sel);\r
+       hx3695_write_reg(0X44, phase4_tia_cap<<4|phase4_tia_res);\r
+       hx3695_write_reg(0X45, phase4_ldr1_cur);\r
+       hx3695_write_reg(0x70, phase4_ldr2_cur);\r
+       hx3695_write_reg(0X46, phase4_pd_sel<<4);\r
+       hx3695_write_reg(0X47, phase4_als_offset_idac);\r
+       hx3695_write_reg(0X48, phase4_led_offset_idac);\r
+    hx3695_write_reg(0X49, phase4_ad_inr_ctrl<<4|phase4_ad_of_idac_ctrl);\r
+       hx3695_write_reg(0X4a, phase4_led_drv1_cha_sel);\r
+       hx3695_write_reg(0X4b, phase4_led_drv2_cha_sel);\r
+       hx3695_write_reg(0X71, phase4_dsp_mov_avg_num | phase4_dsp_iir_lp_coeff<<4);\r
+\r
+       hx3695_write_reg(0X43, phase5_mux_sel);\r
+       hx3695_write_reg(0X44, phase5_tia_cap<<4|phase5_tia_res);\r
+       hx3695_write_reg(0X45, phase5_ldr1_cur);\r
+       hx3695_write_reg(0x70, phase5_ldr2_cur);\r
+       hx3695_write_reg(0X46, phase5_pd_sel<<4);\r
+       hx3695_write_reg(0X47, phase5_als_offset_idac);\r
+       hx3695_write_reg(0X48, phase5_led_offset_idac);\r
+    hx3695_write_reg(0X49, phase5_ad_inr_ctrl<<4|phase5_ad_of_idac_ctrl);\r
+       hx3695_write_reg(0X4a, phase5_led_drv1_cha_sel);\r
+       hx3695_write_reg(0X4b, phase5_led_drv2_cha_sel);\r
+       hx3695_write_reg(0X71, phase5_dsp_mov_avg_num | phase5_dsp_iir_lp_coeff<<4);\r
+\r
+       hx3695_write_reg(0X43, phase6_mux_sel);\r
+       hx3695_write_reg(0X44, phase6_tia_cap<<4|phase6_tia_res);\r
+       hx3695_write_reg(0X45, phase6_ldr1_cur);\r
+       hx3695_write_reg(0x70, phase6_ldr2_cur);\r
+       hx3695_write_reg(0X46, phase6_pd_sel<<4);\r
+       hx3695_write_reg(0X47, phase6_als_offset_idac);\r
+       hx3695_write_reg(0X48, phase6_led_offset_idac);\r
+    hx3695_write_reg(0X49, phase6_ad_inr_ctrl<<4|phase6_ad_of_idac_ctrl);\r
+       hx3695_write_reg(0X4a, phase6_led_drv1_cha_sel);\r
+       hx3695_write_reg(0X4b, phase6_led_drv2_cha_sel);\r
+       hx3695_write_reg(0X71, phase6_dsp_mov_avg_num | phase6_dsp_iir_lp_coeff<<4);\r
+\r
+       hx3695_write_reg(0X43, phase7_mux_sel);\r
+       hx3695_write_reg(0X44, phase7_tia_cap<<4|phase7_tia_res);\r
+       hx3695_write_reg(0X45, phase7_ldr1_cur);\r
+       hx3695_write_reg(0x70, phase7_ldr2_cur);\r
+       hx3695_write_reg(0X46, phase7_pd_sel<<4);\r
+       hx3695_write_reg(0X47, phase7_als_offset_idac);\r
+       hx3695_write_reg(0X48, phase7_led_offset_idac);\r
+    hx3695_write_reg(0X49, phase7_ad_inr_ctrl<<4|phase7_ad_of_idac_ctrl);\r
+       hx3695_write_reg(0X4a, phase7_led_drv1_cha_sel);\r
+       hx3695_write_reg(0X4b, phase7_led_drv2_cha_sel);\r
+       hx3695_write_reg(0X71, phase7_dsp_mov_avg_num | phase7_dsp_iir_lp_coeff<<4);\r
+\r
+       hx3695_write_reg(0X43, phase8_mux_sel);\r
+       hx3695_write_reg(0X44, phase8_tia_cap<<4|phase8_tia_res);\r
+       hx3695_write_reg(0X45, phase8_ldr1_cur);\r
+       hx3695_write_reg(0x70, phase8_ldr2_cur);\r
+       hx3695_write_reg(0X46, phase8_pd_sel<<4);\r
+       hx3695_write_reg(0X47, phase8_als_offset_idac);\r
+       hx3695_write_reg(0X48, phase8_led_offset_idac);\r
+    hx3695_write_reg(0X49, phase8_ad_inr_ctrl<<4|phase8_ad_of_idac_ctrl);\r
+       hx3695_write_reg(0X4a, phase8_led_drv1_cha_sel);\r
+       hx3695_write_reg(0X4b, phase8_led_drv2_cha_sel);\r
+       hx3695_write_reg(0X71, phase8_dsp_mov_avg_num | phase8_dsp_iir_lp_coeff<<4);\r
+\r
+    hx3695_write_reg(0X60, 0x14);\r
+    hx3695_write_reg(0X61, 0xf0);\r
+    hx3695_write_reg(0X62, 0x22);\r
+    hx3695_write_reg(0X63, 0x15);\r
+    hx3695_write_reg(0X64, 0x08);\r
+    hx3695_write_reg(0X65, 0x88);\r
+    hx3695_write_reg(0X66, 0x30);\r
+    hx3695_write_reg(0X67, 0x23);\r
+    hx3695_write_reg(0X68, 0x46);\r
+    hx3695_write_reg(0X69, 0x42);\r
+    hx3695_write_reg(0X39, 0xff);\r
+    hx3695_write_reg(0x73, 0xff);\r
+    hx3695_write_reg(0X6a, 0X0f);\r
+    hx3695_write_reg(0X6b, 0X22);\r
+    hx3695_write_reg(0X6c, 0X00);\r
+    hx3695_write_reg(0X6d, 0X37);\r
+    hx3695_write_reg(0X6e, 0X82);\r
     hx3695_write_reg(0X6f, 0X00);\r
-/////////FIFO and adc conversion ready config////////\r
-/////////FIFO and adc conversion ready config////////\r
-#if defined(PPG_INT_MODE)\r
-               hx3695_write_reg(0X1b, 0x92);// bits<3:0> fifo data sel, 0000 = p1;0001= p2;0010=p3;\\r
-                                     0011=p4;0100=p5;0101=p6;0110=p7;\ bits<7> fifo enble\r
-                hx3695_write_reg(0X33, 0x83);   // int width                                                                                                                                           \r
-                hx3695_write_reg(0X38, 0x01);   // int sel,00=close almost full int,04=enable almost full int\r
-#elif defined(INT_MODE)               //FIFO_ALL_MOST_FULL)\r
-                hx3695_write_reg(0X1b, 0x92);// bits<3:0> fifo data sel, 0000 = p1;0001= p2;0010=p3;\\r
-                                        0011=p4;0100=p5;0101=p6;0110=p7;\\r
-                                        bits<7> fifo enble\r
-                hx3695_write_reg(0X1c, (fifo_watermark&0xff));   //fifo_watermark\r
-                hx3695_write_reg(0X1d, fifo_watermark<<8);       //bit<0>=fifo_watermark[8]  \r
-                hx3695_write_reg(0X33, 0x83);   // int width   \r
-     hx3695_write_reg(0X38, 0x04);   // int sel,00=close almost full int,04=enable almost full int\r
 \r
+#if defined(INT_MODE)\r
+    hx3695_write_reg(0X1b, 0x91);\r
+    hx3695_write_reg(0X1c, watermark);\r
+    hx3695_write_reg(0X33, 0x83);\r
+    hx3695_write_reg(0X21, 0x00);\r
+    hx3695_write_reg(0X38, 0x04);\r
 #else\r
-                hx3695_write_reg(0X1b, 0x92);    \r
-                                                                                       \r
-     hx3695_write_reg(0X38, 0x01);   // int sel,00=close almost full int,04=enable almost full int\r
-     \r
+    hx3695_write_reg(0X1b, 0x91);\r
+    hx3695_write_reg(0X38, 0x01);\r
 #endif\r
 \r
-               \r
-    hx3695_write_reg(0X26,(phase1_enable<<3)|(phase1_adc_osr)|(phase2_enable<<7)|(phase2_adc_osr<<4) ); \r
-    hx3695_write_reg(0X27,(phase3_enable<<3)|(phase3_adc_osr)|(phase4_enable<<7)|(phase4_adc_osr<<4) );  \r
+    hx3695_write_reg(0X26,(phase1_enable<<3)|(phase1_adc_osr)|(phase2_enable<<7)|(phase2_adc_osr<<4) );\r
+    hx3695_write_reg(0X27,(phase3_enable<<3)|(phase3_adc_osr)|(phase4_enable<<7)|(phase4_adc_osr<<4) );\r
     hx3695_write_reg(0X28,(phase5_enable<<3)|(phase5_adc_osr)|(phase6_enable<<7)|(phase6_adc_osr<<4) );\r
-    hx3695_write_reg(0X29,(phase7_enable<<3)|(phase7_adc_osr)|(phase8_enable<<7)|(phase8_adc_osr<<4) );                \r
-\r
-//    hx3695_write_reg(0X5c, 0x02);//soft reset\r
-    hx3695_delay_ms(5);  \r
-    hx3695_write_reg(0X5c, 0x00);//release\r
+    hx3695_write_reg(0X29,(phase7_enable<<3)|(phase7_adc_osr)|(phase8_enable<<7)|(phase8_adc_osr<<4) );\r
+\r
+    hx3695_write_reg(0X5c, 0x02);\r
+    hx3695_delay_ms(1);\r
+    hx3695_write_reg(0X1b, 0x10);\r
+    hx3695_delay_ms(1);\r
+    hx3695_write_reg(0X1b, 0x91);\r
+    hx3695_write_reg(0X5c, 0x00);\r
     read_fifo_first_flg = 1;\r
     return ;\r
 }\r
-#endif\r
 \r
-#ifdef SPO2_ALG_LIB\r
-// 血氧模式下 初始化配置\r
-void hx3695_spo2_ppg_init(void) //20200615 ericy ppg fs=25hz, phase3 conversion ready interupt en\r
+void hx3695_set_fs(ppg_sensor_data_t *ppg_sensor_dat)\r
 {\r
-     uint16_t sample_rate = 25;                  /*config the data rate of chip alps2_fm ,uint is Hz*/\r
-    uint32_t prf_clk_num = 32000/sample_rate;   /*period in clk num, num = Fclk/fs */\r
-         \r
-       uint16_t fifo_watermark= 250 ;\r
-    uint8_t adc_rst_post_num=0;       /* 00=16,01=32,10=64,11=128*/      \r
-         uint8_t samp_delay_leden_num = 0; /* 00=8,01=16,10=32,11=64*/ \r
-    uint8_t samp_copy_avg = 0;        /* 0=1, 1=2, 2=4 ,3=8, 4=16*/\r
-    uint8_t data_avg_num = 0;         /* 0 = 1 ; 1 = 2; 2 =4 ; 3 =8 ; 4 =16 ;*/\r
-         uint8_t phase7_8_internal = 0;    /* phase7 and phase8 prf internal cfg */\r
-       \r
-//       uint16_t  thred_value = 32500;\r
-       \r
-    uint8_t phase1_enable = 1;     /*phase1_enable  , 1 mean enable ; 0 mean disable */ \r
-    uint8_t phase2_enable = 1;     /*phase2_enable  , 1 mean enable ; 0 mean disable */ \r
-    uint8_t phase3_enable = 1;     /*phase3_enable  , 1 mean enable ; 0 mean disable */ \r
-    uint8_t phase4_enable = 1;     /*phase4_enable  , 1 mean enable ; 0 mean disable */\r
-    uint8_t phase5_enable = 1;     /*phase5_enable  , 1 mean enable ; 0 mean disable */ \r
-    uint8_t phase6_enable = 1;     /*phase6_enable  , 1 mean enable ; 0 mean disable */ \r
-    uint8_t phase7_enable = 1;     /*phase7_enable  , 1 mean enable ; 0 mean disable */        \r
-         uint8_t phase8_enable = 1;     /*phase8_enable  , 1 mean enable ; 0 mean disable */ \r
-\r
-    uint8_t phase1_adc_osr = 3;    /* 0 = 128 ; 1 = 256 ; 2 = 512 ; 3 = 1024 ; 4 = 2048*/\r
-    uint8_t phase2_adc_osr = 3;    /* 0 = 128 ; 1 = 256 ; 2 = 512 ; 3 = 1024 ; 4 = 2048*/\r
-    uint8_t phase3_adc_osr = 3;    /* 0 = 128 ; 1 = 256 ; 2 = 512 ; 3 = 1024 ; 4 = 2048*/\r
-    uint8_t phase4_adc_osr = 3;    /* 0 = 128 ; 1 = 256 ; 2 = 512 ; 3 = 1024 ; 4 = 2048*/\r
-               uint8_t phase5_adc_osr = 3;    /* 0 = 128 ; 1 = 256 ; 2 = 512 ; 3 = 1024 ; 4 = 2048*/\r
-         uint8_t phase6_adc_osr = 3;    /* 0 = 128 ; 1 = 256 ; 2 = 512 ; 3 = 1024 ; 4 = 2048*/\r
-               uint8_t phase7_adc_osr = 3;    /* 0 = 128 ; 1 = 256 ; 2 = 512 ; 3 = 1024 ; 4 = 2048*/\r
-               uint8_t phase8_adc_osr = 3;    /* 0 = 128 ; 1 = 256 ; 2 = 512 ; 3 = 1024 ; 4 = 2048*/\r
-                        \r
-         uint8_t phase1_mux_sel = 0;    /* sel phase1*/\r
-               uint8_t phase2_mux_sel = 1;    /* sel phase2*/\r
-               uint8_t phase3_mux_sel = 2;    /* sel phase3*/\r
-               uint8_t phase4_mux_sel = 3;    /* sel phase4*/\r
-               uint8_t phase5_mux_sel = 4;    /* sel phase5*/\r
-               uint8_t phase6_mux_sel = 5;    /* sel phase6*/\r
-               uint8_t phase7_mux_sel = 6;    /* sel phase7*/\r
-               uint8_t phase8_mux_sel = 7;    /* sel phase8*/\r
-       \r
+    uint32_t prf_clk_num = 32000/ppg_sensor_dat->fs;\r
 \r
-         uint8_t phase1_inner_avg = 0;   /* phase1 adc avg num 0=1, 1=2, 2=4, 3=8 , 4=16*/\r
-    uint8_t phase1_tia_res = 0;     /* 0= 10K; 1= 20k; 2= 50k; 3= 100k; 4= 150k; 5= 200k; 6= 500k; 7= 1M*/\r
-               uint8_t phase1_tia_cap = 4;     /* 0= ; 1= ; 2= ; 3= ; 4= ; 5= ; 6= ; 7= */\r
-    uint8_t phase1_led_drv1_cha_sel = 0;     /* 1 = ldr1  NG; 2 = ldr2   GR; 4 = ldr3  IR; 8 = ldr4 RED; */\r
-    uint8_t phase1_led_drv2_cha_sel = 0;    /*ldr5:0x20  ldr6: 0x40 red    ldr8 0x80  ir      */\r
-               uint8_t phase1_pd_sel = SPO2_PD;          /* 1 = pd1; 2 = pd2; 4 = pd3*/\r
-    uint8_t phase1_als_offset_idac = 0; /* 0~255 = 0 ~ 128ua , step = 0.5ua */\r
-               uint8_t phase1_led_offset_idac = 0; /* 0~255 = 0 ~ 64ua , step = 0.25ua */\r
-    uint8_t phase1_ldr1_cur = 0;     /* 0~255 = 0 ~ 200ma, step = 0.8ma */\r
-               uint8_t phase1_ldr2_cur = 0;\r
-//             uint8_t phase1_of_idac1_cur = 0;\r
-//    uint8_t phase1_of_idac2_cur = 0;\r
-    uint8_t phase1_ad_inr_ctrl = 3;\r
-    uint8_t phase1_ad_of_idac_ctrl = 0;\r
-//    uint8_t afe_offset  =  0;\r
-    uint8_t phase1_led_en = 1;      /* phase1 led enable*/\r
-               \r
-               uint8_t phase1_dsp_mov_avg_num = 0; /* 0=bypass ; 1=2 ; 2=4 ; 3=8 */\r
-    uint8_t phase1_dsp_iir_lp_coeff = 0; /* 0=bypass ; 1=1/2 ; 2=1/4 ; 3=1/8 ,...,7=1/128 */\r
-\r
-\r
-\r
-         uint8_t phase2_inner_avg = 0;   /* phase1 adc avg num 0=1, 1=2, 2=4, 3=8 , 4=16*/\r
-    uint8_t phase2_tia_res = 0;     /* 0= 10K; 1= 20k; 2= 50k; 3= 100k; 4= 150k; 5= 200k; 6= 500k; 7= 1M*/\r
-               uint8_t phase2_tia_cap = 4;     /* 0= ; 1= ; 2= ; 3= ; 4= ; 5= ; 6= ; 7= */\r
-    uint8_t phase2_led_drv1_cha_sel = GREEN_LED_SLE;   //GREEN_LED_SLE;     /* 1 = ldr1; 2 = ldr2; 4 = ldr3; 8 = ldr4 ; */\r
-    uint8_t phase2_led_drv2_cha_sel = 0x00;\r
-               uint8_t phase2_pd_sel = SPO2_PD;      /* 1 = pd1; 2 = pd2; 4 = pd3*/\r
-    uint8_t phase2_als_offset_idac = 0; /* 0~255 = 0 ~ 128ua , step = 0.5ua */\r
-               uint8_t phase2_led_offset_idac = 0; /* 0~255 = 0 ~ 64ua , step = 0.25ua */\r
-    uint8_t phase2_ldr1_cur = 0;     /* 0~255 = 0 ~ 200ma, step = 0.8ma */\r
-               uint8_t phase2_ldr2_cur = 0;\r
-//             uint8_t phase2_of_idac1_cur = 0;\r
-//    uint8_t phase2_of_idac2_cur = 0;\r
-    uint8_t phase2_ad_inr_ctrl = 3;\r
-    uint8_t phase2_ad_of_idac_ctrl = 0;\r
-//    uint8_t phase2_afe_offset  =  0;\r
-    uint8_t phase2_led_en = 1;      /* phase1 led enable*/\r
-               \r
-               uint8_t phase2_dsp_mov_avg_num = 0; /* 0=bypass ; 1=2 ; 2=4 ; 3=8 */\r
-    uint8_t phase2_dsp_iir_lp_coeff = 0; /* 0=bypass ; 1=1/2 ; 2=1/4 ; 3=1/8 ,...,7=1/128 */\r
+       hx3695_write_reg(0X2a, (uint8_t)prf_clk_num);\r
+    hx3695_write_reg(0X2b, (uint8_t)(prf_clk_num>>8));\r
+    hx3695_write_reg(0X2c, (uint8_t)(prf_clk_num>>16));\r
 \r
-               \r
-    uint8_t phase3_inner_avg = 0;   /* phase1 adc avg num 0=1, 1=2, 2=4, 3=8 , 4=16*/\r
-    uint8_t phase3_tia_res = 0;     /* 0= 10K; 1= 20k; 2= 50k; 3= 100k; 4= 150k; 5= 200k; 6= 500k; 7= 1M*/\r
-               uint8_t phase3_tia_cap = 4;     /* 0= ; 1= ; 2= ; 3= ; 4= ; 5= ; 6= ; 7= */\r
-    uint8_t phase3_led_drv1_cha_sel = 0;    //RED_LED_SLE;     /* 1 = ldr1; 2 = ldr2; 4 = ldr3; 8 = ldr4 ; */\r
-    uint8_t phase3_led_drv2_cha_sel = 0;\r
-               uint8_t phase3_pd_sel = SPO2_PD;      /* 1 = pd1; 2 = pd2; 4 = pd3*/\r
-    uint8_t phase3_als_offset_idac = 0; /* 0~255 = 0 ~ 128ua , step = 0.5ua */\r
-               uint8_t phase3_led_offset_idac = 0; /* 0~255 = 0 ~ 64ua , step = 0.25ua */\r
-    uint8_t phase3_ldr1_cur = 0;     /* 0~255 = 0 ~ 200ma, step = 0.8ma */\r
-               uint8_t phase3_ldr2_cur = 0;\r
-//             uint8_t phase3_of_idac1_cur = 0;\r
-//    uint8_t phase3_of_idac2_cur = 0;\r
-    uint8_t phase3_ad_inr_ctrl = 3;\r
-    uint8_t phase3_ad_of_idac_ctrl = 0;\r
-//    uint8_t phase3_afe_offset  =  0;\r
-    uint8_t phase3_led_en = 1;      /* phase1 led enable*/\r
-               \r
-               uint8_t phase3_dsp_mov_avg_num = 0; /* 0=bypass ; 1=2 ; 2=4 ; 3=8 */\r
-    uint8_t phase3_dsp_iir_lp_coeff = 0; /* 0=bypass ; 1=1/2 ; 2=1/4 ; 3=1/8 ,...,7=1/128 */\r
+       hx3695_write_reg(0X5c, 0x02);\r
+    hx3695_delay_ms(1);\r
+    hx3695_write_reg(0X5c, 0x00);\r
+}\r
 \r
-               \r
-    uint8_t phase4_inner_avg = 0;   /* phase1 adc avg num 0=1, 1=2, 2=4, 3=8 , 4=16*/\r
-    uint8_t phase4_tia_res = 0;     /* 0= 10K; 1= 20k; 2= 50k; 3= 100k; 4= 150k; 5= 200k; 6= 500k; 7= 1M*/\r
-               uint8_t phase4_tia_cap = 4;     /* 0= ; 1= ; 2= ; 3= ; 4= ; 5= ; 6= ; 7= */\r
-    uint8_t phase4_led_drv1_cha_sel = RED_LED_SLE; //0x20   //IR_LED_SLE;     /* 1 = ldr1; 2 = ldr2; 4 = ldr3; 8 = ldr4 ; */\r
-    uint8_t phase4_led_drv2_cha_sel = 0;\r
-               uint8_t phase4_pd_sel = SPO2_PD;      /* 1 = pd1; 2 = pd2; 4 = pd3*/\r
-    uint8_t phase4_als_offset_idac = 0; /* 0~255 = 0 ~ 128ua , step = 0.5ua */\r
-               uint8_t phase4_led_offset_idac = 0; /* 0~255 = 0 ~ 64ua , step = 0.25ua */\r
-    uint8_t phase4_ldr1_cur = 0;     /* 0~255 = 0 ~ 200ma, step = 0.8ma */\r
-               uint8_t phase4_ldr2_cur = 0;\r
-//             uint8_t phase4_of_idac1_cur = 0;\r
-//    uint8_t phase4_of_idac2_cur = 0;\r
-    uint8_t phase4_ad_inr_ctrl = 3;\r
-    uint8_t phase4_ad_of_idac_ctrl = 0;\r
-//    uint8_t phase4_afe_offset  =  0;\r
-    uint8_t phase4_led_en = 1;      /* phase1 led enable*/\r
-               \r
-               uint8_t phase4_dsp_mov_avg_num = 0; /* 0=bypass ; 1=2 ; 2=4 ; 3=8 */\r
-    uint8_t phase4_dsp_iir_lp_coeff = 0; /* 0=bypass ; 1=1/2 ; 2=1/4 ; 3=1/8 ,...,7=1/128 */\r
-\r
-    uint8_t phase5_inner_avg = 0;   /* phase1 adc avg num 0=1, 1=2, 2=4, 3=8 , 4=16*/\r
-    uint8_t phase5_tia_res = 0;     /* 0= 10K; 1= 20k; 2= 50k; 3= 100k; 4= 150k; 5= 200k; 6= 500k; 7= 1M*/\r
-               uint8_t phase5_tia_cap = 4;     /* 0= ; 1= ; 2= ; 3= ; 4= ; 5= ; 6= ; 7= */\r
-    uint8_t phase5_led_drv1_cha_sel = 0x00;     /* 1 = ldr1; 2 = ldr2; 4 = ldr3; 8 = ldr4 ; */\r
-    uint8_t phase5_led_drv2_cha_sel = 0;\r
-               uint8_t phase5_pd_sel = SPO2_PD;      /* 1 = pd1; 2 = pd2; */\r
-    uint8_t phase5_als_offset_idac = 0; /* 0~255 = 0 ~ 128ua , step = 0.5ua */\r
-               uint8_t phase5_led_offset_idac = 0; /* 0~255 = 0 ~ 64ua , step = 0.25ua */\r
-    uint8_t phase5_ldr1_cur = 0;     /* 0~255 = 0 ~ 200ma, step = 0.8ma */\r
-               uint8_t phase5_ldr2_cur = 0;\r
-//             uint8_t phase5_of_idac1_cur = 0;\r
-//    uint8_t phase5_of_idac2_cur = 0;\r
-    uint8_t phase5_ad_inr_ctrl = 3;\r
-    uint8_t phase5_ad_of_idac_ctrl = 0;\r
-//    uint8_t phase5_afe_offset  =  0;\r
-    uint8_t phase5_led_en = 1;      /* phase1 led enable*/\r
-               \r
-               uint8_t phase5_dsp_mov_avg_num = 0; /* 0=bypass ; 1=2 ; 2=4 ; 3=8 */\r
-    uint8_t phase5_dsp_iir_lp_coeff = 0; /* 0=bypass ; 1=1/2 ; 2=1/4 ; 3=1/8 ,...,7=1/128 */\r
-\r
-    uint8_t phase6_inner_avg = 0;   /* phase1 adc avg num 0=1, 1=2, 2=4, 3=8 , 4=16*/\r
-    uint8_t phase6_tia_res = 0;     /* 0= 10K; 1= 20k; 2= 50k; 3= 100k; 4= 150k; 5= 200k; 6= 500k; 7= 1M*/\r
-               uint8_t phase6_tia_cap = 4;     /* 0= ; 1= ; 2= ; 3= ; 4= ; 5= ; 6= ; 7= */\r
-    uint8_t phase6_led_drv1_cha_sel = IR_LED_SLE;     /* 1 = ldr1; 2 = ldr2; 4 = ldr3; 8 = ldr4 ; */\r
-    uint8_t phase6_led_drv2_cha_sel = 0;\r
-               uint8_t phase6_pd_sel = SPO2_PD;      /* 1 = pd1; 2 = pd2; */\r
-    uint8_t phase6_als_offset_idac = 0; /* 0~255 = 0 ~ 128ua , step = 0.5ua */\r
-               uint8_t phase6_led_offset_idac = 0; /* 0~255 = 0 ~ 64ua , step = 0.25ua */\r
-    uint8_t phase6_ldr1_cur = 0;     /* 0~255 = 0 ~ 200ma, step = 0.8ma */\r
-               uint8_t phase6_ldr2_cur = 0;\r
-//             uint8_t phase6_of_idac1_cur = 0;\r
-//    uint8_t phase6_of_idac2_cur = 0;\r
-    uint8_t phase6_ad_inr_ctrl = 3;\r
-    uint8_t phase6_ad_of_idac_ctrl = 0;\r
-//    uint8_t phase6_afe_offset  =  0;\r
-    uint8_t phase6_led_en = 1;      /* phase1 led enable*/\r
-               \r
-               uint8_t phase6_dsp_mov_avg_num = 0; /* 0=bypass ; 1=2 ; 2=4 ; 3=8 */\r
-    uint8_t phase6_dsp_iir_lp_coeff = 0; /* 0=bypass ; 1=1/2 ; 2=1/4 ; 3=1/8 ,...,7=1/128 */\r
-\r
-    uint8_t phase7_inner_avg = 0;   /* phase1 adc avg num 0=1, 1=2, 2=4, 3=8 , 4=16*/\r
-    uint8_t phase7_tia_res = 0;     /* 0= 10K; 1= 20k; 2= 50k; 3= 100k; 4= 150k; 5= 200k; 6= 500k; 7= 1M*/\r
-               uint8_t phase7_tia_cap = 4;     /* 0= ; 1= ; 2= ; 3= ; 4= ; 5= ; 6= ; 7= */\r
-    uint8_t phase7_led_drv1_cha_sel = 0;     /* 1 = ldr1; 2 = ldr2; 4 = ldr3; 8 = ldr4 ; */\r
-    uint8_t phase7_led_drv2_cha_sel = 0;\r
-               uint8_t phase7_pd_sel = SPO2_PD;      /* 1 = pd1; 2 = pd2; */\r
-    uint8_t phase7_als_offset_idac = 0; /* 0~255 = 0 ~ 128ua , step = 0.5ua */\r
-               uint8_t phase7_led_offset_idac = 0; /* 0~255 = 0 ~ 64ua , step = 0.25ua */\r
-    uint8_t phase7_ldr1_cur = 0;     /* 0~255 = 0 ~ 200ma, step = 0.8ma */\r
-               uint8_t phase7_ldr2_cur = 0;\r
-//             uint8_t phase7_of_idac1_cur = 0;\r
-//    uint8_t phase7_of_idac2_cur = 0;\r
-    uint8_t phase7_ad_inr_ctrl = 3;\r
-    uint8_t phase7_ad_of_idac_ctrl = 0;\r
-//    uint8_t phase7_afe_offset  =  0;\r
-    uint8_t phase7_led_en = 1;      /* phase1 led enable*/\r
-               \r
-               uint8_t phase7_dsp_mov_avg_num = 0; /* 0=bypass ; 1=2 ; 2=4 ; 3=8 */\r
-    uint8_t phase7_dsp_iir_lp_coeff = 0; /* 0=bypass ; 1=1/2 ; 2=1/4 ; 3=1/8 ,...,7=1/128 */\r
-\r
-    uint8_t phase8_inner_avg = 0;   /* phase1 adc avg num 0=1, 1=2, 2=4, 3=8 , 4=16*/\r
-    uint8_t phase8_tia_res = 0;     /* 0= 10K; 1= 20k; 2= 50k; 3= 100k; 4= 150k; 5= 200k; 6= 500k; 7= 1M*/\r
-               uint8_t phase8_tia_cap = 4;     /* 0= ; 1= ; 2= ; 3= ; 4= ; 5= ; 6= ; 7= */\r
-    uint8_t phase8_led_drv1_cha_sel = IR_LED_SLE;     /* 1 = ldr1; 2 = ldr2; 4 = ldr3; 8 = ldr4 ; */\r
-    uint8_t phase8_led_drv2_cha_sel = 0;\r
-               uint8_t phase8_pd_sel = SPO2_PD;      /* 1 = pd1; 2 = pd2; */\r
-    uint8_t phase8_als_offset_idac = 0; /* 0~255 = 0 ~ 128ua , step = 0.5ua */\r
-               uint8_t phase8_led_offset_idac = 0; /* 0~255 = 0 ~ 64ua , step = 0.25ua */\r
-    uint8_t phase8_ldr1_cur = 32;     /* 0~255 = 0 ~ 200ma, step = 0.8ma */\r
-               uint8_t phase8_ldr2_cur = 0;\r
-//             uint8_t phase8_of_idac1_cur = 0;\r
-//    uint8_t phase8_of_idac2_cur = 0;\r
-    uint8_t phase8_ad_inr_ctrl = 3;\r
-    uint8_t phase8_ad_of_idac_ctrl = 0;\r
-//    uint8_t phase8_afe_offset  =  0;\r
-    uint8_t phase8_led_en = 1;      /* phase1 led enable*/\r
-               \r
-               uint8_t phase8_dsp_mov_avg_num = 0; /* 0=bypass ; 1=2 ; 2=4 ; 3=8 */\r
-    uint8_t phase8_dsp_iir_lp_coeff = 0; /* 0=bypass ; 1=1/2 ; 2=1/4 ; 3=1/8 ,...,7=1/128 */\r
-\r
-    uint8_t init_wait_delay = 4 ; /* 0 = 31clk ; 1 = 64clk ; 2 = 127clk ; 3 = 255clk(d) ;\r
-                                     4 = 511clk; 5 = 1023clk; 6 = 2047; 7 = 4095clk */         \r
-                                                                                                                                                \r
-    uint8_t afe_reset = 3;        /* 0 = 15clk ; 1 = 31clk ; 2 = 63clk ; 3 = 127clk(d) ;\r
-                                     4 = 255clk; 5 = 511clk; 6 = 1024; 7 = 2047clk */\r
-                                                                                                                                                \r
-               uint8_t afe_rst_cnvt = 1;               /* 0 = 15clk ; 1 = 31clk ; 2 = 63clk ; 3 = 127clk(d)*/\r
-    \r
-    uint8_t led_en_idac_pre    = 2;    /* 0 = 8clk ; 1 = 16clk ; 2 = 32clk ; 3 = 64clk(d)*/ \r
-               \r
-               uint8_t led_en_idac     =       1;        /* 0 = 4clk ; 1 = 8clk ; 2 = 16clk ; 3 = 32clk(d)*/ \r
-                                                                                                                                                \r
-    uint8_t led_on_time = 2;      /* 0 = 32clk=8us ; 1 = 64clk=16us; 2=128clk=32us ; 3 = 256clk=64us ;\r
-                                     4 = 512clk=128us ; 5 = 1024clk=256us; 6= 2048clk=512us; 7 = 4096clk=1024us */\r
-                                                                                                                                                \r
-    hx3695_delay_ms(10);               \r
-                       \r
-    hx3695_write_reg(0X2a, (uint8_t)prf_clk_num);    // prf bit<7:0>6\r
-    hx3695_write_reg(0X2b, (uint8_t)(prf_clk_num>>8)); // prf bit<15:8>\r
-    hx3695_write_reg(0X2c, (uint8_t)(prf_clk_num>>16)); // prf bit<23:16>      \r
-                  \r
-    hx3695_write_reg(0X25, (afe_rst_cnvt<<4| led_en_idac_pre<<2|led_en_idac)); \r
-               hx3695_write_reg(0X2d, phase7_8_internal); \r
-               hx3695_write_reg(0X2e, 0x33);// gpio ctrl \r
-    hx3695_write_reg(0X2f, ((afe_reset<<4)| init_wait_delay));\r
-               hx3695_write_reg(0X30, (phase8_led_en<<7 | phase7_led_en<<6 |phase6_led_en<<5 |phase5_led_en<<4 |phase4_led_en<<3 | phase3_led_en<<2 | phase2_led_en<<1 | phase1_led_en) );\r
-    hx3695_write_reg(0X72, (phase8_led_en<<7 | phase7_led_en<<6 |phase6_led_en<<5 |phase5_led_en<<4 |phase4_led_en<<3 | phase3_led_en<<2 | phase2_led_en<<1 | phase1_led_en) );\r
-\r
-\r
-    hx3695_write_reg(0X31, (led_on_time<<4| 0x00));\r
-               hx3695_write_reg(0X33, 0x83);// 中断极性及宽度配置;\r
-               hx3695_write_reg(0X34, 0x00);// 中断特殊配置;\r
-               hx3695_write_reg(0X36, 0x00);// phase data ready 标志设置;\r
-               hx3695_write_reg(0X38, 0x00);\r
-               \r
-    hx3695_write_reg(0X3a, (phase1_inner_avg | (phase2_inner_avg<<4)));  \r
-    hx3695_write_reg(0X3b, (phase3_inner_avg | (phase4_inner_avg<<4)));  \r
-    hx3695_write_reg(0X3c, (phase5_inner_avg | (phase6_inner_avg<<4)));        \r
-    hx3695_write_reg(0X3d, (phase7_inner_avg | (phase8_inner_avg<<4)));        \r
-    hx3695_write_reg(0X3e, adc_rst_post_num<<6 | samp_delay_leden_num<<4 | samp_copy_avg); \r
-    hx3695_write_reg(0X3f, data_avg_num<<4 | data_avg_num );\r
-    hx3695_write_reg(0X40, data_avg_num<<4 | data_avg_num );\r
-               hx3695_write_reg(0X41, data_avg_num<<4 | data_avg_num );\r
-               hx3695_write_reg(0X42, data_avg_num<<4 | data_avg_num );\r
-               \r
-               hx3695_write_reg(0X43, phase1_mux_sel);  \r
-               hx3695_write_reg(0X44, phase1_tia_cap<<4|phase1_tia_res); \r
-               hx3695_write_reg(0X45, phase1_ldr1_cur);    //LED_DRV1_CUR\r
-               hx3695_write_reg(0x70, phase1_ldr2_cur);   //ps8--ps1  led_drv2_cur\r
-               hx3695_write_reg(0X46, (phase1_pd_sel<<4 | 0x00));\r
-               hx3695_write_reg(0X47, phase1_als_offset_idac);\r
-               hx3695_write_reg(0X48, phase1_led_offset_idac);\r
-    hx3695_write_reg(0X49, phase1_ad_inr_ctrl<<4|phase1_ad_of_idac_ctrl); \r
-               hx3695_write_reg(0X4a, phase1_led_drv1_cha_sel);\r
-               hx3695_write_reg(0X4b, phase1_led_drv2_cha_sel);\r
-               hx3695_write_reg(0X71, phase1_dsp_mov_avg_num | phase1_dsp_iir_lp_coeff<<4);\r
-\r
-       \r
-    hx3695_write_reg(0X43, phase2_mux_sel);  \r
-               hx3695_write_reg(0X44, phase2_tia_cap<<4|phase2_tia_res); \r
-               hx3695_write_reg(0X45, phase2_ldr1_cur);    //LED_DRV1_CUR\r
-               hx3695_write_reg(0x70, phase2_ldr2_cur);   //ps8--ps1  led_drv2_cur\r
-               hx3695_write_reg(0X46, (phase2_pd_sel<<4 | 0x00));\r
-               hx3695_write_reg(0X47, phase2_als_offset_idac);\r
-               hx3695_write_reg(0X48, phase2_led_offset_idac);\r
-//             hx3695_write_reg(0X48, phase1_led_offset_idac);\r
-    hx3695_write_reg(0X49,  phase2_ad_inr_ctrl<<4|phase2_ad_of_idac_ctrl); \r
-               hx3695_write_reg(0X4a, phase2_led_drv1_cha_sel);\r
-               hx3695_write_reg(0X4b, phase2_led_drv2_cha_sel);\r
-               hx3695_write_reg(0X71, phase2_dsp_mov_avg_num | phase2_dsp_iir_lp_coeff<<4);\r
-               \r
-//phase3 sel\r
-\r
-    hx3695_write_reg(0X43, phase3_mux_sel);  \r
-               hx3695_write_reg(0X44, phase3_tia_cap<<4|phase3_tia_res); \r
-               hx3695_write_reg(0X45, phase3_ldr1_cur);    //LED_DRV1_CUR\r
-               hx3695_write_reg(0x70, phase3_ldr2_cur);   //ps8--ps1  led_drv2_cur\r
-               hx3695_write_reg(0X46, (phase3_pd_sel<<4 | 0x00));\r
-               hx3695_write_reg(0X47, phase3_als_offset_idac);\r
-               hx3695_write_reg(0X48, phase3_led_offset_idac);\r
-//             hx3695_write_reg(0X48, phase1_led_offset_idac);\r
-    hx3695_write_reg(0X49,  phase3_ad_inr_ctrl<<4|phase3_ad_of_idac_ctrl); \r
-               hx3695_write_reg(0X4a, phase3_led_drv1_cha_sel);\r
-               hx3695_write_reg(0X4b, phase3_led_drv2_cha_sel);\r
-               hx3695_write_reg(0X71, phase3_dsp_mov_avg_num | phase3_dsp_iir_lp_coeff<<4);\r
-               \r
-//phase4 sel\r
-\r
-    hx3695_write_reg(0X43, phase4_mux_sel);  \r
-               hx3695_write_reg(0X44, phase4_tia_cap<<4|phase4_tia_res); \r
-               hx3695_write_reg(0X45, phase4_ldr1_cur);    //LED_DRV1_CUR\r
-               hx3695_write_reg(0x70, phase4_ldr2_cur);   //ps8--ps1  led_drv2_cur\r
-               hx3695_write_reg(0X46, (phase4_pd_sel<<4 | 0x00));\r
-               hx3695_write_reg(0X47, phase4_als_offset_idac);\r
-               hx3695_write_reg(0X48, phase4_led_offset_idac);\r
-//             hx3695_write_reg(0X48, phase1_led_offset_idac);\r
-    hx3695_write_reg(0X49,  phase4_ad_inr_ctrl<<4|phase4_ad_of_idac_ctrl); \r
-               hx3695_write_reg(0X4a, phase4_led_drv1_cha_sel);\r
-               hx3695_write_reg(0X4b, phase4_led_drv2_cha_sel);\r
-               hx3695_write_reg(0X71, phase4_dsp_mov_avg_num | phase4_dsp_iir_lp_coeff<<4);\r
-\r
-               hx3695_write_reg(0X43, phase5_mux_sel);  \r
-               hx3695_write_reg(0X44, phase5_tia_cap<<4|phase5_tia_res); \r
-               hx3695_write_reg(0X45, phase5_ldr1_cur);    //LED_DRV1_CUR\r
-               hx3695_write_reg(0x70, phase5_ldr2_cur);   //ps8--ps1  led_drv2_cur\r
-               hx3695_write_reg(0X46, (phase5_pd_sel<<4 | 0x00));\r
-               hx3695_write_reg(0X47, phase5_als_offset_idac);\r
-               hx3695_write_reg(0X48, phase5_led_offset_idac);\r
-//             hx3695_write_reg(0X48, phase1_led_offset_idac);\r
-    hx3695_write_reg(0X49,  phase5_ad_inr_ctrl<<4|phase5_ad_of_idac_ctrl); \r
-               hx3695_write_reg(0X4a, phase5_led_drv1_cha_sel);\r
-               hx3695_write_reg(0X4b, phase5_led_drv2_cha_sel);\r
-               hx3695_write_reg(0X71, phase5_dsp_mov_avg_num | phase5_dsp_iir_lp_coeff<<4);\r
-               \r
-               \r
-         hx3695_write_reg(0X43, phase6_mux_sel);  \r
-               hx3695_write_reg(0X44, phase6_tia_cap<<4|phase6_tia_res); \r
-               hx3695_write_reg(0X45, phase6_ldr1_cur);    //LED_DRV1_CUR\r
-               hx3695_write_reg(0x70, phase6_ldr2_cur);   //ps8--ps1  led_drv2_cur\r
-               hx3695_write_reg(0X46, (phase6_pd_sel<<4 | 0x00));\r
-               hx3695_write_reg(0X47, phase6_als_offset_idac);\r
-               hx3695_write_reg(0X48, phase6_led_offset_idac);\r
-//             hx3695_write_reg(0X48, phase6_led_offset_idac);\r
-    hx3695_write_reg(0X49,  phase6_ad_inr_ctrl<<4|phase6_ad_of_idac_ctrl); \r
-               hx3695_write_reg(0X4a, phase6_led_drv1_cha_sel);\r
-               hx3695_write_reg(0X4b, phase6_led_drv2_cha_sel);\r
-               hx3695_write_reg(0X71, phase6_dsp_mov_avg_num | phase6_dsp_iir_lp_coeff<<4);\r
-               \r
-       \r
-         hx3695_write_reg(0X43, phase7_mux_sel);  \r
-               hx3695_write_reg(0X44, phase7_tia_cap<<4|phase7_tia_res); \r
-               hx3695_write_reg(0X45, phase7_ldr1_cur);    //LED_DRV1_CUR\r
-               hx3695_write_reg(0x70, phase7_ldr2_cur);   //ps8--ps1  led_drv2_cur\r
-               hx3695_write_reg(0X46, (phase7_pd_sel<<4 | 0x00));\r
-               hx3695_write_reg(0X47, phase7_als_offset_idac);\r
-               hx3695_write_reg(0X48, phase7_led_offset_idac);\r
-//             hx3695_write_reg(0X48, phase7_led_offset_idac);\r
-    hx3695_write_reg(0X49,  phase7_ad_inr_ctrl<<4|phase7_ad_of_idac_ctrl); \r
-               hx3695_write_reg(0X4a, phase7_led_drv1_cha_sel);\r
-               hx3695_write_reg(0X4b, phase7_led_drv2_cha_sel);\r
-               hx3695_write_reg(0X71, phase7_dsp_mov_avg_num | phase7_dsp_iir_lp_coeff<<4);\r
-               \r
-       \r
-         hx3695_write_reg(0X43, phase8_mux_sel);  \r
-               hx3695_write_reg(0X44, phase8_tia_cap<<4|phase8_tia_res); \r
-               hx3695_write_reg(0X45, phase8_ldr1_cur);    //LED_DRV1_CUR\r
-               hx3695_write_reg(0x70, phase8_ldr2_cur);   //ps8--ps1  led_drv2_cur\r
-               hx3695_write_reg(0X46, (phase8_pd_sel<<4 | 0x00));\r
-               hx3695_write_reg(0X47, phase8_als_offset_idac);\r
-               hx3695_write_reg(0X48, phase8_led_offset_idac);\r
-//             hx3695_write_reg(0X48, phas8_led_offset_idac);\r
-    hx3695_write_reg(0X49,  phase8_ad_inr_ctrl<<4|phase8_ad_of_idac_ctrl); \r
-               hx3695_write_reg(0X4a, phase8_led_drv1_cha_sel);\r
-               hx3695_write_reg(0X4b, phase8_led_drv2_cha_sel);\r
-               hx3695_write_reg(0X71, phase8_dsp_mov_avg_num | phase8_dsp_iir_lp_coeff<<4);\r
-               \r
-\r
-// analog circuit cfg \r
-    hx3695_write_reg(0X60, 0x14);      //\r
-               hx3695_write_reg(0X61, 0xf0);   \r
-               hx3695_write_reg(0X62, 0x22); \r
-               hx3695_write_reg(0X63, 0x15); \r
-                                                                                                                                                                                                                               \r
-               hx3695_write_reg(0X64, 0x08);   \r
-               hx3695_write_reg(0X65, 0x88); //bug\r
-               \r
-               hx3695_write_reg(0X66, 0x30);   // bits<3>=adc selftest en     0x30\r
-               hx3695_write_reg(0X67, 0x23);   \r
-               hx3695_write_reg(0X68, 0x46);   \r
-               hx3695_write_reg(0X69, 0x42);   \r
-               \r
-               hx3695_write_reg(0X39, 0xff);   // ofset idac1 phase enable cfg\r
-               hx3695_write_reg(0x73, 0xff);    //led_offset_idac phase enable\r
-               \r
-    hx3695_write_reg(0X6a, 0X0f);      \r
-               hx3695_write_reg(0X6b, 0X22);   \r
-               hx3695_write_reg(0X6c, 0X00);   \r
-               hx3695_write_reg(0X6d, 0X37);   \r
-               hx3695_write_reg(0X6e, 0X82);   \r
-    hx3695_write_reg(0X6f, 0X00);\r
-/////////FIFO and adc conversion ready config////////\r
-/////////FIFO and adc conversion ready config////////\r
-#if defined(PPG_INT_MODE)\r
-               hx3695_write_reg(0X1b, 0x92);// bits<3:0> fifo data sel, 0000 = p1;0001= p2;0010=p3;\\r
-                                0011=p4;0100=p5;0101=p6;0110=p7;\  bits<7> fifo enble\r
-                hx3695_write_reg(0X33, 0x83);   // int width                                                                                                                                           \r
-                hx3695_write_reg(0X38, 0x08);   // int sel,00=close almost full int,04=enable almost full int\r
-#elif defined(INT_MODE)             //(FIFO_ALL_MOST_FULL)\r
-                hx3695_write_reg(0X1b, 0x92);// bits<3:0> fifo data sel, 0000 = p1;0001= p2;0010=p3;\\r
-                                        0011=p4;0100=p5;0101=p6;0110=p7;\\r
-                                        bits<7> fifo enble\r
-                hx3695_write_reg(0X1c, (fifo_watermark&0xff));   //fifo_watermark\r
-                hx3695_write_reg(0X1d, fifo_watermark<<8);       //bit<0>=fifo_watermark[8]  \r
-                hx3695_write_reg(0X33, 0x83);   // int width                                                                                                                                           \r
-     hx3695_write_reg(0X38, 0x04);   // int sel,00=close almost full int,04=enable almost full int\r
-\r
-#else\r
-               hx3695_write_reg(0X1b, 0x91);\r
-     hx3695_write_reg(0X36, 0x00);                                                                                                                                                             \r
-                                                                                                                                               \r
-     hx3695_write_reg(0X38, 0x00);   // int sel,00=close almost full int,01= prf int  04=enable almost full int\r
-\r
-#endif\r
-\r
-               \r
-    hx3695_write_reg(0X26,(phase1_enable<<3)|(phase1_adc_osr)|(phase2_enable<<7)|(phase2_adc_osr<<4) ); \r
-    hx3695_write_reg(0X27,(phase3_enable<<3)|(phase3_adc_osr)|(phase4_enable<<7)|(phase4_adc_osr<<4) );  \r
-    hx3695_write_reg(0X28,(phase5_enable<<3)|(phase5_adc_osr)|(phase6_enable<<7)|(phase6_adc_osr<<4) );\r
-    hx3695_write_reg(0X29,(phase7_enable<<3)|(phase7_adc_osr)|(phase8_enable<<7)|(phase8_adc_osr<<4) );                \r
-\r
-    hx3695_write_reg(0X5c, 0x02);//soft reset\r
-    hx3695_delay_ms(5);  \r
-    hx3695_write_reg(0X5c, 0x00);//release\r
-//       uint8_t fifo_data_temp[3] = {0};\r
-//    hx3695_brust_read_reg(0x22, fifo_data_temp, 3); \r
-    read_fifo_first_flg = 1;\r
-    return ;\r
-\r
-}\r
-#endif\r
-\r
-#ifdef HRV_ALG_LIB\r
-// HRV模式下 初始化配置\r
-void hx3695_hrv_ppg_init(void) //20200615 ericy ppg fs=25hz, phase3 conversion ready interupt en\r
-{\r
-   uint16_t sample_rate = 125;                  /*config the data rate of chip alps2_fm ,uint is Hz*/\r
-    uint32_t prf_clk_num = 32000/sample_rate;  /*period in clk num, num = Fclk/fs */\r
-         \r
-    uint8_t adc_rst_post_num=0;       /* 00=16,01=32,10=64,11=128*/      \r
-         uint8_t samp_delay_leden_num = 0; /* 00=8,01=16,10=32,11=64*/ \r
-    uint8_t samp_copy_avg = 0;        /* 0=1, 1=2, 2=4 ,3=8, 4=16*/\r
-    uint8_t data_avg_num = 0;         /* 0 = 1 ; 1 = 2; 2 =4 ; 3 =8 ; 4 =16 ;*/\r
-         uint8_t phase7_8_internal = 0;    /* phase7 and phase8 prf internal cfg */\r
-       \r
-    uint16_t fifo_watermark= 164 ;\r
-       uint8_t phase1_enable = 1;     /*phase1_enable  , 1 mean enable ; 0 mean disable */ \r
-    uint8_t phase2_enable = 1;     /*phase2_enable  , 1 mean enable ; 0 mean disable */ \r
-    uint8_t phase3_enable = 1;     /*phase3_enable  , 1 mean enable ; 0 mean disable */ \r
-    uint8_t phase4_enable = 1;     /*phase4_enable  , 1 mean enable ; 0 mean disable */\r
-    uint8_t phase5_enable = 0;     /*phase5_enable  , 1 mean enable ; 0 mean disable */ \r
-    uint8_t phase6_enable = 0;     /*phase6_enable  , 1 mean enable ; 0 mean disable */ \r
-    uint8_t phase7_enable = 0;     /*phase7_enable  , 1 mean enable ; 0 mean disable */        \r
-         uint8_t phase8_enable = 0;     /*phase8_enable  , 1 mean enable ; 0 mean disable */ \r
-\r
-    uint8_t phase1_adc_osr = 3;    /* 0 = 128 ; 1 = 256 ; 2 = 512 ; 3 = 1024 ; 4 = 2048*/\r
-    uint8_t phase2_adc_osr = 3;    /* 0 = 128 ; 1 = 256 ; 2 = 512 ; 3 = 1024 ; 4 = 2048*/\r
-    uint8_t phase3_adc_osr = 3;    /* 0 = 128 ; 1 = 256 ; 2 = 512 ; 3 = 1024 ; 4 = 2048*/\r
-    uint8_t phase4_adc_osr = 3;    /* 0 = 128 ; 1 = 256 ; 2 = 512 ; 3 = 1024 ; 4 = 2048*/\r
-               uint8_t phase5_adc_osr = 3;    /* 0 = 128 ; 1 = 256 ; 2 = 512 ; 3 = 1024 ; 4 = 2048*/\r
-         uint8_t phase6_adc_osr = 3;    /* 0 = 128 ; 1 = 256 ; 2 = 512 ; 3 = 1024 ; 4 = 2048*/\r
-               uint8_t phase7_adc_osr = 3;    /* 0 = 128 ; 1 = 256 ; 2 = 512 ; 3 = 1024 ; 4 = 2048*/\r
-               uint8_t phase8_adc_osr = 3;    /* 0 = 128 ; 1 = 256 ; 2 = 512 ; 3 = 1024 ; 4 = 2048*/\r
-                        \r
-         uint8_t phase1_mux_sel = 0;    /* sel phase1*/\r
-               uint8_t phase2_mux_sel = 1;    /* sel phase2*/\r
-               uint8_t phase3_mux_sel = 2;    /* sel phase3*/\r
-               uint8_t phase4_mux_sel = 3;    /* sel phase4*/\r
-               uint8_t phase5_mux_sel = 4;    /* sel phase5*/\r
-               uint8_t phase6_mux_sel = 5;    /* sel phase6*/\r
-               uint8_t phase7_mux_sel = 6;    /* sel phase7*/\r
-               uint8_t phase8_mux_sel = 7;    /* sel phase8*/\r
-       \r
-\r
-         uint8_t phase1_inner_avg = 0;   /* phase1 adc avg num 0=1, 1=2, 2=4, 3=8 , 4=16*/\r
-    uint8_t phase1_tia_res = 0;     /* 0= 10K; 1= 20k; 2= 50k; 3= 100k; 4= 150k; 5= 200k; 6= 500k; 7= 1M*/\r
-               uint8_t phase1_tia_cap = 4;     /* 0= ; 1= ; 2= ; 3= ; 4= ; 5= ; 6= ; 7= */\r
-    uint8_t phase1_led_drv1_cha_sel = 0X10;     /* 1 = ldr1  NG; 2 = ldr2   GR; 4 = ldr3  IR; 8 = ldr4 RED; */\r
-    uint8_t phase1_led_drv2_cha_sel = 0;    /*ldr5:0x20  ldr6: 0x40 red    ldr8 0x80  ir      */\r
-               uint8_t phase1_pd_sel = 0x0a;          /* 1 = pd1; 2 = pd2; 4 = pd3*/\r
-    uint8_t phase1_als_offset_idac = 0; /* 0~255 = 0 ~ 128ua , step = 0.5ua */\r
-               uint8_t phase1_led_offset_idac = 0; /* 0~255 = 0 ~ 64ua , step = 0.25ua */\r
-    uint8_t phase1_ldr1_cur = 0;     /* 0~255 = 0 ~ 200ma, step = 0.8ma */\r
-               uint8_t phase1_ldr2_cur = 0;\r
-//             uint8_t phase1_of_idac1_cur = 0;\r
-//    uint8_t phase1_of_idac2_cur = 0;\r
-    uint8_t phase1_ad_inr_ctrl = 3;\r
-    uint8_t phase1_ad_of_idac_ctrl = 0;\r
-//    uint8_t afe_offset  =  0;\r
-    uint8_t phase1_led_en = 1;      /* phase1 led enable*/\r
-               \r
-               uint8_t phase1_dsp_mov_avg_num = 0; /* 0=bypass ; 1=2 ; 2=4 ; 3=8 */\r
-    uint8_t phase1_dsp_iir_lp_coeff = 0; /* 0=bypass ; 1=1/2 ; 2=1/4 ; 3=1/8 ,...,7=1/128 */\r
-\r
-\r
-\r
-         uint8_t phase2_inner_avg = 0;   /* phase1 adc avg num 0=1, 1=2, 2=4, 3=8 , 4=16*/\r
-    uint8_t phase2_tia_res = 0;     /* 0= 10K; 1= 20k; 2= 50k; 3= 100k; 4= 150k; 5= 200k; 6= 500k; 7= 1M*/\r
-               uint8_t phase2_tia_cap = 4;     /* 0= ; 1= ; 2= ; 3= ; 4= ; 5= ; 6= ; 7= */\r
-    uint8_t phase2_led_drv1_cha_sel = 0;   //GREEN_LED_SLE;     /* 1 = ldr1; 2 = ldr2; 4 = ldr3; 8 = ldr4 ; */\r
-    uint8_t phase2_led_drv2_cha_sel = 0;\r
-               uint8_t phase2_pd_sel = 0x0a;      /* 1 = pd1; 2 = pd2; 4 = pd3*/\r
-    uint8_t phase2_als_offset_idac = 0; /* 0~255 = 0 ~ 128ua , step = 0.5ua */\r
-               uint8_t phase2_led_offset_idac = 0; /* 0~255 = 0 ~ 64ua , step = 0.25ua */\r
-    uint8_t phase2_ldr1_cur = 0;     /* 0~255 = 0 ~ 200ma, step = 0.8ma */\r
-               uint8_t phase2_ldr2_cur = 0;\r
-//             uint8_t phase2_of_idac1_cur = 0;\r
-//    uint8_t phase2_of_idac2_cur = 0;\r
-    uint8_t phase2_ad_inr_ctrl = 3;\r
-    uint8_t phase2_ad_of_idac_ctrl = 0;\r
-//    uint8_t phase2_afe_offset  =  0;\r
-    uint8_t phase2_led_en = 1;      /* phase1 led enable*/\r
-               \r
-               uint8_t phase2_dsp_mov_avg_num = 0; /* 0=bypass ; 1=2 ; 2=4 ; 3=8 */\r
-    uint8_t phase2_dsp_iir_lp_coeff = 0; /* 0=bypass ; 1=1/2 ; 2=1/4 ; 3=1/8 ,...,7=1/128 */\r
-\r
-               \r
-    uint8_t phase3_inner_avg = 0;   /* phase1 adc avg num 0=1, 1=2, 2=4, 3=8 , 4=16*/\r
-    uint8_t phase3_tia_res = 0;     /* 0= 10K; 1= 20k; 2= 50k; 3= 100k; 4= 150k; 5= 200k; 6= 500k; 7= 1M*/\r
-               uint8_t phase3_tia_cap = 4;     /* 0= ; 1= ; 2= ; 3= ; 4= ; 5= ; 6= ; 7= */\r
-    uint8_t phase3_led_drv1_cha_sel = 0x08; //0x40   //RED_LED_SLE;     /* 1 = ldr1; 2 = ldr2; 4 = ldr3; 8 = ldr4 ; */\r
-    uint8_t phase3_led_drv2_cha_sel = 0;\r
-               uint8_t phase3_pd_sel = 0x0a;      /* 1 = pd1; 2 = pd2; 4 = pd3*/\r
-    uint8_t phase3_als_offset_idac = 0; /* 0~255 = 0 ~ 128ua , step = 0.5ua */\r
-               uint8_t phase3_led_offset_idac = 0; /* 0~255 = 0 ~ 64ua , step = 0.25ua */\r
-    uint8_t phase3_ldr1_cur = 15;     /* 0~255 = 0 ~ 200ma, step = 0.8ma */\r
-               uint8_t phase3_ldr2_cur = 0;\r
-//             uint8_t phase3_of_idac1_cur = 0;\r
-//    uint8_t phase3_of_idac2_cur = 0;\r
-    uint8_t phase3_ad_inr_ctrl = 3;\r
-    uint8_t phase3_ad_of_idac_ctrl = 0;\r
-//    uint8_t phase3_afe_offset  =  0;\r
-    uint8_t phase3_led_en = 1;      /* phase1 led enable*/\r
-               \r
-               uint8_t phase3_dsp_mov_avg_num = 0; /* 0=bypass ; 1=2 ; 2=4 ; 3=8 */\r
-    uint8_t phase3_dsp_iir_lp_coeff = 0; /* 0=bypass ; 1=1/2 ; 2=1/4 ; 3=1/8 ,...,7=1/128 */\r
-\r
-               \r
-    uint8_t phase4_inner_avg = 0;   /* phase1 adc avg num 0=1, 1=2, 2=4, 3=8 , 4=16*/\r
-    uint8_t phase4_tia_res = 0;     /* 0= 10K; 1= 20k; 2= 50k; 3= 100k; 4= 150k; 5= 200k; 6= 500k; 7= 1M*/\r
-               uint8_t phase4_tia_cap = 4;     /* 0= ; 1= ; 2= ; 3= ; 4= ; 5= ; 6= ; 7= */\r
-    uint8_t phase4_led_drv1_cha_sel = 0;    //IR_LED_SLE;     /* 1 = ldr1; 2 = ldr2; 4 = ldr3; 8 = ldr4 ; */\r
-    uint8_t phase4_led_drv2_cha_sel = 0;\r
-               uint8_t phase4_pd_sel = 0x0a;      /* 1 = pd1; 2 = pd2; 4 = pd3*/\r
-    uint8_t phase4_als_offset_idac = 0; /* 0~255 = 0 ~ 128ua , step = 0.5ua */\r
-               uint8_t phase4_led_offset_idac = 0; /* 0~255 = 0 ~ 64ua , step = 0.25ua */\r
-    uint8_t phase4_ldr1_cur = 0;     /* 0~255 = 0 ~ 200ma, step = 0.8ma */\r
-               uint8_t phase4_ldr2_cur = 0;\r
-//             uint8_t phase4_of_idac1_cur = 0;\r
-//    uint8_t phase4_of_idac2_cur = 0;\r
-    uint8_t phase4_ad_inr_ctrl = 3;\r
-    uint8_t phase4_ad_of_idac_ctrl = 0;\r
-//    uint8_t phase4_afe_offset  =  0;\r
-    uint8_t phase4_led_en = 1;      /* phase1 led enable*/\r
-               \r
-               uint8_t phase4_dsp_mov_avg_num = 0; /* 0=bypass ; 1=2 ; 2=4 ; 3=8 */\r
-    uint8_t phase4_dsp_iir_lp_coeff = 0; /* 0=bypass ; 1=1/2 ; 2=1/4 ; 3=1/8 ,...,7=1/128 */\r
-\r
-    uint8_t phase5_inner_avg = 0;   /* phase1 adc avg num 0=1, 1=2, 2=4, 3=8 , 4=16*/\r
-    uint8_t phase5_tia_res = 0;     /* 0= 10K; 1= 20k; 2= 50k; 3= 100k; 4= 150k; 5= 200k; 6= 500k; 7= 1M*/\r
-               uint8_t phase5_tia_cap = 4;     /* 0= ; 1= ; 2= ; 3= ; 4= ; 5= ; 6= ; 7= */\r
-    uint8_t phase5_led_drv1_cha_sel = 0;     /* 1 = ldr1; 2 = ldr2; 4 = ldr3; 8 = ldr4 ; */\r
-    uint8_t phase5_led_drv2_cha_sel = 0;\r
-               uint8_t phase5_pd_sel = 0x0a;      /* 1 = pd1; 2 = pd2; */\r
-    uint8_t phase5_als_offset_idac = 0; /* 0~255 = 0 ~ 128ua , step = 0.5ua */\r
-               uint8_t phase5_led_offset_idac = 0; /* 0~255 = 0 ~ 64ua , step = 0.25ua */\r
-    uint8_t phase5_ldr1_cur = 0;     /* 0~255 = 0 ~ 200ma, step = 0.8ma */\r
-               uint8_t phase5_ldr2_cur = 0;\r
-//             uint8_t phase5_of_idac1_cur = 0;\r
-//    uint8_t phase5_of_idac2_cur = 0;\r
-    uint8_t phase5_ad_inr_ctrl = 3;\r
-    uint8_t phase5_ad_of_idac_ctrl = 0;\r
-//    uint8_t phase5_afe_offset  =  0;\r
-    uint8_t phase5_led_en = 1;      /* phase1 led enable*/\r
-               \r
-               uint8_t phase5_dsp_mov_avg_num = 0; /* 0=bypass ; 1=2 ; 2=4 ; 3=8 */\r
-    uint8_t phase5_dsp_iir_lp_coeff = 0; /* 0=bypass ; 1=1/2 ; 2=1/4 ; 3=1/8 ,...,7=1/128 */\r
-\r
-    uint8_t phase6_inner_avg = 0;   /* phase1 adc avg num 0=1, 1=2, 2=4, 3=8 , 4=16*/\r
-    uint8_t phase6_tia_res = 0;     /* 0= 10K; 1= 20k; 2= 50k; 3= 100k; 4= 150k; 5= 200k; 6= 500k; 7= 1M*/\r
-               uint8_t phase6_tia_cap = 4;     /* 0= ; 1= ; 2= ; 3= ; 4= ; 5= ; 6= ; 7= */\r
-    uint8_t phase6_led_drv1_cha_sel = 0;     /* 1 = ldr1; 2 = ldr2; 4 = ldr3; 8 = ldr4 ; */\r
-    uint8_t phase6_led_drv2_cha_sel = 0;\r
-               uint8_t phase6_pd_sel = 0x0a;      /* 1 = pd1; 2 = pd2; */\r
-    uint8_t phase6_als_offset_idac = 0; /* 0~255 = 0 ~ 128ua , step = 0.5ua */\r
-               uint8_t phase6_led_offset_idac = 0; /* 0~255 = 0 ~ 64ua , step = 0.25ua */\r
-    uint8_t phase6_ldr1_cur = 0;     /* 0~255 = 0 ~ 200ma, step = 0.8ma */\r
-               uint8_t phase6_ldr2_cur = 0;\r
-//             uint8_t phase6_of_idac1_cur = 0;\r
-//    uint8_t phase6_of_idac2_cur = 0;\r
-    uint8_t phase6_ad_inr_ctrl = 3;\r
-    uint8_t phase6_ad_of_idac_ctrl = 0;\r
-//    uint8_t phase6_afe_offset  =  0;\r
-    uint8_t phase6_led_en = 1;      /* phase1 led enable*/\r
-               \r
-               uint8_t phase6_dsp_mov_avg_num = 0; /* 0=bypass ; 1=2 ; 2=4 ; 3=8 */\r
-    uint8_t phase6_dsp_iir_lp_coeff = 0; /* 0=bypass ; 1=1/2 ; 2=1/4 ; 3=1/8 ,...,7=1/128 */\r
-\r
-    uint8_t phase7_inner_avg = 0;   /* phase1 adc avg num 0=1, 1=2, 2=4, 3=8 , 4=16*/\r
-    uint8_t phase7_tia_res = 0;     /* 0= 10K; 1= 20k; 2= 50k; 3= 100k; 4= 150k; 5= 200k; 6= 500k; 7= 1M*/\r
-               uint8_t phase7_tia_cap = 4;     /* 0= ; 1= ; 2= ; 3= ; 4= ; 5= ; 6= ; 7= */\r
-    uint8_t phase7_led_drv1_cha_sel = 0;     /* 1 = ldr1; 2 = ldr2; 4 = ldr3; 8 = ldr4 ; */\r
-    uint8_t phase7_led_drv2_cha_sel = 0;\r
-               uint8_t phase7_pd_sel = 0x0a;      /* 1 = pd1; 2 = pd2; */\r
-    uint8_t phase7_als_offset_idac = 0; /* 0~255 = 0 ~ 128ua , step = 0.5ua */\r
-               uint8_t phase7_led_offset_idac = 0; /* 0~255 = 0 ~ 64ua , step = 0.25ua */\r
-    uint8_t phase7_ldr1_cur = 0;     /* 0~255 = 0 ~ 200ma, step = 0.8ma */\r
-               uint8_t phase7_ldr2_cur = 0;\r
-//             uint8_t phase7_of_idac1_cur = 0;\r
-//    uint8_t phase7_of_idac2_cur = 0;\r
-    uint8_t phase7_ad_inr_ctrl = 3;\r
-    uint8_t phase7_ad_of_idac_ctrl = 0;\r
-//    uint8_t phase7_afe_offset  =  0;\r
-    uint8_t phase7_led_en = 1;      /* phase1 led enable*/\r
-               \r
-               uint8_t phase7_dsp_mov_avg_num = 0; /* 0=bypass ; 1=2 ; 2=4 ; 3=8 */\r
-    uint8_t phase7_dsp_iir_lp_coeff = 0; /* 0=bypass ; 1=1/2 ; 2=1/4 ; 3=1/8 ,...,7=1/128 */\r
-\r
-    uint8_t phase8_inner_avg = 0;   /* phase1 adc avg num 0=1, 1=2, 2=4, 3=8 , 4=16*/\r
-    uint8_t phase8_tia_res = 0;     /* 0= 10K; 1= 20k; 2= 50k; 3= 100k; 4= 150k; 5= 200k; 6= 500k; 7= 1M*/\r
-               uint8_t phase8_tia_cap = 4;     /* 0= ; 1= ; 2= ; 3= ; 4= ; 5= ; 6= ; 7= */\r
-    uint8_t phase8_led_drv1_cha_sel = 0;     /* 1 = ldr1; 2 = ldr2; 4 = ldr3; 8 = ldr4 ; */\r
-    uint8_t phase8_led_drv2_cha_sel = 0;\r
-               uint8_t phase8_pd_sel = 0x0a;      /* 1 = pd1; 2 = pd2; */\r
-    uint8_t phase8_als_offset_idac = 0; /* 0~255 = 0 ~ 128ua , step = 0.5ua */\r
-               uint8_t phase8_led_offset_idac = 0; /* 0~255 = 0 ~ 64ua , step = 0.25ua */\r
-    uint8_t phase8_ldr1_cur = 0;     /* 0~255 = 0 ~ 200ma, step = 0.8ma */\r
-               uint8_t phase8_ldr2_cur = 0;\r
-//             uint8_t phase8_of_idac1_cur = 0;\r
-//    uint8_t phase8_of_idac2_cur = 0;\r
-    uint8_t phase8_ad_inr_ctrl = 3;\r
-    uint8_t phase8_ad_of_idac_ctrl = 0;\r
-//    uint8_t phase8_afe_offset  =  0;\r
-    uint8_t phase8_led_en = 1;      /* phase1 led enable*/\r
-               \r
-               uint8_t phase8_dsp_mov_avg_num = 0; /* 0=bypass ; 1=2 ; 2=4 ; 3=8 */\r
-    uint8_t phase8_dsp_iir_lp_coeff = 0; /* 0=bypass ; 1=1/2 ; 2=1/4 ; 3=1/8 ,...,7=1/128 */\r
-\r
-    uint8_t init_wait_delay = 4 ; /* 0 = 31clk ; 1 = 64clk ; 2 = 127clk ; 3 = 255clk(d) ;\r
-                                     4 = 511clk; 5 = 1023clk; 6 = 2047; 7 = 4095clk */         \r
-                                                                                                                                                \r
-    uint8_t afe_reset = 3;        /* 0 = 15clk ; 1 = 31clk ; 2 = 63clk ; 3 = 127clk(d) ;\r
-                                     4 = 255clk; 5 = 511clk; 6 = 1024; 7 = 2047clk */\r
-                                                                                                                                                \r
-               uint8_t afe_rst_cnvt = 1;               /* 0 = 15clk ; 1 = 31clk ; 2 = 63clk ; 3 = 127clk(d)*/\r
-    \r
-    uint8_t led_en_idac_pre    = 2;    /* 0 = 8clk ; 1 = 16clk ; 2 = 32clk ; 3 = 64clk(d)*/ \r
-               \r
-               uint8_t led_en_idac     =       1;        /* 0 = 4clk ; 1 = 8clk ; 2 = 16clk ; 3 = 32clk(d)*/ \r
-                                                                                                                                                \r
-    uint8_t led_on_time = 2;      /* 0 = 32clk=8us ; 1 = 64clk=16us; 2=128clk=32us ; 3 = 256clk=64us ;\r
-                                     4 = 512clk=128us ; 5 = 1024clk=256us; 6= 2048clk=512us; 7 = 4096clk=1024us */\r
-                                                                                                                                                \r
-    hx3695_delay_ms(10);               \r
-                       \r
-    hx3695_write_reg(0X2a, (uint8_t)prf_clk_num);    // prf bit<7:0>6\r
-    hx3695_write_reg(0X2b, (uint8_t)(prf_clk_num>>8)); // prf bit<15:8>\r
-    hx3695_write_reg(0X2c, (uint8_t)(prf_clk_num>>16)); // prf bit<23:16>      \r
-                  \r
-    hx3695_write_reg(0X25, (afe_rst_cnvt<<4| led_en_idac_pre<<2|led_en_idac)); \r
-               hx3695_write_reg(0X2d, phase7_8_internal); \r
-               hx3695_write_reg(0X2e, 0x33);// gpio ctrl \r
-    hx3695_write_reg(0X2f, ((afe_reset<<4)| init_wait_delay));\r
-               hx3695_write_reg(0X30, (phase8_led_en<<7 | phase7_led_en<<6 |phase6_led_en<<5 |phase5_led_en<<4 |phase4_led_en<<3 | phase3_led_en<<2 | phase2_led_en<<1 | phase1_led_en) );\r
-    hx3695_write_reg(0X72, (phase8_led_en<<7 | phase7_led_en<<6 |phase6_led_en<<5 |phase5_led_en<<4 |phase4_led_en<<3 | phase3_led_en<<2 | phase2_led_en<<1 | phase1_led_en) );\r
-\r
-\r
-    hx3695_write_reg(0X31, (led_on_time<<4| 0x00));\r
-               hx3695_write_reg(0X33, 0x83);// 中断极性及宽度配置;\r
-               hx3695_write_reg(0X34, 0x00);// 中断特殊配置;\r
-               hx3695_write_reg(0X36, 0x00);// phase data ready 标志设置;\r
-               hx3695_write_reg(0X38, 0x00);\r
-               \r
-    hx3695_write_reg(0X3a, (phase1_inner_avg | (phase2_inner_avg<<4)));  \r
-    hx3695_write_reg(0X3b, (phase3_inner_avg | (phase4_inner_avg<<4)));  \r
-    hx3695_write_reg(0X3c, (phase5_inner_avg | (phase6_inner_avg<<4)));        \r
-    hx3695_write_reg(0X3d, (phase7_inner_avg | (phase8_inner_avg<<4)));        \r
-    hx3695_write_reg(0X3e, adc_rst_post_num<<6 | samp_delay_leden_num<<4 | samp_copy_avg); \r
-    hx3695_write_reg(0X3f, data_avg_num<<4 | data_avg_num );\r
-    hx3695_write_reg(0X40, data_avg_num<<4 | data_avg_num );\r
-               hx3695_write_reg(0X41, data_avg_num<<4 | data_avg_num );\r
-               hx3695_write_reg(0X42, data_avg_num<<4 | data_avg_num );\r
-               \r
-               hx3695_write_reg(0X43, phase1_mux_sel);  \r
-               hx3695_write_reg(0X44, phase1_tia_cap<<4|phase1_tia_res); \r
-               hx3695_write_reg(0X45, phase1_ldr1_cur);    //LED_DRV1_CUR\r
-               hx3695_write_reg(0x70, phase1_ldr2_cur);   //ps8--ps1  led_drv2_cur\r
-               hx3695_write_reg(0X46, (phase1_pd_sel<<4 | 0x00));\r
-               hx3695_write_reg(0X47, phase1_als_offset_idac);\r
-               hx3695_write_reg(0X48, phase1_led_offset_idac);\r
-    hx3695_write_reg(0X49, phase1_ad_inr_ctrl<<4|phase1_ad_of_idac_ctrl); \r
-               hx3695_write_reg(0X4a, phase1_led_drv1_cha_sel);\r
-               hx3695_write_reg(0X4b, phase1_led_drv2_cha_sel);\r
-               hx3695_write_reg(0X71, phase1_dsp_mov_avg_num | phase1_dsp_iir_lp_coeff<<4);\r
-\r
-       \r
-    hx3695_write_reg(0X43, phase2_mux_sel);  \r
-               hx3695_write_reg(0X44, phase2_tia_cap<<4|phase2_tia_res); \r
-               hx3695_write_reg(0X45, phase2_ldr1_cur);    //LED_DRV1_CUR\r
-               hx3695_write_reg(0x70, phase2_ldr2_cur);   //ps8--ps1  led_drv2_cur\r
-               hx3695_write_reg(0X46, (phase2_pd_sel<<4 | 0x00));\r
-               hx3695_write_reg(0X47, phase2_als_offset_idac);\r
-               hx3695_write_reg(0X48, phase2_led_offset_idac);\r
-//             hx3695_write_reg(0X48, phase1_led_offset_idac);\r
-    hx3695_write_reg(0X49,  phase2_ad_inr_ctrl<<4|phase2_ad_of_idac_ctrl); \r
-               hx3695_write_reg(0X4a, phase2_led_drv1_cha_sel);\r
-               hx3695_write_reg(0X4b, phase2_led_drv2_cha_sel);\r
-               hx3695_write_reg(0X71, phase2_dsp_mov_avg_num | phase2_dsp_iir_lp_coeff<<4);\r
-               \r
-//phase3 sel\r
-\r
-    hx3695_write_reg(0X43, phase3_mux_sel);  \r
-               hx3695_write_reg(0X44, phase3_tia_cap<<4|phase3_tia_res); \r
-               hx3695_write_reg(0X45, phase3_ldr1_cur);    //LED_DRV1_CUR\r
-               hx3695_write_reg(0x70, phase3_ldr2_cur);   //ps8--ps1  led_drv2_cur\r
-               hx3695_write_reg(0X46, (phase3_pd_sel<<4 | 0x00));\r
-               hx3695_write_reg(0X47, phase3_als_offset_idac);\r
-               hx3695_write_reg(0X48, phase3_led_offset_idac);\r
-//             hx3695_write_reg(0X48, phase1_led_offset_idac);\r
-    hx3695_write_reg(0X49,  phase3_ad_inr_ctrl<<4|phase3_ad_of_idac_ctrl); \r
-               hx3695_write_reg(0X4a, phase3_led_drv1_cha_sel);\r
-               hx3695_write_reg(0X4b, phase3_led_drv2_cha_sel);\r
-               hx3695_write_reg(0X71, phase3_dsp_mov_avg_num | phase3_dsp_iir_lp_coeff<<4);\r
-               \r
-//phase4 sel\r
-\r
-    hx3695_write_reg(0X43, phase4_mux_sel);  \r
-               hx3695_write_reg(0X44, phase4_tia_cap<<4|phase4_tia_res); \r
-               hx3695_write_reg(0X45, phase4_ldr1_cur);    //LED_DRV1_CUR\r
-               hx3695_write_reg(0x70, phase4_ldr2_cur);   //ps8--ps1  led_drv2_cur\r
-               hx3695_write_reg(0X46, (phase4_pd_sel<<4 | 0x00));\r
-               hx3695_write_reg(0X47, phase4_als_offset_idac);\r
-               hx3695_write_reg(0X48, phase4_led_offset_idac);\r
-//             hx3695_write_reg(0X48, phase1_led_offset_idac);\r
-    hx3695_write_reg(0X49,  phase4_ad_inr_ctrl<<4|phase4_ad_of_idac_ctrl); \r
-               hx3695_write_reg(0X4a, phase4_led_drv1_cha_sel);\r
-               hx3695_write_reg(0X4b, phase4_led_drv2_cha_sel);\r
-               hx3695_write_reg(0X71, phase4_dsp_mov_avg_num | phase4_dsp_iir_lp_coeff<<4);\r
-\r
-               hx3695_write_reg(0X43, phase5_mux_sel);  \r
-               hx3695_write_reg(0X44, phase5_tia_cap<<4|phase5_tia_res); \r
-               hx3695_write_reg(0X45, phase5_ldr1_cur);    //LED_DRV1_CUR\r
-               hx3695_write_reg(0x70, phase5_ldr2_cur);   //ps8--ps1  led_drv2_cur\r
-               hx3695_write_reg(0X46, (phase5_pd_sel<<4 | 0x00));\r
-               hx3695_write_reg(0X47, phase5_als_offset_idac);\r
-               hx3695_write_reg(0X48, phase5_led_offset_idac);\r
-//             hx3695_write_reg(0X48, phase1_led_offset_idac);\r
-    hx3695_write_reg(0X49,  phase5_ad_inr_ctrl<<4|phase5_ad_of_idac_ctrl); \r
-               hx3695_write_reg(0X4a, phase5_led_drv1_cha_sel);\r
-               hx3695_write_reg(0X4b, phase5_led_drv2_cha_sel);\r
-               hx3695_write_reg(0X71, phase5_dsp_mov_avg_num | phase5_dsp_iir_lp_coeff<<4);\r
-               \r
-               \r
-         hx3695_write_reg(0X43, phase6_mux_sel);  \r
-               hx3695_write_reg(0X44, phase6_tia_cap<<4|phase6_tia_res); \r
-               hx3695_write_reg(0X45, phase6_ldr1_cur);    //LED_DRV1_CUR\r
-               hx3695_write_reg(0x70, phase6_ldr2_cur);   //ps8--ps1  led_drv2_cur\r
-               hx3695_write_reg(0X46, (phase6_pd_sel<<4 | 0x00));\r
-               hx3695_write_reg(0X47, phase6_als_offset_idac);\r
-               hx3695_write_reg(0X48, phase6_led_offset_idac);\r
-//             hx3695_write_reg(0X48, phase6_led_offset_idac);\r
-    hx3695_write_reg(0X49,  phase6_ad_inr_ctrl<<4|phase6_ad_of_idac_ctrl); \r
-               hx3695_write_reg(0X4a, phase6_led_drv1_cha_sel);\r
-               hx3695_write_reg(0X4b, phase6_led_drv2_cha_sel);\r
-               hx3695_write_reg(0X71, phase6_dsp_mov_avg_num | phase6_dsp_iir_lp_coeff<<4);\r
-               \r
-       \r
-         hx3695_write_reg(0X43, phase7_mux_sel);  \r
-               hx3695_write_reg(0X44, phase7_tia_cap<<4|phase7_tia_res); \r
-               hx3695_write_reg(0X45, phase7_ldr1_cur);    //LED_DRV1_CUR\r
-               hx3695_write_reg(0x70, phase7_ldr2_cur);   //ps8--ps1  led_drv2_cur\r
-               hx3695_write_reg(0X46, (phase7_pd_sel<<4 | 0x00));\r
-               hx3695_write_reg(0X47, phase7_als_offset_idac);\r
-               hx3695_write_reg(0X48, phase7_led_offset_idac);\r
-//             hx3695_write_reg(0X48, phase7_led_offset_idac);\r
-    hx3695_write_reg(0X49,  phase7_ad_inr_ctrl<<4|phase7_ad_of_idac_ctrl); \r
-               hx3695_write_reg(0X4a, phase7_led_drv1_cha_sel);\r
-               hx3695_write_reg(0X4b, phase7_led_drv2_cha_sel);\r
-               hx3695_write_reg(0X71, phase7_dsp_mov_avg_num | phase7_dsp_iir_lp_coeff<<4);\r
-               \r
-       \r
-         hx3695_write_reg(0X43, phase8_mux_sel);  \r
-               hx3695_write_reg(0X44, phase8_tia_cap<<4|phase8_tia_res); \r
-               hx3695_write_reg(0X45, phase8_ldr1_cur);    //LED_DRV1_CUR\r
-               hx3695_write_reg(0x70, phase8_ldr2_cur);   //ps8--ps1  led_drv2_cur\r
-               hx3695_write_reg(0X46, (phase8_pd_sel<<4 | 0x00));\r
-               hx3695_write_reg(0X47, phase8_als_offset_idac);\r
-               hx3695_write_reg(0X48, phase8_led_offset_idac);\r
-//             hx3695_write_reg(0X48, phas8_led_offset_idac);\r
-    hx3695_write_reg(0X49,  phase8_ad_inr_ctrl<<4|phase8_ad_of_idac_ctrl); \r
-               hx3695_write_reg(0X4a, phase8_led_drv1_cha_sel);\r
-               hx3695_write_reg(0X4b, phase8_led_drv2_cha_sel);\r
-               hx3695_write_reg(0X71, phase8_dsp_mov_avg_num | phase8_dsp_iir_lp_coeff<<4);\r
-               \r
-\r
-// analog circuit cfg \r
-    hx3695_write_reg(0X60, 0x14);      //\r
-               hx3695_write_reg(0X61, 0xf0);   \r
-               hx3695_write_reg(0X62, 0x22); \r
-               hx3695_write_reg(0X63, 0x15); \r
-                                                                                                                                                                                                                               \r
-               hx3695_write_reg(0X64, 0x08);   \r
-               hx3695_write_reg(0X65, 0x88); //bug\r
-               \r
-               hx3695_write_reg(0X66, 0x30);   // bits<3>=adc selftest en     0x30\r
-               hx3695_write_reg(0X67, 0x23);   \r
-               hx3695_write_reg(0X68, 0x46);   \r
-               hx3695_write_reg(0X69, 0x42);   \r
-               \r
-               hx3695_write_reg(0X39, 0xff);   // ofset idac1 phase enable cfg\r
-               hx3695_write_reg(0x73, 0xff);    //led_offset_idac phase enable\r
-               \r
-    hx3695_write_reg(0X6a, 0X0f);      \r
-               hx3695_write_reg(0X6b, 0X22);   \r
-               hx3695_write_reg(0X6c, 0X00);   \r
-               hx3695_write_reg(0X6d, 0X37);   \r
-               hx3695_write_reg(0X6e, 0X82);   \r
-    hx3695_write_reg(0X6f, 0X00);\r
-/////////FIFO and adc conversion ready config////////\r
-/////////FIFO and adc conversion ready config////////\r
-#if defined(PPG_INT_MODE)\r
-               hx3695_write_reg(0X1b, 0x00);// bits<3:0> fifo data sel, 0000 = p1;0001= p2;0010=p3;\\r
-                                        0011=p4;0100=p5;0101=p6;0110=p7;\\r
-                                        bits<7> fifo enble\r
-                hx3695_write_reg(0X33, 0x83);   // int width                                                                                                                                           \r
-                hx3695_write_reg(0X38, 0x08);   // int sel,00=close almost full int,04=enable almost full int\r
-#elif defined(INT_MODE)             //(FIFO_ALL_MOST_FULL)\r
-                hx3695_write_reg(0X1b, 0x90);// bits<3:0> fifo data sel, 0000 = p1;0001= p2;0010=p3;\\r
-                                        0011=p4;0100=p5;0101=p6;0110=p7;\\r
-                                        bits<7> fifo enble\r
-                hx3695_write_reg(0X1c, (fifo_watermark&0xff));   //fifo_watermark\r
-                hx3695_write_reg(0X1d, fifo_watermark<<8);       //bit<0>=fifo_watermark[8]  \r
-                hx3695_write_reg(0X33, 0x83);   // int width                                                                                                                                           \r
-     hx3695_write_reg(0X38, 0x04);   // int sel,00=close almost full int,04=enable almost full int\r
-\r
-#else\r
-               hx3695_write_reg(0X1b, 0x90);// bits<3:0> fifo data sel, 0000 = p1;0001= p2;0010=p3;\\r
-                                        0011=p4;0100=p5;0101=p6;0110=p7;\\r
-                                        bits<7> fifo enble     \r
-     hx3695_write_reg(0X36, 0x00);                                                                                                                                                             \r
-                                                                                                                                               \r
-     hx3695_write_reg(0X38, 0x00);   // int sel,00=close almost full int,01= prf int  04=enable almost full int\r
-\r
-#endif\r
-\r
-               \r
-    hx3695_write_reg(0X26,(phase1_enable<<3)|(phase1_adc_osr)|(phase2_enable<<7)|(phase2_adc_osr<<4) ); \r
-    hx3695_write_reg(0X27,(phase3_enable<<3)|(phase3_adc_osr)|(phase4_enable<<7)|(phase4_adc_osr<<4) );  \r
-    hx3695_write_reg(0X28,(phase5_enable<<3)|(phase5_adc_osr)|(phase6_enable<<7)|(phase6_adc_osr<<4) );\r
-    hx3695_write_reg(0X29,(phase7_enable<<3)|(phase7_adc_osr)|(phase8_enable<<7)|(phase8_adc_osr<<4) );                \r
-\r
-    hx3695_write_reg(0X5c, 0x02);//soft reset\r
-    hx3695_delay_ms(5);  \r
-    hx3695_write_reg(0X5c, 0x00);//release\r
-//       uint8_t fifo_data_temp[3] = {0};\r
-//    hx3695_brust_read_reg(0x22, fifo_data_temp, 3); \r
-    read_fifo_first_flg = 1;\r
-    return ;\r
-}\r
-#endif\r
-\r
-#ifdef CHECK_TOUCH_LIB\r
-void hx3695_check_touch_init(void) //\r
-{     \r
-         uint16_t sample_rate = 5;                  /*config the data rate of chip alps2_fm ,uint is Hz*/\r
-    uint32_t prf_clk_num = 32000/sample_rate;   /*period in clk num, num = Fclk/fs */\r
-         \r
-    uint16_t fifo_watermark= 250 ;\r
-    uint8_t adc_rst_post_num= 0;       /* 00=16,01=32,10=64,11=128*/      \r
-         uint8_t samp_delay_leden_num = 0; /* 00=8,01=16,10=32,11=64*/ \r
-    uint8_t samp_copy_avg = 0;        /* 0=1, 1=2, 2=4 ,3=8, 4=16*/\r
-    uint8_t data_avg_num = 0;         /* 0 = 1 ; 1 = 2; 2 =4 ; 3 =8 ; 4 =16 ;*/\r
-         uint8_t phase7_8_internal = 0;   //0x18;    /* phase7 and phase8 prf internal cfg */\r
-       \r
-//       uint16_t  thred_value = 32500;\r
-       \r
-    uint8_t phase1_enable = 0;     /*phase1_enable  , 1 mean enable ; 0 mean disable */ \r
-    uint8_t phase2_enable = 0;     /*phase2_enable  , 1 mean enable ; 0 mean disable */ \r
-    uint8_t phase3_enable = 0;     /*phase3_enable  , 1 mean enable ; 0 mean disable */ \r
-    uint8_t phase4_enable = 0;     /*phase4_enable  , 1 mean enable ; 0 mean disable */\r
-    uint8_t phase5_enable = 0;     /*phase5_enable  , 1 mean enable ; 0 mean disable */ \r
-    uint8_t phase6_enable = 0;     /*phase6_enable  , 1 mean enable ; 0 mean disable */ \r
-    uint8_t phase7_enable = 1;     /*phase7_enable  , 1 mean enable ; 0 mean disable */        \r
-         uint8_t phase8_enable = 1;     /*phase8_enable  , 1 mean enable ; 0 mean disable */ \r
-\r
-    uint8_t phase1_adc_osr = 3;    /* 0 = 128 ; 1 = 256 ; 2 = 512 ; 3 = 1024 ; 4 = 2048*/\r
-    uint8_t phase2_adc_osr = 3;    /* 0 = 128 ; 1 = 256 ; 2 = 512 ; 3 = 1024 ; 4 = 2048*/\r
-    uint8_t phase3_adc_osr = 3;    /* 0 = 128 ; 1 = 256 ; 2 = 512 ; 3 = 1024 ; 4 = 2048*/\r
-    uint8_t phase4_adc_osr = 3;    /* 0 = 128 ; 1 = 256 ; 2 = 512 ; 3 = 1024 ; 4 = 2048*/\r
-               uint8_t phase5_adc_osr = 3;    /* 0 = 128 ; 1 = 256 ; 2 = 512 ; 3 = 1024 ; 4 = 2048*/\r
-         uint8_t phase6_adc_osr = 3;    /* 0 = 128 ; 1 = 256 ; 2 = 512 ; 3 = 1024 ; 4 = 2048*/\r
-               uint8_t phase7_adc_osr = 3;    /* 0 = 128 ; 1 = 256 ; 2 = 512 ; 3 = 1024 ; 4 = 2048*/\r
-               uint8_t phase8_adc_osr = 3;    /* 0 = 128 ; 1 = 256 ; 2 = 512 ; 3 = 1024 ; 4 = 2048*/\r
-                        \r
-         uint8_t phase1_mux_sel = 0;    /* sel phase1*/\r
-               uint8_t phase2_mux_sel = 1;    /* sel phase2*/\r
-               uint8_t phase3_mux_sel = 2;    /* sel phase3*/\r
-               uint8_t phase4_mux_sel = 3;    /* sel phase4*/\r
-               uint8_t phase5_mux_sel = 4;    /* sel phase5*/\r
-               uint8_t phase6_mux_sel = 5;    /* sel phase6*/\r
-               uint8_t phase7_mux_sel = 6;    /* sel phase7*/\r
-               uint8_t phase8_mux_sel = 7;    /* sel phase8*/\r
-       \r
-\r
-         uint8_t phase1_inner_avg = 0;   /* phase1 adc avg num 0=1, 1=2, 2=4, 3=8 , 4=16*/\r
-    uint8_t phase1_tia_res = 0;     /* 0= 10K; 1= 20k; 2= 50k; 3= 100k; 4= 150k; 5= 200k; 6= 500k; 7= 1M*/\r
-               uint8_t phase1_tia_cap = 4;     /* 0= ; 1= ; 2= ; 3= ; 4= ; 5= ; 6= ; 7= */\r
-    uint8_t phase1_led_drv1_cha_sel = 0;     /* 1 = ldr1  NG; 2 = ldr2   GR; 4 = ldr3  IR; 8 = ldr4 RED; */\r
-    uint8_t phase1_led_drv2_cha_sel = 0;    /*ldr5:0x20  ldr6: 0x40 red    ldr8 0x80  ir      */\r
-               uint8_t phase1_pd_sel = SPO2_PD;          /* 1 = pd1; 2 = pd2; 4 = pd3*/\r
-    uint8_t phase1_als_offset_idac = 0; /* 0~255 = 0 ~ 128ua , step = 0.5ua */\r
-               uint8_t phase1_led_offset_idac = 0; /* 0~255 = 0 ~ 64ua , step = 0.25ua */\r
-    uint8_t phase1_ldr1_cur = 0;     /* 0~255 = 0 ~ 200ma, step = 0.8ma */\r
-               uint8_t phase1_ldr2_cur = 0;\r
-//             uint8_t phase1_of_idac1_cur = 0;\r
-//    uint8_t phase1_of_idac2_cur = 0;\r
-    uint8_t phase1_ad_inr_ctrl = 3;\r
-    uint8_t phase1_ad_of_idac_ctrl = 0;\r
-//    uint8_t afe_offset  =  0;\r
-    uint8_t phase1_led_en = 1;      /* phase1 led enable*/\r
-               \r
-               uint8_t phase1_dsp_mov_avg_num = 0; /* 0=bypass ; 1=2 ; 2=4 ; 3=8 */\r
-    uint8_t phase1_dsp_iir_lp_coeff = 0; /* 0=bypass ; 1=1/2 ; 2=1/4 ; 3=1/8 ,...,7=1/128 */\r
-\r
-\r
-\r
-         uint8_t phase2_inner_avg = 0;   /* phase1 adc avg num 0=1, 1=2, 2=4, 3=8 , 4=16*/\r
-    uint8_t phase2_tia_res = 0;     /* 0= 10K; 1= 20k; 2= 50k; 3= 100k; 4= 150k; 5= 200k; 6= 500k; 7= 1M*/\r
-               uint8_t phase2_tia_cap = 4;     /* 0= ; 1= ; 2= ; 3= ; 4= ; 5= ; 6= ; 7= */\r
-    uint8_t phase2_led_drv1_cha_sel = 0;   //GREEN_LED_SLE;     /* 1 = ldr1; 2 = ldr2; 4 = ldr3; 8 = ldr4 ; */\r
-    uint8_t phase2_led_drv2_cha_sel = 0;\r
-               uint8_t phase2_pd_sel = SPO2_PD;      /* 1 = pd1; 2 = pd2; 4 = pd3*/\r
-    uint8_t phase2_als_offset_idac = 0; /* 0~255 = 0 ~ 128ua , step = 0.5ua */\r
-               uint8_t phase2_led_offset_idac = 0; /* 0~255 = 0 ~ 64ua , step = 0.25ua */\r
-    uint8_t phase2_ldr1_cur = 0;     /* 0~255 = 0 ~ 200ma, step = 0.8ma */\r
-               uint8_t phase2_ldr2_cur = 0;\r
-//             uint8_t phase2_of_idac1_cur = 0;\r
-//    uint8_t phase2_of_idac2_cur = 0;\r
-    uint8_t phase2_ad_inr_ctrl = 3;\r
-    uint8_t phase2_ad_of_idac_ctrl = 0;\r
-//    uint8_t phase2_afe_offset  =  0;\r
-    uint8_t phase2_led_en = 1;      /* phase1 led enable*/\r
-               \r
-               uint8_t phase2_dsp_mov_avg_num = 0; /* 0=bypass ; 1=2 ; 2=4 ; 3=8 */\r
-    uint8_t phase2_dsp_iir_lp_coeff = 0; /* 0=bypass ; 1=1/2 ; 2=1/4 ; 3=1/8 ,...,7=1/128 */\r
-\r
-               \r
-    uint8_t phase3_inner_avg = 0;   /* phase1 adc avg num 0=1, 1=2, 2=4, 3=8 , 4=16*/\r
-    uint8_t phase3_tia_res = 0;     /* 0= 10K; 1= 20k; 2= 50k; 3= 100k; 4= 150k; 5= 200k; 6= 500k; 7= 1M*/\r
-               uint8_t phase3_tia_cap = 4;     /* 0= ; 1= ; 2= ; 3= ; 4= ; 5= ; 6= ; 7= */\r
-    uint8_t phase3_led_drv1_cha_sel = 0;     //RED_LED_SLE;     /* 1 = ldr1; 2 = ldr2; 4 = ldr3; 8 = ldr4 ; */\r
-    uint8_t phase3_led_drv2_cha_sel = 0;\r
-               uint8_t phase3_pd_sel = SPO2_PD;      /* 1 = pd1; 2 = pd2; 4 = pd3*/\r
-    uint8_t phase3_als_offset_idac = 0; /* 0~255 = 0 ~ 128ua , step = 0.5ua */\r
-               uint8_t phase3_led_offset_idac = 0; /* 0~255 = 0 ~ 64ua , step = 0.25ua */\r
-    uint8_t phase3_ldr1_cur = 0;     /* 0~255 = 0 ~ 200ma, step = 0.8ma */\r
-               uint8_t phase3_ldr2_cur = 0;\r
-//             uint8_t phase3_of_idac1_cur = 0;\r
-//    uint8_t phase3_of_idac2_cur = 0;\r
-    uint8_t phase3_ad_inr_ctrl = 3;\r
-    uint8_t phase3_ad_of_idac_ctrl = 0;\r
-//    uint8_t phase3_afe_offset  =  0;\r
-    uint8_t phase3_led_en = 1;      /* phase1 led enable*/\r
-               \r
-               uint8_t phase3_dsp_mov_avg_num = 0; /* 0=bypass ; 1=2 ; 2=4 ; 3=8 */\r
-    uint8_t phase3_dsp_iir_lp_coeff = 0; /* 0=bypass ; 1=1/2 ; 2=1/4 ; 3=1/8 ,...,7=1/128 */\r
-\r
-               \r
-    uint8_t phase4_inner_avg = 0;   /* phase1 adc avg num 0=1, 1=2, 2=4, 3=8 , 4=16*/\r
-    uint8_t phase4_tia_res = 0;     /* 0= 10K; 1= 20k; 2= 50k; 3= 100k; 4= 150k; 5= 200k; 6= 500k; 7= 1M*/\r
-               uint8_t phase4_tia_cap = 4;     /* 0= ; 1= ; 2= ; 3= ; 4= ; 5= ; 6= ; 7= */\r
-    uint8_t phase4_led_drv1_cha_sel = 0;     /* 1 = ldr1; 2 = ldr2; 4 = ldr3; 8 = ldr4 ; */\r
-    uint8_t phase4_led_drv2_cha_sel = 0;\r
-               uint8_t phase4_pd_sel = SPO2_PD;      /* 1 = pd1; 2 = pd2; 4 = pd3*/\r
-    uint8_t phase4_als_offset_idac = 0; /* 0~255 = 0 ~ 128ua , step = 0.5ua */\r
-               uint8_t phase4_led_offset_idac = 0; /* 0~255 = 0 ~ 64ua , step = 0.25ua */\r
-    uint8_t phase4_ldr1_cur = 0;     /* 0~255 = 0 ~ 200ma, step = 0.8ma */\r
-               uint8_t phase4_ldr2_cur = 0;\r
-//             uint8_t phase4_of_idac1_cur = 0;\r
-//    uint8_t phase4_of_idac2_cur = 0;\r
-    uint8_t phase4_ad_inr_ctrl = 3;\r
-    uint8_t phase4_ad_of_idac_ctrl = 0;\r
-//    uint8_t phase4_afe_offset  =  0;\r
-    uint8_t phase4_led_en = 1;      /* phase1 led enable*/\r
-               \r
-               uint8_t phase4_dsp_mov_avg_num = 0; /* 0=bypass ; 1=2 ; 2=4 ; 3=8 */\r
-    uint8_t phase4_dsp_iir_lp_coeff = 0; /* 0=bypass ; 1=1/2 ; 2=1/4 ; 3=1/8 ,...,7=1/128 */\r
-\r
-    uint8_t phase5_inner_avg = 0;   /* phase1 adc avg num 0=1, 1=2, 2=4, 3=8 , 4=16*/\r
-    uint8_t phase5_tia_res = 0;     /* 0= 10K; 1= 20k; 2= 50k; 3= 100k; 4= 150k; 5= 200k; 6= 500k; 7= 1M*/\r
-               uint8_t phase5_tia_cap = 4;     /* 0= ; 1= ; 2= ; 3= ; 4= ; 5= ; 6= ; 7= */\r
-    uint8_t phase5_led_drv1_cha_sel = 0;     /* 1 = ldr1; 2 = ldr2; 4 = ldr3; 8 = ldr4 ; */\r
-    uint8_t phase5_led_drv2_cha_sel = 0;\r
-               uint8_t phase5_pd_sel = SPO2_PD;      /* 1 = pd1; 2 = pd2; */\r
-    uint8_t phase5_als_offset_idac = 0; /* 0~255 = 0 ~ 128ua , step = 0.5ua */\r
-               uint8_t phase5_led_offset_idac = 0; /* 0~255 = 0 ~ 64ua , step = 0.25ua */\r
-    uint8_t phase5_ldr1_cur = 0;     /* 0~255 = 0 ~ 200ma, step = 0.8ma */\r
-               uint8_t phase5_ldr2_cur = 0;\r
-//             uint8_t phase5_of_idac1_cur = 0;\r
-//    uint8_t phase5_of_idac2_cur = 0;\r
-    uint8_t phase5_ad_inr_ctrl = 3;\r
-    uint8_t phase5_ad_of_idac_ctrl = 0;\r
-//    uint8_t phase5_afe_offset  =  0;\r
-    uint8_t phase5_led_en = 1;      /* phase1 led enable*/\r
-               \r
-               uint8_t phase5_dsp_mov_avg_num = 0; /* 0=bypass ; 1=2 ; 2=4 ; 3=8 */\r
-    uint8_t phase5_dsp_iir_lp_coeff = 0; /* 0=bypass ; 1=1/2 ; 2=1/4 ; 3=1/8 ,...,7=1/128 */\r
-\r
-    uint8_t phase6_inner_avg = 0;   /* phase1 adc avg num 0=1, 1=2, 2=4, 3=8 , 4=16*/\r
-    uint8_t phase6_tia_res = 0;     /* 0= 10K; 1= 20k; 2= 50k; 3= 100k; 4= 150k; 5= 200k; 6= 500k; 7= 1M*/\r
-               uint8_t phase6_tia_cap = SPO2_PD;     /* 0= ; 1= ; 2= ; 3= ; 4= ; 5= ; 6= ; 7= */\r
-    uint8_t phase6_led_drv1_cha_sel = 0;     /* 1 = ldr1; 2 = ldr2; 4 = ldr3; 8 = ldr4 ; */\r
-    uint8_t phase6_led_drv2_cha_sel = 0;\r
-               uint8_t phase6_pd_sel = 4;      /* 1 = pd1; 2 = pd2; */\r
-    uint8_t phase6_als_offset_idac = 0; /* 0~255 = 0 ~ 128ua , step = 0.5ua */\r
-               uint8_t phase6_led_offset_idac = 0; /* 0~255 = 0 ~ 64ua , step = 0.25ua */\r
-    uint8_t phase6_ldr1_cur = 0;     /* 0~255 = 0 ~ 200ma, step = 0.8ma */\r
-               uint8_t phase6_ldr2_cur = 0;\r
-//             uint8_t phase6_of_idac1_cur = 0;\r
-//    uint8_t phase6_of_idac2_cur = 0;\r
-    uint8_t phase6_ad_inr_ctrl = 3;\r
-    uint8_t phase6_ad_of_idac_ctrl = 0;\r
-//    uint8_t phase6_afe_offset  =  0;\r
-    uint8_t phase6_led_en = 1;      /* phase1 led enable*/\r
-               \r
-               uint8_t phase6_dsp_mov_avg_num = 0; /* 0=bypass ; 1=2 ; 2=4 ; 3=8 */\r
-    uint8_t phase6_dsp_iir_lp_coeff = 0; /* 0=bypass ; 1=1/2 ; 2=1/4 ; 3=1/8 ,...,7=1/128 */\r
-\r
-    uint8_t phase7_inner_avg = 0;   /* phase1 adc avg num 0=1, 1=2, 2=4, 3=8 , 4=16*/\r
-    uint8_t phase7_tia_res = 0;     /* 0= 10K; 1= 20k; 2= 50k; 3= 100k; 4= 150k; 5= 200k; 6= 500k; 7= 1M*/\r
-               uint8_t phase7_tia_cap = 4;     /* 0= ; 1= ; 2= ; 3= ; 4= ; 5= ; 6= ; 7= */\r
-    uint8_t phase7_led_drv1_cha_sel = 0;     /* 1 = ldr1; 2 = ldr2; 4 = ldr3; 8 = ldr4 ; */\r
-    uint8_t phase7_led_drv2_cha_sel = 0;\r
-               uint8_t phase7_pd_sel = SPO2_PD;      /* 1 = pd1; 2 = pd2; */\r
-    uint8_t phase7_als_offset_idac = 0; /* 0~255 = 0 ~ 128ua , step = 0.5ua */\r
-               uint8_t phase7_led_offset_idac = 0; /* 0~255 = 0 ~ 64ua , step = 0.25ua */\r
-    uint8_t phase7_ldr1_cur = 0;     /* 0~255 = 0 ~ 200ma, step = 0.8ma */\r
-               uint8_t phase7_ldr2_cur = 0;\r
-//             uint8_t phase7_of_idac1_cur = 0;\r
-//    uint8_t phase7_of_idac2_cur = 0;\r
-    uint8_t phase7_ad_inr_ctrl = 3;\r
-    uint8_t phase7_ad_of_idac_ctrl = 0;\r
-//    uint8_t phase7_afe_offset  =  0;\r
-    uint8_t phase7_led_en = 1;      /* phase1 led enable*/\r
-               \r
-               uint8_t phase7_dsp_mov_avg_num = 0; /* 0=bypass ; 1=2 ; 2=4 ; 3=8 */\r
-    uint8_t phase7_dsp_iir_lp_coeff = 0; /* 0=bypass ; 1=1/2 ; 2=1/4 ; 3=1/8 ,...,7=1/128 */\r
-\r
-    uint8_t phase8_inner_avg = 0;   /* phase1 adc avg num 0=1, 1=2, 2=4, 3=8 , 4=16*/\r
-    uint8_t phase8_tia_res = 0;     /* 0= 10K; 1= 20k; 2= 50k; 3= 100k; 4= 150k; 5= 200k; 6= 500k; 7= 1M*/\r
-               uint8_t phase8_tia_cap = 4;     /* 0= ; 1= ; 2= ; 3= ; 4= ; 5= ; 6= ; 7= */\r
-    uint8_t phase8_led_drv1_cha_sel = IR_LED_SLE;//0x40;    //IR_LED_SLE    /* 1 = ldr1; 2 = ldr2; 4 = ldr3; 8 = ldr4 ; */\r
-    uint8_t phase8_led_drv2_cha_sel = 0;\r
-               uint8_t phase8_pd_sel = SPO2_PD;      /* 1 = pd1; 2 = pd2; */\r
-    uint8_t phase8_als_offset_idac = 0; /* 0~255 = 0 ~ 128ua , step = 0.5ua */\r
-               uint8_t phase8_led_offset_idac = 0; /* 0~255 = 0 ~ 64ua , step = 0.25ua */\r
-    uint8_t phase8_ldr1_cur = 32;     /* 0~255 = 0 ~ 200ma, step = 0.8ma */\r
-               uint8_t phase8_ldr2_cur = 0;\r
-//             uint8_t phase8_of_idac1_cur = 0;\r
-//    uint8_t phase8_of_idac2_cur = 0;\r
-    uint8_t phase8_ad_inr_ctrl = 3;\r
-    uint8_t phase8_ad_of_idac_ctrl = 0;\r
-//    uint8_t phase8_afe_offset  =  0;\r
-    uint8_t phase8_led_en = 1;      /* phase1 led enable*/\r
-               \r
-               uint8_t phase8_dsp_mov_avg_num = 0; /* 0=bypass ; 1=2 ; 2=4 ; 3=8 */\r
-    uint8_t phase8_dsp_iir_lp_coeff = 0; /* 0=bypass ; 1=1/2 ; 2=1/4 ; 3=1/8 ,...,7=1/128 */\r
-\r
-    uint8_t init_wait_delay = 4 ; /* 0 = 31clk ; 1 = 64clk ; 2 = 127clk ; 3 = 255clk(d) ;\r
-                                     4 = 511clk; 5 = 1023clk; 6 = 2047; 7 = 4095clk */         \r
-                                                                                                                                                \r
-    uint8_t afe_reset = 3;        /* 0 = 15clk ; 1 = 31clk ; 2 = 63clk ; 3 = 127clk(d) ;\r
-                                     4 = 255clk; 5 = 511clk; 6 = 1024; 7 = 2047clk */\r
-                                                                                                                                                \r
-               uint8_t afe_rst_cnvt = 1;               /* 0 = 15clk ; 1 = 31clk ; 2 = 63clk ; 3 = 127clk(d)*/\r
-    \r
-    uint8_t led_en_idac_pre    = 2;    /* 0 = 8clk ; 1 = 16clk ; 2 = 32clk ; 3 = 64clk(d)*/ \r
-               \r
-               uint8_t led_en_idac     =       1;        /* 0 = 4clk ; 1 = 8clk ; 2 = 16clk ; 3 = 32clk(d)*/ \r
-                                                                                                                                                \r
-    uint8_t led_on_time = 2;      /* 0 = 32clk=8us ; 1 = 64clk=16us; 2=128clk=32us ; 3 = 256clk=64us ;\r
-                                     4 = 512clk=128us ; 5 = 1024clk=256us; 6= 2048clk=512us; 7 = 4096clk=1024us */\r
-                                                                                                                                                \r
-    hx3695_delay_ms(10);               \r
-                       \r
-    hx3695_write_reg(0X2a, (uint8_t)prf_clk_num);    // prf bit<7:0>6\r
-    hx3695_write_reg(0X2b, (uint8_t)(prf_clk_num>>8)); // prf bit<15:8>\r
-    hx3695_write_reg(0X2c, (uint8_t)(prf_clk_num>>16)); // prf bit<23:16>      \r
-                  \r
-    hx3695_write_reg(0X25, (afe_rst_cnvt<<4| led_en_idac_pre<<2|led_en_idac)); \r
-               hx3695_write_reg(0X2d, phase7_8_internal); \r
-               hx3695_write_reg(0X2e, 0x33);// gpio ctrl \r
-    hx3695_write_reg(0X2f, ((afe_reset<<4)| init_wait_delay));\r
-               hx3695_write_reg(0X30, (phase8_led_en<<7 | phase7_led_en<<6 |phase6_led_en<<5 |phase5_led_en<<4 |phase4_led_en<<3 | phase3_led_en<<2 | phase2_led_en<<1 | phase1_led_en) );\r
-    hx3695_write_reg(0X72, (phase8_led_en<<7 | phase7_led_en<<6 |phase6_led_en<<5 |phase5_led_en<<4 |phase4_led_en<<3 | phase3_led_en<<2 | phase2_led_en<<1 | phase1_led_en) );\r
-\r
-\r
-    hx3695_write_reg(0X31, (led_on_time<<4| 0x00));\r
-               hx3695_write_reg(0X33, 0x83);// 中断极性及宽度配置;\r
-               hx3695_write_reg(0X34, 0x00);// 中断特殊配置;\r
-               hx3695_write_reg(0X36, 0x00);// phase data ready 标志设置;\r
-               hx3695_write_reg(0X38, 0x00);\r
-               \r
-    hx3695_write_reg(0X3a, (phase1_inner_avg | (phase2_inner_avg<<4)));  \r
-    hx3695_write_reg(0X3b, (phase3_inner_avg | (phase4_inner_avg<<4)));  \r
-    hx3695_write_reg(0X3c, (phase5_inner_avg | (phase6_inner_avg<<4)));        \r
-    hx3695_write_reg(0X3d, (phase7_inner_avg | (phase8_inner_avg<<4)));        \r
-    hx3695_write_reg(0X3e, adc_rst_post_num<<6 | samp_delay_leden_num<<4 | samp_copy_avg); \r
-    hx3695_write_reg(0X3f, data_avg_num<<4 | data_avg_num );\r
-    hx3695_write_reg(0X40, data_avg_num<<4 | data_avg_num );\r
-               hx3695_write_reg(0X41, data_avg_num<<4 | data_avg_num );\r
-               hx3695_write_reg(0X42, data_avg_num<<4 | data_avg_num );\r
-               \r
-               hx3695_write_reg(0X43, phase1_mux_sel);  \r
-               hx3695_write_reg(0X44, phase1_tia_cap<<4|phase1_tia_res); \r
-               hx3695_write_reg(0X45, phase1_ldr1_cur);    //LED_DRV1_CUR\r
-               hx3695_write_reg(0x70, phase1_ldr2_cur);   //ps8--ps1  led_drv2_cur\r
-               hx3695_write_reg(0X46, (phase1_pd_sel<<4 | 0x00));\r
-               hx3695_write_reg(0X47, phase1_als_offset_idac);\r
-               hx3695_write_reg(0X48, phase1_led_offset_idac);\r
-    hx3695_write_reg(0X49, phase1_ad_inr_ctrl<<4|phase1_ad_of_idac_ctrl); \r
-               hx3695_write_reg(0X4a, phase1_led_drv1_cha_sel);\r
-               hx3695_write_reg(0X4b, phase1_led_drv2_cha_sel);\r
-               hx3695_write_reg(0X71, phase1_dsp_mov_avg_num | phase1_dsp_iir_lp_coeff<<4);\r
-\r
-       \r
-    hx3695_write_reg(0X43, phase2_mux_sel);  \r
-               hx3695_write_reg(0X44, phase2_tia_cap<<4|phase2_tia_res); \r
-               hx3695_write_reg(0X45, phase2_ldr1_cur);    //LED_DRV1_CUR\r
-               hx3695_write_reg(0x70, phase2_ldr2_cur);   //ps8--ps1  led_drv2_cur\r
-               hx3695_write_reg(0X46, (phase2_pd_sel<<4 | 0x00));\r
-               hx3695_write_reg(0X47, phase2_als_offset_idac);\r
-               hx3695_write_reg(0X48, phase2_led_offset_idac);\r
-//             hx3695_write_reg(0X48, phase1_led_offset_idac);\r
-    hx3695_write_reg(0X49,  phase2_ad_inr_ctrl<<4|phase2_ad_of_idac_ctrl); \r
-               hx3695_write_reg(0X4a, phase2_led_drv1_cha_sel);\r
-               hx3695_write_reg(0X4b, phase2_led_drv2_cha_sel);\r
-               hx3695_write_reg(0X71, phase2_dsp_mov_avg_num | phase2_dsp_iir_lp_coeff<<4);\r
-               \r
-//phase3 sel\r
-\r
-    hx3695_write_reg(0X43, phase3_mux_sel);  \r
-               hx3695_write_reg(0X44, phase3_tia_cap<<4|phase3_tia_res); \r
-               hx3695_write_reg(0X45, phase3_ldr1_cur);    //LED_DRV1_CUR\r
-               hx3695_write_reg(0x70, phase3_ldr2_cur);   //ps8--ps1  led_drv2_cur\r
-               hx3695_write_reg(0X46, (phase3_pd_sel<<4 | 0x00));\r
-               hx3695_write_reg(0X47, phase3_als_offset_idac);\r
-               hx3695_write_reg(0X48, phase3_led_offset_idac);\r
-//             hx3695_write_reg(0X48, phase1_led_offset_idac);\r
-    hx3695_write_reg(0X49,  phase3_ad_inr_ctrl<<4|phase3_ad_of_idac_ctrl); \r
-               hx3695_write_reg(0X4a, phase3_led_drv1_cha_sel);\r
-               hx3695_write_reg(0X4b, phase3_led_drv2_cha_sel);\r
-               hx3695_write_reg(0X71, phase3_dsp_mov_avg_num | phase3_dsp_iir_lp_coeff<<4);\r
-               \r
-//phase4 sel\r
-\r
-    hx3695_write_reg(0X43, phase4_mux_sel);  \r
-               hx3695_write_reg(0X44, phase4_tia_cap<<4|phase4_tia_res); \r
-               hx3695_write_reg(0X45, phase4_ldr1_cur);    //LED_DRV1_CUR\r
-               hx3695_write_reg(0x70, phase4_ldr2_cur);   //ps8--ps1  led_drv2_cur\r
-               hx3695_write_reg(0X46, (phase4_pd_sel<<4 | 0x00));\r
-               hx3695_write_reg(0X47, phase4_als_offset_idac);\r
-               hx3695_write_reg(0X48, phase4_led_offset_idac);\r
-//             hx3695_write_reg(0X48, phase1_led_offset_idac);\r
-    hx3695_write_reg(0X49,  phase4_ad_inr_ctrl<<4|phase4_ad_of_idac_ctrl); \r
-               hx3695_write_reg(0X4a, phase4_led_drv1_cha_sel);\r
-               hx3695_write_reg(0X4b, phase4_led_drv2_cha_sel);\r
-               hx3695_write_reg(0X71, phase4_dsp_mov_avg_num | phase4_dsp_iir_lp_coeff<<4);\r
-\r
-               hx3695_write_reg(0X43, phase5_mux_sel);  \r
-               hx3695_write_reg(0X44, phase5_tia_cap<<4|phase5_tia_res); \r
-               hx3695_write_reg(0X45, phase5_ldr1_cur);    //LED_DRV1_CUR\r
-               hx3695_write_reg(0x70, phase5_ldr2_cur);   //ps8--ps1  led_drv2_cur\r
-               hx3695_write_reg(0X46, (phase5_pd_sel<<4 | 0x00));\r
-               hx3695_write_reg(0X47, phase5_als_offset_idac);\r
-               hx3695_write_reg(0X48, phase5_led_offset_idac);\r
-//             hx3695_write_reg(0X48, phase1_led_offset_idac);\r
-    hx3695_write_reg(0X49,  phase5_ad_inr_ctrl<<4|phase5_ad_of_idac_ctrl); \r
-               hx3695_write_reg(0X4a, phase5_led_drv1_cha_sel);\r
-               hx3695_write_reg(0X4b, phase5_led_drv2_cha_sel);\r
-               hx3695_write_reg(0X71, phase5_dsp_mov_avg_num | phase5_dsp_iir_lp_coeff<<4);\r
-               \r
-               \r
-         hx3695_write_reg(0X43, phase6_mux_sel);  \r
-               hx3695_write_reg(0X44, phase6_tia_cap<<4|phase6_tia_res); \r
-               hx3695_write_reg(0X45, phase6_ldr1_cur);    //LED_DRV1_CUR\r
-               hx3695_write_reg(0x70, phase6_ldr2_cur);   //ps8--ps1  led_drv2_cur\r
-               hx3695_write_reg(0X46, (phase6_pd_sel<<4 | 0x00));\r
-               hx3695_write_reg(0X47, phase6_als_offset_idac);\r
-               hx3695_write_reg(0X48, phase6_led_offset_idac);\r
-//             hx3695_write_reg(0X48, phase6_led_offset_idac);\r
-    hx3695_write_reg(0X49,  phase6_ad_inr_ctrl<<4|phase6_ad_of_idac_ctrl); \r
-               hx3695_write_reg(0X4a, phase6_led_drv1_cha_sel);\r
-               hx3695_write_reg(0X4b, phase6_led_drv2_cha_sel);\r
-               hx3695_write_reg(0X71, phase6_dsp_mov_avg_num | phase6_dsp_iir_lp_coeff<<4);\r
-               \r
-       \r
-         hx3695_write_reg(0X43, phase7_mux_sel);  \r
-               hx3695_write_reg(0X44, phase7_tia_cap<<4|phase7_tia_res); \r
-               hx3695_write_reg(0X45, phase7_ldr1_cur);    //LED_DRV1_CUR\r
-               hx3695_write_reg(0x70, phase7_ldr2_cur);   //ps8--ps1  led_drv2_cur\r
-               hx3695_write_reg(0X46, (phase7_pd_sel<<4 | 0x00));\r
-               hx3695_write_reg(0X47, phase7_als_offset_idac);\r
-               hx3695_write_reg(0X48, phase7_led_offset_idac);\r
-//             hx3695_write_reg(0X48, phase7_led_offset_idac);\r
-    hx3695_write_reg(0X49,  phase7_ad_inr_ctrl<<4|phase7_ad_of_idac_ctrl); \r
-               hx3695_write_reg(0X4a, phase7_led_drv1_cha_sel);\r
-               hx3695_write_reg(0X4b, phase7_led_drv2_cha_sel);\r
-               hx3695_write_reg(0X71, phase7_dsp_mov_avg_num | phase7_dsp_iir_lp_coeff<<4);\r
-               \r
-       \r
-         hx3695_write_reg(0X43, phase8_mux_sel);  \r
-               hx3695_write_reg(0X44, phase8_tia_cap<<4|phase8_tia_res); \r
-               hx3695_write_reg(0X45, phase8_ldr1_cur);    //LED_DRV1_CUR\r
-               hx3695_write_reg(0x70, phase8_ldr2_cur);   //ps8--ps1  led_drv2_cur\r
-               hx3695_write_reg(0X46, (phase8_pd_sel<<4 | 0x00));\r
-               hx3695_write_reg(0X47, phase8_als_offset_idac);\r
-               hx3695_write_reg(0X48, phase8_led_offset_idac);\r
-//             hx3695_write_reg(0X48, phas8_led_offset_idac);\r
-    hx3695_write_reg(0X49,  phase8_ad_inr_ctrl<<4|phase8_ad_of_idac_ctrl); \r
-               hx3695_write_reg(0X4a, phase8_led_drv1_cha_sel);\r
-               hx3695_write_reg(0X4b, phase8_led_drv2_cha_sel);\r
-               hx3695_write_reg(0X71, phase8_dsp_mov_avg_num | phase8_dsp_iir_lp_coeff<<4);\r
-               \r
-\r
-// analog circuit cfg \r
-    hx3695_write_reg(0X60, 0x14);      //\r
-               hx3695_write_reg(0X61, 0xf0);   \r
-               hx3695_write_reg(0X62, 0x22); \r
-               hx3695_write_reg(0X63, 0x15); \r
-                                                                                                                                                                                                                               \r
-               hx3695_write_reg(0X64, 0x08);   \r
-               hx3695_write_reg(0X65, 0x88); //bug\r
-               \r
-               hx3695_write_reg(0X66, 0x30);   // bits<3>=adc selftest en     0x30\r
-               hx3695_write_reg(0X67, 0x23);   \r
-               hx3695_write_reg(0X68, 0x46);   \r
-               hx3695_write_reg(0X69, 0x42);   \r
-               \r
-               hx3695_write_reg(0X39, 0xff);   // ofset idac1 phase enable cfg\r
-               hx3695_write_reg(0x73, 0xff);    //led_offset_idac phase enable\r
-               \r
-    hx3695_write_reg(0X6a, 0X0f);      \r
-               hx3695_write_reg(0X6b, 0X22);   \r
-               hx3695_write_reg(0X6c, 0X00);   \r
-               hx3695_write_reg(0X6d, 0X37);   \r
-               hx3695_write_reg(0X6e, 0X82);   \r
-    hx3695_write_reg(0X6f, 0X00);\r
-/////////FIFO and adc conversion ready config////////\r
-/////////FIFO and adc conversion ready config////////\r
-#if defined(PPG_INT_MODE)\r
-               hx3695_write_reg(0X1b, 0x90);// bits<3:0> fifo data sel, 0000 = p1;0001= p2;0010=p3;\\r
-                                        0011=p4;0100=p5;0101=p6;0110=p7;\\r
-                                        bits<7> fifo enble\r
-                hx3695_write_reg(0X33, 0x83);   // int width                                                                                                                                           \r
-    hx3695_write_reg(0X38, 0x01);   // int sel,00=close almost full int,04=enable almost full int\r
-#elif defined(INT_MODE)             //(FIFO_ALL_MOST_FULL)\r
-                hx3695_write_reg(0X1b, 0x92);// bits<3:0> fifo data sel, 0000 = p1;0001= p2;0010=p3;\\r
-                                        0011=p4;0100=p5;0101=p6;0110=p7;\\r
-                                        bits<7> fifo enble\r
-                hx3695_write_reg(0X1c, (fifo_watermark&0xff));   //fifo_watermark\r
-                hx3695_write_reg(0X1d, fifo_watermark<<8);       //bit<0>=fifo_watermark[8]  \r
-                hx3695_write_reg(0X33, 0x83);   // int width                                                                                                                                           \r
-     hx3695_write_reg(0X38, 0x04);   // int sel,00=close almost full int,04=enable almost full int\r
-\r
-#else\r
-               hx3695_write_reg(0X1b, 0x92);\r
-\r
-     hx3695_write_reg(0X36, 0x00);                                                                                                                     \r
-                                                                                                                                               \r
-     hx3695_write_reg(0X38, 0x00);   // int sel,00=close almost full int,01= prf int  04=enable almost full int\r
-\r
-#endif\r
-\r
-               \r
-    hx3695_write_reg(0X26,(phase1_enable<<3)|(phase1_adc_osr)|(phase2_enable<<7)|(phase2_adc_osr<<4) ); \r
-    hx3695_write_reg(0X27,(phase3_enable<<3)|(phase3_adc_osr)|(phase4_enable<<7)|(phase4_adc_osr<<4) );  \r
-    hx3695_write_reg(0X28,(phase5_enable<<3)|(phase5_adc_osr)|(phase6_enable<<7)|(phase6_adc_osr<<4) );\r
-    hx3695_write_reg(0X29,(phase7_enable<<3)|(phase7_adc_osr)|(phase8_enable<<7)|(phase8_adc_osr<<4) );                \r
-\r
-    hx3695_write_reg(0X5c, 0x02);//soft reset\r
-    hx3695_delay_ms(5);  \r
-    hx3695_write_reg(0X5c, 0x00);//release\r
-//       uint8_t fifo_data_temp[3] = {0};\r
-//    hx3695_brust_read_reg(0x22, fifo_data_temp, 3); \r
-    read_fifo_first_flg = 1;\r
-    return ;\r
-}\r
-#endif\r
-\r
-// 初始化调用入口函数\r
-bool hx3695_init(WORK_MODE_T mode)\r
-{\r
-  // hx3695_msg_callback_t func;\r
-\r
-\r
-       //TYHX_LOG("this chip hx3695_init  mode: %d !! \r\n", mode);\r
-       \r
-       hx3695_ppg_on();\r
-\r
-    Efuse_judge();  //MC前后芯片判断\r
-    //    Efuse_Mode_Check();\r
-    work_mode_flag = mode;\r
-    hx3695_data_reset();\r
-    hx3695_vin_check(3800);\r
-    switch (work_mode_flag)\r
-    {\r
-    case HRS_MODE:\r
-               //TYHX_LOG(" hx3695_init mode : HRS_MODE \n");\r
-#ifdef HRS_ALG_LIB\r
-                               tyhx_hrs_set_living(1, 15, 30);\r
-        if(hx3695_hrs_enable()== SENSOR_OP_FAILED)\r
-        {\r
-            return false;\r
-        }\r
-#endif\r
-        break;\r
-\r
-    case LIVING_MODE:\r
-#ifdef CHECK_LIVING_LIB\r
-        if(hx3695_hrs_enable()== SENSOR_OP_FAILED)\r
-        {\r
-            return false;\r
-        }\r
-#endif\r
-        break;\r
-\r
-    case SPO2_MODE:\r
-#ifdef SPO2_DATA_CALI\r
-//        hx3695_spo2_data_cali_init();\r
-#endif\r
-\r
-#ifdef SPO2_ALG_LIB\r
-        tyhx_spo2_para_usuallyadjust(SPO2_LOW_XCORR_THRE,SPO2_LOW_SNR_THRE,COUNT_BLOCK_NUM,SPO2_BASE_LINE_INIT,SPO2_SLOPE,SPO2_GSEN_POW_THRE);\r
-        tyhx_spo2_para_barelychange(MEAN_NUM,SOP2_DEGLITCH_THRE,SPO2_REMOVE_JUMP_THRE, \\r
-                                    SPO2_LOW_CLIP_END_TIME,SPO2_LOW_CLIP_DN,SPO2_NORMAL_CLIP_DN, \\r
-                                    IR_AC_TOUCH_THRE,IR_FFT_POW_THRE,SPO2_CALI,SLOPE_PARA_MAX,SLOPE_PARA_MIN);\r
-                               tyhx_spo2_set_living(1, 7, 20);\r
-        if(hx3695_spo2_enable()== SENSOR_OP_FAILED)\r
-        {\r
-            return false;\r
-        }\r
-#endif\r
-        break;\r
-\r
-    case HRSPO2_MODE:\r
-#if defined(HRS_ALG_LIB) && defined (SPO2_ALG_LIB)\r
-        tyhx_spo2_para_usuallyadjust(SPO2_LOW_XCORR_THRE,SPO2_LOW_SNR_THRE,COUNT_BLOCK_NUM,SPO2_BASE_LINE_INIT,SPO2_SLOPE,SPO2_GSEN_POW_THRE);\r
-        tyhx_spo2_para_barelychange(MEAN_NUM,SOP2_DEGLITCH_THRE,SPO2_REMOVE_JUMP_THRE, \\r
-                                    SPO2_LOW_CLIP_END_TIME,SPO2_LOW_CLIP_DN,SPO2_NORMAL_CLIP_DN, \\r
-                                    IR_AC_TOUCH_THRE,IR_FFT_POW_THRE,SPO2_CALI,SLOPE_PARA_MAX,SLOPE_PARA_MIN);\r
-        if(hx3695_spo2_enable()== SENSOR_OP_FAILED)\r
-        {\r
-            return false;\r
-        }\r
-#endif\r
-\r
-    case HRV_MODE:\r
-#ifdef HRV_ALG_LIB\r
-        if(hx3695_hrv_enable()== SENSOR_OP_FAILED)\r
-        {\r
-            return false;\r
-        }\r
-#endif\r
-        break;\r
-\r
-    case WEAR_MODE:\r
-#ifdef CHECK_TOUCH_LIB\r
-        if(hx3695_check_touch_enable()== SENSOR_OP_FAILED)\r
-        {\r
-            return false;\r
-        }\r
-#endif\r
-        break;\r
-\r
-    case FT_LEAK_LIGHT_MODE:\r
-        if (!hx3695_chip_check())\r
-        {\r
-            AGC_LOG("hx3695 check id failed!\r\n");\r
-            return false;\r
-        }\r
-        //TYHX_LOG(" hx3695_init mode : LEAK_LIGHT_MODE \n");\r
-        hx3695_factroy_test(LEAK_LIGHT_TEST);\r
-\r
-        // func =  hx3695_get_send_msg_callback_func();\r
-        // if(func != NULL)\r
-        // {\r
-        //   func(HX3695_MSG_TYPE_LEAKLIGHT_UPDATE,&hrsresult,sizeof(FT_CUSTOM_RESULTS_t));\r
-        // }\r
-        break;\r
-\r
-    case FT_GRAY_CARD_MODE:\r
-        if (!hx3695_chip_check())\r
-        {\r
-            AGC_LOG("hx3695 check id failed!\r\n");\r
-            return false;\r
-        }\r
-        //TYHX_LOG(" hx3695_init mode : GRAY_CARD_MODE \n");\r
-        hx3695_factroy_test(GRAY_CARD_TEST);\r
-\r
-        // func =  hx3695_get_send_msg_callback_func();\r
-        // if(func != NULL)\r
-        // {\r
-        //   func(HX3695_MSG_TYPE_GRAYCARD_UPDATE,&hrsresult,sizeof(FT_CUSTOM_RESULTS_t));\r
-        // }\r
-        break;\r
-\r
-    case FT_INT_TEST_MODE:\r
-        hx3695_factroy_test(FT_INT_TEST);\r
-        break;\r
-\r
-    case FT_SINGLE_CHECK_MODE:\r
-         if (!hx3695_chip_check())\r
-        {\r
-            AGC_LOG("hx3695 check id failed!\r\n");\r
-            return false;\r
-        }\r
-        hx3695_factroy_test(SINGLE_CHECK_TEST);\r
-        break;\r
-\r
-    case FT_LED_OFF_MODE:\r
-        //TYHX_LOG(" hx3695_init mode : FT_LED_OFF_MODE \n");\r
-        hx3695_factroy_test(LED_OFF_TEST);\r
-        break;\r
-     \r
-    case FT_WEAR_MODE:\r
-        hx3695_factroy_test(WEAR_MODE_TEST);\r
-        break;\r
-  //  case NEW_PPG_TEST_MODE:\r
-  //       hx3695_factroy_test(NEW_PPG_TEST);\r
-  //       break;\r
-    case LAB_TEST_MODE:\r
-#ifdef LAB_TEST\r
-        if(hx3695_lab_test_enable()== SENSOR_OP_FAILED)\r
-        {\r
-            return false;\r
-        }\r
-#endif\r
-        break;\r
-\r
-    default:\r
-        break;\r
-    }\r
-    return true;\r
-}\r
-\r
-void hx3695_agc_Int_handle(void)\r
-{\r
-       //TYHX_LOG(" hx3695_init mode : HRS_MODE \n");\r
-    switch (work_mode_flag)\r
-    {\r
-    case HRS_MODE:\r
-#ifdef HRS_ALG_LIB\r
-        PPG_hrs_agc();\r
-#endif\r
-        break;\r
-\r
-    case LIVING_MODE:\r
-#ifdef HRS_ALG_LIB\r
-        PPG_hrs_agc();\r
-#endif\r
-        break;\r
-\r
-    case HRV_MODE:\r
-#ifdef HRV_ALG_LIB\r
-        PPG_hrv_agc();\r
-#endif\r
-        break;\r
-\r
-    case SPO2_MODE:\r
-#ifdef SPO2_ALG_LIB\r
-        PPG_spo2_agc();\r
-#endif\r
-        break;\r
-\r
-    case HRSPO2_MODE:\r
-#if defined(HRS_ALG_LIB) && defined (SPO2_ALG_LIB)\r
-        PPG_spo2_agc();\r
-#endif\r
-\r
-    case LAB_TEST_MODE:\r
-#ifdef LAB_TEST\r
-        hx3695_lab_test_Int_handle();\r
-#endif\r
-\r
-    default:\r
-        break;\r
-    }\r
-}\r
-\r
-void agc_timeout_handler(void * p_context)\r
-{\r
-    hx3695_agc_Int_handle();\r
-\r
-#if defined(GSEN_40MS_TIMMER)\r
-    hx3695_gesensor_Int_handle();\r
-#endif\r
-}\r
-\r
-static uint32_t ft_ppg_green = 0;\r
-static uint32_t ft_ppg_iir = 0;\r
-\r
-void hx3695_factory_test_process(uint8_t data[], uint8_t mode, uint8_t* ppg_src)\r
-{\r
-       extern bool factory_test_flag;\r
-       extern bool factory_test_sensor_on;\r
-       extern bool factory_test_aging;\r
-               \r
-       if(factory_test_flag == false) return;\r
-       if(factory_test_sensor_on == true ) return;\r
-       \r
-       static uint8_t ppg_data[15] = {0};\r
-       uint32_t test = 0;\r
-//     uint32_t green = 0;\r
-//     uint32_t red = 0;\r
-//     uint32_t iir = 0;\r
-\r
-       if(data != NULL && ppg_src == NULL)\r
-       {\r
-               memcpy(ppg_data, data, 3);\r
-               return;\r
-       }\r
-//     switch(mode)\r
-//     {\r
-//             case APP_FACTORY_TEST_HR_START:\r
-//                     ppg_data[3] = *(ppg_src + 3);\r
-//                     ppg_data[4] = *(ppg_src + 2);\r
-//                     ppg_data[5] = *(ppg_src + 1);\r
-//                     ppg_data[6] = *(ppg_src + 0);\r
-                       \r
-//                     ppg_data[7] = *(ppg_src + 7);\r
-//                     ppg_data[8] = *(ppg_src + 6);\r
-//                     ppg_data[9] = *(ppg_src + 5);\r
-//                     ppg_data[10] = *(ppg_src + 4);\r
-\r
-//                     ppg_data[11] = *(ppg_src + 11);\r
-//                     ppg_data[12] = *(ppg_src + 10);\r
-//                     ppg_data[13] = *(ppg_src + 9);\r
-//                     ppg_data[14] = *(ppg_src + 8);\r
-                       \r
-//                     factory_test_send_data(ppg_data, 15);\r
-//             break;\r
-//             case APP_FACTORY_TEST_SPO2_START:\r
-//                     ppg_data[3] = *(ppg_src + 3);\r
-//                     ppg_data[4] = *(ppg_src + 2);\r
-//                     ppg_data[5] = *(ppg_src + 1);\r
-//                     ppg_data[6] = *(ppg_src + 0);\r
-                       \r
-//                     ppg_data[7] = *(ppg_src + 7);\r
-//                     ppg_data[8] = *(ppg_src + 6);\r
-//                     ppg_data[9] = *(ppg_src + 5);\r
-//                     ppg_data[10] = *(ppg_src + 4);\r
-\r
-//                     ppg_data[11] = *(ppg_src + 11);\r
-//                     ppg_data[12] = *(ppg_src + 10);\r
-//                     ppg_data[13] = *(ppg_src + 9);\r
-//                     ppg_data[14] = *(ppg_src + 8);          \r
-\r
-//                     factory_test_send_data(ppg_data, 15);\r
-//             break;\r
-//             case APP_FACTORY_TEST_LEAKING_START:\r
-// //                  memcpy((void *)&ppg_data[3], ppg_src, 12);\r
-\r
-//                     ppg_data[3] = *(ppg_src + 3);\r
-//                     ppg_data[4] = *(ppg_src + 2);\r
-//                     ppg_data[5] = *(ppg_src + 1);\r
-//                     ppg_data[6] = *(ppg_src + 0);\r
-                       \r
-//                     ppg_data[7] = *(ppg_src + 7);\r
-//                     ppg_data[8] = *(ppg_src + 6);\r
-//                     ppg_data[9] = *(ppg_src + 5);\r
-//                     ppg_data[10] = *(ppg_src + 4);\r
-\r
-//                     ppg_data[11] = *(ppg_src + 11);\r
-//                     ppg_data[12] = *(ppg_src + 10);\r
-//                     ppg_data[13] = *(ppg_src + 9);\r
-//                     ppg_data[14] = *(ppg_src + 8);\r
-\r
-\r
-//                     gui_send_message_by_data(MSG_FACTORY_TEST_UPDATE_HR, ppg_src, 12);\r
-//                     if(factory_test_aging) break;\r
-//                     factory_test_send_data(ppg_data, 15);\r
-//             break;\r
-//             case APP_FACTORY_TEST_GRAY_CARD:\r
-//             {\r
-// //                  memcpy((void *)&ppg_data[3], ppg_src, 12);\r
-//                     ppg_data[3] = *(ppg_src + 3);\r
-//                     ppg_data[4] = *(ppg_src + 2);\r
-//                     ppg_data[5] = *(ppg_src + 1);\r
-//                     ppg_data[6] = *(ppg_src + 0);\r
-                       \r
-//                     ppg_data[7] = *(ppg_src + 7);\r
-//                     ppg_data[8] = *(ppg_src + 6);\r
-//                     ppg_data[9] = *(ppg_src + 5);\r
-//                     ppg_data[10] = *(ppg_src + 4);\r
-\r
-//                     ppg_data[11] = *(ppg_src + 11);\r
-//                     ppg_data[12] = *(ppg_src + 10);\r
-//                     ppg_data[13] = *(ppg_src + 9);\r
-//                     ppg_data[14] = *(ppg_src + 8);\r
-                       \r
-//                     gui_send_message_by_data(MSG_FACTORY_TEST_UPDATE_HR, ppg_src, 12);\r
-//                     if(factory_test_aging) break;\r
-//                     factory_test_send_data(ppg_data, 15);\r
-//             }       \r
-//             break;\r
-//             default:\r
-//             break;\r
-//     }\r
-}\r
-\r
-\r
-typedef struct { \r
-    int32_t gr_data_final;\r
-    int32_t red_data_final;\r
-    int32_t ir_data_final;\r
-} ft_test_result_t;\r
-\r
-void wear_mode_timeout_handler(void * p_context)\r
-{\r
-    if(work_mode_flag == WEAR_MODE)\r
-    {\r
-        #ifdef CHECK_TOUCH_LIB\r
-          hx3695_wear_ppg_Int_handle(); \r
-        #endif\r
-    }\r
-}\r
-\r
-\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
-       \r
-    switch(work_mode_flag)\r
-    {\r
-    case HRS_MODE:\r
-#ifdef HRS_ALG_LIB\r
-        hx3695_hrs_ppg_Int_handle();\r
-#endif\r
-        break;\r
-\r
-    case HRV_MODE:\r
-#ifdef HRV_ALG_LIB\r
-        hx3695_hrv_ppg_Int_handle();\r
-#endif\r
-        break;\r
-\r
-    case SPO2_MODE:\r
-#ifdef SPO2_ALG_LIB\r
-        hx3695_spo2_ppg_Int_handle();\r
-#endif\r
-        break;\r
-\r
-    case LIVING_MODE:\r
-#ifdef CHECK_LIVING_LIB\r
-        hx3695_living_Int_handle();\r
-#endif\r
-        break;\r
-\r
-    case HRSPO2_MODE:\r
-#if defined(HRS_ALG_LIB) && defined (SPO2_ALG_LIB)\r
-        hx3695_hrspo2_ppg_Int_handle();\r
-#endif\r
-\r
-       case FT_LEAK_LIGHT_MODE:\r
-       {\r
-               hx3695_factroy_test(LEAK_LIGHT_TEST);\r
-               break;\r
-       }\r
-               break;\r
-       \r
-       case FT_GRAY_CARD_MODE:\r
-       {\r
-               FT_RESULTS_t ft_result = hx3695_factroy_test(GRAY_CARD_TEST);\r
-               uint8_t data[12] = {0};\r
-               memcpy(data, (void *)&ft_result.gr_data_final, 12);\r
-    \r
-               // hx3695_factory_test_process(NULL, APP_FACTORY_TEST_GRAY_CARD, data);\r
-       }\r
-               break;\r
-\r
-    default:\r
-        break;\r
-    }\r
-}\r
-\r
-void hx3695_ppg_Int_handle(void)\r
-{\r
-    hx3695_agc_Int_handle();\r
-#if defined(INT_MODE)\r
-    switch(work_mode_flag)\r
-    {\r
-    case HRS_MODE:\r
-#ifdef HRS_ALG_LIB\r
-        hx3695_hrs_ppg_Int_handle();\r
-#endif\r
-        break;\r
-\r
-    case SPO2_MODE:\r
-#ifdef SPO2_ALG_LIB\r
-        hx3695_spo2_ppg_Int_handle();\r
-#endif\r
-        break;\r
-\r
-    case HRV_MODE:\r
-#ifdef HRV_ALG_LIB\r
-        hx3695_hrv_ppg_Int_handle();\r
-#endif\r
-        break;\r
-\r
-    case WEAR_MODE:\r
-#ifdef CHECK_TOUCH_LIB\r
-        hx3695_wear_ppg_Int_handle();\r
-#endif\r
-        break;\r
-\r
-    case LAB_TEST_MODE:\r
-#ifdef LAB_TEST\r
-        hx3695_lab_test_Int_handle();\r
-#endif\r
-\r
-    default:\r
-        break;\r
-    }\r
-#endif\r
-}\r
-\r
-#define HRS_WINDOW_SIZE 5\r
-static uint8_t hrs_num = 0;\r
-static int32_t sum_hrs = 0;\r
-static int32_t hrs_data[7] = {0};\r
-static uint8_t left = 0;\r
-static uint8_t right = 0;\r
-static uint8_t avg_hrs = 0;\r
-\r
-static void get_avg_hrs(uint8_t hrs)\r
-{\r
-\r
-\r
-    if (hrs_num >= HRS_WINDOW_SIZE) {\r
-        sum_hrs -= hrs_data[left];\r
-        left = (left + 1) % HRS_WINDOW_SIZE;\r
-        hrs_num--;\r
-    }\r
-\r
-    hrs_data[right] = hrs;\r
-    sum_hrs += hrs;\r
-    right = (right + 1) % HRS_WINDOW_SIZE;\r
-    hrs_num++;\r
-\r
-\r
-    if (hrs_num > 2) \r
-    {\r
-\r
-        uint8_t first_idx = left;\r
-        int32_t min_hrs = hrs_data[first_idx];\r
-        int32_t max_hrs = hrs_data[first_idx];\r
-\r
-\r
-        for (uint8_t i = 0; i < hrs_num; i++) {\r
-            uint8_t current_idx = (left + i) % HRS_WINDOW_SIZE;\r
-            uint8_t current_hrs = hrs_data[current_idx];\r
-\r
-            if (current_hrs < min_hrs) {\r
-                min_hrs = current_hrs;\r
-            }\r
-            if (current_hrs > max_hrs) {\r
-                max_hrs = current_hrs;\r
-            }\r
-        }\r
-\r
-        uint8_t valid_count = hrs_num - 2;\r
-        avg_hrs = (sum_hrs - max_hrs - min_hrs) / valid_count;\r
-\r
-        // printf("max_hrs[%d],min_hrs[%d],avg_hrs[%d]\n",max_hrs,min_hrs,avg_hrs);\r
-    }\r
-}\r
-\r
-\r
-uint8_t hx3695_get_hrs(void)\r
-{\r
-    return avg_hrs;\r
-}\r
-\r
-uint8_t hx3695_get_spo2(void)\r
-{\r
-    return spo2_result;\r
-}\r
-\r
-\r
-uint8_t hx3695_get_wear_status(void)\r
+void hx3695_set_watermark(ppg_sensor_data_t *ppg_sensor_dat)\r
 {\r
-    return wear_status;\r
+       uint8_t watermark = ppg_sensor_dat->watermark + ppg_sensor_dat->led_activated;\r
+       hx3695_write_reg(0X1c, watermark);\r
+       hx3695_write_reg(0X5c, 0x02);\r
+    hx3695_delay_ms(1);\r
+    hx3695_write_reg(0X1b, 0x10);\r
+    hx3695_delay_ms(1);\r
+    hx3695_write_reg(0X1b, 0x91);\r
+    hx3695_write_reg(0X5c, 0x00);\r
+    read_fifo_first_flg = 1;\r
 }\r
 \r
-void hx3695_set_hrs_ble_swtich(uint8_t cmd)\r
+void hx3695_led_control(ppg_sensor_data_t *ppg_sensor_dat, uint8_t index)\r
 {\r
-  hrs_ble_falg = cmd;\r
-  // PRINT("hrs_ble_falg : %d \n",hrs_ble_falg);\r
+       if(ppg_sensor_dat->led_data[index].led_state == Activating)\r
+       {\r
+               hx3695_write_reg(0X26+index,0xbb);\r
+               ppg_sensor_dat->led_data[index].led_state = Activated;\r
+       }\r
+       else if(ppg_sensor_dat->led_data[index].led_state == InActivating)\r
+       {\r
+               hx3695_write_reg(0X26+index,0x33);\r
+               ppg_sensor_dat->led_data[index].led_state = InActivated;\r
+       }\r
 }\r
 \r
-uint8_t hx3695_get_hrs_ble_swtich(void)\r
+void hx3695_updata_sensor(ppg_sensor_data_t *ppg_sensor_dat)\r
 {\r
-  uint8_t cmd = hrs_ble_falg;\r
-  return cmd;\r
+       uint8_t ii;\r
+       hx3695_set_fs(ppg_sensor_dat);\r
+       for(ii=0;ii<4;ii++)\r
+       {\r
+               hx3695_led_control(ppg_sensor_dat, ii);\r
+       }\r
+       hx3695_set_watermark(ppg_sensor_dat);\r
 }\r
 \r
-void hx3695_wearstatus_update(void)\r
+void hx3695_hrs_enable(ppg_sensor_data_t *ppg_sensor_dat)\r
 {\r
-    if(history_wear_status != wear_status)\r
-    {\r
-        history_wear_status = wear_status;\r
-#ifdef SUPPORT_CYWEE_SERVICE\r
-        // do_cywee_service_check_msg(CYWEE_SERVICE_CMD_WEAR_STATUS_CHANGE,&wear_status);\r
-        cywee_wear_status_update(&wear_status);\r
-#endif\r
-    }\r
+       printf("hx3695_hrs_enable\r\n");\r
+       tyhx_hrs_alg_open();\r
+       ppg_sensor_data.mode = HRS_MODE;\r
+       hx3695_ppg_set_mode(PPG_INIT);\r
+       #ifdef DOUBLE_GREEN\r
+       ppg_sensor_dat->led_activated = 3;\r
+       ppg_sensor_dat->fs = 25;\r
+       ppg_sensor_dat->watermark = 30;\r
+       ppg_sensor_dat->led_data[0].led_state = Activating;\r
+       ppg_sensor_dat->led_data[1].led_state = Activating;\r
+       ppg_sensor_dat->led_data[2].led_state = InActivating;\r
+       ppg_sensor_dat->led_data[3].led_state = Activating;\r
+       ppg_sensor_dat->led_data[0].isneed_cal_start = true;\r
+       ppg_sensor_dat->led_data[1].isneed_cal_start = true;\r
+       ppg_sensor_dat->led_data[2].isneed_cal_start = false;\r
+       ppg_sensor_dat->led_data[3].isneed_cal_start = false;\r
+       #else\r
+       ppg_sensor_dat->led_activated = 2;\r
+       ppg_sensor_dat->fs = 25;\r
+       ppg_sensor_dat->watermark = 20;\r
+       ppg_sensor_dat->led_data[0].led_state = Activating;\r
+       ppg_sensor_dat->led_data[1].led_state = InActivating;\r
+       ppg_sensor_dat->led_data[2].led_state = InActivating;\r
+       ppg_sensor_dat->led_data[3].led_state = Activating;\r
+       ppg_sensor_dat->led_data[0].isneed_cal_start = true;\r
+       ppg_sensor_dat->led_data[1].isneed_cal_start = false;\r
+       ppg_sensor_dat->led_data[2].isneed_cal_start = false;\r
+       ppg_sensor_dat->led_data[3].isneed_cal_start = false;\r
+       #endif\r
+       hx3695_updata_sensor(ppg_sensor_dat);\r
 }\r
-  //脱腕上报未佩戴信息\r
-void hx3695_unwearstatus_update(void)\r
-{\r
-  // hx3695_msg_callback_t func =  hx3695_get_send_msg_callback_func();\r
-  // if(func != NULL && !uapi_dev_runtime_get_train_status())\r
-  // {\r
-  //   hrsresult.lastesthrs = 0;\r
-  //   hrsresult.wearstatus = 0;\r
-  //   //为了主界面脱腕灵敏;需要增加未佩戴\r
-  //   func(HX3695_MSG_TYPE_HRS_UPDATE, &hrsresult, sizeof(FT_CUSTOM_RESULTS_t));\r
-  //   func(HX3695_MSG_TYPE_WEARSTAT_UPDATE, &hrsresult,sizeof(FT_CUSTOM_RESULTS_t));\r
-  //   func(HX3695_MSG_TYPE_WEARSTAT_UPDATE,&hrsresult,sizeof(FT_CUSTOM_RESULTS_t));\r
-  //   func(HX3695_MSG_TYPE_WEARSTAT_UPDATE,&hrsresult,sizeof(FT_CUSTOM_RESULTS_t));\r
-  // }\r
-\r
-  if(uapi_dev_runtime_get_train_status())\r
-  {\r
-      wear_status = 0;\r
-      hx3695_wearstatus_update();\r
-      avg_hrs = 0;\r
-\r
-  }\r
-}                              \r
-\r
-\r
-#ifdef HRS_ALG_LIB\r
-/*TYHX 心率模式下 读取PPG, 默认320ms*/\r
-hrs_sensor_data_t   hrs_s_dat;\r
-//hx3695_results_t    alg_results_pre;\r
-\r
-static uint8_t his_wear = 2;\r
-static uint8_t wear_cnt = 0;\r
-// static uint8_t acc_restart_flag = 0;\r
 \r
-void hx3695_hrs_ppg_Int_handle(void)\r
+void hx3695_hrsdaily_enable(ppg_sensor_data_t *ppg_sensor_dat)\r
 {\r
-    uint8_t     ii=0;\r
-    hrs_results_t   alg_results = {MSG_HRS_ALG_NOT_OPEN,0,0,0,0,0,0};\r
-    hrs_wear_msg_code_t     hrs_wear_status = MSG_HRS_NO_WEAR;\r
-    int32_t     *PPG_buf = &(hrs_s_dat.green_data[0]);\r
-    int32_t    *ir_buf = &(hrs_s_dat.ir_data[0]);\r
-    uint8_t    *count = &(hrs_s_dat.count);\r
-    //int32_t  *s_buf = &(ppg_s_data.s_buf[0]);\r
-    int16_t    gsen_fifo_x_send[32]= {0};\r
-    int16_t    gsen_fifo_y_send[32]= {0};\r
-    int16_t    gsen_fifo_z_send[32]= {0};\r
-               \r
-                       HRS_CAL_SET_T cal;\r
-        cal = get_hrs_agc_status();\r
-\r
-#ifdef HR_VECTOR\r
-    for(ii=0; ii<8; ii++)\r
-    {\r
-        PPG_buf_vec[ii] = hrm_input_data[vec_send_cnt+ii];\r
-        gsen_fifo_x_send[ii] = gsen_input_data_x[vec_send_cnt+ii];\r
-        gsen_fifo_y_send[ii] = gsen_input_data_y[vec_send_cnt+ii];\r
-        gsen_fifo_z_send[ii] = gsen_input_data_z[vec_send_cnt+ii];\r
-    }\r
-    vec_send_cnt = vec_send_cnt+8;\r
-    *count = 8;\r
-    tyhx_hrs_alg_send_data(PPG_buf_vec,*count, gsen_fifo_x_send, gsen_fifo_y_send, gsen_fifo_z_send);\r
-\r
-#else\r
-\r
-    if(hx3695_hrs_read(&hrs_s_dat) == 0)\r
-    {\r
-        return;\r
-    }\r
-\r
-#ifndef GSEN_40MS_TIMMER\r
-    //readFifoByHrsModule();\r
-#endif\r
-//     DEBUG_PRINTF("\r\nsend  jlink cnt=%d\r\n",*count);              \r
-/* gsensor 屏蔽 */\r
-//     for(ii=0; ii<*count; ii++)\r
-//     {\r
-//             #if 0\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
-\r
-//             PRINT("hx3695 gr,ir,gsen:%d/%d %d %d %d %d %d %d\r\n" ,\r
-//                     1+ii,*count,PPG_buf[ii],ir_buf[0],gsen_fifo_x[ii],gsen_fifo_y[ii],gsen_fifo_z[ii],cal.Group1_Cur);\r
-//             #else\r
-//             accel_data_struct_t accel_raw_data = {0};\r
-//             queue_output(&accel_raw_data);\r
-//         gsen_fifo_x_send[ii] = accel_raw_data.x;\r
-//         gsen_fifo_y_send[ii] = accel_raw_data.y;\r
-//         gsen_fifo_z_send[ii] = accel_raw_data.z;\r
-// //          PRINT("hx3695 gr,ir,gsen:%d/%d %d %d %d %d %d %d\r\n" ,\r
-// //                  1+ii,*count,PPG_buf[ii], ir_buf[0], gsen_fifo_x_send[ii], gsen_fifo_y_send[ii], gsen_fifo_z_send[ii], cal.Group1_Cur);\r
-//             printf("FFF==> hr  PPG_buf : %d,  %d,  PPG_buf: %d,  ir_buf: %d \n", 1+ii, *count, PPG_buf[ii], ir_buf[0]);\r
-               \r
-//             #endif\r
-//     }\r
-//     ft_ppg_green = hrs_s_dat.green_data[0];\r
-       // ft_test_result_t result = {0};\r
-       // 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
-    //PRINT("*count : %d \r\n",*count);\r
-\r
-    //count7-9 为捕捉到的绿光值正常数据数量范围,不在此范围,心率数据不准,直接返回.\r
-    // if(*count < 7 || *count > 9) \r
-    // {\r
-    //     return;\r
-    // }\r
-  #ifdef SUPPORT_CYWEE_SERVICE\r
-    memset(gsensordata,0.0f,sizeof(gsenson_t) * *count);\r
-\r
-    cywee_get_gsensor_data(*count,gsensordata);  \r
-\r
-    for(ii=0; ii<*count; ii++)\r
-    {\r
-      // if(gsensordata[ii].x == 0.0f && gsensordata[ii].y == 0.0f && gsensordata[ii].z == 0.0f)\r
-      // {\r
-      //     timeout++;\r
-      //     if(timeout > 20 && !acc_restart_flag) //避免重复开关gsensor\r
-      //     {\r
-      //         do_cywee_service_check_msg(CYWEE_SERVICE_CMD_RESTART_ACC,NULL);\r
-      //         acc_restart_flag = 1;\r
-      //     }\r
-      // }\r
-      // else\r
-      // {\r
-      //     timeout = 0;\r
-      //     acc_restart_flag = 0;\r
-      // }\r
-\r
-      if(gsensordata[ii].x == 0 && gsensordata[ii].y == 0 && gsensordata[ii].z == 0)\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 * 4096 / 10;\r
-          gsen_fifo_y_send[ii] = gsensordata[ii].y * 4096 / 10;\r
-          gsen_fifo_z_send[ii] = gsensordata[ii].z * 4096 / 10;\r
-      }\r
-      factory_data = PPG_buf[ii];\r
-    // cywee_get_gsensor_data(8,gsensordata);  \r
-    // for(ii=0; ii<*count; ii++)\r
-    // {\r
-    //   if(gsensordata[ii].x == 0.0f && gsensordata[ii].y == 0.0f && gsensordata[ii].z == 0.0f)\r
-    //   {\r
-    //       timeout++;\r
-    //       if(timeout > 20)\r
-    //       {\r
-    //           do_cywee_service_check_msg(CYWEE_SERVICE_CMD_RESTART_ACC,NULL);\r
-    //       }\r
-    //   }\r
-    //   else\r
-    //   {\r
-    //       timeout = 0;\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
-    //   if(ii < 9)\r
-    //   {\r
-    //       gsen_fifo_x_send[ii] = gsensordata[ii].x * 4096 / 10;\r
-    //       gsen_fifo_y_send[ii] = gsensordata[ii].y * 4096 / 10;\r
-    //       gsen_fifo_z_send[ii] = gsensordata[ii].z * 4096 / 10;\r
-    //   }\r
-\r
-    // }\r
-      // PRINT("hxdata:%d/%d %d %d %.3f %.3f %.3f %d\r\n" ,1+ii,*count,PPG_buf[ii],ir_buf[0],gsensordata[ii].x,gsensordata[ii].y,gsensordata[ii].z,ppg_s_data.green_cur);\r
-      //PRINT("hxdata:%d/%d %d %d %.3f %.3f %.3f %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
-      //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
-      //PRINT("hxdata:%d/%d %d %d %.3f %.3f %.3f %d\r\n" ,1+ii,*count,PPG_buf[ii],ir_buf[0],gsensordata[ii].x,gsensordata[ii].y,gsensordata[ii].z,ppg_s_data.green_cur);\r
-\r
-    }\r
-#endif\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
-#endif\r
-\r
-\r
-/*屏蔽*/\r
-//     for(ii=0; ii<*count; ii++)\r
-//        {\r
-//        #if 0\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
-       \r
-//                PRINT("hx3695 gr,ir,gsen:%d/%d %d %d %d %d %d %d\r\n" ,\r
-//                        1+ii,*count,PPG_buf[ii],ir_buf[0],gsen_fifo_x[ii],gsen_fifo_y[ii],gsen_fifo_z[ii],cal.Group1_Cur);\r
-//        #else\r
-// //             accel_data_struct_t accel_raw_data = {0};\r
-// //             queue_output(&accel_raw_data);\r
-// //             gsen_fifo_x_send[ii] = accel_raw_data.x;\r
-// //             gsen_fifo_y_send[ii] = accel_raw_data.y;\r
-// //             gsen_fifo_z_send[ii] = accel_raw_data.z;\r
-// //             PRINT("hx3695 gr,ir,gsen:%d/%d %d %d %d %d %d %d hr==%d\r\n" ,\r
-// //                     1+ii,*count,PPG_buf[ii], ir_buf[0], gsen_fifo_x_send[ii], gsen_fifo_y_send[ii], gsen_fifo_z_send[ii], cal.Group1_Cur,alg_results.hr_result);\r
-//        #endif\r
-//        }\r
-       \r
-    uint8_t curr_wear = 1;\r
-    //uint8_t last_wear = cwm_get_wear_status();\r
-\r
-    alg_results = tyhx_hrs_alg_get_results();\r
-    hrsresult.lastesthrs = alg_results.hr_result;\r
-    hrsresult.hr_living = alg_results.living_status;\r
-    hrsresult.hr_living_qu = alg_results.hr_result_qual;\r
-    hrsresult.hr_living_std = alg_results.hr_result_std;\r
-    hrsresult.wearstatus = hrs_wear_status;\r
-\r
-    if(hrsresult.wearstatus == MSG_HRS_WEAR)\r
-    {\r
-        wear_status = 1;\r
-        if(hrsresult.lastesthrs > 30 && hrsresult.lastesthrs < 220)\r
-          get_avg_hrs(hrsresult.lastesthrs);\r
-    }\r
-    else if(hrsresult.wearstatus == MSG_HRS_NO_WEAR || hrsresult.hr_living == MSG_LIVING_FAIL)\r
-    {\r
-        hrsresult.wearstatus = MSG_HRS_NO_WEAR;\r
-        hrsresult.lastesthrs = 0;\r
-        wear_status = 0;\r
-    }\r
-\r
+       printf("hx3695_hrsdaily_enable\r\n");\r
+       tyhx_hrs_alg_open();\r
+       ppg_sensor_data.mode = HRSDAILY_MODE;\r
+       hx3695_ppg_set_mode(PPG_INIT);\r
     \r
-    // hx3695_msg_callback_t func =  hx3695_get_send_msg_callback_func();\r
-    \r
-    // if(func != NULL)\r
-    // {\r
-    //   if(his_wear == hrsresult.wearstatus)\r
-    //   {\r
-    //       wear_cnt++;\r
-    //       if(wear_cnt >= 2 && !his_wear) //未佩戴超过2次 上报未佩戴信息\r
-    //       {\r
-    //           func(HX3695_MSG_TYPE_WEARSTAT_UPDATE,&hrsresult,sizeof(FT_CUSTOM_RESULTS_t));\r
-    //           wear_cnt = 0;\r
-    //       }\r
-    //   }\r
-    //   else\r
-    //   {\r
-    //       his_wear = hrsresult.wearstatus;\r
-    //       wear_cnt = 0;\r
-    //   }\r
-    // }\r
-    //PRINT("hrsresult.wearstatus : %d , his_wear : %d , wear_cnt : %d \n",hrsresult.wearstatus,his_wear,wear_cnt);\r
-    // PRINT("hrsresult.wearstatus : %d , wear_status : %d , hr_living : %d \n",hrsresult.wearstatus,wear_status,hrsresult.hr_living);\r
-    // if(hrs_wear_status == MSG_HRS_WEAR && hrsresult.hr_living == MSG_LIVING_TRUE)\r
-    // {\r
-    //     if(hrsresult.lastesthrs > 30 && hrsresult.lastesthrs < 220)\r
-               //       get_avg_hrs(hrsresult.lastesthrs);\r
-\r
-    //     hrsresult.wearstatus = MSG_HRS_WEAR;\r
-    // }\r
-    // else\r
-    // {\r
-    //     hrsresult.wearstatus = MSG_HRS_NO_WEAR;\r
-    //     hrsresult.lastesthrs = 0;\r
-    // }\r
-\r
-    // PRINT("hrs : %d , wear_status : %d \n",hrsresult.lastesthrs,wear_status);\r
-    avg_hrs = hrsresult.lastesthrs;\r
-\r
-    msg_count++;\r
-    if(msg_count >= 3)\r
-    {\r
-\r
-#ifdef SUPPORT_PPG_BLE_SERVICE\r
-        if(uapi_dev_runtime_get_hrs_ble_status())\r
-        {\r
-            ble_ppgtest_server_send_input_report(&avg_hrs,1);\r
-        }\r
-#endif\r
-\r
-          msg_count = 0;\r
-          // if(func != NULL)\r
-          // {\r
-          //   //PRINT("hrsresult.lastesthrs : %d \n",hrsresult.lastesthrs);\r
-          //   func(HX3695_MSG_TYPE_HRS_UPDATE,&hrsresult,sizeof(FT_CUSTOM_RESULTS_t));\r
-          //   if(uapi_get_cywee_static_state())\r
-          //   {\r
-          //       func(HX3695_MSG_TYPE_STATIC_HRS_UPDATE,&hrsresult,sizeof(FT_CUSTOM_RESULTS_t));\r
-          //   }\r
-          // }\r
-\r
-          if(uapi_dev_runtime_get_train_status())\r
-          {\r
-              hx3695_wearstatus_update();\r
-              // avg_hrs = hrsresult.lastesthrs;\r
-              // do_cywee_service_check_msg(CYWEE_SERVICE_CMD_HRS_CHANGE,&cywee_data);\r
-          }\r
-    }\r
-\r
-    // PRINT("hrsresult.wearstatus: %d,  hr_living: %d, hr_result:%d \r\n",hrsresult.wearstatus,hrsresult.hr_living,hrsresult.lastesthrs);\r
-\r
-    // PRINT("hx3695 data_cnt: %d,  hr_living: %d, hr_living_qu: %d, hr_living_std: %d, hr_result:%d \r\n",alg_results.data_cnt,  hrsresult.hr_living, hrsresult.hr_living_qu, hrsresult.hr_living_std, hrsresult.lastesthrs);\r
-\r
-       if(hrs_wear_status == MSG_HRS_WEAR && hrsresult.hr_living == MSG_LIVING_TRUE)\r
-    {\r
-//             app_hr_reset_stop_timer();\r
-               if(alg_results.hr_result)\r
-               {\r
-                       \r
-                       //app_hr_cal_hr_values(alg_results.hr_result);\r
-                       //PRINT("app_hr_cal_hr_values tick:%d hr:%d", xTaskGetTickCount(), alg_results.hr_result);\r
-                       //cwm_hr_input(alg_results.hr_result);\r
-                       //hr_sensor_notify_factory_test();\r
-               }\r
-               hr_no_living_dur = 0;\r
-               curr_wear = 1;\r
-    }\r
-       else if(hrs_wear_status == MSG_HRS_WEAR && hrsresult.hr_living != MSG_LIVING_TRUE)\r
-       {\r
-               if (++hr_no_living_dur > 12 * 1000 / tyhx_long_timer_tick)\r
-               {\r
-                       //hr_stop_detect();\r
-                       //PRINT("MSG_HRS_WEAR:%d liv:%d", hrs_wear_status, hrsresult.hr_living);\r
-                       hr_no_living_dur = 0;\r
-                       curr_wear = 0;\r
-               }\r
-       }\r
-       else if(hrs_wear_status == MSG_HRS_NO_WEAR || hrsresult.hr_living == MSG_LIVING_FAIL)\r
-       {\r
-               //hr_stop_detect();\r
-               //PRINT("MSG_HRS_NO_WEAR:%d liv:%d", hrs_wear_status, hrsresult.hr_living);\r
-               hr_no_living_dur = 0;\r
-               curr_wear = 0;\r
-       }\r
-       \r
-       //cwm_off_body_detect(curr_wear);\r
-\r
-       #if defined(GSENSOR_LOG_NOTIFY) && GSENSOR_LOG_NOTIFY == 1 || defined(HRS_BLE_APP)\r
-       \r
-       if (last_wear!=curr_wear)\r
-       {\r
-               gui_send_message_by_data(MSG_HR_WEAR_STATUS_UPDATE, &curr_wear, 1);\r
-       }\r
-       #endif\r
-\r
-#ifdef BP_CUSTDOWN_ALG_LIB\r
-    bp_results_t    bp_alg_results;\r
-    bp_alg_results = tyhx_alg_get_bp_results();\r
-#endif\r
-\r
-////////////////////////////////////////BLE+DISPLAY/////////////////////////////////\r
-\r
-\r
-#ifdef HRS_BLE_APP\r
-    {\r
-        rawdata_vector_t rawdata;\r
-        for(ii=0; ii<*count; ii++)\r
-        {\r
-            rawdata.vector_flag = HRS_VECTOR_FLAG;\r
-            rawdata.data_cnt = alg_results.data_cnt-*count+ii;\r
-            rawdata.hr_result = alg_results.hr_result;\r
-            rawdata.red_raw_data = PPG_buf[ii];\r
-            rawdata.ir_raw_data = ir_buf[ii];\r
-            rawdata.gsensor_x = gsen_fifo_x_send[ii];\r
-            rawdata.gsensor_y = gsen_fifo_y_send[ii];\r
-            rawdata.gsensor_z = gsen_fifo_z_send[ii];\r
-            rawdata.red_cur = cal.Group1_Cur;\r
-            rawdata.ir_cur = cal.Group1_Ledidac;\r
-//            PRINT("@@@@@@@@@ HRS_BLE_APP gsen:%d %d %d\r\n", rawdata.gsensor_x, rawdata.gsensor_y, rawdata.gsensor_z);\r
-            ble_rawdata_vector_push(rawdata);\r
-        }\r
-    }\r
-    ble_rawdata_send_handler();\r
-#endif\r
-\r
-    if(hrs_ble_falg)\r
-    {\r
-        uint8_t encoded_hrm[PPG_DATA_LEN_MAX] = {0};//PPG_DATA_LEN_MAX>17会导致APP连接提示定义设备与所选类型不匹配\r
-        uint8_t red_bit = 0;\r
-        uint8_t ir_bit = 0;\r
-        uint8_t green_bit = 0;\r
-        HRS_CAL_SET_T cal= get_hrs_agc_status();\r
-\r
-        for(ii=0; ii<*count; ii++)\r
-        {\r
-            if(PPG_buf[ii]<0)\r
-            {\r
-                red_bit = 0x80;\r
-                PPG_buf[ii] =  -PPG_buf[ii];\r
-            }\r
-            if(ir_buf[ii]<0)\r
-            {\r
-                ir_bit = 0x80;\r
-                ir_buf[ii] =  -ir_buf[ii];\r
-            }\r
-\r
-            encoded_hrm[0] = 0x55;//心率标志位,一定要设置正确\r
-            encoded_hrm[1] = (uint8_t)(alg_results.data_cnt - *count + ii) % 256;//原始data_cnt会一直自加,但是这里只有一个字节,0-255循环\r
-            encoded_hrm[2] = (uint8_t)(alg_results.hr_result & 0xFF);//心率值\r
-\r
-            encoded_hrm[3] = (uint8_t)((PPG_buf[ii] & 0xFF0000) >> 16) | red_bit;      //绿灯原始数据\r
-            encoded_hrm[4] = (uint8_t)((PPG_buf[ii] & 0xFF00) >> 8);                           //绿灯原始数据\r
-            encoded_hrm[5] = (uint8_t)(PPG_buf[ii] & 0xFF);                                                    //绿灯原始数据\r
-\r
-            encoded_hrm[6] = (uint8_t)((ir_buf[ii] & 0xFF0000) >> 16) | ir_bit;                //ir原始数据\r
-            encoded_hrm[7] = (uint8_t)((ir_buf[ii] & 0xFF00) >> 8);                                    //ir原始数据\r
-            encoded_hrm[8] = (uint8_t)(ir_buf[ii] & 0xFF);                                                     //ir原始数据\r
-\r
-            encoded_hrm[9] = (uint8_t)((gsen_fifo_x_send[ii]&0xFF00)>>8);//模拟x,1234换成填入自己的x数据\r
-            encoded_hrm[10] = (uint8_t)(gsen_fifo_x_send[ii]&0xFF);\r
-            encoded_hrm[11] = (uint8_t)((gsen_fifo_y_send[ii]&0xFF00)>>8);//模拟y,-1234换成填入自己的y数据\r
-            encoded_hrm[12] = (uint8_t)(gsen_fifo_y_send[ii]&0xFF);\r
-            encoded_hrm[13] = (uint8_t)((gsen_fifo_z_send[ii]&0xFF00)>>8);//模拟z,3987换成填入自己的z数据\r
-            encoded_hrm[14] = (uint8_t)(gsen_fifo_z_send[ii]&0xFF);       \r
-            \r
-            encoded_hrm[15] = ppg_s_data.green_cur;//绿灯电流\r
-            encoded_hrm[16] = ppg_s_data.ir_cur;//红外电流\r
-\r
-#ifdef SUPPORT_PPG_BLE_SERVICE\r
-            if(cm_custom_ble_service_on_flag())\r
-              ble_ppgtest_server_send_input_report(encoded_hrm,PPG_DATA_LEN_MAX);\r
-#endif\r
-            // ble_op_att_send_data(ATT_CHARACTERISTIC_2a37_01_VALUE_HANDLE,encoded_hrm, \\r
-            //     sizeof(encoded_hrm)/sizeof(encoded_hrm[0]), ATT_OP_NOTIFY);//heartrate \r
-        }\r
-    }\r
-\r
-\r
-////////////////////////////////////////////////////////////////////////////////////\r
+       ppg_sensor_dat->led_activated = 2;\r
+       ppg_sensor_dat->fs = 25;\r
+       ppg_sensor_dat->watermark = 20;\r
+       ppg_sensor_dat->led_data[0].led_state = Activating;\r
+       ppg_sensor_dat->led_data[1].led_state = InActivating;\r
+       ppg_sensor_dat->led_data[2].led_state = InActivating;\r
+       ppg_sensor_dat->led_data[3].led_state = Activating;\r
+       ppg_sensor_dat->led_data[0].isneed_cal_start = true;\r
+       ppg_sensor_dat->led_data[1].isneed_cal_start = false;\r
+       ppg_sensor_dat->led_data[2].isneed_cal_start = false;\r
+       ppg_sensor_dat->led_data[3].isneed_cal_start = false;\r
+\r
+       hx3695_updata_sensor(ppg_sensor_dat);\r
+       DEBUG_PRINTF("hx3695_hrs_enable\n");\r
 }\r
-#endif\r
 \r
-#ifdef CHECK_LIVING_LIB\r
-hrs_sensor_data_t  hrs_s_dat;  \r
-\r
-void hx3695_living_Int_handle(void)\r
+void hx3695_spo2_enable(ppg_sensor_data_t *ppg_sensor_dat)\r
 {\r
-    uint8_t     ii=0;\r
-    hx3695_living_results_t     living_alg_results = {MSG_LIVING_NO_WEAR,0,0,0};\r
-    int32_t     *PPG_buf = &(hrs_s_dat.green_data[0]);\r
-    int32_t     *ir_buf = &(hrs_s_dat.ir_data[0]);\r
-    uint8_t     *count = &(hrs_s_dat.count);\r
-    hrs_wear_msg_code_t     hrs_wear_status = MSG_HRS_NO_WEAR;\r
-    int16_t    gsen_fifo_x_send[32]= {0};\r
-    int16_t    gsen_fifo_y_send[32]= {0};\r
-    int16_t    gsen_fifo_z_send[32]= {0};\r
-\r
-    if(hx3695_hrs_read(&hrs_s_dat) == 0)\r
-    {\r
-        return;\r
-    }\r
-               \r
-#ifndef GSEN_40MS_TIMMER\r
-//    readFifoByHrsModule();\r
-#endif\r
-       DEBUG_PRINTF("\r\nsend  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
-\r
-                       DEBUG_PRINTF("ger:%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
-    hrs_wear_status = hx3695_hrs_get_wear_status();\r
-    if(hrs_wear_status == MSG_HRS_WEAR)\r
-    {\r
-        hx3695_living_send_data(PPG_buf, *count, gsen_fifo_x_send, gsen_fifo_y_send, gsen_fifo_z_send);\r
-    }\r
-    living_alg_results = hx3695_living_get_results();\r
-    DEBUG_PRINTF("res:%d %d %d %d\r\n",living_alg_results.data_cnt,living_alg_results.motion_status,living_alg_results.signal_quality,hrs_wear_status);\r
+    printf("hx3695_spo2_enable\r\n");\r
+       tyhx_spo2_alg_open();\r
+       ppg_sensor_data.mode = SPO2_MODE;\r
+       hx3695_ppg_set_mode(PPG_INIT);\r
+       ppg_sensor_dat->led_activated = 4;\r
+       ppg_sensor_dat->fs = 25;\r
+       ppg_sensor_dat->watermark = 40;\r
+       ppg_sensor_dat->led_data[0].led_state = Activating;\r
+       ppg_sensor_dat->led_data[1].led_state = Activating;\r
+       ppg_sensor_dat->led_data[2].led_state = Activating;\r
+       ppg_sensor_dat->led_data[3].led_state = Activating;\r
+       ppg_sensor_dat->led_data[0].isneed_cal_start = true;\r
+       ppg_sensor_dat->led_data[1].isneed_cal_start = true;\r
+       ppg_sensor_dat->led_data[2].isneed_cal_start = true;\r
+       ppg_sensor_dat->led_data[3].isneed_cal_start = false;\r
+       hx3695_updata_sensor(ppg_sensor_dat);\r
 }\r
-#endif\r
-\r
-\r
-#ifdef SPO2_ALG_LIB\r
 \r
-#ifdef SPO2_DATA_CALI\r
-void hx3695_spo2_data_cali_init(void)\r
+void hx3695_hrv_enable(ppg_sensor_data_t *ppg_sensor_dat)\r
 {\r
-    uint8_t ii;\r
-    for(ii=0; ii<4; ii++)\r
-    {\r
-        red_data_fifo[ii] = 0;\r
-        ir_data_fifo[ii] = 0;\r
-    }\r
-    red_dc_temp = 0;\r
-    ir_dc_temp = 0;\r
-    red_data_pre = 0;\r
-    ir_data_pre = 0;\r
-    red_jump_delta = 0;\r
-    ir_jump_delta = 0;\r
-    cali_data_cnt = 0;\r
+    printf("hx3695_hrv_enable\r\n");\r
+       tyhx_hrv_alg_open();\r
+       ppg_sensor_data.mode = HRV_MODE;\r
+       hx3695_ppg_set_mode(PPG_INIT);\r
+       ppg_sensor_dat->led_activated = 2;\r
+       ppg_sensor_dat->fs = 100;\r
+       ppg_sensor_dat->watermark = 50;\r
+       ppg_sensor_dat->led_data[0].led_state = Activating;\r
+       ppg_sensor_dat->led_data[1].led_state = InActivating;\r
+       ppg_sensor_dat->led_data[2].led_state = InActivating;\r
+       ppg_sensor_dat->led_data[3].led_state = Activating;\r
+       ppg_sensor_dat->led_data[0].isneed_cal_start = true;\r
+       ppg_sensor_dat->led_data[1].isneed_cal_start = false;\r
+       ppg_sensor_dat->led_data[2].isneed_cal_start = false;\r
+       ppg_sensor_dat->led_data[3].isneed_cal_start = false;\r
+       hx3695_updata_sensor(ppg_sensor_dat);\r
 }\r
 \r
-int32_t hx3695_red_data_cali(int32_t red_new_raw_data)\r
+void hx3695_wear_low_power(ppg_sensor_data_t *ppg_sensor_dat)\r
 {\r
-    uint8_t ii;\r
-    int32_t red_data_final;\r
-    int32_t red_data_cali;\r
-    spo2_wear_msg_code_t touch_status;\r
-    touch_status = hx3695_spo2_get_wear_status();\r
-    if(touch_status == MSG_SPO2_NO_WEAR)\r
-    {\r
-        cali_data_cnt = 0;\r
-        red_data_cali = red_new_raw_data;\r
-        for(ii=0; ii<4; ii++)\r
-        {\r
-            red_data_fifo[ii] = 0;\r
-        }\r
-        red_dc_temp = 0;\r
-    }\r
-    else\r
-    {\r
-        for(ii=3; ii>0; ii--)\r
-        {\r
-            red_data_fifo[ii] = red_data_fifo[ii-1];\r
-        }\r
-        red_data_fifo[0] = red_new_raw_data;\r
-        if(cali_data_cnt>=25)\r
-        {\r
-            if ((((red_data_fifo[1] - red_data_fifo[2]) > SOP2_DEGLITCH_THRE) && ((red_data_fifo[1] - red_new_raw_data) > SOP2_DEGLITCH_THRE)) || \\r
-                    (((red_data_fifo[1] - red_data_fifo[2]) < -SOP2_DEGLITCH_THRE) && ((red_data_fifo[1] - red_new_raw_data) < -SOP2_DEGLITCH_THRE)))\r
-            {\r
-                red_new_raw_data = red_data_fifo[2];\r
-                red_data_fifo[1] = red_data_fifo[2];\r
-            }\r
-            else\r
-            {\r
-                red_new_raw_data = red_data_fifo[1];\r
-            }\r
-            if ((abs((red_new_raw_data - red_jump_delta) - red_data_pre) > SPO2_REMOVE_JUMP_THRE))\r
-            {\r
-                red_jump_delta = red_new_raw_data - red_data_pre;\r
-            }\r
-            red_data_cali = red_new_raw_data - red_jump_delta;\r
-            red_data_pre = red_data_cali;\r
-        }\r
-        else\r
-        {\r
-            red_data_cali = red_data_fifo[1];\r
-            red_data_pre = red_data_fifo[1];\r
-        }\r
-    }\r
-    if(cali_data_cnt<=30)\r
-    {\r
-        red_dc_temp = red_data_cali;\r
-        red_data_final = red_new_raw_data;\r
-    }\r
-    else\r
-    {\r
-        //red_dc_temp = (red_dc_temp*31 + red_data_cali)>>5;\r
-        red_dc_temp = 0;\r
-        red_data_final = red_data_cali - red_dc_temp + 2608*50*hx3695_spo2_agc_red_idac;\r
-    }\r
-    //DEBUG_PRINTF("%d %d %d %d %d %d\r\n", cali_data_cnt, red_new_raw_data, red_data_final, red_data_cali, red_dc_temp, hx3695_spo2_agc_red_idac);\r
-    return red_data_final;\r
+    printf("hx3695_wear_low_power\r\n");\r
+       ppg_sensor_data.mode = WEAR_MODE;\r
+       hx3695_ppg_set_mode(PPG_INIT);\r
+       ppg_sensor_dat->led_activated = 1;\r
+       ppg_sensor_dat->fs = 5;\r
+       ppg_sensor_dat->watermark = 5;\r
+       ppg_sensor_dat->led_data[0].led_state = InActivating;\r
+       ppg_sensor_dat->led_data[1].led_state = InActivating;\r
+       ppg_sensor_dat->led_data[2].led_state = InActivating;\r
+       ppg_sensor_dat->led_data[3].led_state = Activating;\r
+       ppg_sensor_dat->led_data[0].isneed_cal_start = false;\r
+       ppg_sensor_dat->led_data[1].isneed_cal_start = false;\r
+       ppg_sensor_dat->led_data[2].isneed_cal_start = false;\r
+       ppg_sensor_dat->led_data[3].isneed_cal_start = false;\r
+       hx3695_updata_sensor(ppg_sensor_dat);\r
 }\r
-int32_t hx3695_ir_data_cali(int32_t ir_new_raw_data)\r
+\r
+void hx3695_ppg_set_mode(uint8_t mode_cmd)\r
 {\r
-    uint8_t ii;\r
-    int32_t ir_data_final;\r
-    int32_t ir_data_cali;\r
-    spo2_wear_msg_code_t touch_status;\r
-    touch_status = hx3695_spo2_get_wear_status();\r
-    if(touch_status == MSG_SPO2_NO_WEAR)\r
-    {\r
-        cali_data_cnt = 0;\r
-        ir_data_cali = ir_new_raw_data;\r
-        for(ii=0; ii<4; ii++)\r
-        {\r
-            ir_data_fifo[ii] = 0;\r
-        }\r
-        ir_dc_temp = 0;\r
-    }\r
-    else\r
+    DEBUG_PRINTF("hx3695_ppg_set_mode %d \r\n", mode_cmd);\r
+    switch (mode_cmd)\r
     {\r
-        for(ii=3; ii>0; ii--)\r
-        {\r
-            ir_data_fifo[ii] = ir_data_fifo[ii-1];\r
-        }\r
-        ir_data_fifo[0] = ir_new_raw_data;\r
-        cali_data_cnt++;\r
-        if(cali_data_cnt>=25)\r
-        {\r
-            if ((((ir_data_fifo[1] - ir_data_fifo[2]) > SOP2_DEGLITCH_THRE) && ((ir_data_fifo[1] - ir_new_raw_data) > SOP2_DEGLITCH_THRE)) || \\r
-                    (((ir_data_fifo[1] - ir_data_fifo[2]) < -SOP2_DEGLITCH_THRE) && ((ir_data_fifo[1] - ir_new_raw_data) < -SOP2_DEGLITCH_THRE)))\r
-            {\r
-                ir_new_raw_data = ir_data_fifo[2];\r
-                ir_data_fifo[1] = ir_data_fifo[2];\r
-            }\r
-            else\r
+               case PPG_INIT:\r
+                       hx3695_ppg_para_init(&ppg_sensor_data);\r
+               s_ppg_state = 1;\r
+                       s_cal_state = 0;\r
+            if(work_mode_flag == HRS_MODE)\r
             {\r
-                ir_new_raw_data = ir_data_fifo[1];\r
+                #if defined(TIMMER_MODE)\r
+                hx3695_320ms_timer_cfg(true);\r
+                #else\r
+                hx3695_gpioint_cfg(true);\r
+                #endif\r
             }\r
-            if ((abs((ir_new_raw_data - ir_jump_delta) - ir_data_pre) > SPO2_REMOVE_JUMP_THRE))\r
-            {\r
-                ir_jump_delta = ir_new_raw_data - ir_data_pre;\r
-            }\r
-            ir_data_cali = ir_new_raw_data - ir_jump_delta;\r
-            ir_data_pre = ir_data_cali;\r
-        }\r
-        else\r
-        {\r
-            ir_data_cali = ir_data_fifo[1];\r
-            ir_data_pre = ir_data_fifo[1];\r
-        }\r
-    }\r
-    if(cali_data_cnt<=30)\r
-    {\r
-        ir_dc_temp = ir_data_cali;\r
-        ir_data_final = ir_new_raw_data;\r
-    }\r
-    else\r
-    {\r
-        //ir_dc_temp = (ir_dc_temp*31 + ir_data_cali)>>5;\r
-        ir_dc_temp = 0;\r
-        ir_data_final = ir_data_cali - ir_dc_temp + 2608*50*hx3695_spo2_agc_ir_idac;\r
+\r
+                       DEBUG_PRINTF("ppg init mode\r\n");\r
+                       break;\r
+\r
+               case PPG_OFF:\r
+                       #if defined(TIMMER_MODE)\r
+                       hx3695_320ms_timer_cfg(false);\r
+                       hx3695_40ms_timer_cfg(false);\r
+            hx3695_5000ms_timer_cfg(false);\r
+                       #elif defined(INT_MODE)\r
+                       hx3695_gpioint_cfg(false);\r
+                       #endif\r
+                       hx3695_ppg_off();\r
+                       s_ppg_state = 0;\r
+                       s_cal_state = 0;\r
+                       DEBUG_PRINTF("ppg off mode\r\n");\r
+                       break;\r
+\r
+               case PPG_LED_OFF:\r
+                       hx3695_wear_low_power(&ppg_sensor_data);\r
+            #if defined(TIMMER_MODE)\r
+                       hx3695_5000ms_timer_cfg(true);\r
+                       #endif\r
+                       s_ppg_state = 1;\r
+                       s_cal_state = 0;\r
+                       DEBUG_PRINTF("ppg led off mode\r\n");\r
+                       break;\r
+\r
+               case CAL_INIT:\r
+                       hx3695_cal_init();\r
+                       s_ppg_state = 0;\r
+                       s_cal_state = 1;\r
+                       #if defined(TIMMER_MODE)\r
+            hx3695_320ms_timer_cfg(false);\r
+                       hx3695_40ms_timer_cfg(true);\r
+                       #endif\r
+                       DEBUG_PRINTF("cal init mode\r\n");\r
+                       break;\r
+\r
+               case RECAL_INIT:\r
+                       hx3695_recal_init();\r
+               s_ppg_state = 0;\r
+                       s_cal_state = 1;\r
+                       #if defined(TIMMER_MODE)\r
+            hx3695_320ms_timer_cfg(false);\r
+            hx3695_40ms_timer_cfg(true);\r
+                       #endif\r
+                       DEBUG_PRINTF("recal init mode\r\n");\r
+                       break;\r
+\r
+               case CAL_OFF:\r
+                       #if defined(TIMMER_MODE)\r
+            hx3695_320ms_timer_cfg(true);\r
+            hx3695_40ms_timer_cfg(false);\r
+                       #endif\r
+                       hx3695_cal_off();\r
+                       s_ppg_state = 1;\r
+                       s_cal_state = 0;\r
+                       DEBUG_PRINTF("cal off mode\r\n");\r
+                       break;\r
+\r
+               default:\r
+                       break;\r
     }\r
-    //DEBUG_PRINTF("%d %d %d %d %d %d\r\n", cali_data_cnt, ir_new_raw_data, ir_data_final, ir_data_cali, ir_dc_temp, hx3695_spo2_agc_ir_idac);\r
-    return ir_data_final;\r
 }\r
-#endif //SPO2_DATA_CALI\r
 \r
-//#ifdef SPO2_ALG_LIB\r
-spo2_sensor_data_t spo2_s_dat;\r
-\r
-/*TYHX 血氧模式下 读取PPG, 默认320ms*/\r
-void hx3695_spo2_ppg_Int_handle(void)\r
+bool hx3695_init(WORK_MODE_T mode)\r
 {\r
-    uint8_t     ii=0;\r
-    spo2_results_t spo2_alg_results = {MSG_SPO2_ALG_NOT_OPEN,0,0,0,0,0,0,1,0,0,0,0,0};\r
-    spo2_wear_msg_code_t spo2_wear_status = MSG_SPO2_NO_WEAR;\r
-    SPO2_CAL_SET_T cal = get_spo2_agc_status();\r
-    int32_t     *red_buf = &(spo2_s_dat.red_data[0]);\r
-    int32_t     *ir_buf = &(spo2_s_dat.ir_data1[0]);\r
-    int32_t     *green_buf =  &(spo2_s_dat.green_data[0]);\r
-    uint8_t     *count = &(spo2_s_dat.count);\r
-    int16_t    gsen_fifo_x_send[32]= {0};\r
-    int16_t    gsen_fifo_y_send[32]= {0};\r
-    int16_t    gsen_fifo_z_send[32]= {0};\r
-#ifdef SPO2_DATA_CALI\r
-    int32_t red_data_cali, ir_data_cali;\r
-#endif\r
-\r
-#ifdef SPO2_VECTOR\r
-    for(ii=0; ii<8; ii++)\r
+    work_mode_flag = mode;\r
+    hx3695_software_reset();\r
+    hx3695_ppg_on();\r
+       if (hx3695_chip_check() != 0x65)\r
+       {\r
+               return false;\r
+       }\r
+    switch (work_mode_flag)\r
     {\r
-        red_buf_vec[ii] = vec_red_data[spo2_send_cnt+ii];\r
-        ir_buf_vec[ii] = vec_ir_data[spo2_send_cnt+ii];\r
-        green_buf_vec[ii] = vec_green_data[spo2_send_cnt+ii];\r
-    }\r
-    spo2_send_cnt = spo2_send_cnt+8;\r
-    *count = 8;\r
-    tyhx_spo2_alg_send_data(red_buf, ir_buf, green_buf, cal.R_LEDDAC, cal.IR_LEDDAC1, cal.R_LEDDAC, gsen_fifo_x_send, gsen_fifo_y_send, gsen_fifo_z_send, *count);\r
+               case HRS_MODE:\r
+                       hx3695_hrs_enable(&ppg_sensor_data);\r
+                       break;\r
+        \r
+     case HRSDAILY_MODE:\r
+                       hx3695_hrsdaily_enable(&ppg_sensor_data);\r
+                       break;\r
 \r
-#else\r
-    if(hx3695_spo2_read(&spo2_s_dat) == 0)\r
-    {\r
-        return;\r
-    }\r
-                       \r
-#ifndef GSEN_40MS_TIMMER\r
-//    readFifoByHrsModule();\r
-#endif\r
-        //DEBUG_PRINTF("\r\n send1  jlink cnt=%d\r\n",*count); \r
-  \r
-  /*屏蔽*/\r
-    //("*count[%d] \r\n",*count);\r
+               case LIVING_MODE:\r
 \r
-    //count7-9 为捕捉到的红光值正常数据数量范围,不在此范围,血氧数据不准,直接返回.\r
-    if(*count < 7 || *count > 9)\r
-    {\r
-        return;\r
-    }\r
-    //cywee_get_gsensor_data(8,gsensordata);\r
-    for(ii=0; ii<*count; ii++)\r
-    {\r
+                       break;\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 * 2048;\r
-      //     gsen_fifo_y_send[ii] = gsensordata[ii].y * 2048;\r
-      //     gsen_fifo_z_send[ii] = gsensordata[ii].z * 2048;\r
-      // }\r
-      //("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_send[ii],gsen_fifo_y_send[ii],gsen_fifo_z_send[ii]);\r
-      //printf("FFF==>spo2  red_buf : %d,  %d,  %d,    %d \n", 1+ii, *count, red_buf[ii], ir_buf[0]);\r
-      factory_data = red_buf[ii];\r
-    }\r
+               case SPO2_MODE:\r
+                       hx3695_spo2_enable(&ppg_sensor_data);\r
+                       tyhx_spo2_para_usuallyadjust(SPO2_LOW_XCORR_THRE, SPO2_LOW_SNR_THRE, COUNT_BLOCK_NUM, SPO2_BASE_LINE_INIT, SPO2_SLOPE, SPO2_GSEN_POW_THRE);\r
+                       tyhx_spo2_para_barelychange(MEAN_NUM, SOP2_DEGLITCH_THRE, SPO2_REMOVE_JUMP_THRE, SPO2_LOW_CLIP_END_TIME, SPO2_LOW_CLIP_DN, SPO2_NORMAL_CLIP_DN,\r
+                                                                               IR_AC_TOUCH_THRE, IR_FFT_POW_THRE, SPO2_CALI, SLOPE_PARA_MAX, SLOPE_PARA_MIN);\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
+                       break;\r
 \r
-    ft_test_result_t result = {0};\r
-    result.gr_data_final = spo2_s_dat.green_data[0];\r
-    result.red_data_final = spo2_s_dat.red_data[0];\r
-    result.ir_data_final = spo2_s_dat.ir_data1[0];\r
-  //hx3695_factory_test_process(NULL, APP_FACTORY_TEST_SPO2_START, &result);\r
+               case HRV_MODE:\r
+                       hx3695_hrv_enable(&ppg_sensor_data);\r
+                       break;\r
 \r
+               case WEAR_MODE:\r
+                       hx3695_ppg_set_mode(PPG_LED_OFF);\r
+                       break;\r
 \r
-    //("hx3695 current value: %d %d %d %d %d %d\r\n", cal.R_LED, cal.IR_LED1, cal.G_LED, cal.R_LEDDAC, cal.IR_LEDDAC1, cal.G_LEDDAC);\r
-    spo2_wear_status = hx3695_spo2_get_wear_status();\r
-    //PRINT("spo2_wear_status : %d\r\n",spo2_wear_status);\r
-    if(spo2_wear_status == MSG_SPO2_WEAR)\r
-    {\r
-        tyhx_spo2_alg_send_data(red_buf, ir_buf, green_buf, cal.R_LEDDAC, cal.IR_LEDDAC1, cal.G_LEDDAC, \r
-        gsen_fifo_x_send, gsen_fifo_y_send, gsen_fifo_z_send, *count);\r
-    }\r
-    \r
-#endif\r
+               case FT_LEAK_LIGHT_MODE:\r
+                       if (hx3695_chip_check() != 0x65)\r
+                       {\r
+                               return false;\r
+                       }\r
+                       hx3695_factroy_test(LEAK_LIGHT_TEST);\r
+                       return true;\r
+                       break;\r
 \r
-    spo2_alg_results = tyhx_spo2_alg_get_results();\r
-//------------------------adjust-------------------\r
-//    DEBUG_PRINTF("block_cnt: %d, data_cnt:%d, hr_result:%d,ir_quality:%d,motion:%d,poor_signal:%d,reliable_score_result:%d,screen_up:%d,spo2_result:%d\r\n",spo2_alg_results.block_cnt,spo2_alg_results.data_cnt,spo2_alg_results.hr_result,spo2_alg_results.ir_quality,spo2_alg_results.motion,spo2_alg_results.poor_signal,spo2_alg_results.reliable_score_result,spo2_alg_results.screen_up,spo2_alg_results.spo2_result);\r
+               case FT_GRAY_CARD_MODE:\r
+                       if (hx3695_chip_check() != 0x65)\r
+                       {\r
+                               return false;\r
+                       }\r
+                       hx3695_factroy_test(GRAY_CARD_TEST);\r
+                 return true;\r
+                       break;\r
 \r
-    hrsresult.lastestspo2 = spo2_alg_results.spo2_result;\r
-       hrsresult.lastesthrs = spo2_alg_results.hr_result;\r
-       uint8_t curr_wear = 1;\r
+               case FT_INT_TEST_MODE:\r
+                       //hx3695_factroy_test(FT_INT_TEST);\r
+                       break;\r
 \r
-    if(spo2_wear_status == MSG_SPO2_WEAR)\r
-    {\r
-        wear_status = 1;\r
-    }\r
-    else if(spo2_wear_status == MSG_SPO2_NO_WEAR || spo2_alg_results.spo2_living_status == MSG_SPO2_LIVING_FAIL)\r
-    {\r
-        wear_status = 0;\r
-    }\r
+               case AGING_CHECK_MODE:\r
+                       hx3695_factroy_test(AGING_CHECK_TEST);\r
+                       return true;\r
+                       break;\r
 \r
-    // printf("spo2:%d wear:%d\n",spo2_alg_results.spo2_result,wear_status);\r
+               case FT_LED_OFF_MODE:\r
+                       //hx3695_factroy_test(LED_OFF_TEST);\r
+                       break;\r
 \r
-       //uint8_t last_wear = cwm_get_wear_status();\r
-       if(spo2_wear_status == MSG_SPO2_WEAR && spo2_alg_results.spo2_living_status == MSG_SPO2_LIVING_TRUE)\r
-    {\r
-       //store_latest_spo2(hrsresult.lastestspo2);\r
-               //app_hr_cal_hr_values(hrsresult.lastesthrs);\r
-               //cwm_hr_input(hrsresult.lastesthrs);\r
-               spo2_no_living_dur = 0;\r
-               curr_wear = 1;\r
+               case FT_WEAR_MODE:\r
+                       //hx3695_factroy_test(WEAR_MODE_TEST);\r
+                       break;\r
+\r
+               default:\r
+                       break;\r
     }\r
-       else if(spo2_wear_status == MSG_SPO2_WEAR && spo2_alg_results.spo2_living_status != MSG_SPO2_LIVING_TRUE)\r
+         hx3695_agc_Int_handle(&ppg_sensor_data);\r
+    return true;\r
+}\r
+\r
+void hx3695_agc_Int_handle(ppg_sensor_data_t *ppg_sensor_dat)\r
+{\r
+       uint8_t ii = 0;\r
+       if(s_ppg_state==1 && s_cal_state==0)\r
        {\r
-               if (++spo2_no_living_dur > 12 * 1000 / tyhx_long_timer_tick)\r
+               for(ii=0;ii<4;ii++)\r
                {\r
-                       //gui_send_msg_by_evt(MSG_SPO2_MEASURE_CANCEL);\r
-                       //("MSG_SPO2_WEAR:%d liv:%d", spo2_wear_status, spo2_alg_results.spo2_living_status);\r
-                       spo2_no_living_dur = 0;\r
-                       curr_wear = 0;\r
+                       if(ppg_sensor_dat->led_data[ii].isneed_cal_start == true)\r
+                       {\r
+                               hx3695_ppg_set_mode(CAL_INIT);\r
+                               return;\r
+                       }\r
                }\r
        }\r
-       else if(spo2_wear_status == MSG_SPO2_NO_WEAR || spo2_alg_results.spo2_living_status == MSG_SPO2_LIVING_FAIL)\r
-       {\r
-               //gui_send_msg_by_evt(MSG_SPO2_MEASURE_CANCEL);\r
-               //PRINT("MSG_SPO2_NO_WEAR:%d liv:%d", spo2_wear_status, spo2_alg_results.spo2_living_status);\r
-               spo2_no_living_dur = 0;\r
-               curr_wear = 0;\r
-       }\r
-       //cwm_off_body_detect(curr_wear);\r
-       #if defined(GSENSOR_LOG_NOTIFY) && GSENSOR_LOG_NOTIFY == 1 || defined(HRS_BLE_APP)\r
-       if (last_wear!=curr_wear)\r
-       {\r
-               gui_send_message_by_data(MSG_HR_WEAR_STATUS_UPDATE, &curr_wear, 1);\r
-       }\r
-       #endif\r
-/////////////////////////////////////////BLE+DISPLAY//////////////////////////////////////////\r
-  spo2_alg_results = tyhx_spo2_alg_get_results();\r
-//------------------------adjust-------------------\r
-    DEBUG_PRINTF("block_cnt: %d, data_cnt:%d, hr_result:%d,ir_quality:%d,motion:%d,poor_signal:%d,reliable_score_result:%d,screen_up:%d,spo2_result:%d\r\n",spo2_alg_results.block_cnt,spo2_alg_results.data_cnt,spo2_alg_results.hr_result,spo2_alg_results.ir_quality,spo2_alg_results.motion,spo2_alg_results.poor_signal,spo2_alg_results.reliable_score_result,spo2_alg_results.screen_up,spo2_alg_results.spo2_result);\r
-    \r
-    hrsresult.lastestspo2 = spo2_alg_results.spo2_result;\r
-    spo2_result = hrsresult.lastestspo2;\r
-//     if(hrsresult.lastestspo2)\r
-       {\r
-               // store_latest_spo2(hrsresult.lastestspo2);\r
-               // app_hr_cal_hr_values(hrsresult.lastesthrs);\r
-//             gui_send_message_by_data(MSG_SPO2_DATA, &hrsresult.lastestspo2, 1);\r
-//             hr_sensor_notify_factory_test();\r
-       }\r
-           \r
-    // hx3695_msg_callback_t func =  hx3695_get_send_msg_callback_func();\r
-    // if(func != NULL)\r
-    // {\r
-    //   hrsresult.wearstatus = spo2_wear_status;\r
-    //   func(HX3695_MSG_TYPE_WEARSTAT_UPDATE,&hrsresult,sizeof(FT_CUSTOM_RESULTS_t));\r
-    //   func(HX3695_MSG_TYPE_SPO2_UPDATE,&hrsresult,sizeof(FT_CUSTOM_RESULTS_t));\r
-    // }\r
+       hx3695_agc_process(ppg_sensor_dat);\r
+}\r
 \r
+void agc_timeout_handler(void *p_context)\r
+{\r
+    // printf("agc_timeout_handler \n");\r
+    hx3695_agc_Int_handle(&ppg_sensor_data);\r
+}\r
 \r
+void heart_rate_meas_timeout_handler(void *p_context)\r
+{\r
+    // printf("heart_rate_meas_timeout_handler \n");\r
+    hx3695_ppg_Int_handle(&ppg_sensor_data);\r
+    hx3695_agc_Int_handle(&ppg_sensor_data);\r
+}\r
 \r
+void nrf_gpioint_handle(void)\r
+{\r
+       hx3695_ppg_Int_handle(&ppg_sensor_data);\r
+    hx3695_agc_Int_handle(&ppg_sensor_data);\r
+}\r
 \r
-#ifdef HRS_BLE_APP\r
-    {\r
-        rawdata_vector_t rawdata;\r
-        SPO2_CAL_SET_T cal= get_spo2_agc_status();\r
-        for(ii=0; ii<*count; ii++)\r
-        {\r
-#ifdef SPO2_DATA_CALI\r
-            ir_data_cali = hx3695_ir_data_cali(ir_buf[ii]);\r
-            red_data_cali = hx3695_red_data_cali(red_buf[ii]);\r
-            rawdata.red_raw_data = red_data_cali>>2;\r
-            rawdata.ir_raw_data = ir_data_cali>>2;\r
-#else\r
-            rawdata.red_raw_data = red_buf[ii];\r
-            rawdata.ir_raw_data = ir_buf[ii];\r
-#endif\r
-            rawdata.vector_flag = SPO2_VECTOR_FLAG;\r
-            rawdata.data_cnt = cal.G_LED;\r
-            rawdata.hr_result = spo2_alg_results.spo2_result;\r
-            rawdata.gsensor_x = (int16_t)(green_buf[ii]>>5);\r
-            rawdata.gsensor_y = cal.R_LEDDAC;\r
-            rawdata.gsensor_z = cal.IR_LEDDAC1;\r
-            rawdata.red_cur = cal.R_LED;\r
-            rawdata.ir_cur = cal.IR_LED1;\r
-            ble_rawdata_vector_push(rawdata);\r
-        }\r
-               ble_rawdata_send_handler();\r
-    }\r
-#endif\r
 \r
-if(hrs_ble_falg)\r
+\r
+#define HRS_WINDOW_SIZE 5\r
+static uint8_t hrs_num = 0;\r
+static int32_t sum_hrs = 0;\r
+static int32_t hrs_data[7] = {0};\r
+static uint8_t left = 0;\r
+static uint8_t right = 0;\r
+static uint8_t avg_hrs = 0;\r
+\r
+static void get_avg_hrs(uint8_t hrs)\r
 {\r
 \r
-        uint8_t encoded_hrm[PPG_DATA_LEN_MAX] = {0};//PPG_DATA_LEN_MAX>17会导致APP连接提示定义设备与所选类型不匹配\r
-        uint8_t red_bit = 0;\r
-        uint8_t ir_bit = 0;\r
-        uint8_t green_bit = 0;\r
-        //rawdata_vector_t rawdata;\r
-        // SPO2_CAL_SET_T cal= get_spo2_agc_status();\r
 \r
-        for(ii=0; ii<*count; ii++)\r
-        {\r
-            if(red_buf[ii]<0)\r
-            {\r
-                red_bit = 0x80;\r
-                red_buf[ii] =  -red_buf[ii];\r
+    if (hrs_num >= HRS_WINDOW_SIZE) {\r
+        sum_hrs -= hrs_data[left];\r
+        left = (left + 1) % HRS_WINDOW_SIZE;\r
+        hrs_num--;\r
+    }\r
+\r
+    hrs_data[right] = hrs;\r
+    sum_hrs += hrs;\r
+    right = (right + 1) % HRS_WINDOW_SIZE;\r
+    hrs_num++;\r
+\r
+\r
+    if (hrs_num > 2) \r
+    {\r
+\r
+        uint8_t first_idx = left;\r
+        int32_t min_hrs = hrs_data[first_idx];\r
+        int32_t max_hrs = hrs_data[first_idx];\r
+\r
+\r
+        for (uint8_t i = 0; i < hrs_num; i++) {\r
+            uint8_t current_idx = (left + i) % HRS_WINDOW_SIZE;\r
+            uint8_t current_hrs = hrs_data[current_idx];\r
+\r
+            if (current_hrs < min_hrs) {\r
+                min_hrs = current_hrs;\r
             }\r
-            if(ir_buf[ii]<0)\r
-            {\r
-                ir_bit = 0x80;\r
-                ir_buf[ii] =  -ir_buf[ii];\r
+            if (current_hrs > max_hrs) {\r
+                max_hrs = current_hrs;\r
             }\r
-\r
-            encoded_hrm[0] = 0x66;//血氧标志位,一定要对\r
-            encoded_hrm[1] = (uint8_t)(spo2_alg_results.data_cnt - *count + ii) % 256;\r
-            encoded_hrm[2] = (uint8_t)(spo2_alg_results.spo2_result& 0xFF);\r
-\r
-            encoded_hrm[3] = (uint8_t)((red_buf[ii] & 0xFF0000) >> 16) | red_bit;      //红灯原始数据\r
-            encoded_hrm[4] = (uint8_t)((red_buf[ii] & 0xFF00) >> 8);\r
-            encoded_hrm[5] = (uint8_t)(red_buf[ii] & 0xFF);\r
-\r
-            encoded_hrm[6] = (uint8_t)((ir_buf[ii] & 0xFF0000) >> 16) | ir_bit;                //ir原始数据\r
-            encoded_hrm[7] = (uint8_t)((ir_buf[ii] & 0xFF00) >> 8);\r
-            encoded_hrm[8] = (uint8_t)(ir_buf[ii] & 0xFF);\r
-\r
-            #ifdef SAR_ALG_LIB\r
-                encoded_hrm[9] = (uint8_t)((gdiff[0]&0xFF00)>>8);//sar diff\r
-                encoded_hrm[10] = (uint8_t)(gdiff[0]&0xFF);\r
-            #else\r
-                encoded_hrm[9] = (uint8_t)((gsen_fifo_x_send[ii]&0xFF00)>>8);//模拟x\r
-                encoded_hrm[10] = (uint8_t)(gsen_fifo_x_send[ii]&0xFF);\r
-            #endif\r
-\r
-            encoded_hrm[11] = (uint8_t)((gsen_fifo_y_send[ii]&0xFF00)>>8);//模拟y\r
-            encoded_hrm[12] = (uint8_t)(gsen_fifo_y_send[ii]&0xFF);\r
-            encoded_hrm[13] = (uint8_t)((gsen_fifo_z_send[ii]&0xFF00)>>8);//模拟z\r
-            encoded_hrm[14] = (uint8_t)(gsen_fifo_z_send[ii]&0xFF);        \r
-            \r
-            encoded_hrm[15] = cal.R_LED;\r
-            encoded_hrm[16] = cal.IR_LED1;\r
-#ifdef SUPPORT_PPG_BLE_SERVICE\r
-            if(cm_custom_ble_service_on_flag())\r
-              ble_ppgtest_server_send_input_report(encoded_hrm,PPG_DATA_LEN_MAX);\r
-#endif \r
         }\r
-    }\r
 \r
+        uint8_t valid_count = hrs_num - 2;\r
+        avg_hrs = (sum_hrs - max_hrs - min_hrs) / valid_count;\r
 \r
-/////////////////////////////////////////////////////////////////////////////////////////////////\r
+        // printf("max_hrs[%d],min_hrs[%d],avg_hrs[%d]\n",max_hrs,min_hrs,avg_hrs);\r
+    }\r
 }\r
-#endif //SPO2_ALG_LIB\r
 \r
+void hx3695_alg_send_data(ppg_sensor_data_t *ppg_sensor_dat, WORK_MODE_T mode, uint8_t data_count)\r
+{\r
+       uint16_t gcc_len = 16;\r
+       hrs_results_t hrs_result = {MSG_HRS_ALG_NOT_OPEN,MSG_LIVING_INITIAL,0,0,0,0,0,0,0,0,0,0,0,0};\r
+       spo2_results_t spo2_result = {MSG_SPO2_ALG_NOT_OPEN,MSG_SPO2_LIVING_INITIAL,0,0,0,0,0,0,0,0,0,0,0};\r
+       hrv_results_t hrv_alg_results= {MSG_HRV_ALG_NOT_OPEN,0,0,0,0,0,1,0,0,0,0};\r
+       switch(mode)\r
+       {\r
+               case HRS_MODE:\r
+               {\r
+//                     tyhx_acc_send_data(gsen_data_x_fifo, gsen_data_y_fifo, gsen_data_z_fifo, gcc_len, 50);\r
+//                     tyhx_hrs_alg_send_data(ppg_sensor_dat->led_data[0].data_val, ppg_sensor_dat->led_data[1].data_val, data_count, 100);\r
+#ifdef SUPPORT_CYWEE_SERVICE\r
+            memset(gsensordata,0.0f,sizeof(gsenson_t) * data_count);\r
 \r
+            cywee_get_gsensor_data(data_count,gsensordata);  \r
 \r
-#if defined(HRS_ALG_LIB) && defined (SPO2_ALG_LIB)\r
-spo2_sensor_data_t  hrspo2_s_data;\r
+            for(int ii=0; ii<data_count; ii++)\r
+            {\r
+            // if(gsensordata[ii].x == 0.0f && gsensordata[ii].y == 0.0f && gsensordata[ii].z == 0.0f)\r
+            // {\r
+            //     timeout++;\r
+            //     if(timeout > 20 && !acc_restart_flag) //避免重复开关gsensor\r
+            //     {\r
+            //         do_cywee_service_check_msg(CYWEE_SERVICE_CMD_RESTART_ACC,NULL);\r
+            //         acc_restart_flag = 1;\r
+            //     }\r
+            // }\r
+            // else\r
+            // {\r
+            //     timeout = 0;\r
+            //     acc_restart_flag = 0;\r
+            // }\r
+\r
+            if(gsensordata[ii].x == 0 && gsensordata[ii].y == 0 && gsensordata[ii].z == 0)\r
+            {\r
+                gsen_data_x_fifo[ii] = gsen_data_x_fifo[ii - 1];\r
+                gsen_data_y_fifo[ii] = gsen_data_y_fifo[ii - 1];\r
+                gsen_data_z_fifo[ii] = gsen_data_z_fifo[ii - 1];\r
+            }\r
+            else\r
+            {\r
+                gsen_data_x_fifo[ii] = gsensordata[ii].x * 4096 / 10;\r
+                gsen_data_y_fifo[ii] = gsensordata[ii].y * 4096 / 10;\r
+                gsen_data_z_fifo[ii] = gsensordata[ii].z * 4096 / 10;\r
+            }\r
+            // cywee_get_gsensor_data(8,gsensordata);  \r
+            // for(ii=0; ii<*count; ii++)\r
+            // {\r
+            //   if(gsensordata[ii].x == 0.0f && gsensordata[ii].y == 0.0f && gsensordata[ii].z == 0.0f)\r
+            //   {\r
+            //       timeout++;\r
+            //       if(timeout > 20)\r
+            //       {\r
+            //           do_cywee_service_check_msg(CYWEE_SERVICE_CMD_RESTART_ACC,NULL);\r
+            //       }\r
+            //   }\r
+            //   else\r
+            //   {\r
+            //       timeout = 0;\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
+            //   if(ii < 9)\r
+            //   {\r
+            //       gsen_fifo_x_send[ii] = gsensordata[ii].x * 4096 / 10;\r
+            //       gsen_fifo_y_send[ii] = gsensordata[ii].y * 4096 / 10;\r
+            //       gsen_fifo_z_send[ii] = gsensordata[ii].z * 4096 / 10;\r
+            //   }\r
+\r
+            // }\r
+            // printf("gsensor:  %d %.3f %.3f %.3f\r\n" ,data_count,gsensordata[ii].x,gsensordata[ii].y,gsensordata[ii].z);\r
+            //PRINT("hxdata:%d/%d %d %d %.3f %.3f %.3f %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
+            //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
+            //PRINT("hxdata:%d/%d %d %d %.3f %.3f %.3f %d\r\n" ,1+ii,*count,PPG_buf[ii],ir_buf[0],gsensordata[ii].x,gsensordata[ii].y,gsensordata[ii].z,ppg_s_data.green_cur);\r
 \r
-void hx3695_hrspo2_ppg_Int_handle(void)\r
-{\r
-    uint8_t     ii=0;\r
-    spo2_results_t  spo2_alg_results = {MSG_SPO2_ALG_NOT_OPEN,0,0,0,0,0,0,0,0,0,0,0,0};\r
-    hrs_results_t   alg_results = {MSG_HRS_ALG_NOT_OPEN,0,0,0,0,0,0};\r
-    spo2_wear_msg_code_t spo2_wear_status = MSG_SPO2_NO_WEAR;\r
-    SPO2_CAL_SET_T cal = get_spo2_agc_status();\r
-    int32_t *red_buf = &(hrspo2_s_data.red_data[0]);\r
-    int32_t *ir_buf = &(hrspo2_s_data.ir_data1[0]);\r
-    int32_t *green_buf = &(hrspo2_s_data.red_data[0]);       // &(hrspo2_s_data.green_data[0]);\r
-    uint8_t *count = &(ppg_s_data.count);\r
-    int16_t gsen_fifo_x_send[32]= {0};\r
-    int16_t gsen_fifo_y_send[32]= {0};\r
-    int16_t gsen_fifo_z_send[32]= {0};\r
-#ifdef SPO2_DATA_CALI\r
-    int32_t red_data_cali, ir_data_cali;\r
+            }\r
 #endif\r
+            factory_data = ppg_sensor_dat->led_data[0].data_val;\r
+            // printf("factory_data:%d\n", factory_data);\r
+                       tyhx_hrs_alg_send_data(ppg_sensor_dat->led_data[0].data_val,data_count, gsen_data_x_fifo, gsen_data_y_fifo, gsen_data_z_fifo, ppg_sensor_dat->led_data[0].offset_idac);\r
+                       //tyhx_hrs_alg_send_data(ppg_sensor_dat->led_data[0].data_val,data_count, gsen_data_x_fifo, gsen_data_y_fifo, gsen_data_z_fifo);\r
+                       hrs_result = tyhx_hrs_alg_get_results();\r
+                       DEBUG_PRINTF("HRS: %d %d\r\n",hrs_result.data_cnt, hrs_result.hr_result);\r
+                       // printf("hr:%d\n", hrs_result.hr_result);\r
+            get_avg_hrs(hrs_result.hr_result);\r
+                       break;\r
+               }\r
+               case SPO2_MODE:\r
+               {\r
+                       tyhx_spo2_alg_send_data(ppg_sensor_dat->led_data[1].data_val, ppg_sensor_dat->led_data[2].data_val, ppg_sensor_dat->led_data[0].data_val, \\r
+                       ppg_sensor_dat->led_data[1].offset_idac, ppg_sensor_dat->led_data[2].offset_idac,ppg_sensor_dat->led_data[0].offset_idac, \\r
+                       gsen_data_x_fifo, gsen_data_y_fifo, gsen_data_z_fifo, data_count);\r
+                       spo2_result = tyhx_spo2_alg_get_results();\r
+                       DEBUG_PRINTF("SPO2: %d %d\r\n",spo2_result.data_cnt, spo2_result.spo2_result);\r
+                       // printf("spo2:%d\n", spo2_result.spo2_result);\r
+            spo2_ret = spo2_result.spo2_result;\r
+            break;\r
+               }\r
+               case HRV_MODE:\r
+               {\r
+               hrv_alg_results = tyhx_hrv_alg_send_bufdata(ppg_sensor_dat->led_data[0].data_val,data_count, gsen_data_x_fifo, gsen_data_y_fifo, gsen_data_z_fifo);\r
+                       DEBUG_PRINTF("data_cnt:%d hrv_result:%d motion:%d p_m:%d screen_up:%d signal_quality:%d \r\n", hrv_alg_results.data_cnt,hrv_alg_results.hrv_result,hrv_alg_results.motion,hrv_alg_results.p_m,hrv_alg_results.screen_up,hrv_alg_results.signal_quality);\r
+            // printf("hrv:%d\n",hrv_alg_results.hrv_result);\r
+                       break;\r
+               }\r
+               default:\r
+               {\r
+                       break;\r
+               }\r
+       }\r
+}\r
 \r
-    if(hx3695_spo2_read(&hrspo2_s_data) == 0)\r
-    {\r
-        return;\r
-    }\r
-               \r
-#ifndef GSEN_40MS_TIMMER\r
-//readFifoByHrsModule();\r
-#endif\r
-       //DEBUG_PRINTF("\r\nsend  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
 \r
-    // }\r
-    spo2_wear_status = hx3695_spo2_get_wear_status();\r
-    if(spo2_wear_status == MSG_SPO2_WEAR)\r
+void hx3695_ppg_Int_handle(ppg_sensor_data_t *ppg_sensor_dat)\r
+{\r
+       uint16_t count = 0;\r
+       uint16_t ii = 0;\r
+       if(s_ppg_state == 0)\r
+               {\r
+               return;\r
+       }\r
+       count = hx3695_read_fifo_data(ppg_sensor_dat);\r
+    if(count > 0)\r
     {\r
-        tyhx_spo2_alg_send_data(red_buf, ir_buf, green_buf, cal.R_LEDDAC, cal.IR_LEDDAC1, cal.R_LEDDAC, gsen_fifo_x_send, gsen_fifo_y_send, gsen_fifo_z_send, *count);\r
-        //tyhx_hrs_alg_send_data(green_buf,*count, gsen_fifo_x_send, gsen_fifo_y_send, gsen_fifo_z_send);\r
-        //DEBUG_PRINTF("%d/%d %d %d %d %d %d %d\r\n" ,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
+        hx3695_check_wear(ppg_sensor_dat);\r
+        if(wear_status == MSG_WEAR)\r
+        {\r
+            hx3695_alg_send_data(ppg_sensor_dat,work_mode_flag,count);\r
+        }\r
     }\r
-    //DEBUG_PRINTF("%d %d %d %d %d %d\r\n", cal.R_LED, cal.IR_LED, cal.G_LED, cal.R_LEDDAC, cal.IR_LEDDAC, cal.G_LEDDAC);\r
 \r
-    spo2_alg_results = tyhx_spo2_alg_get_results();\r
-    alg_results = tyhx_hrs_alg_get_results();\r
-    //DEBUG_PRINTF("spo2_wear_status: %d, hr_result:%d, spo2_result:%d\r\n" ,spo2_wear_status, spo2_alg_results.hr_result,spo2_alg_results.spo2_result);\r
+       for(ii=0;ii<count;ii++)\r
+       {\r
+               DEBUG_PRINTF("%d/%d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\r\n", ii+1, count, ppg_sensor_dat->led_data[0].data_val[ii], ppg_sensor_dat->led_data[1].data_val[ii],ppg_sensor_dat->led_data[2].data_val[ii], ppg_sensor_dat->led_data[3].data_val[ii],  \\r
+               ppg_sensor_dat->led_data[0].led_current, ppg_sensor_dat->led_data[0].offset_idac, ppg_sensor_dat->led_data[1].led_current, ppg_sensor_dat->led_data[1].offset_idac,ppg_sensor_dat->led_data[2].led_current, ppg_sensor_dat->led_data[2].offset_idac);\r
+       }\r
+}\r
 \r
-/////////////////////////////////////////BLE+DISPLAY//////////////////////////////////////////\r
+uint8_t hx3695_get_hrs(void)\r
+{\r
+    return avg_hrs;\r
+}\r
+\r
+uint8_t hx3695_get_spo2(void)\r
+{\r
+    return spo2_ret;\r
+}\r
 \r
-#ifdef HRS_BLE_APP\r
-    {\r
-        rawdata_vector_t rawdata;\r
-        SPO2_CAL_SET_T cal= get_spo2_agc_status();\r
-        for(ii=0; ii<*count; ii++)\r
-        {\r
-#ifdef SPO2_DATA_CALI\r
-            ir_data_cali = hx3695_ir_data_cali(ir_buf[ii]);\r
-            red_data_cali = hx3695_red_data_cali(red_buf[ii]);\r
-            rawdata.red_raw_data = red_data_cali>>2;\r
-            rawdata.ir_raw_data = ir_data_cali>>2;\r
-#else\r
-            rawdata.red_raw_data = red_buf[ii];\r
-            rawdata.ir_raw_data = ir_buf[ii];\r
-#endif\r
-            rawdata.vector_flag = SPO2_VECTOR_FLAG;\r
-            rawdata.data_cnt = cal.G_LEDDAC;\r
-            rawdata.hr_result = spo2_alg_results.spo2_result;\r
-            rawdata.gsensor_x = (int16_t)(green_buf[ii]>>5);\r
-            rawdata.gsensor_y = cal.R_LEDDAC;\r
-            rawdata.gsensor_z = cal.IR_LEDDAC1;\r
-            rawdata.red_cur = cal.R_LED;\r
-            rawdata.ir_cur = cal.IR_LED1;\r
-            ble_rawdata_vector_push(rawdata);\r
-        }\r
-               ble_rawdata_send_handler();\r
-    }\r
-#endif\r
 \r
-/////////////////////////////////////////////////////////////////////////////////////////////////\r
+uint8_t hx3695_get_wear_status(void)\r
+{\r
+    return wear_status;\r
 }\r
-#endif //defined(HRS_ALG_LIB) && defined (SPO2_ALG_LIB)\r
 \r
-#ifdef HRV_ALG_LIB\r
-hrv_sensor_data_t   hrv_s_dat;\r
-void hx3695_hrv_ppg_Int_handle(void)\r
+void hx3695_set_hrs_ble_swtich(uint8_t cmd)\r
 {\r
-    uint8_t        ii=0;\r
-    hrv_results_t hrv_alg_results= {MSG_HRV_ALG_NOT_OPEN,0,0,0,0,0,1,0,0};\r
-    int32_t *PPG_buf = &(hrv_s_dat.green_data[0]);\r
-    int32_t *ir_buf = &(hrv_s_dat.ir_data[0]);\r
-    uint8_t *count = &(hrv_s_dat.count);\r
-    hrv_wear_msg_code_t hrv_wear_status = MSG_HRV_NO_WEAR;\r
-    int16_t gsen_fifo_x_send[64]= {0};\r
-    int16_t gsen_fifo_y_send[64]= {0};\r
-    int16_t gsen_fifo_z_send[64]= {0};\r
-\r
-    // DEBUG_PRINTF("1111 \r\n" );\r
-#ifdef HRV_TESTVEC\r
-    int32_t hrm_raw_data;\r
-    hrm_raw_data = vec_data[vec_data_cnt];\r
-    vec_data_cnt++;\r
-    alg_hrv_results = hx3695_hrv_alg_send_data(hrm_raw_data, 0, 0);\r
-#else\r
-    if(hx3695_hrv_read(&hrv_s_dat) == 0)\r
-    {\r
-        TYHX_LOG("read ppg_s data invalid\r\n");\r
-        return;\r
-    }\r
-               \r
-#ifndef GSEN_40MS_TIMMER\r
-//    readFifoByHrsModule();\r
-#endif\r
-       DEBUG_PRINTF("\r\nsend  jlink cnt=%d\r\n",*count);                              \r
-       \r
-    for(ii=0; ii<*count; ii++)\r
-    {\r
-        gsen_fifo_x_send[ii] = gsen_fifo_x[32-8+ii%8];\r
-        gsen_fifo_y_send[ii] = gsen_fifo_y[32-8+ii%8];\r
-        gsen_fifo_z_send[ii] = gsen_fifo_z[32-8+ii%8];\r
-        //  DEBUG_PRINTF("%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] );\r
+  hrs_ble_falg = cmd;\r
+  // PRINT("hrs_ble_falg : %d \n",hrs_ble_falg);\r
+}\r
 \r
-    }\r
-    hrv_wear_status = hx3695_hrv_get_wear_status();\r
-//    DEBUG_PRINTF("wear:%d \r\n" ,hrv_wear_status);\r
-    if(hrv_wear_status==MSG_HRS_WEAR)\r
-    {\r
-        hrv_alg_results = tyhx_hrv_alg_send_bufdata(PPG_buf, *count, gsen_fifo_x_send, gsen_fifo_y_send, gsen_fifo_z_send);\r
-        hrsresult.lastesthrv = hrv_alg_results.hrv_result;\r
-        TYHX_LOG("get the hrv = %d\r\n",hrv_alg_results.hrv_result);\r
-    }\r
-    //--------------adjust----------------\r
-//     hrv_alg_results.motion,hrv_alg_results.screen_up;\r
-    //DEBUG_PRINTF("data_cnt:%d hrv_result:%d motion:%d p_m:%d screen_up:%d signal_quality:%d \r\n", hrv_alg_results.data_cnt,hrv_alg_results.hrv_result,hrv_alg_results.motion,hrv_alg_results.p_m,hrv_alg_results.screen_up,hrv_alg_results.signal_quality);\r
+uint8_t hx3695_get_hrs_ble_swtich(void)\r
+{\r
+  uint8_t cmd = hrs_ble_falg;\r
+  return cmd;\r
+}\r
+\r
+void hx3695_wearstatus_update(void)\r
+{\r
+    // if(history_wear_status != wear_result)\r
+    // {\r
+    //     history_wear_status = wear_result;\r
+#ifdef SUPPORT_CYWEE_SERVICE\r
+        // do_cywee_service_check_msg(CYWEE_SERVICE_CMD_WEAR_STATUS_CHANGE,&wear_status);\r
+        cywee_wear_status_update(&wear_status);\r
 #endif\r
+    // }\r
+}\r
+  //脱腕上报未佩戴信息\r
+void hx3695_unwearstatus_update(void)\r
+{\r
+  // hx3695_msg_callback_t func =  hx3695_get_send_msg_callback_func();\r
+  // if(func != NULL && !uapi_dev_runtime_get_train_status())\r
+  // {\r
+  //   hrsresult.lastesthrs = 0;\r
+  //   hrsresult.wearstatus = 0;\r
+  //   //为了主界面脱腕灵敏;需要增加未佩戴\r
+  //   func(HX3695_MSG_TYPE_HRS_UPDATE, &hrsresult, sizeof(FT_CUSTOM_RESULTS_t));\r
+  //   func(HX3695_MSG_TYPE_WEARSTAT_UPDATE, &hrsresult,sizeof(FT_CUSTOM_RESULTS_t));\r
+  //   func(HX3695_MSG_TYPE_WEARSTAT_UPDATE,&hrsresult,sizeof(FT_CUSTOM_RESULTS_t));\r
+  //   func(HX3695_MSG_TYPE_WEARSTAT_UPDATE,&hrsresult,sizeof(FT_CUSTOM_RESULTS_t));\r
+  // }\r
 \r
-/////////////////////////////////////////BLE+DISPLAY//////////////////////////////////////////\r
+  if(uapi_dev_runtime_get_train_status())\r
+  {\r
+      wear_result = 0;\r
+      hx3695_wearstatus_update();\r
+      avg_hrs = 0;\r
 \r
+  }\r
+}         \r
 \r
-#ifdef HRS_BLE_APP\r
+void wear_mode_timeout_handler(void * p_context)\r
+{\r
+    // printf("wear_mode_timeout_handler \n");\r
+    if(work_mode_flag == WEAR_MODE)\r
     {\r
-        rawdata_vector_t rawdata;\r
-        HRS_CAL_SET_T cal= get_hrs_agc_status();\r
-        for(ii=0; ii<*count; ii++)\r
-        {\r
-            rawdata.vector_flag = HRS_VECTOR_FLAG;\r
-            rawdata.data_cnt = 0;\r
-            rawdata.hr_result = hrv_alg_results.hrv_result;\r
-            rawdata.red_raw_data = PPG_buf[ii];\r
-            rawdata.ir_raw_data = 0;\r
-            rawdata.gsensor_x = gsen_fifo_x_send[ii];\r
-            rawdata.gsensor_y = gsen_fifo_y_send[ii];\r
-            rawdata.gsensor_z = gsen_fifo_z_send[ii];\r
-            rawdata.red_cur = cal.Group1_Cur;\r
-            rawdata.ir_cur = 0;\r
-            ble_rawdata_vector_push(rawdata);\r
-        }\r
+        #ifdef CHECK_TOUCH_LIB\r
+          hx3695_ppg_Int_handle(&ppg_sensor_data);\r
+        #endif\r
     }\r
+}\r
 \r
-    ble_rawdata_send_handler();\r
-#endif\r
+void hx3695_spo2_disable(void)\r
+{\r
+    hx3695_ppg_set_mode(PPG_OFF);\r
+    tyhx_spo2_alg_close();\r
 \r
-//////////////////////////////////////////////////////////////////////////////////////////////\r
+    AGC_LOG("hx3695 disable!\r\n");\r
 }\r
-#endif\r
 \r
-#ifdef CHECK_TOUCH_LIB\r
-void hx3695_wear_ppg_Int_handle(void)\r
+void hx3695_hrs_disable(void)\r
 {\r
-//     PRINT("hx3695_wear_ppg_Int_handle  wearstatus = %d\r\n", hrsresult.wearstatus);\r
-    uint8_t *count = &(ppg_s_data.count);\r
-    int32_t *ir_buf = &(ppg_s_data.ir_data[0]);\r
-    hx3695_wear_msg_code_t hx3695_wear_status;\r
-       \r
-    hx3695_check_touch_read(&ppg_s_data);\r
-    wear_status = hx3695_check_touch_send_data(ir_buf,*count);\r
-    hx3695_wearstatus_update();\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
+    hx3695_ppg_set_mode(PPG_OFF);\r
+    tyhx_hrs_alg_close();\r
+    AGC_LOG("hx3695 disable!\r\n");\r
 }\r
-#endif\r
 \r
-#ifdef LAB_TEST\r
-void hx3695_lab_test_Int_handle(void)\r
+void hx3695_hrv_disable(void)\r
 {\r
-    NOISE_PS_T ps_noise;\r
-    ps_noise = hx3695_lab_test_read_packet();\r
-    DEBUG_PRINTF("%d %d %d %d\r\n", ps_noise.p1_noise, ps_noise.p2_noise, ps_noise.p3_noise, ps_noise.p4_noise);\r
+    hx3695_ppg_set_mode(PPG_OFF);\r
+    tyhx_hrv_alg_close();\r
+\r
+    AGC_LOG("hx3695 hrv disable!\r\n");\r
 }\r
-#endif\r
 \r
 void hx3695_control(char *mode,uint8_t enable)\r
 {\r
@@ -3885,15 +1542,13 @@ void hx3695_control(char *mode,uint8_t enable)
         md = FT_LED_OFF_MODE;\r
     } else if (strcmp(mode, "wear") == 0) {\r
         md = WEAR_MODE;\r
-    } else if (strcmp(mode, "single") == 0) {\r
-        md = FT_SINGLE_CHECK_MODE;\r
-    } \r
+    }\r
 \r
 \r
     if (enable == 1 || md == FT_LED_OFF_MODE) {\r
         hx3695_init(md);\r
     } else {\r
-       if(md == HRS_MODE|| md == FT_LEAK_LIGHT_MODE || md == FT_GRAY_CARD_MODE || md == WEAR_MODE || md == FT_SINGLE_CHECK_MODE)\r
+       if(md == HRS_MODE|| md == FT_LEAK_LIGHT_MODE || md == FT_GRAY_CARD_MODE || md == WEAR_MODE)\r
         {\r
 #ifdef HRS_ALG_LIB   \r
             hx3695_hrs_disable();\r
@@ -3912,7 +1567,7 @@ void hx3695_control(char *mode,uint8_t enable)
             left = 0;\r
             right = 0;\r
             avg_hrs = 0;\r
-            wear_cnt = 0;\r
+            // wear_cnt = 0;\r
 #endif\r
         }else  if(md == HRV_MODE)\r
         {\r
@@ -3933,6 +1588,7 @@ void hx3695_control(char *mode,uint8_t enable)
     }\r
 }\r
 \r
+\r
 int32_t hx3695_get_factory_data(void)\r
 {\r
     int32_t data = factory_data;\r
@@ -3940,5 +1596,3 @@ int32_t hx3695_get_factory_data(void)
     return data;\r
 }\r
 \r
-#endif  //CHIP_HX3695\r
-\r
index f976cb8..4402b85 100644 (file)
@@ -24,279 +24,216 @@ NEW_GSEN_SCHME     DEMO调试使用, 客户关闭
 */\r
 #define HRS_ALG_LIB   \r
 #define SPO2_ALG_LIB\r
-//#define HRV_ALG_LIB\r
+ #define HRV_ALG_LIB\r
 #define CHECK_TOUCH_LIB\r
-//#define CHECK_LIVING_LIB\r
-//#define BP_CUSTDOWN_ALG_LIB\r
+// #define CHECK_LIVING_LIB\r
+#define BP_CUSTDOWN_ALG_LIB\r
 \r
 //**************** read_data_mode ******************//\r
-#define TIMMER_MODE           //timmer read fifo\r
-//#define INT_MODE                             //fifo_all_most_full\r
+ #define TIMMER_MODE           //timmer read fifo\r
+//#define INT_MODE // this  is  fifo_all_most_full  mode\r
 \r
 //****************** gsen_cgf *********************//\r
-//#define GSEN_40MS_TIMMER\r
-//#define NEW_GSEN_SCHME\r
+// #define GSEN_40MS_TIMMER\r
+// #define NEW_GSEN_SCHME\r
 \r
+//#define TYHX_DEMO           // for ty demo\r
+//#define DOUBLE_GREEN\r
 //****************** other_cgf ********************//\r
+// #define EVB\r
 #define DEMO_COMMON\r
-//#define HRS_BLE_APP\r
-//#define SPO2_DATA_CALI\r
+// #define HRS_BLE_APP\r
+// #define SPO2_DATA_CALI\r
 \r
 //***************** vecter_swi ********************//\r
-//#define SPO2_VECTOR\r
-//#define HR_VECTOR\r
-//#define HRV_TESTVEC\r
+// #define SPO2_VECTOR\r
+// #define HR_VECTOR\r
+// #define HRV_TESTVEC\r
 \r
 //**************** lab_test_mode ******************//\r
-//#define LAB_TEST             \r
-//#define LAB_TEST_AGC                                                 \r
+// #define LAB_TEST\r
+// #define LAB_TEST_AGC\r
 \r
 //****************** print_swi ********************//\r
-#define HRS_DEBUG\r
+//#define HRS_DEBUG\r
 //#define AGC_DEBUG\r
+//#define TYHX_DEBUG\r
 \r
 //**************************************************//\r
-#define PREFIX_PRINTF(_message,...) //printf(_message,##__VA_ARGS__)\r
-\r
-#define SEGGER_RTT_printf(_message, ...) //printf(_message,##__VA_ARGS__)\r
+// #ifdef TYHX_DEBUG\r
+// #define  TYHX_LOG(...)     SEGGER_RTT_printf(0,__VA_ARGS__)\r
+// #else\r
+// #define      TYHX_LOG(...)\r
+// #endif\r
 \r
 #ifdef AGC_DEBUG\r
 #define  AGC_LOG(...)     SEGGER_RTT_printf(0,__VA_ARGS__)\r
 #else\r
-#define         AGC_LOG(...)   PREFIX_PRINTF("hx3695 agc=>"__VA_ARGS__)\r
+#define         AGC_LOG(...)\r
 #endif\r
 \r
 #ifdef HRS_DEBUG\r
 #define  DEBUG_PRINTF(...)     SEGGER_RTT_printf(0,__VA_ARGS__)\r
 #else\r
-#define         DEBUG_PRINTF(...)  PREFIX_PRINTF("hx3695 debug=>"__VA_ARGS__)\r
+#define         DEBUG_PRINTF(...)\r
 #endif\r
 \r
-\r
 #if defined(DEMO_COMMON)\r
-       #define HRS4100_IIC_CLK  30\r
-       #define HRS4100_IIC_SDA  0   \r
-       #define LIS3DH_IIC_CLK   18\r
-       #define LIS3DH_IIC_SDA   16\r
-       #define EXT_INT_PIN      1\r
-       #define GREEN_LED_SLE    0x50  //demo 0x10  evb 2\r
-       #define RED_LED_SLE      0x80  //demo 0x20  evb 4 \r
-       #define IR_LED_SLE       0x20  //demo 0x40  evb 1\r
-       #define RED_AGC_OFFSET   64   //32\r
-       #define IR_AGC_OFFSET    64   //32\r
-       #define GREEN_AGC_OFFSET 20   //10\r
-       #define HR_GREEN_AGC_OFFSET 48\r
-       #define HR_GREEN1_AGC_OFFSET 48\r
-       #define HR_GREEN2_AGC_OFFSET 48\r
-       #define HR_GREEN3_AGC_OFFSET 48\r
-       #define HRS_PD   0x0F   //  PD1:1    PD2:2    PD3:4   PD4:8\r
-  #define SPO2_PD   0x02   //  PD1:1    PD2:2    PD3:4   PD4:8\r
-       \r
-       #define BIG_SCREEN\r
-       \r
-#elif defined(DEMO_MI)\r
-       #define HRS4100_IIC_CLK  30\r
-       #define HRS4100_IIC_SDA  0   \r
-       #define LIS3DH_IIC_CLK   18\r
-       #define LIS3DH_IIC_SDA   16\r
-       #define EXT_INT_PIN      1\r
-       #define GREEN_LED_SLE    1\r
-       #define RED_LED_SLE      2\r
-       #define IR_LED_SLE       4\r
-       #define RED_AGC_OFFSET   50\r
-       #define IR_AGC_OFFSET    50\r
-       #define GREEN_AGC_OFFSET 4\r
-       #define HR_GREEN_AGC_OFFSET 4\r
-       #define BIG_SCREEN\r
-       \r
-#elif defined(DEMO_NEW)\r
-       #define HRS4100_IIC_CLK  30\r
-       #define HRS4100_IIC_SDA  0   \r
-       #define LIS3DH_IIC_CLK   18\r
-       #define LIS3DH_IIC_SDA   16\r
-       #define EXT_INT_PIN      1\r
-       #define GREEN_LED_SLE    1\r
-       #define RED_LED_SLE      2\r
-       #define IR_LED_SLE       4\r
-       #define RED_AGC_OFFSET   75\r
-       #define IR_AGC_OFFSET    75\r
-       #define GREEN_AGC_OFFSET 4\r
-       #define HR_GREEN_AGC_OFFSET 8\r
-       #define BIG_SCREEN\r
-  \r
-#elif defined(EVB)\r
        #define HRS4100_IIC_CLK  9\r
-       #define HRS4100_IIC_SDA  10  \r
+       #define HRS4100_IIC_SDA  10\r
        #define LIS3DH_IIC_CLK   13\r
        #define LIS3DH_IIC_SDA   14\r
        #define EXT_INT_PIN      11\r
-       #define GREEN_LED_SLE    1\r
-       #define RED_LED_SLE      2\r
-       #define IR_LED_SLE       4\r
-       #define RED_AGC_OFFSET   64\r
-       #define IR_AGC_OFFSET    64\r
-       #define GREEN_AGC_OFFSET 8\r
-       #define HR_GREEN_AGC_OFFSET 10\r
-    \r
-#else\r
-       #define GREEN_LED_SLE    1\r
-       #define RED_LED_SLE      4\r
-       #define IR_LED_SLE       2\r
-       #define RED_AGC_OFFSET   64\r
-       #define IR_AGC_OFFSET    64\r
-       #define GREEN_AGC_OFFSET 8\r
-    \r
+\r
+    #define FIFO_DATA_LENGTH 200  //fifo_max = 256\r
+    #define PHASE_DATA_LENGTH 64  \r
+\r
+    #define LED0_LDR_SEL    0x50  //�̵�\r
+    #define LED1_LDR_SEL    0x80  // ���\r
+    #define LED2_LDR_SEL    0x20  // ����\r
+    #define LED3_LDR_SEL    0x20  // ����\r
+\r
+    #define LED0_PD_SEL    0x0F  //ѡpd1\r
+    #define LED1_PD_SEL    0x02\r
+    #define LED2_PD_SEL    0x02\r
+    #define LED3_PD_SEL    0x02\r
+               \r
+               #ifdef DOUBLE_GREEN\r
+               #define LED1N_LDR_SEL   0x01\r
+               #define LED1N_PD_SEL    0x01\r
+               #endif\r
+               \r
+    #define CHECK_TOUCH_NUM 5  //��������ʱ,N��data\r
+    #define CHECK_WEAR_THRE 30000 \r
+    #define CHECK_UNWEAR_THRE 20000\r
+#elif defined(EVB)\r
+               #define HRS4100_IIC_CLK  9\r
+               #define HRS4100_IIC_SDA  10\r
+               #define LIS3DH_IIC_CLK   13\r
+               #define LIS3DH_IIC_SDA   14\r
+               #define EXT_INT_PIN      11\r
+\r
+               #define FIFO_DATA_LENGTH 200  //fifo_max = 256\r
+               #define PHASE_DATA_LENGTH 64  \r
+\r
+    #define LED0_LDR_SEL    0x10  //�̵�\r
+    #define LED1_LDR_SEL    0x08  // ���\r
+    #define LED2_LDR_SEL    0x80  // ����\r
+    #define LED3_LDR_SEL    0x80  // ����\r
+\r
+    #define LED0_PD_SEL    0x06  //ѡpd2��pd3\r
+    #define LED1_PD_SEL    0x06\r
+    #define LED2_PD_SEL    0x06\r
+    #define LED3_PD_SEL    0x02\r
+               #ifdef DOUBLE_GREEN\r
+               #define LED1N_LDR_SEL   0x03\r
+               #define LED1N_PD_SEL    0x02\r
+               #endif\r
+               #define CHECK_TOUCH_NUM 5  //��������ʱ,N��data\r
+               #define CHECK_WEAR_THRE 30000 \r
+               #define CHECK_UNWEAR_THRE 20000\r
 #endif\r
 \r
-typedef enum {    \r
-       PPG_INIT, \r
-       PPG_OFF, \r
+typedef enum {\r
+       PPG_INIT,\r
+       PPG_OFF,\r
        PPG_LED_OFF,\r
        CAL_INIT,\r
        CAL_OFF,\r
-       RECAL_INIT    \r
+       RECAL_INIT\r
 } hx3695_mode_t;\r
 \r
-typedef enum {    \r
-       SENSOR_OK, \r
-       SENSOR_OP_FAILED,   \r
-} SENSOR_ERROR_T;\r
-\r
-\r
-typedef enum {    \r
-       DATA_TYPE_PPG, \r
-       DATA_TYPE_GSEN,   \r
-} SENSOR_TYPE_T;\r
+typedef enum {\r
+       MSG_NO_WEAR,\r
+       MSG_WEAR,\r
+  MSG_NO_INIT\r
+} wear_msg_code_t;\r
 \r
-typedef enum {    \r
-       HRS_MODE,  // 0\r
-       SPO2_MODE,  // 1\r
-       HRSPO2_MODE,  // 2\r
-       WEAR_MODE,  //3\r
-       HRV_MODE,  // 4\r
-       LIVING_MODE,  // 5\r
-       LAB_TEST_MODE,  // 6\r
-       FT_LEAK_LIGHT_MODE,  // 7\r
-       FT_GRAY_CARD_MODE,  // 8\r
-       FT_INT_TEST_MODE,  // 9\r
-       FT_SINGLE_CHECK_MODE,\r
+typedef enum {\r
+    HRS_MODE,\r
+    SPO2_MODE,\r
+    WEAR_MODE,\r
+    HRV_MODE,\r
+    HRSDAILY_MODE,\r
+    LIVING_MODE,\r
+    LAB_TEST_MODE,\r
+    FT_LEAK_LIGHT_MODE,\r
+    FT_GRAY_CARD_MODE,\r
+    FT_INT_TEST_MODE,\r
+    AGING_CHECK_MODE,\r
     FT_LED_OFF_MODE,\r
     FT_WEAR_MODE,\r
-    NEW_PPG_TEST_MODE,\r
     NULL_MODE,\r
 } WORK_MODE_T;\r
 \r
-\r
-//typedef struct {\r
-//     uint8_t count;\r
-//     int32_t green_data[64];\r
-//     int32_t ir_data[64];\r
-//     int32_t s_buf[64]; \r
-//     uint32_t als;\r
-//     uint32_t agc_green;\r
-//} hrs_sensor_data_t;\r
-\r
-\r
-typedef struct {\r
-       uint8_t count;\r
-       int32_t red_data[64];\r
-       int32_t green_data[64];\r
-       int32_t ir_data[64];  \r
-       int32_t s_buf[64];\r
-       uint8_t green_cur;\r
-       uint8_t red_cur; \r
-       uint8_t ir_cur;\r
-       uint8_t green_offset;\r
-       uint8_t red_offset; \r
-       uint8_t ir_offset;     \r
-}ppg_sensor_data_t;\r
-\r
-typedef enum {\r
-  MSG_LIVING_INIT,\r
-       MSG_LIVING_NO_WEAR,\r
-       MSG_LIVING_WEAR\r
-} hx3695_living_wear_msg_code_t;\r
-\r
 typedef enum {\r
-       MSG_NO_WEAR,\r
-       MSG_WEAR\r
-} hx3695_wear_msg_code_t;\r
+       InActivating,\r
+    InActivated,\r
+       Activating,\r
+    Activated,\r
+} led_state_t;\r
 \r
 typedef struct {\r
-       hx3695_living_wear_msg_code_t  wear_status;\r
-       uint32_t           data_cnt;\r
-       uint8_t            signal_quality;\r
-       uint8_t            motion_status;\r
-} hx3695_living_results_t;\r
+       int32_t data_val[PHASE_DATA_LENGTH];\r
+    uint8_t data_count;\r
+       uint16_t led_current;\r
+       uint8_t offset_idac;\r
+    uint8_t tia_rf;\r
+    led_state_t led_state;\r
+    bool isneed_cal_start;\r
+}led_data_t;\r
 \r
 typedef struct {\r
-  int32_t p1_noise; \r
-       int32_t p2_noise; \r
-       int32_t p3_noise;\r
-       int32_t p4_noise;\r
-}NOISE_PS_T;\r
-\r
+       WORK_MODE_T mode;\r
+       led_data_t led_data[4];\r
+  uint8_t s_buf[FIFO_DATA_LENGTH*3];\r
+  uint8_t led_activated;\r
+  uint8_t watermark;\r
+  uint8_t fs;\r
+}ppg_sensor_data_t;\r
 \r
-extern uint8_t alg_ram[11*1024];\r
-//extern uint8_t alg_ram[10];\r
+extern uint8_t alg_ram[11 * 1024];\r
 \r
 void hx3695_delay_us(uint32_t us);\r
 void hx3695_delay_ms(uint32_t ms);\r
-bool hx3695_write_reg(uint8_t addr, uint8_t data); \r
-uint8_t hx3695_read_reg(uint8_t addr); \r
-bool hx3695_brust_read_reg(uint8_t addr , uint8_t *buf, uint16_t length);\r
+bool hx3695_write_reg(uint8_t addr, uint8_t data);\r
+uint8_t hx3695_read_reg(uint8_t addr);\r
+void hx3695_brust_read_reg(uint8_t addr, uint8_t *buf, uint16_t length);\r
 uint8_t hx3695_chip_check(void);\r
-void hx3695_get_id(uint8_t *ppg_id);\r
 uint8_t hx3695_read_fifo_size(void);\r
-uint16_t hx3695_read_fifo_data(int32_t *s_buf, uint8_t size, uint8_t phase_num);\r
+uint16_t hx3695_read_fifo_data(ppg_sensor_data_t *ppg_sensor_data);\r
+uint16_t hx3695_led_data_analysis(ppg_sensor_data_t *ppg_sensor_dat, uint16_t fifo_read_length, uint8_t sig);\r
+void hx3695_get_led_para(ppg_sensor_data_t *ppg_sensor_dat);\r
+void hx3695_read_phase_data(int32_t *s_buf);\r
+void hx3695_read_led_data(int32_t *s_buf);\r
 void hx3695_ppg_off(void);\r
-void hx3695_ppg_on(void);  \r
+void hx3695_ppg_on(void);\r
+void hx3695_ppg_para_init(ppg_sensor_data_t *ppg_sensor_dat);\r
+void hx3695_wear_low_power(ppg_sensor_data_t *ppg_sensor_dat);\r
+void hx3695_set_fs(ppg_sensor_data_t *ppg_sensor_dat);\r
+void hx3695_set_watermark(ppg_sensor_data_t *ppg_sensor_dat);\r
+void hx3695_led_control(ppg_sensor_data_t *ppg_sensor_dat, uint8_t index);\r
+void hx3695_updata_sensor(ppg_sensor_data_t *ppg_sensor_dat);\r
+void hx3695_hrs_enable(ppg_sensor_data_t *ppg_sensor_dat);\r
+void hx3695_spo2_enable(ppg_sensor_data_t *ppg_sensor_dat);\r
+void hx3695_hrv_enable(ppg_sensor_data_t *ppg_sensor_dat);\r
+void hx3695_ppg_set_mode(uint8_t mode_cmd);\r
 void hx3695_320ms_timer_cfg(bool en);\r
 void hx3695_40ms_timer_cfg(bool en);\r
 void hx3695_5000ms_timer_cfg(bool en);\r
 void hx3695_gpioint_cfg(bool en);\r
 bool hx3695_init(WORK_MODE_T mode);\r
-void hx3695_agc_Int_handle(void); \r
-void hx3695_gesensor_Int_handle(void);\r
-void hx3695_spo2_ppg_init(void);\r
-void hx3695_spo2_data_cali_init(void);\r
-void hx3695_spo2_ppg_Int_handle(void);\r
-void hx3695_check_touch_init(void);\r
-void hx3695_wear_ppg_Int_handle(void);\r
-void hx3695_hrs_ppg_init(void);\r
-void hx3695_hrs_ppg_Int_handle(void);\r
-void hx3695_hrv_ppg_init(void);\r
-void hx3695_hrv_ppg_Int_handle(void);\r
-void hx3695_living_Int_handle(void);\r
-void hx3695_hrspo2_ppg_Int_handle(void);\r
-\r
-\r
-void hx3695_ppg_Int_handle(void);\r
-uint32_t hx3695_timers_start(void);\r
-uint32_t hx3695_timers_stop(void);\r
-uint32_t hx3695_gpioint_init(void);\r
-\r
-uint32_t hx3695_gpioint_enable(void);\r
-uint32_t hx3695_gpioint_disable(void);\r
-uint32_t gsen_read_timers_start(void);\r
+void hx3695_agc_Int_handle(ppg_sensor_data_t *ppg_sensor_dat);\r
+void hx3695_ppg_Int_handle(ppg_sensor_data_t *ppg_sensor_dat);\r
+void heart_rate_meas_timeout_handler(void *p_context);\r
+void agc_timeout_handler(void *p_context);\r
+void hx3695_alg_send_data(ppg_sensor_data_t *ppg_sensor_dat, WORK_MODE_T mode, uint8_t data_count);\r
+uint32_t hx3695_320ms_timers_stop(void);\r
+uint32_t hx3695_320ms_timers_start(void);\r
 uint32_t gsen_read_timers_stop(void);\r
-bool Efuse_judge(void);\r
-void hx3695_vin_check(uint16_t led_vin);\r
-void nrf_gpioint_handle(void);\r
-#ifdef LAB_TEST\r
-void hx3695_lab_test_init(void);\r
-void hx3695_test_alg_cfg(void);\r
-SENSOR_ERROR_T hx3695_lab_test_enable(void);\r
-void hx3695_lab_test_Int_handle(void);\r
-NOISE_PS_T hx3695_lab_test_read_packet(void);\r
-#endif\r
+uint32_t gsen_read_timers_start(void);\r
 \r
-bool hx3695_living_send_data(int32_t *new_raw_data, uint8_t dat_len, int16_t *gsen_data_x, int16_t *gsen_data_y, int16_t *gsen_data_z);\r
-hx3695_living_results_t hx3695_living_get_results(void);\r
-void agc_timeout_handler(void * p_context);\r
-void heart_rate_meas_timeout_handler(void * p_context);\r
 void wear_mode_timeout_handler(void * p_context);\r
-void Efuse_Mode_Check(void);\r
 void hx3695_wearstatus_update(void);\r
 void hx3695_unwearstatus_update(void);\r
 void hx3695_set_hrs_ble_swtich(uint8_t cmd);\r
@@ -305,5 +242,5 @@ uint8_t hx3695_get_hrs(void);
 uint8_t hx3695_get_spo2(void);\r
 uint8_t hx3695_get_wear_status(void);\r
 int32_t hx3695_get_factory_data(void);\r
-\r
+void hx3695_control(char *mode,uint8_t enable);\r
 #endif\r
diff --git a/code/sdk/zhihui/drivers/ppg/hx3695/hx3695_agc.c b/code/sdk/zhihui/drivers/ppg/hx3695/hx3695_agc.c
new file mode 100644 (file)
index 0000000..c71c998
--- /dev/null
@@ -0,0 +1,635 @@
+#include <stdio.h>\r
+#include <stdbool.h>\r
+#include <stdint.h>\r
+#include <stdlib.h>\r
+\r
+#include "hx3695.h"\r
+#include "hx3695_agc.h"\r
+#include "tyhx_spo2_alg.h"\r
+#include "tyhx_hrs_alg.h"\r
+\r
+extern uint8_t read_fifo_first_flg;\r
+extern uint8_t s_ppg_state;\r
+extern uint8_t s_cal_state;\r
+static int32_t agc_buf[8] = {0};\r
+static agc_set_t calReg;\r
+\r
+void hx3695_agc_reset(void)\r
+{\r
+    calReg.STATE = sCalStart;\r
+    calReg.FLAG = CAL_FLG_LED_DR|CAL_FLG_LED_DAC|CAL_FLG_AMB_DAC|CAL_FLG_RF;\r
+\r
+    calReg.LED0_IDAC = 0;\r
+    calReg.LED1_IDAC = 0;\r
+    calReg.LED2_IDAC = 0;\r
+    calReg.LED3_IDAC = 0;\r
+    calReg.AMB0_IDAC = 0;\r
+    calReg.AMB1_IDAC = 0;\r
+    calReg.AMB2_IDAC = 0;\r
+    calReg.AMB3_IDAC = 0;\r
+\r
+    calReg.LED0_RF = 0;\r
+    calReg.LED1_RF = 0;\r
+    calReg.LED2_RF = 0;\r
+    calReg.LED3_RF = 0;\r
+\r
+    calReg.LED0_CUR = 0;\r
+    calReg.LED1_CUR = 0;\r
+    calReg.LED2_CUR = 0;\r
+    calReg.LED3_CUR = 0;\r
+\r
+       calReg.CAL_DELAY_CNT = 0;\r
+}\r
+\r
+void Init_PPG_Calibration_Routine(agc_set_t *calR)\r
+{\r
+    calR->STATE = sCalStart;\r
+    calR->FLAG = CAL_FLG_LED_DR|CAL_FLG_LED_DAC|CAL_FLG_AMB_DAC|CAL_FLG_RF;\r
+\r
+       if(AGC_SWI_LED0)\r
+       {\r
+               calR->LED0_IDAC = 0;\r
+               calR->AMB0_IDAC = 0;\r
+               calR->LED0_RF = 0;\r
+               calR->LED0_CUR = AGC_CUR_INIT_LED0;\r
+       }\r
+       if(AGC_SWI_LED1)\r
+       {\r
+               calR->LED1_IDAC = 0;\r
+               calR->AMB1_IDAC = 0;\r
+               calR->LED1_RF = 0;\r
+               calR->LED1_CUR = AGC_CUR_INIT_LED1;\r
+       }\r
+       if(AGC_SWI_LED2)\r
+       {\r
+               calR->LED2_IDAC = 0;\r
+               calR->AMB2_IDAC = 0;\r
+               calR->LED2_RF = 0;\r
+               calR->LED2_CUR = AGC_CUR_INIT_LED2;\r
+       }\r
+       if(AGC_SWI_LED3)\r
+       {\r
+               calR->LED3_IDAC = 0;\r
+               calR->AMB3_IDAC = 0;\r
+               calR->LED3_RF = 0;\r
+               calR->LED3_CUR = AGC_CUR_INIT_LED3;\r
+       }\r
+}\r
+\r
+void Restart_PPG_Calibration_Routine(agc_set_t *calR)\r
+{\r
+    calR->FLAG = CAL_FLG_LED_DAC;\r
+    calR->STATE = sCalOffset1;\r
+}\r
+\r
+void PPG_Calibration_Routine(ppg_sensor_data_t *ppg_sensor_dat, agc_set_t *calR, int32_t amb0_val, int32_t led0_val, \\r
+    int32_t amb1_val, int32_t led1_val, int32_t amb2_val, int32_t led2_val, int32_t amb3_val, int32_t led3_val)\r
+{\r
+    int32_t led0_cur_temp = 0;\r
+    int32_t led1_cur_temp = 0;\r
+    int32_t led2_cur_temp = 0;\r
+    int32_t led3_cur_temp = 0;\r
+\r
+    switch(calR->STATE)\r
+    {\r
+        case sCalStart:\r
+        {\r
+            calR->STATE = sCalCur;\r
+            break;\r
+        }\r
+        case sCalCur:\r
+        {\r
+            if(AGC_SWI_LED0 && ppg_sensor_dat->led_data[0].isneed_cal_start==1)\r
+            {\r
+                ppg_sensor_dat->led_data[0].isneed_cal_start = 0;\r
+                if(amb0_val > 535000)\r
+                {\r
+                    calR->AMB0_IDAC = (amb0_val - 535000)/1250;\r
+                }\r
+                else\r
+                {\r
+                    calR->AMB0_IDAC = 0;\r
+                }\r
+                if(led0_val > (amb0_val+256))\r
+                {\r
+                    calR->LED0_STEP = (led0_val - amb0_val) / AGC_CUR_INIT_LED0;\r
+                    led0_cur_temp = 1250 * (AGC_IDAC_TARGET_LED0 + calR->AMB0_IDAC) / calR->LED0_STEP;\r
+\r
+                    if(led0_cur_temp > AGC_CUR_MAX_LED0)\r
+                    {\r
+                        calR->LED0_CUR = AGC_CUR_MAX_LED0;\r
+                    }\r
+                    else\r
+                    {\r
+                        calR->LED0_CUR = led0_cur_temp;\r
+                    }\r
+\r
+                    if(calR->LED0_CUR != AGC_CUR_MAX_LED0)\r
+                    {\r
+                        calR->LED0_IDAC = (AGC_IDAC_TARGET_LED0*3)>>2;\r
+                    }\r
+                    else\r
+                    {\r
+                        calR->LED0_IDAC = AGC_IDAC_TARGET_LED0>>1;\r
+                    }\r
+                }\r
+                calR->LED0_RF = AGC_RF_LED0;\r
+            }\r
+                       #ifdef DOUBLE_GREEN\r
+                       if(ppg_sensor_dat->mode == HRS_MODE)\r
+                       {\r
+                               if(AGC_SWI_LED1 && ppg_sensor_dat->led_data[1].isneed_cal_start==1)\r
+                               {\r
+                                               ppg_sensor_dat->led_data[1].isneed_cal_start = 0;\r
+                                               if(amb1_val > 535000)\r
+                                               {\r
+                                                               calR->AMB1_IDAC = (amb1_val - 535000)/1250;\r
+                                               }\r
+                                               else\r
+                                               {\r
+                                                               calR->AMB1_IDAC = 0;\r
+                                               }\r
+                                               if(led1_val > (amb1_val+256))\r
+                                               {\r
+                                                               calR->LED1_STEP = (led1_val - amb1_val) / AGC_CUR_INIT_LED1;\r
+                                                               led1_cur_temp = 1250 * (AGC_IDAC_TARGET_LED1N + calR->AMB1_IDAC) / calR->LED1_STEP;\r
+\r
+                                                               if(led1_cur_temp > AGC_CUR_MAX_LED1N)\r
+                                                               {\r
+                                                                               calR->LED1_CUR = AGC_CUR_MAX_LED1N;\r
+                                                               }\r
+                                                               else\r
+                                                               {\r
+                                                                               calR->LED1_CUR = led1_cur_temp;\r
+                                                               }\r
+\r
+                                                               if(calR->LED1_CUR != AGC_CUR_MAX_LED1N)\r
+                                                               {\r
+                                                                               calR->LED1_IDAC = (AGC_IDAC_TARGET_LED1N*3)>>2;\r
+                                                               }\r
+                                                               else\r
+                                                               {\r
+                                                                               calR->LED1_IDAC = AGC_IDAC_TARGET_LED1N>>1;\r
+                                                               }\r
+                                               }\r
+                                               calR->LED1_RF = AGC_RF_LED1N;\r
+                               }\r
+                       }\r
+                       else\r
+                       #endif\r
+                       {\r
+                               if(AGC_SWI_LED1 && ppg_sensor_dat->led_data[1].isneed_cal_start==1)\r
+                               {\r
+                                               ppg_sensor_dat->led_data[1].isneed_cal_start = 0;\r
+                                               if(amb1_val > 535000)\r
+                                               {\r
+                                                               calR->AMB1_IDAC = (amb1_val - 535000)/1250;\r
+                                               }\r
+                                               else\r
+                                               {\r
+                                                               calR->AMB1_IDAC = 0;\r
+                                               }\r
+                                               if(led1_val > (amb1_val+256))\r
+                                               {\r
+                                                               calR->LED1_STEP = (led1_val - amb1_val) / AGC_CUR_INIT_LED1;\r
+                                                               led1_cur_temp = 1250 * (AGC_IDAC_TARGET_LED1 + calR->AMB1_IDAC) / calR->LED1_STEP;\r
+\r
+                                                               if(led1_cur_temp > AGC_CUR_MAX_LED1)\r
+                                                               {\r
+                                                                               calR->LED1_CUR = AGC_CUR_MAX_LED1;\r
+                                                               }\r
+                                                               else\r
+                                                               {\r
+                                                                               calR->LED1_CUR = led1_cur_temp;\r
+                                                               }\r
+\r
+                                                               if(calR->LED1_CUR != AGC_CUR_MAX_LED1)\r
+                                                               {\r
+                                                                               calR->LED1_IDAC = (AGC_IDAC_TARGET_LED1*3)>>2;\r
+                                                               }\r
+                                                               else\r
+                                                               {\r
+                                                                               calR->LED1_IDAC = AGC_IDAC_TARGET_LED1>>1;\r
+                                                               }\r
+                                               }\r
+                                               calR->LED1_RF = AGC_RF_LED1;\r
+                               }\r
+                       }\r
+\r
+            if(AGC_SWI_LED2 && ppg_sensor_dat->led_data[2].isneed_cal_start==1)\r
+            {\r
+                ppg_sensor_dat->led_data[2].isneed_cal_start = 0;\r
+                if(amb2_val > 535000)\r
+                {\r
+                    calR->AMB2_IDAC = (amb2_val - 535000)/1250;\r
+                }\r
+                else\r
+                {\r
+                    calR->AMB2_IDAC = 0;\r
+                }\r
+                if(led2_val > (amb2_val+256))\r
+                {\r
+                    calR->LED2_STEP = (led2_val - amb2_val) / AGC_CUR_INIT_LED2;\r
+                    led2_cur_temp = 1250 * (AGC_IDAC_TARGET_LED2 + calR->AMB2_IDAC) / calR->LED2_STEP;\r
+\r
+                    if(led2_cur_temp > AGC_CUR_MAX_LED2)\r
+                    {\r
+                        calR->LED2_CUR = AGC_CUR_MAX_LED2;\r
+                    }\r
+                    else\r
+                    {\r
+                        calR->LED2_CUR = led2_cur_temp;\r
+                    }\r
+\r
+                    if(calR->LED2_CUR != AGC_CUR_MAX_LED2)\r
+                    {\r
+                        calR->LED2_IDAC = (AGC_IDAC_TARGET_LED2*3)>>2;\r
+                    }\r
+                    else\r
+                    {\r
+                        calR->LED2_IDAC = AGC_IDAC_TARGET_LED2>>1;\r
+                    }\r
+                }\r
+                calR->LED2_RF = AGC_RF_LED2;\r
+            }\r
+\r
+            if(AGC_SWI_LED3 && ppg_sensor_dat->led_data[3].isneed_cal_start==1)\r
+            {\r
+                ppg_sensor_dat->led_data[3].isneed_cal_start = 0;\r
+                if(amb3_val > 535000)\r
+                {\r
+                    calR->AMB3_IDAC = (amb3_val - 535000)/1250;\r
+                }\r
+                else\r
+                {\r
+                    calR->AMB3_IDAC = 0;\r
+                }\r
+                if(led3_val > (amb3_val+256))\r
+                {\r
+                                       calR->LED3_STEP = (led3_val - amb3_val) / AGC_CUR_INIT_LED3;\r
+                    led3_cur_temp = 1250 * (AGC_IDAC_TARGET_LED3 + calR->AMB3_IDAC) / calR->LED3_STEP;\r
+\r
+                    if(led3_cur_temp > AGC_CUR_MAX_LED3)\r
+                    {\r
+                        calR->LED3_CUR = AGC_CUR_MAX_LED3;\r
+                    }\r
+                    else\r
+                    {\r
+                        calR->LED3_CUR = led3_cur_temp;\r
+                    }\r
+\r
+                    if(calR->LED3_CUR != AGC_CUR_MAX_LED3)\r
+                    {\r
+                        calR->LED3_IDAC = (AGC_IDAC_TARGET_LED3*3)>>2;\r
+                    }\r
+                    else\r
+                    {\r
+                        calR->LED3_IDAC =AGC_IDAC_TARGET_LED3>>1;\r
+                    }\r
+                }\r
+                calR->LED3_RF = AGC_RF_LED3;\r
+            }\r
+\r
+                       calR->FLAG = CAL_FLG_LED_DR|CAL_FLG_LED_DAC|CAL_FLG_AMB_DAC|CAL_FLG_RF;\r
+            calR->STATE = sCalOffset1;\r
+            break;\r
+        }\r
+        case sCalOffset1:\r
+        {\r
+            if(AGC_SWI_LED0 && ppg_sensor_dat->led_data[0].led_state == Activated)\r
+            {\r
+                if(led0_val>850000 && calR->LED0_IDAC < 240)\r
+                {\r
+                   calR->LED0_IDAC = calR->LED0_IDAC+10;\r
+                }\r
+            }\r
+            if(AGC_SWI_LED1 && ppg_sensor_dat->led_data[1].led_state == Activated)\r
+            {\r
+                if(led1_val>850000 && calR->LED1_IDAC < 240)\r
+                {\r
+                   calR->LED1_IDAC = calR->LED1_IDAC+10;\r
+                }\r
+            }\r
+            if(AGC_SWI_LED2 && ppg_sensor_dat->led_data[2].led_state == Activated)\r
+            {\r
+                if(led2_val>850000 && calR->LED2_IDAC < 240)\r
+                {\r
+                   calR->LED2_IDAC = calR->LED2_IDAC+10;\r
+                }\r
+            }\r
+            if(AGC_SWI_LED3 && ppg_sensor_dat->led_data[3].led_state == Activated)\r
+            {\r
+                if(led3_val>850000 && calR->LED3_IDAC < 240)\r
+                {\r
+                   calR->LED3_IDAC = calR->LED3_IDAC+10;\r
+                }\r
+            }\r
+\r
+            if ((!AGC_SWI_LED0 || ppg_sensor_dat->led_data[0].led_state == InActivated || led0_val<=850000) \\r
+                         &&(!AGC_SWI_LED1 || ppg_sensor_dat->led_data[1].led_state == InActivated || led1_val<=850000) \\r
+              &&(!AGC_SWI_LED2 || ppg_sensor_dat->led_data[2].led_state == InActivated || led2_val<=850000) \\r
+                         &&(!AGC_SWI_LED3 || ppg_sensor_dat->led_data[3].led_state == InActivated || led3_val<=850000) )\r
+            {\r
+                calR->STATE = sCalOffset2;\r
+            }\r
+            else if(calR->LED0_IDAC >= 240 || calR->LED1_IDAC >= 240 || calR->LED2_IDAC >= 240 || calR->LED3_IDAC >= 240)\r
+            {\r
+                calR->STATE = sCalErr;\r
+            }\r
+            else\r
+            {\r
+              calR->STATE = sCalOffset1;\r
+            }\r
+            calR->FLAG = CAL_FLG_LED_DAC;\r
+            break;\r
+        }\r
+        case sCalOffset2:\r
+        {\r
+            if(AGC_SWI_LED0 && ppg_sensor_dat->led_data[0].led_state == Activated)\r
+            {\r
+                if(led0_val > 650000 && calR->LED0_IDAC < 240)\r
+                {\r
+                   calR->LED0_IDAC = calR->LED0_IDAC+5;\r
+                }\r
+                else if(led0_val <450000 && calR->LED0_IDAC >= 5)\r
+                {\r
+                   calR->LED0_IDAC = calR->LED0_IDAC-5;\r
+                }\r
+                else if(led0_val<450000 && calR->LED0_IDAC > 0)\r
+                {\r
+                   calR->LED0_IDAC = calR->LED0_IDAC-1;\r
+                }\r
+            }\r
+            if(AGC_SWI_LED1 && ppg_sensor_dat->led_data[1].led_state == Activated)\r
+            {\r
+                if(led1_val > 650000 && calR->LED1_IDAC < 240)\r
+                {\r
+                   calR->LED1_IDAC = calR->LED1_IDAC+5;\r
+                }\r
+                else if(led1_val <450000 && calR->LED1_IDAC >= 5)\r
+                {\r
+                   calR->LED1_IDAC = calR->LED1_IDAC-5;\r
+                }\r
+                else if(led1_val<450000 && calR->LED1_IDAC > 0)\r
+                {\r
+                   calR->LED1_IDAC = calR->LED1_IDAC-1;\r
+                }\r
+            }\r
+            if(AGC_SWI_LED2 && ppg_sensor_dat->led_data[2].led_state == Activated)\r
+            {\r
+                if(led2_val > 650000 && calR->LED2_IDAC < 240)\r
+                {\r
+                   calR->LED2_IDAC = calR->LED2_IDAC+5;\r
+                }\r
+                else if(led2_val <450000 && calR->LED2_IDAC >= 5)\r
+                {\r
+                   calR->LED2_IDAC = calR->LED2_IDAC-5;\r
+                }\r
+                else if(led2_val<450000 && calR->LED2_IDAC > 0)\r
+                {\r
+                   calR->LED2_IDAC = calR->LED2_IDAC-1;\r
+                }\r
+            }\r
+            if(AGC_SWI_LED3 && ppg_sensor_dat->led_data[3].led_state == Activated)\r
+            {\r
+                if(led3_val > 650000 && calR->LED3_IDAC < 240)\r
+                {\r
+                   calR->LED3_IDAC = calR->LED3_IDAC+5;\r
+                }\r
+                else if(led3_val <450000 && calR->LED3_IDAC >= 5)\r
+                {\r
+                   calR->LED3_IDAC = calR->LED3_IDAC-5;\r
+                }\r
+                else if(led3_val<450000 && calR->LED3_IDAC > 0)\r
+                {\r
+                   calR->LED3_IDAC = calR->LED3_IDAC-1;\r
+                }\r
+            }\r
+\r
+            if ((!AGC_SWI_LED0 || ppg_sensor_dat->led_data[0].led_state == InActivated || (led0_val>=450000 && led0_val<=650000))\\r
+              &&(!AGC_SWI_LED1 || ppg_sensor_dat->led_data[1].led_state == InActivated || (led1_val>=450000 && led1_val<=650000))\\r
+              &&(!AGC_SWI_LED2 || ppg_sensor_dat->led_data[2].led_state == InActivated || (led2_val>=450000 && led2_val<=650000))\\r
+              &&(!AGC_SWI_LED3 || ppg_sensor_dat->led_data[3].led_state == InActivated || (led3_val>=450000 && led3_val<=650000)))\r
+            {\r
+                calR->STATE = sCalFinish;\r
+            }\r
+            else if(calR->LED0_IDAC >= 240 || calR->LED1_IDAC >= 240 || calR->LED2_IDAC >= 240 || calR->LED3_IDAC >= 240)\r
+            {\r
+                calR->STATE = sCalErr;\r
+            }\r
+            else\r
+            {\r
+                calR->STATE = sCalOffset2;\r
+            }\r
+            calR->FLAG = CAL_FLG_LED_DAC;\r
+            break;\r
+        }\r
+        case sCalErr:\r
+        {\r
+            calR->STATE = sCalFinish;\r
+            break;\r
+        }\r
+        default:\r
+        {\r
+            break;\r
+        }\r
+\r
+    }\r
+    hx3695_agc_updata_reg(calR);\r
+    //DEBUG_PRINTF("AGC:cur=%d,%d,%d,%d, idac=%d,%d,%d,%d, step=%d,%d,%d,%d, state=%d \r\n",calR->LED0_CUR,calR->LED1_CUR,calR->LED2_CUR,calR->LED3_CUR,calR->LED0_IDAC,calR->LED1_IDAC,calR->LED2_IDAC,calR->LED3_IDAC,calR->LED0_STEP,calR->LED1_STEP,calR->LED2_STEP,calR->LED3_STEP,calR->STATE);\r
+}\r
+\r
+void hx3695_agc_process(ppg_sensor_data_t *ppg_sensor_dat)\r
+{\r
+    if (!s_cal_state && s_ppg_state)\r
+    {\r
+        hx3695_read_led_data(agc_buf);\r
+\r
+        if ((AGC_SWI_LED0 && ppg_sensor_dat->led_data[0].led_state==Activated && (agc_buf[0]<250000 || agc_buf[0]>850000))\\r
+          ||(AGC_SWI_LED1 && ppg_sensor_dat->led_data[1].led_state==Activated && (agc_buf[1]<250000 || agc_buf[1]>850000))\\r
+          ||(AGC_SWI_LED2 && ppg_sensor_dat->led_data[2].led_state==Activated && (agc_buf[2]<250000 || agc_buf[2]>850000))\\r
+          ||(AGC_SWI_LED3 && ppg_sensor_dat->led_data[3].led_state==Activated && (agc_buf[3]<250000 || agc_buf[3]>850000)))\r
+        {\r
+            calReg.CAL_DELAY_CNT++;\r
+            if(calReg.CAL_DELAY_CNT >= AGC_DELAY_COUNT_SET)\r
+            {\r
+                hx3695_ppg_set_mode(RECAL_INIT);\r
+            }\r
+        }\r
+        else\r
+        {\r
+            calReg.CAL_DELAY_CNT = 0;\r
+        }\r
+        return;\r
+    }\r
+\r
+    hx3695_read_phase_data(agc_buf);\r
+\r
+    PPG_Calibration_Routine(ppg_sensor_dat,&calReg,agc_buf[0],agc_buf[1],agc_buf[2],agc_buf[3],agc_buf[4],agc_buf[5],agc_buf[6],agc_buf[7]);\r
+\r
+    if (calReg.STATE == sCalFinish)\r
+    {\r
+        hx3695_ppg_set_mode(CAL_OFF);\r
+    }\r
+}\r
+\r
+void hx3695_cal_init(void)\r
+{\r
+    hx3695_write_reg(0x1b,0x10);\r
+    hx3695_write_reg(0x38,0x01);\r
+    hx3695_write_reg(0x60,0x34);\r
+\r
+    hx3695_write_reg(0x5c,0x02);\r
+    hx3695_delay_ms(1);\r
+    hx3695_write_reg(0x5c,0x00);\r
+       hx3695_delay_ms(1);\r
+    \r
+    Init_PPG_Calibration_Routine(&calReg);\r
+    hx3695_agc_updata_reg(&calReg);\r
+}\r
+\r
+void hx3695_recal_init(void)\r
+{\r
+    hx3695_write_reg(0x1b,0x10);\r
+    hx3695_write_reg(0x38,0x01);\r
+    hx3695_write_reg(0x60,0x34);\r
+\r
+    hx3695_write_reg(0x5c,0x02);\r
+    hx3695_delay_ms(1);\r
+    hx3695_write_reg(0x5c,0x00);\r
+       hx3695_delay_ms(1);\r
+    \r
+    Restart_PPG_Calibration_Routine(&calReg);\r
+    hx3695_agc_updata_reg(&calReg);\r
+}\r
+\r
+void hx3695_cal_off(void)\r
+{\r
+    hx3695_write_reg(0x38,0x04);\r
+    hx3695_write_reg(0x60,0x14);\r
+\r
+    hx3695_write_reg(0x5c,0x02);\r
+    hx3695_delay_ms(1);\r
+    hx3695_write_reg(0x1b,0x91);\r
+    hx3695_write_reg(0x5c,0x00);\r
+       hx3695_delay_ms(1);\r
+    read_fifo_first_flg = 1;\r
+}\r
+\r
+void hx3695_agc_updata_reg(agc_set_t *calR)\r
+{\r
+    uint8_t phase1_mux_sel = 0;\r
+       uint8_t phase2_mux_sel = 1;\r
+    uint8_t phase3_mux_sel = 2;\r
+       uint8_t phase4_mux_sel = 3;\r
+       uint8_t phase5_mux_sel = 4;\r
+       uint8_t phase6_mux_sel = 5;\r
+    uint8_t phase7_mux_sel = 6;\r
+       uint8_t phase8_mux_sel = 7;\r
+\r
+    if (calR->FLAG & CAL_FLG_LED_DR)\r
+    {\r
+               if(AGC_SWI_LED0)\r
+               {\r
+                       hx3695_write_reg(0X43, phase2_mux_sel);\r
+                       hx3695_write_reg(0X45, calR->LED0_CUR/2);\r
+                       hx3695_write_reg(0X70, calR->LED0_CUR/2);\r
+               }\r
+               if(AGC_SWI_LED1)\r
+               {\r
+                       hx3695_write_reg(0X43, phase4_mux_sel);\r
+                       hx3695_write_reg(0X45, calR->LED1_CUR/2);\r
+                       hx3695_write_reg(0X70, calR->LED1_CUR/2);\r
+               }\r
+               if(AGC_SWI_LED2)\r
+               {\r
+                       hx3695_write_reg(0X43, phase6_mux_sel);\r
+                       hx3695_write_reg(0X45, calR->LED2_CUR);\r
+               }\r
+               if(AGC_SWI_LED3)\r
+               {\r
+                       hx3695_write_reg(0X43, phase8_mux_sel);\r
+                       hx3695_write_reg(0X45, calR->LED3_CUR);\r
+               }\r
+    }\r
+\r
+    if (calR->FLAG & CAL_FLG_LED_DAC)\r
+    {\r
+               if(AGC_SWI_LED0)\r
+               {\r
+                       hx3695_write_reg(0X43, phase2_mux_sel);\r
+                       hx3695_write_reg(0X48, calR->LED0_IDAC);\r
+               }\r
+               if(AGC_SWI_LED1)\r
+               {\r
+                       hx3695_write_reg(0X43, phase4_mux_sel);\r
+                       hx3695_write_reg(0X48, calR->LED1_IDAC);\r
+               }\r
+               if(AGC_SWI_LED2)\r
+               {\r
+                       hx3695_write_reg(0X43, phase6_mux_sel);\r
+                       hx3695_write_reg(0X48, calR->LED2_IDAC);\r
+               }\r
+               if(AGC_SWI_LED3)\r
+               {\r
+                       hx3695_write_reg(0X43, phase8_mux_sel);\r
+                       hx3695_write_reg(0X48, calR->LED3_IDAC);\r
+               }\r
+    }\r
+\r
+    if (calR->FLAG & CAL_FLG_AMB_DAC)\r
+    {\r
+               if(AGC_SWI_LED0)\r
+               {\r
+                       hx3695_write_reg(0X43, phase1_mux_sel);\r
+                       hx3695_write_reg(0X48, calR->AMB0_IDAC);\r
+               }\r
+               if(AGC_SWI_LED1)\r
+               {\r
+                       hx3695_write_reg(0X43, phase3_mux_sel);\r
+                       hx3695_write_reg(0X48, calR->AMB1_IDAC);\r
+               }\r
+               if(AGC_SWI_LED2)\r
+               {\r
+                       hx3695_write_reg(0X43, phase5_mux_sel);\r
+                       hx3695_write_reg(0X48, calR->AMB2_IDAC);\r
+               }\r
+               if(AGC_SWI_LED3)\r
+               {\r
+                       hx3695_write_reg(0X43, phase7_mux_sel);\r
+                       hx3695_write_reg(0X48, calR->AMB3_IDAC);\r
+               }\r
+    }\r
+\r
+    if (calR->FLAG & CAL_FLG_RF)\r
+    {\r
+               if(AGC_SWI_LED0)\r
+               {\r
+                       hx3695_write_reg(0X43, phase1_mux_sel);\r
+                       hx3695_write_reg(0X44, (0x40 | calR->LED0_RF));\r
+                       hx3695_write_reg(0X43, phase2_mux_sel);\r
+                       hx3695_write_reg(0X44, (0x40 | calR->LED0_RF));\r
+               }\r
+               if(AGC_SWI_LED1)\r
+               {\r
+                       hx3695_write_reg(0X43, phase3_mux_sel);\r
+                       hx3695_write_reg(0X44, (0x40 | calR->LED1_RF));\r
+                       hx3695_write_reg(0X43, phase4_mux_sel);\r
+                       hx3695_write_reg(0X44, (0x40 | calR->LED1_RF));\r
+               }\r
+               if(AGC_SWI_LED2)\r
+               {\r
+                       hx3695_write_reg(0X43, phase5_mux_sel);\r
+                       hx3695_write_reg(0X44, (0x40 | calR->LED2_RF));\r
+                       hx3695_write_reg(0X43, phase6_mux_sel);\r
+                       hx3695_write_reg(0X44, (0x40 | calR->LED2_RF));\r
+               }\r
+               if(AGC_SWI_LED3)\r
+               {\r
+                       hx3695_write_reg(0X43, phase7_mux_sel);\r
+                       hx3695_write_reg(0X44, (0x40 | calR->LED3_RF));\r
+                       hx3695_write_reg(0X43, phase8_mux_sel);\r
+                       hx3695_write_reg(0X44, (0x40 | calR->LED3_RF));\r
+               }\r
+    }\r
+}\r
diff --git a/code/sdk/zhihui/drivers/ppg/hx3695/hx3695_agc.h b/code/sdk/zhihui/drivers/ppg/hx3695/hx3695_agc.h
new file mode 100644 (file)
index 0000000..d02a194
--- /dev/null
@@ -0,0 +1,87 @@
+#ifndef _HX3695_SPO2_AGC_H_\r
+#define _HX3695_SPO2_AGC_H_\r
+#include <stdint.h>\r
+#include <stdbool.h>\r
+\r
+#define CAL_FLG_LED_DR     0x01\r
+#define CAL_FLG_LED_DAC    0x02\r
+#define CAL_FLG_AMB_DAC    0x04\r
+#define CAL_FLG_RF         0x08\r
+\r
+#define AGC_SWI_LED0  1  //LEDÊÇ·ñÐèÒªµ÷¹â\r
+#define AGC_SWI_LED1  1\r
+#define AGC_SWI_LED2  1\r
+#define AGC_SWI_LED3  0\r
+\r
+#define AGC_CUR_INIT_LED0 64  //LEDµ÷¹â³õʼµçÁ÷\r
+#define AGC_CUR_INIT_LED1 64\r
+#define AGC_CUR_INIT_LED2 64\r
+#define AGC_CUR_INIT_LED3 64\r
+\r
+#define AGC_CUR_MAX_LED0 450  //LEDµ÷¹â×î´óµçÁ÷\r
+#define AGC_CUR_MAX_LED1 255\r
+#define AGC_CUR_MAX_LED2 255\r
+#define AGC_CUR_MAX_LED3 255\r
+#define AGC_CUR_MAX_LED1N 450\r
+\r
+#define AGC_RF_LED0 3  //LEDµ÷¹âÔöÒæ,0=10k,1=20k,2=50k,3=100k,4=150k,5=200k,6=500k,7=1M\r
+#define AGC_RF_LED1 3\r
+#define AGC_RF_LED2 3\r
+#define AGC_RF_LED3 0\r
+#define AGC_RF_LED1N 5\r
+\r
+#define AGC_IDAC_TARGET_LED0 20  //µ÷¹âÄ¿±êoffset\r
+#define AGC_IDAC_TARGET_LED1 160\r
+#define AGC_IDAC_TARGET_LED2 160\r
+#define AGC_IDAC_TARGET_LED3 0\r
+#define AGC_IDAC_TARGET_LED1N 20\r
+\r
+#define AGC_DELAY_COUNT_SET  4  //µ÷¹âÑÓʱ,N¸ö¶¨Ê±Æ÷»òÖжÏ\r
+\r
+typedef enum {\r
+    sCalStart,\r
+       sCalCur,\r
+    sCalOffset1,\r
+    sCalOffset2,\r
+    sCalFinish,\r
+    sCalErr,\r
+} agc_state_t;\r
+\r
+typedef struct {\r
+       uint8_t FLAG;\r
+       uint16_t LED0_IDAC;\r
+       uint16_t LED1_IDAC;\r
+       uint16_t LED2_IDAC;\r
+       uint16_t LED3_IDAC;\r
+    uint16_t AMB0_IDAC;\r
+    uint16_t AMB1_IDAC;\r
+    uint16_t AMB2_IDAC;\r
+    uint16_t AMB3_IDAC;\r
+       uint16_t LED0_CUR;\r
+       uint16_t LED1_CUR;\r
+       uint16_t LED2_CUR;\r
+    uint16_t LED3_CUR;\r
+       uint8_t LED0_RF;\r
+       uint8_t LED1_RF;\r
+       uint8_t LED2_RF;\r
+       uint8_t LED3_RF;\r
+       uint32_t LED0_STEP;\r
+       uint32_t LED1_STEP;\r
+       uint32_t LED2_STEP;\r
+       uint32_t LED3_STEP;\r
+    uint8_t CAL_DELAY_CNT;\r
+       agc_state_t STATE;\r
+} agc_set_t;\r
+\r
+void hx3695_agc_reset(void);\r
+void Init_PPG_Calibration_Routine(agc_set_t *calR);\r
+void Restart_PPG_Calibration_Routine(agc_set_t *calR);\r
+void PPG_Calibration_Routine(ppg_sensor_data_t *ppg_sensor_data, agc_set_t *calR, int32_t amb0_val, int32_t led0_val, \\r
+     int32_t amb1_val, int32_t led1_val, int32_t amb2_val, int32_t led2_val, int32_t amb3_val, int32_t led3_val);\r
+void hx3695_agc_process(ppg_sensor_data_t *ppg_sensor);\r
+void hx3695_cal_init(void);\r
+void hx3695_recal_init(void);\r
+void hx3695_cal_off(void);\r
+void hx3695_agc_updata_reg(agc_set_t *calR);\r
+\r
+#endif\r
index 9a94ffa..1ea493b 100644 (file)
 #include "hx3695.h"\r
 #include "hx3695_factory_test.h"\r
 \r
+int32_t phase_result[10][8];\r
+\r
 static uint32_t factory_green = 0;\r
 static uint32_t factory_red = 0;\r
 static uint32_t factory_ir = 0;\r
 \r
-void hx3695_factory_wear_mode_config(void)\r
+void hx3695_factory_ft_card_test_config(void)//�ҿ�15mm�߶Ȳ�������\r
 {\r
-    uint16_t sample_rate = 10;                  /*config the data rate of chip alps2_fm ,uint is Hz*/\r
+    uint16_t sample_rate = 25;                  /*config the data rate of chip alps2_fm ,uint is Hz*/\r
     uint32_t prf_clk_num = 32000/sample_rate;   /*period in clk num, num = Fclk/fs */\r
          \r
-    uint8_t adc_rst_post_num=0;       /* 00=16,01=32,10=64,11=128*/      \r
-         uint8_t samp_delay_leden_num = 0; /* 00=8,01=16,10=32,11=64*/ \r
+       uint16_t fifo_watermark= 250 ;\r
+    uint8_t adc_rst_post_num= 0;       /* 00=16,01=32,10=64,11=128*/      \r
+    uint8_t samp_delay_leden_num = 0; /* 00=8,01=16,10=32,11=64*/ \r
     uint8_t samp_copy_avg = 0;        /* 0=1, 1=2, 2=4 ,3=8, 4=16*/\r
     uint8_t data_avg_num = 0;         /* 0 = 1 ; 1 = 2; 2 =4 ; 3 =8 ; 4 =16 ;*/\r
-         uint8_t phase7_8_internal = 0;    /* phase7 and phase8 prf internal cfg */\r
-               \r
+    uint8_t phase7_8_internal = 0;   //0x18;    /* phase7 and phase8 prf internal cfg */\r
+       \r
+//       uint16_t  thred_value = 32500;\r
+       \r
     uint8_t phase1_enable = 1;     /*phase1_enable  , 1 mean enable ; 0 mean disable */ \r
     uint8_t phase2_enable = 1;     /*phase2_enable  , 1 mean enable ; 0 mean disable */ \r
-    uint8_t phase3_enable = 0;     /*phase3_enable  , 1 mean enable ; 0 mean disable */ \r
-    uint8_t phase4_enable = 0;     /*phase4_enable  , 1 mean enable ; 0 mean disable */\r
-    uint8_t phase5_enable = 0;     /*phase5_enable  , 1 mean enable ; 0 mean disable */ \r
-    uint8_t phase6_enable = 0;     /*phase6_enable  , 1 mean enable ; 0 mean disable */ \r
-    uint8_t phase7_enable = 0;     /*phase7_enable  , 1 mean enable ; 0 mean disable */        \r
-         uint8_t phase8_enable = 0;     /*phase8_enable  , 1 mean enable ; 0 mean disable */ \r
+    uint8_t phase3_enable = 1;     /*phase3_enable  , 1 mean enable ; 0 mean disable */ \r
+    uint8_t phase4_enable = 1;     /*phase4_enable  , 1 mean enable ; 0 mean disable */\r
+    uint8_t phase5_enable = 1;     /*phase5_enable  , 1 mean enable ; 0 mean disable */ \r
+    uint8_t phase6_enable = 1;     /*phase6_enable  , 1 mean enable ; 0 mean disable */ \r
+    uint8_t phase7_enable = 1;     /*phase7_enable  , 1 mean enable ; 0 mean disable */        \r
+    uint8_t phase8_enable = 1;     /*phase8_enable  , 1 mean enable ; 0 mean disable */ \r
 \r
     uint8_t phase1_adc_osr = 3;    /* 0 = 128 ; 1 = 256 ; 2 = 512 ; 3 = 1024 ; 4 = 2048*/\r
     uint8_t phase2_adc_osr = 3;    /* 0 = 128 ; 1 = 256 ; 2 = 512 ; 3 = 1024 ; 4 = 2048*/\r
     uint8_t phase3_adc_osr = 3;    /* 0 = 128 ; 1 = 256 ; 2 = 512 ; 3 = 1024 ; 4 = 2048*/\r
     uint8_t phase4_adc_osr = 3;    /* 0 = 128 ; 1 = 256 ; 2 = 512 ; 3 = 1024 ; 4 = 2048*/\r
-               uint8_t phase5_adc_osr = 3;    /* 0 = 128 ; 1 = 256 ; 2 = 512 ; 3 = 1024 ; 4 = 2048*/\r
-         uint8_t phase6_adc_osr = 3;    /* 0 = 128 ; 1 = 256 ; 2 = 512 ; 3 = 1024 ; 4 = 2048*/\r
-               uint8_t phase7_adc_osr = 3;    /* 0 = 128 ; 1 = 256 ; 2 = 512 ; 3 = 1024 ; 4 = 2048*/\r
-               uint8_t phase8_adc_osr = 3;    /* 0 = 128 ; 1 = 256 ; 2 = 512 ; 3 = 1024 ; 4 = 2048*/\r
+    uint8_t phase5_adc_osr = 3;    /* 0 = 128 ; 1 = 256 ; 2 = 512 ; 3 = 1024 ; 4 = 2048*/\r
+    uint8_t phase6_adc_osr = 3;    /* 0 = 128 ; 1 = 256 ; 2 = 512 ; 3 = 1024 ; 4 = 2048*/\r
+    uint8_t phase7_adc_osr = 3;    /* 0 = 128 ; 1 = 256 ; 2 = 512 ; 3 = 1024 ; 4 = 2048*/\r
+    uint8_t phase8_adc_osr = 3;    /* 0 = 128 ; 1 = 256 ; 2 = 512 ; 3 = 1024 ; 4 = 2048*/\r
                         \r
-         uint8_t phase1_mux_sel = 0;    /* sel phase1*/\r
-               uint8_t phase2_mux_sel = 1;    /* sel phase2*/\r
-               uint8_t phase3_mux_sel = 2;    /* sel phase3*/\r
-               uint8_t phase4_mux_sel = 3;    /* sel phase4*/\r
-               uint8_t phase5_mux_sel = 4;    /* sel phase5*/\r
-               uint8_t phase6_mux_sel = 5;    /* sel phase6*/\r
-               uint8_t phase7_mux_sel = 6;    /* sel phase7*/\r
-               uint8_t phase8_mux_sel = 7;    /* sel phase8*/\r
+    uint8_t phase1_mux_sel = 0;    /* sel phase1*/\r
+    uint8_t phase2_mux_sel = 1;    /* sel phase2*/\r
+    uint8_t phase3_mux_sel = 2;    /* sel phase3*/\r
+    uint8_t phase4_mux_sel = 3;    /* sel phase4*/\r
+    uint8_t phase5_mux_sel = 4;    /* sel phase5*/\r
+    uint8_t phase6_mux_sel = 5;    /* sel phase6*/\r
+    uint8_t phase7_mux_sel = 6;    /* sel phase7*/\r
+    uint8_t phase8_mux_sel = 7;    /* sel phase8*/\r
        \r
-\r
-         uint8_t phase1_inner_avg = 0;   /* phase1 adc avg num 0=1, 1=2, 2=4, 3=8 , 4=16*/\r
-    uint8_t phase1_tia_res = 0;     /* 0= 10K; 1= 20k; 2= 50k; 3= 100k; 4= 150k; 5= 200k; 6= 500k; 7= 1M*/\r
-               uint8_t phase1_tia_cap = 4;     /* 0= ; 1= ; 2= ; 3= ; 4= ; 5= ; 6= ; 7= */\r
-    uint8_t phase1_led_drv1_cha_sel = 0x10;     /* 1 = ldr1  NG; 2 = ldr2   GR; 4 = ldr3  IR; 8 = ldr4 RED; */\r
+    uint8_t phase1_inner_avg = 0;   /* phase1 adc avg num 0=1, 1=2, 2=4, 3=8 , 4=16*/\r
+    uint8_t phase1_tia_res = PS_GRAD_TIA;     /* 0= 10K; 1= 20k; 2= 50k; 3= 100k; 4= 150k; 5= 200k; 6= 500k; 7= 1M*/\r
+    uint8_t phase1_tia_cap = 4;     /* 0= ; 1= ; 2= ; 3= ; 4= ; 5= ; 6= ; 7= */\r
+    uint8_t phase1_led_drv1_cha_sel = 0;     /* 1 = ldr1  NG; 2 = ldr2   GR; 4 = ldr3  IR; 8 = ldr4 RED; */\r
     uint8_t phase1_led_drv2_cha_sel = 0;    /*ldr5:0x20  ldr6: 0x40 red    ldr8 0x80  ir      */\r
-               uint8_t phase1_pd_sel = 0x0c;          /* 1 = pd1; 2 = pd2; 4 = pd3*/\r
+    uint8_t phase1_pd_sel = ALS_PD_FT_SEL;          /* 1 = pd1; 2 = pd2; 4 = pd3*/\r
     uint8_t phase1_als_offset_idac = 0; /* 0~255 = 0 ~ 128ua , step = 0.5ua */\r
-               uint8_t phase1_led_offset_idac = 0; /* 0~255 = 0 ~ 64ua , step = 0.25ua */\r
-    uint8_t phase1_ldr1_cur = 64;     /* 0~255 = 0 ~ 200ma, step = 0.8ma */\r
-               uint8_t phase1_ldr2_cur = 0;\r
-//             uint8_t phase1_of_idac1_cur = 0;\r
-//    uint8_t phase1_of_idac2_cur = 0;\r
+    uint8_t phase1_led_offset_idac = 0; /* 0~255 = 0 ~ 64ua , step = 0.25ua */\r
+    uint8_t phase1_ldr1_cur = 0;     /* 0~255 = 0 ~ 200ma, step = 0.8ma */\r
+    uint8_t phase1_ldr2_cur = 0;\r
     uint8_t phase1_ad_inr_ctrl = 3;\r
     uint8_t phase1_ad_of_idac_ctrl = 0;\r
-//    uint8_t afe_offset  =  0;\r
     uint8_t phase1_led_en = 1;      /* phase1 led enable*/\r
                \r
-               uint8_t phase1_dsp_mov_avg_num = 0; /* 0=bypass ; 1=2 ; 2=4 ; 3=8 */\r
+    uint8_t phase1_dsp_mov_avg_num = 0; /* 0=bypass ; 1=2 ; 2=4 ; 3=8 */\r
     uint8_t phase1_dsp_iir_lp_coeff = 0; /* 0=bypass ; 1=1/2 ; 2=1/4 ; 3=1/8 ,...,7=1/128 */\r
 \r
-\r
-\r
-         uint8_t phase2_inner_avg = 0;   /* phase1 adc avg num 0=1, 1=2, 2=4, 3=8 , 4=16*/\r
-    uint8_t phase2_tia_res = 0;     /* 0= 10K; 1= 20k; 2= 50k; 3= 100k; 4= 150k; 5= 200k; 6= 500k; 7= 1M*/\r
-               uint8_t phase2_tia_cap = 4;     /* 0= ; 1= ; 2= ; 3= ; 4= ; 5= ; 6= ; 7= */\r
-    uint8_t phase2_led_drv1_cha_sel = 0;   //GREEN_LED_SLE;     /* 1 = ldr1; 2 = ldr2; 4 = ldr3; 8 = ldr4 ; */\r
-    uint8_t phase2_led_drv2_cha_sel = 0;\r
-               uint8_t phase2_pd_sel = 0x0c;      /* 1 = pd1; 2 = pd2; 4 = pd3*/\r
+    uint8_t phase2_inner_avg = 0;   /* phase1 adc avg num 0=1, 1=2, 2=4, 3=8 , 4=16*/\r
+    uint8_t phase2_tia_res = PS_GRAD_TIA;     /* 0= 10K; 1= 20k; 2= 50k; 3= 100k; 4= 150k; 5= 200k; 6= 500k; 7= 1M*/\r
+    uint8_t phase2_tia_cap = 4;     /* 0= ; 1= ; 2= ; 3= ; 4= ; 5= ; 6= ; 7= */\r
+    uint8_t phase2_led_drv1_cha_sel = LDR0_FT_SEL;     /* 1 = ldr1; 2 = ldr2; 4 = ldr3; 8 = ldr4 ; */\r
+    uint8_t phase2_led_drv2_cha_sel = 0x00;\r
+    uint8_t phase2_pd_sel = LDR0_PD_FT_SEL;      /* 1 = pd1; 2 = pd2; 4 = pd3*/\r
     uint8_t phase2_als_offset_idac = 0; /* 0~255 = 0 ~ 128ua , step = 0.5ua */\r
-               uint8_t phase2_led_offset_idac = 0; /* 0~255 = 0 ~ 64ua , step = 0.25ua */\r
-    uint8_t phase2_ldr1_cur = 0;     /* 0~255 = 0 ~ 200ma, step = 0.8ma */\r
-               uint8_t phase2_ldr2_cur = 0;\r
-//             uint8_t phase2_of_idac1_cur = 0;\r
-//    uint8_t phase2_of_idac2_cur = 0;\r
+    uint8_t phase2_led_offset_idac = 0; /* 0~255 = 0 ~ 64ua , step = 0.25ua */\r
+    uint8_t phase2_ldr1_cur = DRV1_GRAD_CUR;     /* 0~255 = 0 ~ 200ma, step = 0.8ma */\r
+    uint8_t phase2_ldr2_cur = DRV2_GRAD_CUR;\r
     uint8_t phase2_ad_inr_ctrl = 3;\r
     uint8_t phase2_ad_of_idac_ctrl = 0;\r
-//    uint8_t phase2_afe_offset  =  0;\r
-    uint8_t phase2_led_en = 1;      /* phase1 led enable*/\r
-               \r
-               uint8_t phase2_dsp_mov_avg_num = 0; /* 0=bypass ; 1=2 ; 2=4 ; 3=8 */\r
+    uint8_t phase2_led_en = 1;      /* phase1 led enable*/             \r
+    uint8_t phase2_dsp_mov_avg_num = 0; /* 0=bypass ; 1=2 ; 2=4 ; 3=8 */\r
     uint8_t phase2_dsp_iir_lp_coeff = 0; /* 0=bypass ; 1=1/2 ; 2=1/4 ; 3=1/8 ,...,7=1/128 */\r
 \r
                \r
     uint8_t phase3_inner_avg = 0;   /* phase1 adc avg num 0=1, 1=2, 2=4, 3=8 , 4=16*/\r
-    uint8_t phase3_tia_res = 0;     /* 0= 10K; 1= 20k; 2= 50k; 3= 100k; 4= 150k; 5= 200k; 6= 500k; 7= 1M*/\r
-               uint8_t phase3_tia_cap = 4;     /* 0= ; 1= ; 2= ; 3= ; 4= ; 5= ; 6= ; 7= */\r
-    uint8_t phase3_led_drv1_cha_sel = 0;     /* 1 = ldr1; 2 = ldr2; 4 = ldr3; 8 = ldr4 ; */\r
+    uint8_t phase3_tia_res = PS_GRAD_TIA;     /* 0= 10K; 1= 20k; 2= 50k; 3= 100k; 4= 150k; 5= 200k; 6= 500k; 7= 1M*/\r
+    uint8_t phase3_tia_cap = 4;     /* 0= ; 1= ; 2= ; 3= ; 4= ; 5= ; 6= ; 7= */\r
+    uint8_t phase3_led_drv1_cha_sel = LDR1_FT_SEL;     /* 1 = ldr1; 2 = ldr2; 4 = ldr3; 8 = ldr4 ; */\r
     uint8_t phase3_led_drv2_cha_sel = 0;\r
-               uint8_t phase3_pd_sel = 0x0c;      /* 1 = pd1; 2 = pd2; 4 = pd3*/\r
+    uint8_t phase3_pd_sel = LDR1_PD_FT_SEL;      /* 1 = pd1; 2 = pd2; 4 = pd3*/\r
     uint8_t phase3_als_offset_idac = 0; /* 0~255 = 0 ~ 128ua , step = 0.5ua */\r
-               uint8_t phase3_led_offset_idac = 0; /* 0~255 = 0 ~ 64ua , step = 0.25ua */\r
-    uint8_t phase3_ldr1_cur = 0;     /* 0~255 = 0 ~ 200ma, step = 0.8ma */\r
-               uint8_t phase3_ldr2_cur = 0;\r
-//             uint8_t phase3_of_idac1_cur = 0;\r
-//    uint8_t phase3_of_idac2_cur = 0;\r
+    uint8_t phase3_led_offset_idac = 0; /* 0~255 = 0 ~ 64ua , step = 0.25ua */\r
+    uint8_t phase3_ldr1_cur = DRV1_GRAD_CUR;     /* 0~255 = 0 ~ 200ma, step = 0.8ma */\r
+    uint8_t phase3_ldr2_cur = DRV2_GRAD_CUR;\r
     uint8_t phase3_ad_inr_ctrl = 3;\r
     uint8_t phase3_ad_of_idac_ctrl = 0;\r
 //    uint8_t phase3_afe_offset  =  0;\r
     uint8_t phase3_led_en = 1;      /* phase1 led enable*/\r
-               \r
-               uint8_t phase3_dsp_mov_avg_num = 0; /* 0=bypass ; 1=2 ; 2=4 ; 3=8 */\r
+    uint8_t phase3_dsp_mov_avg_num = 0; /* 0=bypass ; 1=2 ; 2=4 ; 3=8 */\r
     uint8_t phase3_dsp_iir_lp_coeff = 0; /* 0=bypass ; 1=1/2 ; 2=1/4 ; 3=1/8 ,...,7=1/128 */\r
 \r
                \r
     uint8_t phase4_inner_avg = 0;   /* phase1 adc avg num 0=1, 1=2, 2=4, 3=8 , 4=16*/\r
-    uint8_t phase4_tia_res = 0;     /* 0= 10K; 1= 20k; 2= 50k; 3= 100k; 4= 150k; 5= 200k; 6= 500k; 7= 1M*/\r
-               uint8_t phase4_tia_cap = 4;     /* 0= ; 1= ; 2= ; 3= ; 4= ; 5= ; 6= ; 7= */\r
-    uint8_t phase4_led_drv1_cha_sel = 0;     /* 1 = ldr1; 2 = ldr2; 4 = ldr3; 8 = ldr4 ; */\r
+    uint8_t phase4_tia_res = PS_GRAD_TIA;     /* 0= 10K; 1= 20k; 2= 50k; 3= 100k; 4= 150k; 5= 200k; 6= 500k; 7= 1M*/\r
+    uint8_t phase4_tia_cap = 4;     /* 0= ; 1= ; 2= ; 3= ; 4= ; 5= ; 6= ; 7= */\r
+    uint8_t phase4_led_drv1_cha_sel = LDR2_FT_SEL;     /* 1 = ldr1; 2 = ldr2; 4 = ldr3; 8 = ldr4 ; */\r
     uint8_t phase4_led_drv2_cha_sel = 0;\r
-               uint8_t phase4_pd_sel = 0x0c;      /* 1 = pd1; 2 = pd2; 4 = pd3*/\r
+    uint8_t phase4_pd_sel = LDR2_PD_FT_SEL;      /* 1 = pd1; 2 = pd2; 4 = pd3*/\r
     uint8_t phase4_als_offset_idac = 0; /* 0~255 = 0 ~ 128ua , step = 0.5ua */\r
-               uint8_t phase4_led_offset_idac = 0; /* 0~255 = 0 ~ 64ua , step = 0.25ua */\r
-    uint8_t phase4_ldr1_cur = 0;     /* 0~255 = 0 ~ 200ma, step = 0.8ma */\r
-               uint8_t phase4_ldr2_cur = 0;\r
-//             uint8_t phase4_of_idac1_cur = 0;\r
-//    uint8_t phase4_of_idac2_cur = 0;\r
+    uint8_t phase4_led_offset_idac = 0; /* 0~255 = 0 ~ 64ua , step = 0.25ua */\r
+    uint8_t phase4_ldr1_cur = DRV1_GRAD_CUR;     /* 0~255 = 0 ~ 200ma, step = 0.8ma */\r
+    uint8_t phase4_ldr2_cur = DRV2_GRAD_CUR;\r
     uint8_t phase4_ad_inr_ctrl = 3;\r
     uint8_t phase4_ad_of_idac_ctrl = 0;\r
 //    uint8_t phase4_afe_offset  =  0;\r
-    uint8_t phase4_led_en = 1;      /* phase1 led enable*/\r
-               \r
-               uint8_t phase4_dsp_mov_avg_num = 0; /* 0=bypass ; 1=2 ; 2=4 ; 3=8 */\r
+    uint8_t phase4_led_en = 1;      /* phase1 led enable*/             \r
+    uint8_t phase4_dsp_mov_avg_num = 0; /* 0=bypass ; 1=2 ; 2=4 ; 3=8 */\r
     uint8_t phase4_dsp_iir_lp_coeff = 0; /* 0=bypass ; 1=1/2 ; 2=1/4 ; 3=1/8 ,...,7=1/128 */\r
 \r
     uint8_t phase5_inner_avg = 0;   /* phase1 adc avg num 0=1, 1=2, 2=4, 3=8 , 4=16*/\r
-    uint8_t phase5_tia_res = 0;     /* 0= 10K; 1= 20k; 2= 50k; 3= 100k; 4= 150k; 5= 200k; 6= 500k; 7= 1M*/\r
-               uint8_t phase5_tia_cap = 4;     /* 0= ; 1= ; 2= ; 3= ; 4= ; 5= ; 6= ; 7= */\r
-    uint8_t phase5_led_drv1_cha_sel = 0;     /* 1 = ldr1; 2 = ldr2; 4 = ldr3; 8 = ldr4 ; */\r
+    uint8_t phase5_tia_res = PS_GRAD_TIA;     /* 0= 10K; 1= 20k; 2= 50k; 3= 100k; 4= 150k; 5= 200k; 6= 500k; 7= 1M*/\r
+    uint8_t phase5_tia_cap = 4;     /* 0= ; 1= ; 2= ; 3= ; 4= ; 5= ; 6= ; 7= */\r
+    uint8_t phase5_led_drv1_cha_sel = LDR3_FT_SEL;     /* 1 = ldr1; 2 = ldr2; 4 = ldr3; 8 = ldr4 ; */\r
     uint8_t phase5_led_drv2_cha_sel = 0;\r
-               uint8_t phase5_pd_sel = 0x0c;      /* 1 = pd1; 2 = pd2; */\r
+    uint8_t phase5_pd_sel = LDR3_PD_FT_SEL;      /* 1 = pd1; 2 = pd2; */\r
     uint8_t phase5_als_offset_idac = 0; /* 0~255 = 0 ~ 128ua , step = 0.5ua */\r
-               uint8_t phase5_led_offset_idac = 0; /* 0~255 = 0 ~ 64ua , step = 0.25ua */\r
-    uint8_t phase5_ldr1_cur = 0;     /* 0~255 = 0 ~ 200ma, step = 0.8ma */\r
-               uint8_t phase5_ldr2_cur = 0;\r
-//             uint8_t phase5_of_idac1_cur = 0;\r
-//    uint8_t phase5_of_idac2_cur = 0;\r
+    uint8_t phase5_led_offset_idac = 0; /* 0~255 = 0 ~ 64ua , step = 0.25ua */\r
+    uint8_t phase5_ldr1_cur = DRV1_GRAD_CUR;     /* 0~255 = 0 ~ 200ma, step = 0.8ma */\r
+    uint8_t phase5_ldr2_cur = DRV2_GRAD_CUR;\r
     uint8_t phase5_ad_inr_ctrl = 3;\r
     uint8_t phase5_ad_of_idac_ctrl = 0;\r
 //    uint8_t phase5_afe_offset  =  0;\r
-    uint8_t phase5_led_en = 1;      /* phase1 led enable*/\r
-               \r
-               uint8_t phase5_dsp_mov_avg_num = 0; /* 0=bypass ; 1=2 ; 2=4 ; 3=8 */\r
+    uint8_t phase5_led_en = 1;      /* phase1 led enable*/             \r
+    uint8_t phase5_dsp_mov_avg_num = 0; /* 0=bypass ; 1=2 ; 2=4 ; 3=8 */\r
     uint8_t phase5_dsp_iir_lp_coeff = 0; /* 0=bypass ; 1=1/2 ; 2=1/4 ; 3=1/8 ,...,7=1/128 */\r
 \r
     uint8_t phase6_inner_avg = 0;   /* phase1 adc avg num 0=1, 1=2, 2=4, 3=8 , 4=16*/\r
-    uint8_t phase6_tia_res = 0;     /* 0= 10K; 1= 20k; 2= 50k; 3= 100k; 4= 150k; 5= 200k; 6= 500k; 7= 1M*/\r
-               uint8_t phase6_tia_cap = 4;     /* 0= ; 1= ; 2= ; 3= ; 4= ; 5= ; 6= ; 7= */\r
-    uint8_t phase6_led_drv1_cha_sel = 0;     /* 1 = ldr1; 2 = ldr2; 4 = ldr3; 8 = ldr4 ; */\r
+    uint8_t phase6_tia_res = PS_GRAD_TIA;     /* 0= 10K; 1= 20k; 2= 50k; 3= 100k; 4= 150k; 5= 200k; 6= 500k; 7= 1M*/\r
+    uint8_t phase6_tia_cap = 4;     /* 0= ; 1= ; 2= ; 3= ; 4= ; 5= ; 6= ; 7= */\r
+    uint8_t phase6_led_drv1_cha_sel = LDR4_FT_SEL;     /* 1 = ldr1; 2 = ldr2; 4 = ldr3; 8 = ldr4 ; */\r
     uint8_t phase6_led_drv2_cha_sel = 0;\r
-               uint8_t phase6_pd_sel = 0x0c;      /* 1 = pd1; 2 = pd2; */\r
+    uint8_t phase6_pd_sel = LDR4_PD_FT_SEL;      /* 1 = pd1; 2 = pd2; */\r
     uint8_t phase6_als_offset_idac = 0; /* 0~255 = 0 ~ 128ua , step = 0.5ua */\r
-               uint8_t phase6_led_offset_idac = 0; /* 0~255 = 0 ~ 64ua , step = 0.25ua */\r
-    uint8_t phase6_ldr1_cur = 0;     /* 0~255 = 0 ~ 200ma, step = 0.8ma */\r
-               uint8_t phase6_ldr2_cur = 0;\r
-//             uint8_t phase6_of_idac1_cur = 0;\r
-//    uint8_t phase6_of_idac2_cur = 0;\r
+    uint8_t phase6_led_offset_idac = 0; /* 0~255 = 0 ~ 64ua , step = 0.25ua */\r
+    uint8_t phase6_ldr1_cur = DRV1_GRAD_CUR;     /* 0~255 = 0 ~ 200ma, step = 0.8ma */\r
+    uint8_t phase6_ldr2_cur = DRV2_GRAD_CUR;\r
     uint8_t phase6_ad_inr_ctrl = 3;\r
     uint8_t phase6_ad_of_idac_ctrl = 0;\r
 //    uint8_t phase6_afe_offset  =  0;\r
-    uint8_t phase6_led_en = 1;      /* phase1 led enable*/\r
-               \r
-               uint8_t phase6_dsp_mov_avg_num = 0; /* 0=bypass ; 1=2 ; 2=4 ; 3=8 */\r
+    uint8_t phase6_led_en = 1;      /* phase1 led enable*/             \r
+    uint8_t phase6_dsp_mov_avg_num = 0; /* 0=bypass ; 1=2 ; 2=4 ; 3=8 */\r
     uint8_t phase6_dsp_iir_lp_coeff = 0; /* 0=bypass ; 1=1/2 ; 2=1/4 ; 3=1/8 ,...,7=1/128 */\r
 \r
     uint8_t phase7_inner_avg = 0;   /* phase1 adc avg num 0=1, 1=2, 2=4, 3=8 , 4=16*/\r
-    uint8_t phase7_tia_res = 0;     /* 0= 10K; 1= 20k; 2= 50k; 3= 100k; 4= 150k; 5= 200k; 6= 500k; 7= 1M*/\r
-               uint8_t phase7_tia_cap = 4;     /* 0= ; 1= ; 2= ; 3= ; 4= ; 5= ; 6= ; 7= */\r
-    uint8_t phase7_led_drv1_cha_sel = 0;     /* 1 = ldr1; 2 = ldr2; 4 = ldr3; 8 = ldr4 ; */\r
+    uint8_t phase7_tia_res = PS_GRAD_TIA;     /* 0= 10K; 1= 20k; 2= 50k; 3= 100k; 4= 150k; 5= 200k; 6= 500k; 7= 1M*/\r
+    uint8_t phase7_tia_cap = 4;     /* 0= ; 1= ; 2= ; 3= ; 4= ; 5= ; 6= ; 7= */\r
+    uint8_t phase7_led_drv1_cha_sel = LDR5_FT_SEL;     /* 1 = ldr1; 2 = ldr2; 4 = ldr3; 8 = ldr4 ; */\r
     uint8_t phase7_led_drv2_cha_sel = 0;\r
-               uint8_t phase7_pd_sel = 0x0c;      /* 1 = pd1; 2 = pd2; */\r
+    uint8_t phase7_pd_sel = LDR5_PD_FT_SEL;      /* 1 = pd1; 2 = pd2; */\r
     uint8_t phase7_als_offset_idac = 0; /* 0~255 = 0 ~ 128ua , step = 0.5ua */\r
-               uint8_t phase7_led_offset_idac = 0; /* 0~255 = 0 ~ 64ua , step = 0.25ua */\r
-    uint8_t phase7_ldr1_cur = 0;     /* 0~255 = 0 ~ 200ma, step = 0.8ma */\r
-               uint8_t phase7_ldr2_cur = 0;\r
-//             uint8_t phase7_of_idac1_cur = 0;\r
-//    uint8_t phase7_of_idac2_cur = 0;\r
+    uint8_t phase7_led_offset_idac = 0; /* 0~255 = 0 ~ 64ua , step = 0.25ua */\r
+    uint8_t phase7_ldr1_cur = DRV1_GRAD_CUR;     /* 0~255 = 0 ~ 200ma, step = 0.8ma */\r
+    uint8_t phase7_ldr2_cur = DRV2_GRAD_CUR;\r
     uint8_t phase7_ad_inr_ctrl = 3;\r
     uint8_t phase7_ad_of_idac_ctrl = 0;\r
 //    uint8_t phase7_afe_offset  =  0;\r
-    uint8_t phase7_led_en = 1;      /* phase1 led enable*/\r
-               \r
-               uint8_t phase7_dsp_mov_avg_num = 0; /* 0=bypass ; 1=2 ; 2=4 ; 3=8 */\r
+    uint8_t phase7_led_en = 1;      /* phase1 led enable*/             \r
+    uint8_t phase7_dsp_mov_avg_num = 0; /* 0=bypass ; 1=2 ; 2=4 ; 3=8 */\r
     uint8_t phase7_dsp_iir_lp_coeff = 0; /* 0=bypass ; 1=1/2 ; 2=1/4 ; 3=1/8 ,...,7=1/128 */\r
 \r
     uint8_t phase8_inner_avg = 0;   /* phase1 adc avg num 0=1, 1=2, 2=4, 3=8 , 4=16*/\r
-    uint8_t phase8_tia_res = 0;     /* 0= 10K; 1= 20k; 2= 50k; 3= 100k; 4= 150k; 5= 200k; 6= 500k; 7= 1M*/\r
-               uint8_t phase8_tia_cap = 4;     /* 0= ; 1= ; 2= ; 3= ; 4= ; 5= ; 6= ; 7= */\r
-    uint8_t phase8_led_drv1_cha_sel = 0;   //IR_LED_SLE;     /* 1 = ldr1; 2 = ldr2; 4 = ldr3; 8 = ldr4 ; */\r
+    uint8_t phase8_tia_res = 1;     /* 0= 10K; 1= 20k; 2= 50k; 3= 100k; 4= 150k; 5= 200k; 6= 500k; 7= 1M*/\r
+    uint8_t phase8_tia_cap = 4;     /* 0= ; 1= ; 2= ; 3= ; 4= ; 5= ; 6= ; 7= */\r
+    uint8_t phase8_led_drv1_cha_sel = 0;     /* 1 = ldr1; 2 = ldr2; 4 = ldr3; 8 = ldr4 ; */\r
     uint8_t phase8_led_drv2_cha_sel = 0;\r
-               uint8_t phase8_pd_sel = 0x0c;      /* 1 = pd1; 2 = pd2; */\r
+    uint8_t phase8_pd_sel = 0;      /* 1 = pd1; 2 = pd2; */\r
     uint8_t phase8_als_offset_idac = 0; /* 0~255 = 0 ~ 128ua , step = 0.5ua */\r
-               uint8_t phase8_led_offset_idac = 0; /* 0~255 = 0 ~ 64ua , step = 0.25ua */\r
+    uint8_t phase8_led_offset_idac = 0; /* 0~255 = 0 ~ 64ua , step = 0.25ua */\r
     uint8_t phase8_ldr1_cur = 0;     /* 0~255 = 0 ~ 200ma, step = 0.8ma */\r
-               uint8_t phase8_ldr2_cur = 0;\r
-//             uint8_t phase8_of_idac1_cur = 0;\r
-//    uint8_t phase8_of_idac2_cur = 0;\r
+    uint8_t phase8_ldr2_cur = 0;\r
     uint8_t phase8_ad_inr_ctrl = 3;\r
     uint8_t phase8_ad_of_idac_ctrl = 0;\r
 //    uint8_t phase8_afe_offset  =  0;\r
-    uint8_t phase8_led_en = 1;      /* phase1 led enable*/\r
-               \r
-               uint8_t phase8_dsp_mov_avg_num = 0; /* 0=bypass ; 1=2 ; 2=4 ; 3=8 */\r
+    uint8_t phase8_led_en = 0;      /* phase1 led enable*/             \r
+    uint8_t phase8_dsp_mov_avg_num = 0; /* 0=bypass ; 1=2 ; 2=4 ; 3=8 */\r
     uint8_t phase8_dsp_iir_lp_coeff = 0; /* 0=bypass ; 1=1/2 ; 2=1/4 ; 3=1/8 ,...,7=1/128 */\r
 \r
-    uint8_t init_wait_delay = 5 ; /* 0 = 31clk ; 1 = 64clk ; 2 = 127clk ; 3 = 255clk(d) ;\r
+    uint8_t init_wait_delay = 4 ; /* 0 = 31clk ; 1 = 64clk ; 2 = 127clk ; 3 = 255clk(d) ;\r
                                      4 = 511clk; 5 = 1023clk; 6 = 2047; 7 = 4095clk */         \r
                                                                                                                                                 \r
     uint8_t afe_reset = 3;        /* 0 = 15clk ; 1 = 31clk ; 2 = 63clk ; 3 = 127clk(d) ;\r
                                      4 = 255clk; 5 = 511clk; 6 = 1024; 7 = 2047clk */\r
                                                                                                                                                 \r
-               uint8_t afe_rst_cnvt = 1;               /* 0 = 15clk ; 1 = 31clk ; 2 = 63clk ; 3 = 127clk(d)*/\r
-    \r
+    uint8_t afe_rst_cnvt = 1;                  /* 0 = 15clk ; 1 = 31clk ; 2 = 63clk ; 3 = 127clk(d)*/\r
+\r
     uint8_t led_en_idac_pre    = 2;    /* 0 = 8clk ; 1 = 16clk ; 2 = 32clk ; 3 = 64clk(d)*/ \r
-               \r
-               uint8_t led_en_idac     =       1;        /* 0 = 4clk ; 1 = 8clk ; 2 = 16clk ; 3 = 32clk(d)*/ \r
-                                                                                                                                                \r
+\r
+    uint8_t led_en_idac        =       1;        /* 0 = 4clk ; 1 = 8clk ; 2 = 16clk ; 3 = 32clk(d)*/ \r
+                                                                     \r
     uint8_t led_on_time = 2;      /* 0 = 32clk=8us ; 1 = 64clk=16us; 2=128clk=32us ; 3 = 256clk=64us ;\r
                                      4 = 512clk=128us ; 5 = 1024clk=256us; 6= 2048clk=512us; 7 = 4096clk=1024us */\r
                                                                                                                                                 \r
     hx3695_delay_ms(10);               \r
-               \r
+                       \r
     hx3695_write_reg(0X2a, (uint8_t)prf_clk_num);    // prf bit<7:0>6\r
     hx3695_write_reg(0X2b, (uint8_t)(prf_clk_num>>8)); // prf bit<15:8>\r
     hx3695_write_reg(0X2c, (uint8_t)(prf_clk_num>>16)); // prf bit<23:16>      \r
                   \r
     hx3695_write_reg(0X25, (afe_rst_cnvt<<4| led_en_idac_pre<<2|led_en_idac)); \r
-               hx3695_write_reg(0X2d, phase7_8_internal); \r
-               hx3695_write_reg(0X2e, 0x33);// gpio ctrl \r
+    hx3695_write_reg(0X2d, phase7_8_internal); \r
+    hx3695_write_reg(0X2e, 0x33);// gpio ctrl \r
     hx3695_write_reg(0X2f, ((afe_reset<<4)| init_wait_delay));\r
-               hx3695_write_reg(0X30, (phase8_led_en<<7 | phase7_led_en<<6 |phase6_led_en<<5 |phase5_led_en<<4 |phase4_led_en<<3 | phase3_led_en<<2 | phase2_led_en<<1 | phase1_led_en) );\r
+    hx3695_write_reg(0X30, (phase8_led_en<<7 | phase7_led_en<<6 |phase6_led_en<<5 |phase5_led_en<<4 |phase4_led_en<<3 | phase3_led_en<<2 | phase2_led_en<<1 | phase1_led_en) );\r
     hx3695_write_reg(0X72, (phase8_led_en<<7 | phase7_led_en<<6 |phase6_led_en<<5 |phase5_led_en<<4 |phase4_led_en<<3 | phase3_led_en<<2 | phase2_led_en<<1 | phase1_led_en) );\r
 \r
 \r
     hx3695_write_reg(0X31, (led_on_time<<4| 0x00));\r
-               hx3695_write_reg(0X33, 0x83);// 中断极性及宽度配置;\r
-               hx3695_write_reg(0X34, 0x00);// 中断特殊配置;\r
-               hx3695_write_reg(0X36, 0x00);// phase data ready 标志设置;\r
-               hx3695_write_reg(0X38, 0x00);\r
+    hx3695_write_reg(0X33, 0x83);// �жϼ��Լ��������ã�\r
+    hx3695_write_reg(0X34, 0x00);// �ж��������ã�\r
+    hx3695_write_reg(0X36, 0x00);// phase data ready ��־���ã�\r
+    hx3695_write_reg(0X38, 0x00);\r
                \r
     hx3695_write_reg(0X3a, (phase1_inner_avg | (phase2_inner_avg<<4)));  \r
     hx3695_write_reg(0X3b, (phase3_inner_avg | (phase4_inner_avg<<4)));  \r
@@ -257,172 +234,156 @@ void hx3695_factory_wear_mode_config(void)
     hx3695_write_reg(0X3e, adc_rst_post_num<<6 | samp_delay_leden_num<<4 | samp_copy_avg); \r
     hx3695_write_reg(0X3f, data_avg_num<<4 | data_avg_num );\r
     hx3695_write_reg(0X40, data_avg_num<<4 | data_avg_num );\r
-               hx3695_write_reg(0X41, data_avg_num<<4 | data_avg_num );\r
-               hx3695_write_reg(0X42, data_avg_num<<4 | data_avg_num );\r
-               \r
-               hx3695_write_reg(0X43, phase1_mux_sel);  \r
-               hx3695_write_reg(0X44, phase1_tia_cap<<4|phase1_tia_res); \r
-               hx3695_write_reg(0X45, phase1_ldr1_cur);    //LED_DRV1_CUR\r
-               hx3695_write_reg(0x70, phase1_ldr2_cur);   //ps8--ps1  led_drv2_cur\r
-               hx3695_write_reg(0X46, (phase1_pd_sel<<4 | 0x00));\r
-               hx3695_write_reg(0X47, phase1_als_offset_idac);\r
-               hx3695_write_reg(0X48, phase1_led_offset_idac);\r
-\r
+    hx3695_write_reg(0X41, data_avg_num<<4 | data_avg_num );\r
+    hx3695_write_reg(0X42, data_avg_num<<4 | data_avg_num );\r
+    \r
+    hx3695_write_reg(0X43, phase1_mux_sel);  \r
+    hx3695_write_reg(0X44, phase1_tia_cap<<4|phase1_tia_res); \r
+    hx3695_write_reg(0X45, phase1_ldr1_cur);    //LED_DRV1_CUR\r
+    hx3695_write_reg(0x70, phase1_ldr2_cur);   //ps8--ps1  led_drv2_cur\r
+    hx3695_write_reg(0X46, (phase1_pd_sel<<4 | 0x00));\r
+    hx3695_write_reg(0X47, phase1_als_offset_idac);\r
+    hx3695_write_reg(0X48, phase1_led_offset_idac);\r
     hx3695_write_reg(0X49, phase1_ad_inr_ctrl<<4|phase1_ad_of_idac_ctrl); \r
-               hx3695_write_reg(0X4a, phase1_led_drv1_cha_sel);\r
-               hx3695_write_reg(0X4b, phase1_led_drv2_cha_sel);\r
-               hx3695_write_reg(0X71, phase1_dsp_mov_avg_num | phase1_dsp_iir_lp_coeff<<4);\r
+    hx3695_write_reg(0X4a, phase1_led_drv1_cha_sel);\r
+    hx3695_write_reg(0X4b, phase1_led_drv2_cha_sel);\r
+    hx3695_write_reg(0X71, phase1_dsp_mov_avg_num | phase1_dsp_iir_lp_coeff<<4);\r
 \r
-//    hx3695_write_reg(0X4e, thred_value);\r
-//    hx3695_write_reg(0X4f, thred_value>>5);\r
-               \r
+       \r
     hx3695_write_reg(0X43, phase2_mux_sel);  \r
-               hx3695_write_reg(0X44, phase2_tia_cap<<4|phase2_tia_res); \r
-               hx3695_write_reg(0X45, phase2_ldr1_cur);    //LED_DRV1_CUR\r
-               hx3695_write_reg(0x70, phase2_ldr2_cur);   //ps8--ps1  led_drv2_cur\r
-               hx3695_write_reg(0X46, (phase2_pd_sel<<4 | 0x00));\r
-               hx3695_write_reg(0X47, phase2_als_offset_idac);\r
-               hx3695_write_reg(0X48, phase2_led_offset_idac);\r
+    hx3695_write_reg(0X44, phase2_tia_cap<<4|phase2_tia_res); \r
+    hx3695_write_reg(0X45, phase2_ldr1_cur);    //LED_DRV1_CUR\r
+    hx3695_write_reg(0x70, phase2_ldr2_cur);   //ps8--ps1  led_drv2_cur\r
+    hx3695_write_reg(0X46, (phase2_pd_sel<<4 | 0x00));\r
+    hx3695_write_reg(0X47, phase2_als_offset_idac);\r
+    hx3695_write_reg(0X48, phase2_led_offset_idac);\r
 //             hx3695_write_reg(0X48, phase1_led_offset_idac);\r
     hx3695_write_reg(0X49,  phase2_ad_inr_ctrl<<4|phase2_ad_of_idac_ctrl); \r
-               hx3695_write_reg(0X4a, phase2_led_drv1_cha_sel);\r
-               hx3695_write_reg(0X4b, phase2_led_drv2_cha_sel);\r
-               hx3695_write_reg(0X71, phase2_dsp_mov_avg_num | phase2_dsp_iir_lp_coeff<<4);\r
+    hx3695_write_reg(0X4a, phase2_led_drv1_cha_sel);\r
+    hx3695_write_reg(0X4b, phase2_led_drv2_cha_sel);\r
+    hx3695_write_reg(0X71, phase2_dsp_mov_avg_num | phase2_dsp_iir_lp_coeff<<4);\r
                \r
 //phase3 sel\r
 \r
     hx3695_write_reg(0X43, phase3_mux_sel);  \r
-               hx3695_write_reg(0X44, phase3_tia_cap<<4|phase3_tia_res); \r
-               hx3695_write_reg(0X45, phase3_ldr1_cur);    //LED_DRV1_CUR\r
-               hx3695_write_reg(0x70, phase3_ldr2_cur);   //ps8--ps1  led_drv2_cur\r
-               hx3695_write_reg(0X46, (phase3_pd_sel<<4 | 0x00));\r
-               hx3695_write_reg(0X47, phase3_als_offset_idac);\r
-               hx3695_write_reg(0X48, phase3_led_offset_idac);\r
+    hx3695_write_reg(0X44, phase3_tia_cap<<4|phase3_tia_res); \r
+    hx3695_write_reg(0X45, phase3_ldr1_cur);    //LED_DRV1_CUR\r
+    hx3695_write_reg(0x70, phase3_ldr2_cur);   //ps8--ps1  led_drv2_cur\r
+    hx3695_write_reg(0X46, (phase3_pd_sel<<4 | 0x00));\r
+    hx3695_write_reg(0X47, phase3_als_offset_idac);\r
+    hx3695_write_reg(0X48, phase3_led_offset_idac);\r
 //             hx3695_write_reg(0X48, phase1_led_offset_idac);\r
     hx3695_write_reg(0X49,  phase3_ad_inr_ctrl<<4|phase3_ad_of_idac_ctrl); \r
-               hx3695_write_reg(0X4a, phase3_led_drv1_cha_sel);\r
-               hx3695_write_reg(0X4b, phase3_led_drv2_cha_sel);\r
-               hx3695_write_reg(0X71, phase3_dsp_mov_avg_num | phase3_dsp_iir_lp_coeff<<4);\r
+    hx3695_write_reg(0X4a, phase3_led_drv1_cha_sel);\r
+    hx3695_write_reg(0X4b, phase3_led_drv2_cha_sel);\r
+    hx3695_write_reg(0X71, phase3_dsp_mov_avg_num | phase3_dsp_iir_lp_coeff<<4);\r
                \r
 //phase4 sel\r
 \r
     hx3695_write_reg(0X43, phase4_mux_sel);  \r
-               hx3695_write_reg(0X44, phase4_tia_cap<<4|phase4_tia_res); \r
-               hx3695_write_reg(0X45, phase4_ldr1_cur);    //LED_DRV1_CUR\r
-               hx3695_write_reg(0x70, phase4_ldr2_cur);   //ps8--ps1  led_drv2_cur\r
-               hx3695_write_reg(0X46, (phase4_pd_sel<<4 | 0x00));\r
-               hx3695_write_reg(0X47, phase4_als_offset_idac);\r
-               hx3695_write_reg(0X48, phase4_led_offset_idac);\r
-//             hx3695_write_reg(0X48, phase1_led_offset_idac);\r
+    hx3695_write_reg(0X44, phase4_tia_cap<<4|phase4_tia_res); \r
+    hx3695_write_reg(0X45, phase4_ldr1_cur);    //LED_DRV1_CUR\r
+    hx3695_write_reg(0x70, phase4_ldr2_cur);   //ps8--ps1  led_drv2_cur\r
+    hx3695_write_reg(0X46, (phase4_pd_sel<<4 | 0x00));\r
+    hx3695_write_reg(0X47, phase4_als_offset_idac);\r
+    hx3695_write_reg(0X48, phase4_led_offset_idac);\r
     hx3695_write_reg(0X49,  phase4_ad_inr_ctrl<<4|phase4_ad_of_idac_ctrl); \r
-               hx3695_write_reg(0X4a, phase4_led_drv1_cha_sel);\r
-               hx3695_write_reg(0X4b, phase4_led_drv2_cha_sel);\r
-               hx3695_write_reg(0X71, phase4_dsp_mov_avg_num | phase4_dsp_iir_lp_coeff<<4);\r
-\r
-               hx3695_write_reg(0X43, phase5_mux_sel);  \r
-               hx3695_write_reg(0X44, phase5_tia_cap<<4|phase5_tia_res); \r
-               hx3695_write_reg(0X45, phase5_ldr1_cur);    //LED_DRV1_CUR\r
-               hx3695_write_reg(0x70, phase5_ldr2_cur);   //ps8--ps1  led_drv2_cur\r
-               hx3695_write_reg(0X46, (phase5_pd_sel));    //<<4 | 0x00));\r
-               hx3695_write_reg(0X47, phase5_als_offset_idac);\r
-               hx3695_write_reg(0X48, phase5_led_offset_idac);\r
-//             hx3695_write_reg(0X48, phase1_led_offset_idac);\r
+    hx3695_write_reg(0X4a, phase4_led_drv1_cha_sel);\r
+    hx3695_write_reg(0X4b, phase4_led_drv2_cha_sel);\r
+    hx3695_write_reg(0X71, phase4_dsp_mov_avg_num | phase4_dsp_iir_lp_coeff<<4);\r
+\r
+    hx3695_write_reg(0X43, phase5_mux_sel);  \r
+    hx3695_write_reg(0X44, phase5_tia_cap<<4|phase5_tia_res); \r
+    hx3695_write_reg(0X45, phase5_ldr1_cur);    //LED_DRV1_CUR\r
+    hx3695_write_reg(0x70, phase5_ldr2_cur);   //ps8--ps1  led_drv2_cur\r
+    hx3695_write_reg(0X46, (phase5_pd_sel<<4 | 0x00));\r
+    hx3695_write_reg(0X47, phase5_als_offset_idac);\r
+    hx3695_write_reg(0X48, phase5_led_offset_idac);\r
     hx3695_write_reg(0X49,  phase5_ad_inr_ctrl<<4|phase5_ad_of_idac_ctrl); \r
-               hx3695_write_reg(0X4a, phase5_led_drv1_cha_sel);\r
-               hx3695_write_reg(0X4b, phase5_led_drv2_cha_sel);\r
-               hx3695_write_reg(0X71, phase5_dsp_mov_avg_num | phase5_dsp_iir_lp_coeff<<4);\r
-               \r
-               \r
-         hx3695_write_reg(0X43, phase6_mux_sel);  \r
-               hx3695_write_reg(0X44, phase6_tia_cap<<4|phase6_tia_res); \r
-               hx3695_write_reg(0X45, phase6_ldr1_cur);    //LED_DRV1_CUR\r
-               hx3695_write_reg(0x70, phase6_ldr2_cur);   //ps8--ps1  led_drv2_cur\r
-               hx3695_write_reg(0X46, (phase6_pd_sel<<4 | 0x00));\r
-               hx3695_write_reg(0X47, phase6_als_offset_idac);\r
-               hx3695_write_reg(0X48, phase6_led_offset_idac);\r
-//             hx3695_write_reg(0X48, phase6_led_offset_idac);\r
+    hx3695_write_reg(0X4a, phase5_led_drv1_cha_sel);\r
+    hx3695_write_reg(0X4b, phase5_led_drv2_cha_sel);\r
+    hx3695_write_reg(0X71, phase5_dsp_mov_avg_num | phase5_dsp_iir_lp_coeff<<4);\r
+               \r
+               \r
+    hx3695_write_reg(0X43, phase6_mux_sel);  \r
+    hx3695_write_reg(0X44, phase6_tia_cap<<4|phase6_tia_res); \r
+    hx3695_write_reg(0X45, phase6_ldr1_cur);    //LED_DRV1_CUR\r
+    hx3695_write_reg(0x70, phase6_ldr2_cur);   //ps8--ps1  led_drv2_cur\r
+    hx3695_write_reg(0X46, (phase6_pd_sel<<4 | 0x00));\r
+    hx3695_write_reg(0X47, phase6_als_offset_idac);\r
+    hx3695_write_reg(0X48, phase6_led_offset_idac);\r
     hx3695_write_reg(0X49,  phase6_ad_inr_ctrl<<4|phase6_ad_of_idac_ctrl); \r
-               hx3695_write_reg(0X4a, phase6_led_drv1_cha_sel);\r
-               hx3695_write_reg(0X4b, phase6_led_drv2_cha_sel);\r
-               hx3695_write_reg(0X71, phase6_dsp_mov_avg_num | phase6_dsp_iir_lp_coeff<<4);\r
+    hx3695_write_reg(0X4a, phase6_led_drv1_cha_sel);\r
+    hx3695_write_reg(0X4b, phase6_led_drv2_cha_sel);\r
+    hx3695_write_reg(0X71, phase6_dsp_mov_avg_num | phase6_dsp_iir_lp_coeff<<4);\r
                \r
        \r
-         hx3695_write_reg(0X43, phase7_mux_sel);  \r
-               hx3695_write_reg(0X44, phase7_tia_cap<<4|phase7_tia_res); \r
-               hx3695_write_reg(0X45, phase7_ldr1_cur);    //LED_DRV1_CUR\r
-               hx3695_write_reg(0x70, phase7_ldr2_cur);   //ps8--ps1  led_drv2_cur\r
-               hx3695_write_reg(0X46, (phase7_pd_sel<<4 | 0x00));\r
-               hx3695_write_reg(0X47, phase7_als_offset_idac);\r
-               hx3695_write_reg(0X48, phase7_led_offset_idac);\r
-//             hx3695_write_reg(0X48, phase7_led_offset_idac);\r
+    hx3695_write_reg(0X43, phase7_mux_sel);  \r
+    hx3695_write_reg(0X44, phase7_tia_cap<<4|phase7_tia_res); \r
+    hx3695_write_reg(0X45, phase7_ldr1_cur);    //LED_DRV1_CUR\r
+    hx3695_write_reg(0x70, phase7_ldr2_cur);   //ps8--ps1  led_drv2_cur\r
+    hx3695_write_reg(0X46, (phase7_pd_sel<<4 | 0x00));\r
+    hx3695_write_reg(0X47, phase7_als_offset_idac);\r
+    hx3695_write_reg(0X48, phase7_led_offset_idac);\r
     hx3695_write_reg(0X49,  phase7_ad_inr_ctrl<<4|phase7_ad_of_idac_ctrl); \r
-               hx3695_write_reg(0X4a, phase7_led_drv1_cha_sel);\r
-               hx3695_write_reg(0X4b, phase7_led_drv2_cha_sel);\r
-               hx3695_write_reg(0X71, phase7_dsp_mov_avg_num | phase7_dsp_iir_lp_coeff<<4);\r
+    hx3695_write_reg(0X4a, phase7_led_drv1_cha_sel);\r
+    hx3695_write_reg(0X4b, phase7_led_drv2_cha_sel);\r
+    hx3695_write_reg(0X71, phase7_dsp_mov_avg_num | phase7_dsp_iir_lp_coeff<<4);\r
                \r
        \r
-         hx3695_write_reg(0X43, phase8_mux_sel);  \r
-               hx3695_write_reg(0X44, phase8_tia_cap<<4|phase8_tia_res); \r
-               hx3695_write_reg(0X45, phase8_ldr1_cur);    //LED_DRV1_CUR\r
-               hx3695_write_reg(0x70, phase8_ldr2_cur);   //ps8--ps1  led_drv2_cur\r
-               hx3695_write_reg(0X46, (phase8_pd_sel<<4 | 0x00));\r
-               hx3695_write_reg(0X47, phase8_als_offset_idac);\r
-               hx3695_write_reg(0X48, phase8_led_offset_idac);\r
-//             hx3695_write_reg(0X48, phas8_led_offset_idac);\r
+    hx3695_write_reg(0X43, phase8_mux_sel);  \r
+    hx3695_write_reg(0X44, phase8_tia_cap<<4|phase8_tia_res); \r
+    hx3695_write_reg(0X45, phase8_ldr1_cur);    //LED_DRV1_CUR\r
+    hx3695_write_reg(0x70, phase8_ldr2_cur);   //ps8--ps1  led_drv2_cur\r
+    hx3695_write_reg(0X46, (phase8_pd_sel<<4 | 0x00));\r
+    hx3695_write_reg(0X47, phase8_als_offset_idac);\r
+    hx3695_write_reg(0X48, phase8_led_offset_idac);\r
     hx3695_write_reg(0X49,  phase8_ad_inr_ctrl<<4|phase8_ad_of_idac_ctrl); \r
-               hx3695_write_reg(0X4a, phase8_led_drv1_cha_sel);\r
-               hx3695_write_reg(0X4b, phase8_led_drv2_cha_sel);\r
-               hx3695_write_reg(0X71, phase8_dsp_mov_avg_num | phase8_dsp_iir_lp_coeff<<4);\r
+    hx3695_write_reg(0X4a, phase8_led_drv1_cha_sel);\r
+    hx3695_write_reg(0X4b, phase8_led_drv2_cha_sel);\r
+    hx3695_write_reg(0X71, phase8_dsp_mov_avg_num | phase8_dsp_iir_lp_coeff<<4);\r
                \r
 \r
 // analog circuit cfg \r
-    hx3695_write_reg(0X60, 0x14);      //\r
-               hx3695_write_reg(0X61, 0xf0);   \r
-               hx3695_write_reg(0X62, 0x22); \r
-               hx3695_write_reg(0X63, 0x15); \r
-                                                                                                                                                                                                                               \r
-               hx3695_write_reg(0X64, 0x08);   \r
-               hx3695_write_reg(0X65, 0x88); //bug\r
-               \r
-               hx3695_write_reg(0X66, 0x30);   // bits<3>=adc selftest en     0x30\r
-               hx3695_write_reg(0X67, 0x23);   \r
-               hx3695_write_reg(0X68, 0x46);   \r
-               hx3695_write_reg(0X69, 0x42);   \r
-               \r
-               hx3695_write_reg(0X39, 0xff);   // ofset idac1 phase enable cfg\r
-               hx3695_write_reg(0x73, 0xff);    //led_offset_idac phase enable\r
+    hx3695_write_reg(0X60, 0x34);      //\r
+    hx3695_write_reg(0X61, 0xf0);      \r
+    hx3695_write_reg(0X62, 0x22); \r
+    hx3695_write_reg(0X63, 0x15); \r
+                                                                                                            \r
+    hx3695_write_reg(0X64, 0x08);      \r
+    hx3695_write_reg(0X65, 0x88); //bug\r
+    \r
+    hx3695_write_reg(0X66, 0x30);      // bits<3>=adc selftest en     0x30\r
+    hx3695_write_reg(0X67, 0x23);      \r
+    hx3695_write_reg(0X68, 0x46);      \r
+    hx3695_write_reg(0X69, 0x42);      \r
+    \r
+    hx3695_write_reg(0X39, 0xff);   // ofset idac1 phase enable cfg\r
+    hx3695_write_reg(0x73, 0xff);    //led_offset_idac phase enable\r
                \r
     hx3695_write_reg(0X6a, 0X0f);      \r
-               hx3695_write_reg(0X6b, 0X22);   \r
-               hx3695_write_reg(0X6c, 0X00);   \r
-               hx3695_write_reg(0X6d, 0X37);   \r
-               hx3695_write_reg(0X6e, 0X82);   \r
-               hx3695_write_reg(0X6f, 0X08);\r
+    hx3695_write_reg(0X6b, 0X22);      \r
+    hx3695_write_reg(0X6c, 0X00);      \r
+    hx3695_write_reg(0X6d, 0X37);      \r
+    hx3695_write_reg(0X6e, 0X82);      \r
+    hx3695_write_reg(0X6f, 0X00);\r
 /////////FIFO and adc conversion ready config////////\r
 /////////FIFO and adc conversion ready config////////\r
-#if defined(PPG_INT_MODE)\r
-               hx3695_write_reg(0X1b, 0x92);// bits<3:0> fifo data sel, 0000 = p1;0001= p2;0010=p3;\\r
-                                        0011=p4;0100=p5;0101=p6;0110=p7;\\r
-                                        bits<7> fifo enble\r
-                hx3695_write_reg(0X33, 0x83);   // int width                                                                                                                                           \r
-     hx3695_write_reg(0X21, 0x00);   // fifo int sel,00=FIFO INT config clear\r
-                hx3695_write_reg(0X38, 0x01);   // int sel,00=close almost full int,04=enable almost full int\r
-#elif defined(INT_MODE)               //FIFO_ALL_MOST_FULL)\r
-                hx3695_write_reg(0X1b, 0x92);// bits<3:0> fifo data sel, 0000 = p1;0001= p2;0010=p3;\\r
-                                        0011=p4;0100=p5;0101=p6;0110=p7;\\r
-                                        bits<7> fifo enble\r
-                hx3695_write_reg(0X1c, (fifo_watermark&0xff));   //fifo_watermark\r
-                hx3695_write_reg(0X1d, fifo_watermark<<8);       //bit<0>=fifo_watermark[8]  \r
-                hx3695_write_reg(0X33, 0x83);   // int width   \r
-                hx3695_write_reg(0X21, 0x00);   // fifo int sel,00=FIFO INT config clear\r
-     hx3695_write_reg(0X38, 0x04);   // int sel,00=close almost full int,04=enable almost full int\r
+#if  defined(INT_MODE)             //(FIFO_ALL_MOST_FULL)\r
+        hx3695_write_reg(0X1b, 0x90);// bits<3:0> fifo data sel, 0000 = p1;0001= p2;0010=p3;\\r
+                                0011=p4;0100=p5;0101=p6;0110=p7;\\r
+                                bits<7> fifo enble\r
+        hx3695_write_reg(0X1c, (fifo_watermark&0xff));   //fifo_watermark\r
+        hx3695_write_reg(0X1d, fifo_watermark<<8);       //bit<0>=fifo_watermark[8]  \r
+        hx3695_write_reg(0X33, 0x83);   // int width                                                                                                                                           \r
+        hx3695_write_reg(0X38, 0x04);   // int sel,00=close almost full int,04=enable almost full int\r
 \r
 #else\r
-                hx3695_write_reg(0X1b, 0x92);    // bits<3:0> fifo data sel, 0000 = p1;0001= p2;0010=p3;\r
-                                      //  0011=p4;0100=p5;0101=p6;0110=p7;\r
-                                      //  bits<7> fifo enble                                                                           \r
-     hx3695_write_reg(0X38, 0x01);   // int sel,00=close almost full int,04=enable almost full int\r
-     \r
+    hx3695_write_reg(0X1b, 0x92);// bits<3:0> fifo data sel, 0000 = p1;0001= p2;0010=p3;0011=p4;0100=p5;0101=p6;0110=p7;bits<7> fifo enble     \r
+    hx3695_write_reg(0X36, 0x00);                        //intrupt                                                                                                                                     \r
+                                                                                                                                               \r
+    hx3695_write_reg(0X38, 0x00);   // int sel,00=close almost full int,01= prf int  04=enable almost full int\r
+\r
 #endif\r
 \r
                \r
@@ -434,217 +395,183 @@ void hx3695_factory_wear_mode_config(void)
 //    hx3695_write_reg(0X5c, 0x02);//soft reset\r
     hx3695_delay_ms(5);  \r
     hx3695_write_reg(0X5c, 0x00);//release\r
-//    read_fifo_first_flg = 1;\r
-    return ;\r
-       \r
-       \r
-       \r
+\r
+    return ;   \r
 }\r
 \r
-void hx3695_factory_ft_card_test_config(void)//灰卡15mm高度测试配置\r
+\r
+\r
+void hx3695_factory_ft_leak_light_test_config(void)//©���������\r
 {\r
-         uint16_t sample_rate = 25;                  /*config the data rate of chip alps2_fm ,uint is Hz*/\r
+    uint16_t sample_rate = 25;                  /*config the data rate of chip alps2_fm ,uint is Hz*/\r
     uint32_t prf_clk_num = 32000/sample_rate;   /*period in clk num, num = Fclk/fs */\r
-         \r
-//       uint16_t fifo_watermark= 250 ;\r
+\r
+    uint16_t fifo_watermark= 250 ;\r
     uint8_t adc_rst_post_num= 0;       /* 00=16,01=32,10=64,11=128*/      \r
-         uint8_t samp_delay_leden_num = 0; /* 00=8,01=16,10=32,11=64*/ \r
+    uint8_t samp_delay_leden_num = 0; /* 00=8,01=16,10=32,11=64*/ \r
     uint8_t samp_copy_avg = 0;        /* 0=1, 1=2, 2=4 ,3=8, 4=16*/\r
     uint8_t data_avg_num = 0;         /* 0 = 1 ; 1 = 2; 2 =4 ; 3 =8 ; 4 =16 ;*/\r
-         uint8_t phase7_8_internal = 0;   //0x18;    /* phase7 and phase8 prf internal cfg */\r
-       \r
-//       uint16_t  thred_value = 32500;\r
+    uint8_t phase7_8_internal = 0;   //0x18;    /* phase7 and phase8 prf internal cfg */\r
+\r
        \r
     uint8_t phase1_enable = 1;     /*phase1_enable  , 1 mean enable ; 0 mean disable */ \r
     uint8_t phase2_enable = 1;     /*phase2_enable  , 1 mean enable ; 0 mean disable */ \r
     uint8_t phase3_enable = 1;     /*phase3_enable  , 1 mean enable ; 0 mean disable */ \r
     uint8_t phase4_enable = 1;     /*phase4_enable  , 1 mean enable ; 0 mean disable */\r
-    uint8_t phase5_enable = 0;     /*phase5_enable  , 1 mean enable ; 0 mean disable */ \r
-    uint8_t phase6_enable = 0;     /*phase6_enable  , 1 mean enable ; 0 mean disable */ \r
-    uint8_t phase7_enable = 0;     /*phase7_enable  , 1 mean enable ; 0 mean disable */        \r
-         uint8_t phase8_enable = 0;     /*phase8_enable  , 1 mean enable ; 0 mean disable */ \r
+    uint8_t phase5_enable = 1;     /*phase5_enable  , 1 mean enable ; 0 mean disable */ \r
+    uint8_t phase6_enable = 1;     /*phase6_enable  , 1 mean enable ; 0 mean disable */ \r
+    uint8_t phase7_enable = 1;     /*phase7_enable  , 1 mean enable ; 0 mean disable */        \r
+    uint8_t phase8_enable = 1;     /*phase8_enable  , 1 mean enable ; 0 mean disable */ \r
 \r
     uint8_t phase1_adc_osr = 3;    /* 0 = 128 ; 1 = 256 ; 2 = 512 ; 3 = 1024 ; 4 = 2048*/\r
     uint8_t phase2_adc_osr = 3;    /* 0 = 128 ; 1 = 256 ; 2 = 512 ; 3 = 1024 ; 4 = 2048*/\r
     uint8_t phase3_adc_osr = 3;    /* 0 = 128 ; 1 = 256 ; 2 = 512 ; 3 = 1024 ; 4 = 2048*/\r
     uint8_t phase4_adc_osr = 3;    /* 0 = 128 ; 1 = 256 ; 2 = 512 ; 3 = 1024 ; 4 = 2048*/\r
-               uint8_t phase5_adc_osr = 3;    /* 0 = 128 ; 1 = 256 ; 2 = 512 ; 3 = 1024 ; 4 = 2048*/\r
-         uint8_t phase6_adc_osr = 3;    /* 0 = 128 ; 1 = 256 ; 2 = 512 ; 3 = 1024 ; 4 = 2048*/\r
-               uint8_t phase7_adc_osr = 3;    /* 0 = 128 ; 1 = 256 ; 2 = 512 ; 3 = 1024 ; 4 = 2048*/\r
-               uint8_t phase8_adc_osr = 3;    /* 0 = 128 ; 1 = 256 ; 2 = 512 ; 3 = 1024 ; 4 = 2048*/\r
+    uint8_t phase5_adc_osr = 3;    /* 0 = 128 ; 1 = 256 ; 2 = 512 ; 3 = 1024 ; 4 = 2048*/\r
+    uint8_t phase6_adc_osr = 3;    /* 0 = 128 ; 1 = 256 ; 2 = 512 ; 3 = 1024 ; 4 = 2048*/\r
+    uint8_t phase7_adc_osr = 3;    /* 0 = 128 ; 1 = 256 ; 2 = 512 ; 3 = 1024 ; 4 = 2048*/\r
+    uint8_t phase8_adc_osr = 3;    /* 0 = 128 ; 1 = 256 ; 2 = 512 ; 3 = 1024 ; 4 = 2048*/\r
                         \r
-         uint8_t phase1_mux_sel = 0;    /* sel phase1*/\r
-               uint8_t phase2_mux_sel = 1;    /* sel phase2*/\r
-               uint8_t phase3_mux_sel = 2;    /* sel phase3*/\r
-               uint8_t phase4_mux_sel = 3;    /* sel phase4*/\r
-               uint8_t phase5_mux_sel = 4;    /* sel phase5*/\r
-               uint8_t phase6_mux_sel = 5;    /* sel phase6*/\r
-               uint8_t phase7_mux_sel = 6;    /* sel phase7*/\r
-               uint8_t phase8_mux_sel = 7;    /* sel phase8*/\r
+    uint8_t phase1_mux_sel = 0;    /* sel phase1*/\r
+    uint8_t phase2_mux_sel = 1;    /* sel phase2*/\r
+    uint8_t phase3_mux_sel = 2;    /* sel phase3*/\r
+    uint8_t phase4_mux_sel = 3;    /* sel phase4*/\r
+    uint8_t phase5_mux_sel = 4;    /* sel phase5*/\r
+    uint8_t phase6_mux_sel = 5;    /* sel phase6*/\r
+    uint8_t phase7_mux_sel = 6;    /* sel phase7*/\r
+    uint8_t phase8_mux_sel = 7;    /* sel phase8*/\r
        \r
 \r
-         uint8_t phase1_inner_avg = 0;   /* phase1 adc avg num 0=1, 1=2, 2=4, 3=8 , 4=16*/\r
-    uint8_t phase1_tia_res = 0;     /* 0= 10K; 1= 20k; 2= 50k; 3= 100k; 4= 150k; 5= 200k; 6= 500k; 7= 1M*/\r
-               uint8_t phase1_tia_cap = 4;     /* 0= ; 1= ; 2= ; 3= ; 4= ; 5= ; 6= ; 7= */\r
+    uint8_t phase1_inner_avg = 0;   /* phase1 adc avg num 0=1, 1=2, 2=4, 3=8 , 4=16*/\r
+    uint8_t phase1_tia_res = PS_LEAK_TIA;     /* 0= 10K; 1= 20k; 2= 50k; 3= 100k; 4= 150k; 5= 200k; 6= 500k; 7= 1M*/\r
+    uint8_t phase1_tia_cap = 4;     /* 0= ; 1= ; 2= ; 3= ; 4= ; 5= ; 6= ; 7= */\r
     uint8_t phase1_led_drv1_cha_sel = 0;     /* 1 = ldr1  NG; 2 = ldr2   GR; 4 = ldr3  IR; 8 = ldr4 RED; */\r
     uint8_t phase1_led_drv2_cha_sel = 0;    /*ldr5:0x20  ldr6: 0x40 red    ldr8 0x80  ir      */\r
-               uint8_t phase1_pd_sel = 0x0a;          /* 1 = pd1; 2 = pd2; 4 = pd3*/\r
+    uint8_t phase1_pd_sel = ALS_PD_FT_SEL;          /* 1 = pd1; 2 = pd2; 4 = pd3*/\r
     uint8_t phase1_als_offset_idac = 0; /* 0~255 = 0 ~ 128ua , step = 0.5ua */\r
-               uint8_t phase1_led_offset_idac = 0; /* 0~255 = 0 ~ 64ua , step = 0.25ua */\r
-    uint8_t phase1_ldr1_cur = 32;     /* 0~255 = 0 ~ 200ma, step = 0.8ma */\r
-               uint8_t phase1_ldr2_cur = 0;\r
-//             uint8_t phase1_of_idac1_cur = 0;\r
-//    uint8_t phase1_of_idac2_cur = 0;\r
+    uint8_t phase1_led_offset_idac = 0; /* 0~255 = 0 ~ 64ua , step = 0.25ua */\r
+    uint8_t phase1_ldr1_cur = 0;     /* 0~255 = 0 ~ 200ma, step = 0.8ma */\r
+    uint8_t phase1_ldr2_cur = 0;\r
     uint8_t phase1_ad_inr_ctrl = 3;\r
     uint8_t phase1_ad_of_idac_ctrl = 0;\r
-//    uint8_t afe_offset  =  0;\r
-    uint8_t phase1_led_en = 1;      /* phase1 led enable*/\r
-               \r
-               uint8_t phase1_dsp_mov_avg_num = 0; /* 0=bypass ; 1=2 ; 2=4 ; 3=8 */\r
+    uint8_t phase1_led_en = 1;      /* phase1 led enable*/             \r
+    uint8_t phase1_dsp_mov_avg_num = 0; /* 0=bypass ; 1=2 ; 2=4 ; 3=8 */\r
     uint8_t phase1_dsp_iir_lp_coeff = 0; /* 0=bypass ; 1=1/2 ; 2=1/4 ; 3=1/8 ,...,7=1/128 */\r
 \r
 \r
 \r
-         uint8_t phase2_inner_avg = 0;   /* phase1 adc avg num 0=1, 1=2, 2=4, 3=8 , 4=16*/\r
-    uint8_t phase2_tia_res = 0;     /* 0= 10K; 1= 20k; 2= 50k; 3= 100k; 4= 150k; 5= 200k; 6= 500k; 7= 1M*/\r
-               uint8_t phase2_tia_cap = 4;     /* 0= ; 1= ; 2= ; 3= ; 4= ; 5= ; 6= ; 7= */\r
-    uint8_t phase2_led_drv1_cha_sel = GREEN_LED_SLE;     /* 1 = ldr1; 2 = ldr2; 4 = ldr3; 8 = ldr4 ; */\r
+    uint8_t phase2_inner_avg = 0;   /* phase1 adc avg num 0=1, 1=2, 2=4, 3=8 , 4=16*/\r
+    uint8_t phase2_tia_res = PS_LEAK_TIA;     /* 0= 10K; 1= 20k; 2= 50k; 3= 100k; 4= 150k; 5= 200k; 6= 500k; 7= 1M*/\r
+    uint8_t phase2_tia_cap = 4;     /* 0= ; 1= ; 2= ; 3= ; 4= ; 5= ; 6= ; 7= */\r
+    uint8_t phase2_led_drv1_cha_sel = LDR0_FT_SEL;     /* 1 = ldr1; 2 = ldr2; 4 = ldr3; 8 = ldr4 ; */\r
     uint8_t phase2_led_drv2_cha_sel = 0x00;\r
-               uint8_t phase2_pd_sel = 0x0a;      /* 1 = pd1; 2 = pd2; 4 = pd3*/\r
+    uint8_t phase2_pd_sel = LDR0_PD_FT_SEL;      /* 1 = pd1; 2 = pd2; 4 = pd3*/\r
     uint8_t phase2_als_offset_idac = 0; /* 0~255 = 0 ~ 128ua , step = 0.5ua */\r
-               uint8_t phase2_led_offset_idac = 0; /* 0~255 = 0 ~ 64ua , step = 0.25ua */\r
-    uint8_t phase2_ldr1_cur = 32;     /* 0~255 = 0 ~ 200ma, step = 0.8ma */\r
-               uint8_t phase2_ldr2_cur = 0;\r
-//             uint8_t phase2_of_idac1_cur = 0;\r
-//    uint8_t phase2_of_idac2_cur = 0;\r
+    uint8_t phase2_led_offset_idac = 0; /* 0~255 = 0 ~ 64ua , step = 0.25ua */\r
+    uint8_t phase2_ldr1_cur = DRV1_LEAK_CUR;     /* 0~255 = 0 ~ 200ma, step = 0.8ma */\r
+    uint8_t phase2_ldr2_cur = DRV2_LEAK_CUR;\r
     uint8_t phase2_ad_inr_ctrl = 3;\r
     uint8_t phase2_ad_of_idac_ctrl = 0;\r
-//    uint8_t phase2_afe_offset  =  0;\r
-    uint8_t phase2_led_en = 1;      /* phase1 led enable*/\r
-               \r
-               uint8_t phase2_dsp_mov_avg_num = 0; /* 0=bypass ; 1=2 ; 2=4 ; 3=8 */\r
+    uint8_t phase2_led_en = 1;      /* phase1 led enable*/             \r
+    uint8_t phase2_dsp_mov_avg_num = 0; /* 0=bypass ; 1=2 ; 2=4 ; 3=8 */\r
     uint8_t phase2_dsp_iir_lp_coeff = 0; /* 0=bypass ; 1=1/2 ; 2=1/4 ; 3=1/8 ,...,7=1/128 */\r
 \r
                \r
     uint8_t phase3_inner_avg = 0;   /* phase1 adc avg num 0=1, 1=2, 2=4, 3=8 , 4=16*/\r
-    uint8_t phase3_tia_res = 0;     /* 0= 10K; 1= 20k; 2= 50k; 3= 100k; 4= 150k; 5= 200k; 6= 500k; 7= 1M*/\r
-               uint8_t phase3_tia_cap = 4;     /* 0= ; 1= ; 2= ; 3= ; 4= ; 5= ; 6= ; 7= */\r
-    uint8_t phase3_led_drv1_cha_sel = RED_LED_SLE;     /* 1 = ldr1; 2 = ldr2; 4 = ldr3; 8 = ldr4 ; */\r
+    uint8_t phase3_tia_res = PS_LEAK_TIA;     /* 0= 10K; 1= 20k; 2= 50k; 3= 100k; 4= 150k; 5= 200k; 6= 500k; 7= 1M*/\r
+    uint8_t phase3_tia_cap = 4;     /* 0= ; 1= ; 2= ; 3= ; 4= ; 5= ; 6= ; 7= */\r
+    uint8_t phase3_led_drv1_cha_sel = LDR1_FT_SEL;     /* 1 = ldr1; 2 = ldr2; 4 = ldr3; 8 = ldr4 ; */\r
     uint8_t phase3_led_drv2_cha_sel = 0;\r
-               uint8_t phase3_pd_sel = 0x0a;      /* 1 = pd1; 2 = pd2; 4 = pd3*/\r
+    uint8_t phase3_pd_sel = LDR1_PD_FT_SEL;      /* 1 = pd1; 2 = pd2; 4 = pd3*/\r
     uint8_t phase3_als_offset_idac = 0; /* 0~255 = 0 ~ 128ua , step = 0.5ua */\r
-               uint8_t phase3_led_offset_idac = 0; /* 0~255 = 0 ~ 64ua , step = 0.25ua */\r
-    uint8_t phase3_ldr1_cur = 32;     /* 0~255 = 0 ~ 200ma, step = 0.8ma */\r
-               uint8_t phase3_ldr2_cur = 0;\r
-//             uint8_t phase3_of_idac1_cur = 0;\r
-//    uint8_t phase3_of_idac2_cur = 0;\r
+    uint8_t phase3_led_offset_idac = 0; /* 0~255 = 0 ~ 64ua , step = 0.25ua */\r
+    uint8_t phase3_ldr1_cur = DRV1_LEAK_CUR;     /* 0~255 = 0 ~ 200ma, step = 0.8ma */\r
+    uint8_t phase3_ldr2_cur = DRV2_LEAK_CUR;\r
     uint8_t phase3_ad_inr_ctrl = 3;\r
     uint8_t phase3_ad_of_idac_ctrl = 0;\r
-//    uint8_t phase3_afe_offset  =  0;\r
-    uint8_t phase3_led_en = 1;      /* phase1 led enable*/\r
-               \r
-               uint8_t phase3_dsp_mov_avg_num = 0; /* 0=bypass ; 1=2 ; 2=4 ; 3=8 */\r
+    uint8_t phase3_led_en = 1;      /* phase1 led enable*/             \r
+    uint8_t phase3_dsp_mov_avg_num = 0; /* 0=bypass ; 1=2 ; 2=4 ; 3=8 */\r
     uint8_t phase3_dsp_iir_lp_coeff = 0; /* 0=bypass ; 1=1/2 ; 2=1/4 ; 3=1/8 ,...,7=1/128 */\r
 \r
                \r
     uint8_t phase4_inner_avg = 0;   /* phase1 adc avg num 0=1, 1=2, 2=4, 3=8 , 4=16*/\r
-    uint8_t phase4_tia_res = 0;     /* 0= 10K; 1= 20k; 2= 50k; 3= 100k; 4= 150k; 5= 200k; 6= 500k; 7= 1M*/\r
-               uint8_t phase4_tia_cap = 4;     /* 0= ; 1= ; 2= ; 3= ; 4= ; 5= ; 6= ; 7= */\r
-    uint8_t phase4_led_drv1_cha_sel = IR_LED_SLE;     /* 1 = ldr1; 2 = ldr2; 4 = ldr3; 8 = ldr4 ; */\r
+    uint8_t phase4_tia_res = PS_LEAK_TIA;     /* 0= 10K; 1= 20k; 2= 50k; 3= 100k; 4= 150k; 5= 200k; 6= 500k; 7= 1M*/\r
+    uint8_t phase4_tia_cap = 4;     /* 0= ; 1= ; 2= ; 3= ; 4= ; 5= ; 6= ; 7= */\r
+    uint8_t phase4_led_drv1_cha_sel = LDR2_FT_SEL;     /* 1 = ldr1; 2 = ldr2; 4 = ldr3; 8 = ldr4 ; */\r
     uint8_t phase4_led_drv2_cha_sel = 0;\r
-               uint8_t phase4_pd_sel = 0x0a;      /* 1 = pd1; 2 = pd2; 4 = pd3*/\r
+    uint8_t phase4_pd_sel = LDR2_PD_FT_SEL;      /* 1 = pd1; 2 = pd2; 4 = pd3*/\r
     uint8_t phase4_als_offset_idac = 0; /* 0~255 = 0 ~ 128ua , step = 0.5ua */\r
-               uint8_t phase4_led_offset_idac = 0; /* 0~255 = 0 ~ 64ua , step = 0.25ua */\r
-    uint8_t phase4_ldr1_cur = 32;     /* 0~255 = 0 ~ 200ma, step = 0.8ma */\r
-               uint8_t phase4_ldr2_cur = 0;\r
-//             uint8_t phase4_of_idac1_cur = 0;\r
-//    uint8_t phase4_of_idac2_cur = 0;\r
+    uint8_t phase4_led_offset_idac = 0; /* 0~255 = 0 ~ 64ua , step = 0.25ua */\r
+    uint8_t phase4_ldr1_cur = DRV1_LEAK_CUR;     /* 0~255 = 0 ~ 200ma, step = 0.8ma */\r
+    uint8_t phase4_ldr2_cur = DRV2_LEAK_CUR;\r
     uint8_t phase4_ad_inr_ctrl = 3;\r
     uint8_t phase4_ad_of_idac_ctrl = 0;\r
-//    uint8_t phase4_afe_offset  =  0;\r
-    uint8_t phase4_led_en = 1;      /* phase1 led enable*/\r
-               \r
-               uint8_t phase4_dsp_mov_avg_num = 0; /* 0=bypass ; 1=2 ; 2=4 ; 3=8 */\r
+    uint8_t phase4_led_en = 1;      /* phase1 led enable*/             \r
+    uint8_t phase4_dsp_mov_avg_num = 0; /* 0=bypass ; 1=2 ; 2=4 ; 3=8 */\r
     uint8_t phase4_dsp_iir_lp_coeff = 0; /* 0=bypass ; 1=1/2 ; 2=1/4 ; 3=1/8 ,...,7=1/128 */\r
 \r
     uint8_t phase5_inner_avg = 0;   /* phase1 adc avg num 0=1, 1=2, 2=4, 3=8 , 4=16*/\r
-    uint8_t phase5_tia_res = 0;     /* 0= 10K; 1= 20k; 2= 50k; 3= 100k; 4= 150k; 5= 200k; 6= 500k; 7= 1M*/\r
-               uint8_t phase5_tia_cap = 4;     /* 0= ; 1= ; 2= ; 3= ; 4= ; 5= ; 6= ; 7= */\r
-    uint8_t phase5_led_drv1_cha_sel = 0;     /* 1 = ldr1; 2 = ldr2; 4 = ldr3; 8 = ldr4 ; */\r
+    uint8_t phase5_tia_res = PS_LEAK_TIA;     /* 0= 10K; 1= 20k; 2= 50k; 3= 100k; 4= 150k; 5= 200k; 6= 500k; 7= 1M*/\r
+    uint8_t phase5_tia_cap = 4;     /* 0= ; 1= ; 2= ; 3= ; 4= ; 5= ; 6= ; 7= */\r
+    uint8_t phase5_led_drv1_cha_sel = LDR3_FT_SEL;     /* 1 = ldr1; 2 = ldr2; 4 = ldr3; 8 = ldr4 ; */\r
     uint8_t phase5_led_drv2_cha_sel = 0;\r
-               uint8_t phase5_pd_sel = 0x0a;      /* 1 = pd1; 2 = pd2; */\r
+    uint8_t phase5_pd_sel =LDR3_PD_FT_SEL;      /* 1 = pd1; 2 = pd2; */\r
     uint8_t phase5_als_offset_idac = 0; /* 0~255 = 0 ~ 128ua , step = 0.5ua */\r
-               uint8_t phase5_led_offset_idac = 0; /* 0~255 = 0 ~ 64ua , step = 0.25ua */\r
-    uint8_t phase5_ldr1_cur = 0;     /* 0~255 = 0 ~ 200ma, step = 0.8ma */\r
-               uint8_t phase5_ldr2_cur = 0;\r
-//             uint8_t phase5_of_idac1_cur = 0;\r
-//    uint8_t phase5_of_idac2_cur = 0;\r
+    uint8_t phase5_led_offset_idac = 0; /* 0~255 = 0 ~ 64ua , step = 0.25ua */\r
+    uint8_t phase5_ldr1_cur = DRV1_LEAK_CUR;     /* 0~255 = 0 ~ 200ma, step = 0.8ma */\r
+    uint8_t phase5_ldr2_cur = DRV2_LEAK_CUR;\r
     uint8_t phase5_ad_inr_ctrl = 3;\r
     uint8_t phase5_ad_of_idac_ctrl = 0;\r
-//    uint8_t phase5_afe_offset  =  0;\r
-    uint8_t phase5_led_en = 1;      /* phase1 led enable*/\r
-               \r
-               uint8_t phase5_dsp_mov_avg_num = 0; /* 0=bypass ; 1=2 ; 2=4 ; 3=8 */\r
+    uint8_t phase5_led_en = 1;      /* phase1 led enable*/             \r
+    uint8_t phase5_dsp_mov_avg_num = 0; /* 0=bypass ; 1=2 ; 2=4 ; 3=8 */\r
     uint8_t phase5_dsp_iir_lp_coeff = 0; /* 0=bypass ; 1=1/2 ; 2=1/4 ; 3=1/8 ,...,7=1/128 */\r
 \r
     uint8_t phase6_inner_avg = 0;   /* phase1 adc avg num 0=1, 1=2, 2=4, 3=8 , 4=16*/\r
-    uint8_t phase6_tia_res = 0;     /* 0= 10K; 1= 20k; 2= 50k; 3= 100k; 4= 150k; 5= 200k; 6= 500k; 7= 1M*/\r
-               uint8_t phase6_tia_cap = 4;     /* 0= ; 1= ; 2= ; 3= ; 4= ; 5= ; 6= ; 7= */\r
-    uint8_t phase6_led_drv1_cha_sel = 0;     /* 1 = ldr1; 2 = ldr2; 4 = ldr3; 8 = ldr4 ; */\r
+    uint8_t phase6_tia_res = PS_LEAK_TIA;     /* 0= 10K; 1= 20k; 2= 50k; 3= 100k; 4= 150k; 5= 200k; 6= 500k; 7= 1M*/\r
+    uint8_t phase6_tia_cap = 4;     /* 0= ; 1= ; 2= ; 3= ; 4= ; 5= ; 6= ; 7= */\r
+    uint8_t phase6_led_drv1_cha_sel = LDR4_FT_SEL;     /* 1 = ldr1; 2 = ldr2; 4 = ldr3; 8 = ldr4 ; */\r
     uint8_t phase6_led_drv2_cha_sel = 0;\r
-               uint8_t phase6_pd_sel = 4;      /* 1 = pd1; 2 = pd2; */\r
+    uint8_t phase6_pd_sel = LDR4_PD_FT_SEL;      /* 1 = pd1; 2 = pd2; */\r
     uint8_t phase6_als_offset_idac = 0; /* 0~255 = 0 ~ 128ua , step = 0.5ua */\r
-               uint8_t phase6_led_offset_idac = 0; /* 0~255 = 0 ~ 64ua , step = 0.25ua */\r
-    uint8_t phase6_ldr1_cur = 0;     /* 0~255 = 0 ~ 200ma, step = 0.8ma */\r
-               uint8_t phase6_ldr2_cur = 0;\r
-//             uint8_t phase6_of_idac1_cur = 0;\r
-//    uint8_t phase6_of_idac2_cur = 0;\r
+    uint8_t phase6_led_offset_idac = 0; /* 0~255 = 0 ~ 64ua , step = 0.25ua */\r
+    uint8_t phase6_ldr1_cur = DRV1_LEAK_CUR;     /* 0~255 = 0 ~ 200ma, step = 0.8ma */\r
+    uint8_t phase6_ldr2_cur = DRV2_LEAK_CUR;\r
     uint8_t phase6_ad_inr_ctrl = 3;\r
     uint8_t phase6_ad_of_idac_ctrl = 0;\r
-//    uint8_t phase6_afe_offset  =  0;\r
-    uint8_t phase6_led_en = 1;      /* phase1 led enable*/\r
-               \r
-               uint8_t phase6_dsp_mov_avg_num = 0; /* 0=bypass ; 1=2 ; 2=4 ; 3=8 */\r
+    uint8_t phase6_led_en = 1;      /* phase1 led enable*/             \r
+    uint8_t phase6_dsp_mov_avg_num = 0; /* 0=bypass ; 1=2 ; 2=4 ; 3=8 */\r
     uint8_t phase6_dsp_iir_lp_coeff = 0; /* 0=bypass ; 1=1/2 ; 2=1/4 ; 3=1/8 ,...,7=1/128 */\r
 \r
     uint8_t phase7_inner_avg = 0;   /* phase1 adc avg num 0=1, 1=2, 2=4, 3=8 , 4=16*/\r
-    uint8_t phase7_tia_res = 0;     /* 0= 10K; 1= 20k; 2= 50k; 3= 100k; 4= 150k; 5= 200k; 6= 500k; 7= 1M*/\r
-               uint8_t phase7_tia_cap = 4;     /* 0= ; 1= ; 2= ; 3= ; 4= ; 5= ; 6= ; 7= */\r
-    uint8_t phase7_led_drv1_cha_sel = 0;     /* 1 = ldr1; 2 = ldr2; 4 = ldr3; 8 = ldr4 ; */\r
+    uint8_t phase7_tia_res = PS_LEAK_TIA;     /* 0= 10K; 1= 20k; 2= 50k; 3= 100k; 4= 150k; 5= 200k; 6= 500k; 7= 1M*/\r
+    uint8_t phase7_tia_cap = 4;     /* 0= ; 1= ; 2= ; 3= ; 4= ; 5= ; 6= ; 7= */\r
+    uint8_t phase7_led_drv1_cha_sel = LDR5_FT_SEL;     /* 1 = ldr1; 2 = ldr2; 4 = ldr3; 8 = ldr4 ; */\r
     uint8_t phase7_led_drv2_cha_sel = 0;\r
-               uint8_t phase7_pd_sel = 0x00;      /* 1 = pd1; 2 = pd2; */\r
+    uint8_t phase7_pd_sel = LDR5_PD_FT_SEL;      /* 1 = pd1; 2 = pd2; */\r
     uint8_t phase7_als_offset_idac = 0; /* 0~255 = 0 ~ 128ua , step = 0.5ua */\r
-               uint8_t phase7_led_offset_idac = 0; /* 0~255 = 0 ~ 64ua , step = 0.25ua */\r
-    uint8_t phase7_ldr1_cur = 0;     /* 0~255 = 0 ~ 200ma, step = 0.8ma */\r
-               uint8_t phase7_ldr2_cur = 0;\r
-//             uint8_t phase7_of_idac1_cur = 0;\r
-//    uint8_t phase7_of_idac2_cur = 0;\r
+    uint8_t phase7_led_offset_idac = 0; /* 0~255 = 0 ~ 64ua , step = 0.25ua */\r
+    uint8_t phase7_ldr1_cur = DRV1_LEAK_CUR;     /* 0~255 = 0 ~ 200ma, step = 0.8ma */\r
+    uint8_t phase7_ldr2_cur = DRV2_LEAK_CUR;\r
     uint8_t phase7_ad_inr_ctrl = 3;\r
     uint8_t phase7_ad_of_idac_ctrl = 0;\r
-//    uint8_t phase7_afe_offset  =  0;\r
-    uint8_t phase7_led_en = 1;      /* phase1 led enable*/\r
-               \r
-               uint8_t phase7_dsp_mov_avg_num = 0; /* 0=bypass ; 1=2 ; 2=4 ; 3=8 */\r
+    uint8_t phase7_led_en = 1;      /* phase1 led enable*/             \r
+    uint8_t phase7_dsp_mov_avg_num = 0; /* 0=bypass ; 1=2 ; 2=4 ; 3=8 */\r
     uint8_t phase7_dsp_iir_lp_coeff = 0; /* 0=bypass ; 1=1/2 ; 2=1/4 ; 3=1/8 ,...,7=1/128 */\r
 \r
     uint8_t phase8_inner_avg = 0;   /* phase1 adc avg num 0=1, 1=2, 2=4, 3=8 , 4=16*/\r
-    uint8_t phase8_tia_res = 0;     /* 0= 10K; 1= 20k; 2= 50k; 3= 100k; 4= 150k; 5= 200k; 6= 500k; 7= 1M*/\r
-               uint8_t phase8_tia_cap = 4;     /* 0= ; 1= ; 2= ; 3= ; 4= ; 5= ; 6= ; 7= */\r
+    uint8_t phase8_tia_res = 5;     /* 0= 10K; 1= 20k; 2= 50k; 3= 100k; 4= 150k; 5= 200k; 6= 500k; 7= 1M*/\r
+    uint8_t phase8_tia_cap = 4;     /* 0= ; 1= ; 2= ; 3= ; 4= ; 5= ; 6= ; 7= */\r
     uint8_t phase8_led_drv1_cha_sel = 0;     /* 1 = ldr1; 2 = ldr2; 4 = ldr3; 8 = ldr4 ; */\r
     uint8_t phase8_led_drv2_cha_sel = 0;\r
-               uint8_t phase8_pd_sel = 0x0c;      /* 1 = pd1; 2 = pd2; */\r
+    uint8_t phase8_pd_sel = 0;      /* 1 = pd1; 2 = pd2; */\r
     uint8_t phase8_als_offset_idac = 0; /* 0~255 = 0 ~ 128ua , step = 0.5ua */\r
-               uint8_t phase8_led_offset_idac = 0; /* 0~255 = 0 ~ 64ua , step = 0.25ua */\r
+    uint8_t phase8_led_offset_idac = 0; /* 0~255 = 0 ~ 64ua , step = 0.25ua */\r
     uint8_t phase8_ldr1_cur = 0;     /* 0~255 = 0 ~ 200ma, step = 0.8ma */\r
-               uint8_t phase8_ldr2_cur = 0;\r
-//             uint8_t phase8_of_idac1_cur = 0;\r
-//    uint8_t phase8_of_idac2_cur = 0;\r
+    uint8_t phase8_ldr2_cur = 0;\r
     uint8_t phase8_ad_inr_ctrl = 3;\r
     uint8_t phase8_ad_of_idac_ctrl = 0;\r
-//    uint8_t phase8_afe_offset  =  0;\r
-    uint8_t phase8_led_en = 1;      /* phase1 led enable*/\r
-               \r
-               uint8_t phase8_dsp_mov_avg_num = 0; /* 0=bypass ; 1=2 ; 2=4 ; 3=8 */\r
+    uint8_t phase8_led_en = 1;      /* phase1 led enable*/             \r
+    uint8_t phase8_dsp_mov_avg_num = 0; /* 0=bypass ; 1=2 ; 2=4 ; 3=8 */\r
     uint8_t phase8_dsp_iir_lp_coeff = 0; /* 0=bypass ; 1=1/2 ; 2=1/4 ; 3=1/8 ,...,7=1/128 */\r
 \r
     uint8_t init_wait_delay = 4 ; /* 0 = 31clk ; 1 = 64clk ; 2 = 127clk ; 3 = 255clk(d) ;\r
@@ -653,12 +580,12 @@ void hx3695_factory_ft_card_test_config(void)//灰卡15mm高度测试配置
     uint8_t afe_reset = 3;        /* 0 = 15clk ; 1 = 31clk ; 2 = 63clk ; 3 = 127clk(d) ;\r
                                      4 = 255clk; 5 = 511clk; 6 = 1024; 7 = 2047clk */\r
                                                                                                                                                 \r
-               uint8_t afe_rst_cnvt = 1;               /* 0 = 15clk ; 1 = 31clk ; 2 = 63clk ; 3 = 127clk(d)*/\r
-    \r
+    uint8_t afe_rst_cnvt = 1;                  /* 0 = 15clk ; 1 = 31clk ; 2 = 63clk ; 3 = 127clk(d)*/\r
+\r
     uint8_t led_en_idac_pre    = 2;    /* 0 = 8clk ; 1 = 16clk ; 2 = 32clk ; 3 = 64clk(d)*/ \r
-               \r
-               uint8_t led_en_idac     =       1;        /* 0 = 4clk ; 1 = 8clk ; 2 = 16clk ; 3 = 32clk(d)*/ \r
-                                                                                                                                                \r
+\r
+    uint8_t led_en_idac        =       1;        /* 0 = 4clk ; 1 = 8clk ; 2 = 16clk ; 3 = 32clk(d)*/ \r
+                                                                 \r
     uint8_t led_on_time = 2;      /* 0 = 32clk=8us ; 1 = 64clk=16us; 2=128clk=32us ; 3 = 256clk=64us ;\r
                                      4 = 512clk=128us ; 5 = 1024clk=256us; 6= 2048clk=512us; 7 = 4096clk=1024us */\r
                                                                                                                                                 \r
@@ -669,18 +596,18 @@ void hx3695_factory_ft_card_test_config(void)//灰卡15mm高度测试配置
     hx3695_write_reg(0X2c, (uint8_t)(prf_clk_num>>16)); // prf bit<23:16>      \r
                   \r
     hx3695_write_reg(0X25, (afe_rst_cnvt<<4| led_en_idac_pre<<2|led_en_idac)); \r
-               hx3695_write_reg(0X2d, phase7_8_internal); \r
-               hx3695_write_reg(0X2e, 0x33);// gpio ctrl \r
+    hx3695_write_reg(0X2d, phase7_8_internal); \r
+    hx3695_write_reg(0X2e, 0x33);// gpio ctrl \r
     hx3695_write_reg(0X2f, ((afe_reset<<4)| init_wait_delay));\r
-               hx3695_write_reg(0X30, (phase8_led_en<<7 | phase7_led_en<<6 |phase6_led_en<<5 |phase5_led_en<<4 |phase4_led_en<<3 | phase3_led_en<<2 | phase2_led_en<<1 | phase1_led_en) );\r
+    hx3695_write_reg(0X30, (phase8_led_en<<7 | phase7_led_en<<6 |phase6_led_en<<5 |phase5_led_en<<4 |phase4_led_en<<3 | phase3_led_en<<2 | phase2_led_en<<1 | phase1_led_en) );\r
     hx3695_write_reg(0X72, (phase8_led_en<<7 | phase7_led_en<<6 |phase6_led_en<<5 |phase5_led_en<<4 |phase4_led_en<<3 | phase3_led_en<<2 | phase2_led_en<<1 | phase1_led_en) );\r
 \r
 \r
     hx3695_write_reg(0X31, (led_on_time<<4| 0x00));\r
-               hx3695_write_reg(0X33, 0x83);// 中断极性及宽度配置;\r
-               hx3695_write_reg(0X34, 0x00);// 中断特殊配置;\r
-               hx3695_write_reg(0X36, 0x00);// phase data ready 标志设置;\r
-               hx3695_write_reg(0X38, 0x00);\r
+    hx3695_write_reg(0X33, 0x83);// �жϼ��Լ��������ã�\r
+    hx3695_write_reg(0X34, 0x00);// �ж��������ã�\r
+    hx3695_write_reg(0X36, 0x00);// phase data ready ��־���ã�\r
+    hx3695_write_reg(0X38, 0x00);\r
                \r
     hx3695_write_reg(0X3a, (phase1_inner_avg | (phase2_inner_avg<<4)));  \r
     hx3695_write_reg(0X3b, (phase3_inner_avg | (phase4_inner_avg<<4)));  \r
@@ -689,423 +616,373 @@ void hx3695_factory_ft_card_test_config(void)//灰卡15mm高度测试配置
     hx3695_write_reg(0X3e, adc_rst_post_num<<6 | samp_delay_leden_num<<4 | samp_copy_avg); \r
     hx3695_write_reg(0X3f, data_avg_num<<4 | data_avg_num );\r
     hx3695_write_reg(0X40, data_avg_num<<4 | data_avg_num );\r
-               hx3695_write_reg(0X41, data_avg_num<<4 | data_avg_num );\r
-               hx3695_write_reg(0X42, data_avg_num<<4 | data_avg_num );\r
-               \r
-               hx3695_write_reg(0X43, phase1_mux_sel);  \r
-               hx3695_write_reg(0X44, phase1_tia_cap<<4|phase1_tia_res); \r
-               hx3695_write_reg(0X45, phase1_ldr1_cur);    //LED_DRV1_CUR\r
-               hx3695_write_reg(0x70, phase1_ldr2_cur);   //ps8--ps1  led_drv2_cur\r
-               hx3695_write_reg(0X46, (phase1_pd_sel<<4 | 0x00));\r
-               hx3695_write_reg(0X47, phase1_als_offset_idac);\r
-               hx3695_write_reg(0X48, phase1_led_offset_idac);\r
+    hx3695_write_reg(0X41, data_avg_num<<4 | data_avg_num );\r
+    hx3695_write_reg(0X42, data_avg_num<<4 | data_avg_num );\r
+    \r
+    hx3695_write_reg(0X43, phase1_mux_sel);  \r
+    hx3695_write_reg(0X44, phase1_tia_cap<<4|phase1_tia_res); \r
+    hx3695_write_reg(0X45, phase1_ldr1_cur);    //LED_DRV1_CUR\r
+    hx3695_write_reg(0x70, phase1_ldr2_cur);   //ps8--ps1  led_drv2_cur\r
+    hx3695_write_reg(0X46, (phase1_pd_sel<<4 | 0x00));\r
+    hx3695_write_reg(0X47, phase1_als_offset_idac);\r
+    hx3695_write_reg(0X48, phase1_led_offset_idac);\r
     hx3695_write_reg(0X49, phase1_ad_inr_ctrl<<4|phase1_ad_of_idac_ctrl); \r
-               hx3695_write_reg(0X4a, phase1_led_drv1_cha_sel);\r
-               hx3695_write_reg(0X4b, phase1_led_drv2_cha_sel);\r
-               hx3695_write_reg(0X71, phase1_dsp_mov_avg_num | phase1_dsp_iir_lp_coeff<<4);\r
+    hx3695_write_reg(0X4a, phase1_led_drv1_cha_sel);\r
+    hx3695_write_reg(0X4b, phase1_led_drv2_cha_sel);\r
+    hx3695_write_reg(0X71, phase1_dsp_mov_avg_num | phase1_dsp_iir_lp_coeff<<4);\r
 \r
        \r
     hx3695_write_reg(0X43, phase2_mux_sel);  \r
-               hx3695_write_reg(0X44, phase2_tia_cap<<4|phase2_tia_res); \r
-               hx3695_write_reg(0X45, phase2_ldr1_cur);    //LED_DRV1_CUR\r
-               hx3695_write_reg(0x70, phase2_ldr2_cur);   //ps8--ps1  led_drv2_cur\r
-               hx3695_write_reg(0X46, (phase2_pd_sel<<4 | 0x00));\r
-               hx3695_write_reg(0X47, phase2_als_offset_idac);\r
-               hx3695_write_reg(0X48, phase2_led_offset_idac);\r
-//             hx3695_write_reg(0X48, phase1_led_offset_idac);\r
+    hx3695_write_reg(0X44, phase2_tia_cap<<4|phase2_tia_res); \r
+    hx3695_write_reg(0X45, phase2_ldr1_cur);    //LED_DRV1_CUR\r
+    hx3695_write_reg(0x70, phase2_ldr2_cur);   //ps8--ps1  led_drv2_cur\r
+    hx3695_write_reg(0X46, (phase2_pd_sel<<4 | 0x00));\r
+    hx3695_write_reg(0X47, phase2_als_offset_idac);\r
+    hx3695_write_reg(0X48, phase2_led_offset_idac);\r
     hx3695_write_reg(0X49,  phase2_ad_inr_ctrl<<4|phase2_ad_of_idac_ctrl); \r
-               hx3695_write_reg(0X4a, phase2_led_drv1_cha_sel);\r
-               hx3695_write_reg(0X4b, phase2_led_drv2_cha_sel);\r
-               hx3695_write_reg(0X71, phase2_dsp_mov_avg_num | phase2_dsp_iir_lp_coeff<<4);\r
+    hx3695_write_reg(0X4a, phase2_led_drv1_cha_sel);\r
+    hx3695_write_reg(0X4b, phase2_led_drv2_cha_sel);\r
+    hx3695_write_reg(0X71, phase2_dsp_mov_avg_num | phase2_dsp_iir_lp_coeff<<4);\r
                \r
 //phase3 sel\r
 \r
     hx3695_write_reg(0X43, phase3_mux_sel);  \r
-               hx3695_write_reg(0X44, phase3_tia_cap<<4|phase3_tia_res); \r
-               hx3695_write_reg(0X45, phase3_ldr1_cur);    //LED_DRV1_CUR\r
-               hx3695_write_reg(0x70, phase3_ldr2_cur);   //ps8--ps1  led_drv2_cur\r
-               hx3695_write_reg(0X46, (phase3_pd_sel<<4 | 0x00));\r
-               hx3695_write_reg(0X47, phase3_als_offset_idac);\r
-               hx3695_write_reg(0X48, phase3_led_offset_idac);\r
-//             hx3695_write_reg(0X48, phase1_led_offset_idac);\r
+    hx3695_write_reg(0X44, phase3_tia_cap<<4|phase3_tia_res); \r
+    hx3695_write_reg(0X45, phase3_ldr1_cur);    //LED_DRV1_CUR\r
+    hx3695_write_reg(0x70, phase3_ldr2_cur);   //ps8--ps1  led_drv2_cur\r
+    hx3695_write_reg(0X46, (phase3_pd_sel<<4 | 0x00));\r
+    hx3695_write_reg(0X47, phase3_als_offset_idac);\r
+    hx3695_write_reg(0X48, phase3_led_offset_idac);\r
     hx3695_write_reg(0X49,  phase3_ad_inr_ctrl<<4|phase3_ad_of_idac_ctrl); \r
-               hx3695_write_reg(0X4a, phase3_led_drv1_cha_sel);\r
-               hx3695_write_reg(0X4b, phase3_led_drv2_cha_sel);\r
-               hx3695_write_reg(0X71, phase3_dsp_mov_avg_num | phase3_dsp_iir_lp_coeff<<4);\r
+    hx3695_write_reg(0X4a, phase3_led_drv1_cha_sel);\r
+    hx3695_write_reg(0X4b, phase3_led_drv2_cha_sel);\r
+    hx3695_write_reg(0X71, phase3_dsp_mov_avg_num | phase3_dsp_iir_lp_coeff<<4);\r
                \r
 //phase4 sel\r
 \r
     hx3695_write_reg(0X43, phase4_mux_sel);  \r
-               hx3695_write_reg(0X44, phase4_tia_cap<<4|phase4_tia_res); \r
-               hx3695_write_reg(0X45, phase4_ldr1_cur);    //LED_DRV1_CUR\r
-               hx3695_write_reg(0x70, phase4_ldr2_cur);   //ps8--ps1  led_drv2_cur\r
-               hx3695_write_reg(0X46, (phase4_pd_sel<<4 | 0x00));\r
-               hx3695_write_reg(0X47, phase4_als_offset_idac);\r
-               hx3695_write_reg(0X48, phase4_led_offset_idac);\r
-//             hx3695_write_reg(0X48, phase1_led_offset_idac);\r
+    hx3695_write_reg(0X44, phase4_tia_cap<<4|phase4_tia_res); \r
+    hx3695_write_reg(0X45, phase4_ldr1_cur);    //LED_DRV1_CUR\r
+    hx3695_write_reg(0x70, phase4_ldr2_cur);   //ps8--ps1  led_drv2_cur\r
+    hx3695_write_reg(0X46, (phase4_pd_sel<<4 | 0x00));\r
+    hx3695_write_reg(0X47, phase4_als_offset_idac);\r
+    hx3695_write_reg(0X48, phase4_led_offset_idac);\r
     hx3695_write_reg(0X49,  phase4_ad_inr_ctrl<<4|phase4_ad_of_idac_ctrl); \r
-               hx3695_write_reg(0X4a, phase4_led_drv1_cha_sel);\r
-               hx3695_write_reg(0X4b, phase4_led_drv2_cha_sel);\r
-               hx3695_write_reg(0X71, phase4_dsp_mov_avg_num | phase4_dsp_iir_lp_coeff<<4);\r
-\r
-               hx3695_write_reg(0X43, phase5_mux_sel);  \r
-               hx3695_write_reg(0X44, phase5_tia_cap<<4|phase5_tia_res); \r
-               hx3695_write_reg(0X45, phase5_ldr1_cur);    //LED_DRV1_CUR\r
-               hx3695_write_reg(0x70, phase5_ldr2_cur);   //ps8--ps1  led_drv2_cur\r
-               hx3695_write_reg(0X46, (phase5_pd_sel<<4 | 0x00));\r
-               hx3695_write_reg(0X47, phase5_als_offset_idac);\r
-               hx3695_write_reg(0X48, phase5_led_offset_idac);\r
-//             hx3695_write_reg(0X48, phase1_led_offset_idac);\r
+    hx3695_write_reg(0X4a, phase4_led_drv1_cha_sel);\r
+    hx3695_write_reg(0X4b, phase4_led_drv2_cha_sel);\r
+    hx3695_write_reg(0X71, phase4_dsp_mov_avg_num | phase4_dsp_iir_lp_coeff<<4);\r
+\r
+    hx3695_write_reg(0X43, phase5_mux_sel);  \r
+    hx3695_write_reg(0X44, phase5_tia_cap<<4|phase5_tia_res); \r
+    hx3695_write_reg(0X45, phase5_ldr1_cur);    //LED_DRV1_CUR\r
+    hx3695_write_reg(0x70, phase5_ldr2_cur);   //ps8--ps1  led_drv2_cur\r
+    hx3695_write_reg(0X46, (phase5_pd_sel<<4 | 0x00));\r
+    hx3695_write_reg(0X47, phase5_als_offset_idac);\r
+    hx3695_write_reg(0X48, phase5_led_offset_idac);\r
     hx3695_write_reg(0X49,  phase5_ad_inr_ctrl<<4|phase5_ad_of_idac_ctrl); \r
-               hx3695_write_reg(0X4a, phase5_led_drv1_cha_sel);\r
-               hx3695_write_reg(0X4b, phase5_led_drv2_cha_sel);\r
-               hx3695_write_reg(0X71, phase5_dsp_mov_avg_num | phase5_dsp_iir_lp_coeff<<4);\r
-               \r
-               \r
-         hx3695_write_reg(0X43, phase6_mux_sel);  \r
-               hx3695_write_reg(0X44, phase6_tia_cap<<4|phase6_tia_res); \r
-               hx3695_write_reg(0X45, phase6_ldr1_cur);    //LED_DRV1_CUR\r
-               hx3695_write_reg(0x70, phase6_ldr2_cur);   //ps8--ps1  led_drv2_cur\r
-               hx3695_write_reg(0X46, (phase6_pd_sel<<4 | 0x00));\r
-               hx3695_write_reg(0X47, phase6_als_offset_idac);\r
-               hx3695_write_reg(0X48, phase6_led_offset_idac);\r
-//             hx3695_write_reg(0X48, phase6_led_offset_idac);\r
+    hx3695_write_reg(0X4a, phase5_led_drv1_cha_sel);\r
+    hx3695_write_reg(0X4b, phase5_led_drv2_cha_sel);\r
+    hx3695_write_reg(0X71, phase5_dsp_mov_avg_num | phase5_dsp_iir_lp_coeff<<4);\r
+               \r
+               \r
+    hx3695_write_reg(0X43, phase6_mux_sel);  \r
+    hx3695_write_reg(0X44, phase6_tia_cap<<4|phase6_tia_res); \r
+    hx3695_write_reg(0X45, phase6_ldr1_cur);    //LED_DRV1_CUR\r
+    hx3695_write_reg(0x70, phase6_ldr2_cur);   //ps8--ps1  led_drv2_cur\r
+    hx3695_write_reg(0X46, (phase6_pd_sel<<4 | 0x00));\r
+    hx3695_write_reg(0X47, phase6_als_offset_idac);\r
+    hx3695_write_reg(0X48, phase6_led_offset_idac);\r
     hx3695_write_reg(0X49,  phase6_ad_inr_ctrl<<4|phase6_ad_of_idac_ctrl); \r
-               hx3695_write_reg(0X4a, phase6_led_drv1_cha_sel);\r
-               hx3695_write_reg(0X4b, phase6_led_drv2_cha_sel);\r
-               hx3695_write_reg(0X71, phase6_dsp_mov_avg_num | phase6_dsp_iir_lp_coeff<<4);\r
+    hx3695_write_reg(0X4a, phase6_led_drv1_cha_sel);\r
+    hx3695_write_reg(0X4b, phase6_led_drv2_cha_sel);\r
+    hx3695_write_reg(0X71, phase6_dsp_mov_avg_num | phase6_dsp_iir_lp_coeff<<4);\r
                \r
        \r
-         hx3695_write_reg(0X43, phase7_mux_sel);  \r
-               hx3695_write_reg(0X44, phase7_tia_cap<<4|phase7_tia_res); \r
-               hx3695_write_reg(0X45, phase7_ldr1_cur);    //LED_DRV1_CUR\r
-               hx3695_write_reg(0x70, phase7_ldr2_cur);   //ps8--ps1  led_drv2_cur\r
-               hx3695_write_reg(0X46, (phase7_pd_sel<<4 | 0x00));\r
-               hx3695_write_reg(0X47, phase7_als_offset_idac);\r
-               hx3695_write_reg(0X48, phase7_led_offset_idac);\r
-//             hx3695_write_reg(0X48, phase7_led_offset_idac);\r
+    hx3695_write_reg(0X43, phase7_mux_sel);  \r
+    hx3695_write_reg(0X44, phase7_tia_cap<<4|phase7_tia_res); \r
+    hx3695_write_reg(0X45, phase7_ldr1_cur);    //LED_DRV1_CUR\r
+    hx3695_write_reg(0x70, phase7_ldr2_cur);   //ps8--ps1  led_drv2_cur\r
+    hx3695_write_reg(0X46, (phase7_pd_sel<<4 | 0x00));\r
+    hx3695_write_reg(0X47, phase7_als_offset_idac);\r
+    hx3695_write_reg(0X48, phase7_led_offset_idac);\r
     hx3695_write_reg(0X49,  phase7_ad_inr_ctrl<<4|phase7_ad_of_idac_ctrl); \r
-               hx3695_write_reg(0X4a, phase7_led_drv1_cha_sel);\r
-               hx3695_write_reg(0X4b, phase7_led_drv2_cha_sel);\r
-               hx3695_write_reg(0X71, phase7_dsp_mov_avg_num | phase7_dsp_iir_lp_coeff<<4);\r
+    hx3695_write_reg(0X4a, phase7_led_drv1_cha_sel);\r
+    hx3695_write_reg(0X4b, phase7_led_drv2_cha_sel);\r
+    hx3695_write_reg(0X71, phase7_dsp_mov_avg_num | phase7_dsp_iir_lp_coeff<<4);\r
                \r
        \r
-         hx3695_write_reg(0X43, phase8_mux_sel);  \r
-               hx3695_write_reg(0X44, phase8_tia_cap<<4|phase8_tia_res); \r
-               hx3695_write_reg(0X45, phase8_ldr1_cur);    //LED_DRV1_CUR\r
-               hx3695_write_reg(0x70, phase8_ldr2_cur);   //ps8--ps1  led_drv2_cur\r
-               hx3695_write_reg(0X46, (phase8_pd_sel<<4 | 0x00));\r
-               hx3695_write_reg(0X47, phase8_als_offset_idac);\r
-               hx3695_write_reg(0X48, phase8_led_offset_idac);\r
-//             hx3695_write_reg(0X48, phas8_led_offset_idac);\r
+    hx3695_write_reg(0X43, phase8_mux_sel);  \r
+    hx3695_write_reg(0X44, phase8_tia_cap<<4|phase8_tia_res); \r
+    hx3695_write_reg(0X45, phase8_ldr1_cur);    //LED_DRV1_CUR\r
+    hx3695_write_reg(0x70, phase8_ldr2_cur);   //ps8--ps1  led_drv2_cur\r
+    hx3695_write_reg(0X46, (phase8_pd_sel<<4 | 0x00));\r
+    hx3695_write_reg(0X47, phase8_als_offset_idac);\r
+    hx3695_write_reg(0X48, phase8_led_offset_idac);\r
     hx3695_write_reg(0X49,  phase8_ad_inr_ctrl<<4|phase8_ad_of_idac_ctrl); \r
-               hx3695_write_reg(0X4a, phase8_led_drv1_cha_sel);\r
-               hx3695_write_reg(0X4b, phase8_led_drv2_cha_sel);\r
-               hx3695_write_reg(0X71, phase8_dsp_mov_avg_num | phase8_dsp_iir_lp_coeff<<4);\r
+    hx3695_write_reg(0X4a, phase8_led_drv1_cha_sel);\r
+    hx3695_write_reg(0X4b, phase8_led_drv2_cha_sel);\r
+    hx3695_write_reg(0X71, phase8_dsp_mov_avg_num | phase8_dsp_iir_lp_coeff<<4);\r
                \r
 \r
 // analog circuit cfg \r
-    hx3695_write_reg(0X60, 0x14);      //\r
-               hx3695_write_reg(0X61, 0xf0);   \r
-               hx3695_write_reg(0X62, 0x22); \r
-               hx3695_write_reg(0X63, 0x15); \r
-                                                                                                                                                                                                                               \r
-               hx3695_write_reg(0X64, 0x08);   \r
-               hx3695_write_reg(0X65, 0x88); //bug\r
-               \r
-               hx3695_write_reg(0X66, 0x30);   // bits<3>=adc selftest en     0x30\r
-               hx3695_write_reg(0X67, 0x23);   \r
-               hx3695_write_reg(0X68, 0x46);   \r
-               hx3695_write_reg(0X69, 0x42);   \r
-               \r
-               hx3695_write_reg(0X39, 0xff);   // ofset idac1 phase enable cfg\r
-               hx3695_write_reg(0x73, 0xff);    //led_offset_idac phase enable\r
+    hx3695_write_reg(0X60, 0x34);      //\r
+    hx3695_write_reg(0X61, 0xf0);      \r
+    hx3695_write_reg(0X62, 0x22); \r
+    hx3695_write_reg(0X63, 0x15); \r
+                                                                                                            \r
+    hx3695_write_reg(0X64, 0x08);      \r
+    hx3695_write_reg(0X65, 0x88); //bug\r
+    \r
+    hx3695_write_reg(0X66, 0x30);      // bits<3>=adc selftest en     0x30\r
+    hx3695_write_reg(0X67, 0x23);      \r
+    hx3695_write_reg(0X68, 0x46);      \r
+    hx3695_write_reg(0X69, 0x42);      \r
+    \r
+    hx3695_write_reg(0X39, 0xff);   // ofset idac1 phase enable cfg\r
+    hx3695_write_reg(0x73, 0xff);    //led_offset_idac phase enable\r
                \r
     hx3695_write_reg(0X6a, 0X0f);      \r
-               hx3695_write_reg(0X6b, 0X22);   \r
-               hx3695_write_reg(0X6c, 0X00);   \r
-               hx3695_write_reg(0X6d, 0X37);   \r
-               hx3695_write_reg(0X6e, 0X82);   \r
-               hx3695_write_reg(0X6f, 0X08);\r
+    hx3695_write_reg(0X6b, 0X22);      \r
+    hx3695_write_reg(0X6c, 0X00);      \r
+    hx3695_write_reg(0X6d, 0X37);      \r
+    hx3695_write_reg(0X6e, 0X82);      \r
+    hx3695_write_reg(0X6f, 0X00);\r
 /////////FIFO and adc conversion ready config////////\r
 /////////FIFO and adc conversion ready config////////\r
-#if defined(PPG_INT_MODE)\r
-               hx3695_write_reg(0X1b, 0x00);// bits<3:0> fifo data sel, 0000 = p1;0001= p2;0010=p3;\\r
-                                        0011=p4;0100=p5;0101=p6;0110=p7;\\r
-                                        bits<7> fifo enble\r
-                hx3695_write_reg(0X33, 0x83);   // int width                                                                                                                                           \r
-     hx3695_write_reg(0X21, 0x00);   // fifo int sel,00=FIFO INT config clear\r
-                hx3695_write_reg(0X38, 0x08);   // int sel,00=close almost full int,04=enable almost full int\r
-#elif defined(INT_MODE)             //(FIFO_ALL_MOST_FULL)\r
-                hx3695_write_reg(0X1b, 0x90);// bits<3:0> fifo data sel, 0000 = p1;0001= p2;0010=p3;\\r
-                                        0011=p4;0100=p5;0101=p6;0110=p7;\\r
-                                        bits<7> fifo enble\r
-                hx3695_write_reg(0X1c, (fifo_watermark&0xff));   //fifo_watermark\r
-                hx3695_write_reg(0X1d, fifo_watermark<<8);       //bit<0>=fifo_watermark[8]  \r
-                hx3695_write_reg(0X33, 0x83);   // int width                                                                                                                                           \r
-     hx3695_write_reg(0X38, 0x04);   // int sel,00=close almost full int,04=enable almost full int\r
+#if  defined(INT_MODE)             //(FIFO_ALL_MOST_FULL)\r
+        hx3695_write_reg(0X1b, 0x90);// bits<3:0> fifo data sel, 0000 = p1;0001= p2;0010=p3;\\r
+                                0011=p4;0100=p5;0101=p6;0110=p7;\\r
+                                bits<7> fifo enble\r
+        hx3695_write_reg(0X1c, (fifo_watermark&0xff));   //fifo_watermark\r
+        hx3695_write_reg(0X1d, fifo_watermark<<8);       //bit<0>=fifo_watermark[8]  \r
+        hx3695_write_reg(0X33, 0x83);   // int width                                                                                                                                           \r
+        hx3695_write_reg(0X38, 0x04);   // int sel,00=close almost full int,04=enable almost full int\r
 \r
 #else\r
-               hx3695_write_reg(0X1b, 0x92);// bits<3:0> fifo data sel, 0000 = p1;0001= p2;0010=p3;\r
-                                    // 0011=p4;0100=p5;0101=p6;0110=p7;\r
-                                    // bits<7> fifo enble      \r
-     hx3695_write_reg(0X36, 0x00);                       //intrupt                                                                                                                                     \r
-                                                                                                                                               \r
-     hx3695_write_reg(0X38, 0x00);   // int sel,00=close almost full int,01= prf int  04=enable almost full int\r
+        hx3695_write_reg(0X1b, 0x90);// bits<3:0> fifo data sel, 0000 = p1;0001= p2;0010=p3;0011=p4;0100=p5;0101=p6;0110=p7;bits<7> fifo enble \r
+        hx3695_write_reg(0X36, 0x00);                    //intrupt                                                                                                                                     \r
+                                                                \r
+        hx3695_write_reg(0X38, 0x00);   // int sel,00=close almost full int,01= prf int  04=enable almost full int\r
 \r
 #endif\r
 \r
                \r
-    hx3695_write_reg(0X26,(phase1_enable<<3)|(phase1_adc_osr)|(phase2_enable<<7)|(phase2_adc_osr<<4) ); \r
-    hx3695_write_reg(0X27,(phase3_enable<<3)|(phase3_adc_osr)|(phase4_enable<<7)|(phase4_adc_osr<<4) );  \r
-    hx3695_write_reg(0X28,(phase5_enable<<3)|(phase5_adc_osr)|(phase6_enable<<7)|(phase6_adc_osr<<4) );\r
-    hx3695_write_reg(0X29,(phase7_enable<<3)|(phase7_adc_osr)|(phase8_enable<<7)|(phase8_adc_osr<<4) );                \r
+        hx3695_write_reg(0X26,(phase1_enable<<3)|(phase1_adc_osr)|(phase2_enable<<7)|(phase2_adc_osr<<4) ); \r
+        hx3695_write_reg(0X27,(phase3_enable<<3)|(phase3_adc_osr)|(phase4_enable<<7)|(phase4_adc_osr<<4) );  \r
+        hx3695_write_reg(0X28,(phase5_enable<<3)|(phase5_adc_osr)|(phase6_enable<<7)|(phase6_adc_osr<<4) );\r
+        hx3695_write_reg(0X29,(phase7_enable<<3)|(phase7_adc_osr)|(phase8_enable<<7)|(phase8_adc_osr<<4) );            \r
 \r
 //    hx3695_write_reg(0X5c, 0x02);//soft reset\r
-    hx3695_delay_ms(5);  \r
-    hx3695_write_reg(0X5c, 0x00);//release\r
+        hx3695_delay_ms(5);  \r
+        hx3695_write_reg(0X5c, 0x00);//release\r
 \r
-    return ;   \r
+    return ;\r
 }\r
-\r
-void hx3695_factory_ft_single_check_config(void)//灰卡10mm高度测试配置\r
+void hx3695_factory_Gnoise_config(void)     //  �������\r
 {\r
-\r
-       uint16_t sample_rate = 200;                  /*config the data rate of chip alps2_fm ,uint is Hz*/\r
+   uint16_t sample_rate = 25;                  /*config the data rate of chip alps2_fm ,uint is Hz*/\r
     uint32_t prf_clk_num = 32000/sample_rate;   /*period in clk num, num = Fclk/fs */\r
-         \r
-    uint8_t adc_rst_post_num=0;       /* 00=16,01=32,10=64,11=128*/      \r
-         uint8_t samp_delay_leden_num = 0; /* 00=8,01=16,10=32,11=64*/ \r
+\r
+    uint16_t fifo_watermark= 250 ;\r
+    uint8_t adc_rst_post_num= 0;       /* 00=16,01=32,10=64,11=128*/      \r
+    uint8_t samp_delay_leden_num = 0; /* 00=8,01=16,10=32,11=64*/ \r
     uint8_t samp_copy_avg = 0;        /* 0=1, 1=2, 2=4 ,3=8, 4=16*/\r
     uint8_t data_avg_num = 0;         /* 0 = 1 ; 1 = 2; 2 =4 ; 3 =8 ; 4 =16 ;*/\r
-         uint8_t phase7_8_internal = 0;    /* phase7 and phase8 prf internal cfg */\r
-               \r
+    uint8_t phase7_8_internal = 0;   //0x18;    /* phase7 and phase8 prf internal cfg */\r
+       \r
     uint8_t phase1_enable = 1;     /*phase1_enable  , 1 mean enable ; 0 mean disable */ \r
     uint8_t phase2_enable = 1;     /*phase2_enable  , 1 mean enable ; 0 mean disable */ \r
     uint8_t phase3_enable = 1;     /*phase3_enable  , 1 mean enable ; 0 mean disable */ \r
     uint8_t phase4_enable = 1;     /*phase4_enable  , 1 mean enable ; 0 mean disable */\r
-    uint8_t phase5_enable = 0;     /*phase5_enable  , 1 mean enable ; 0 mean disable */ \r
-    uint8_t phase6_enable = 0;     /*phase6_enable  , 1 mean enable ; 0 mean disable */ \r
-    uint8_t phase7_enable = 0;     /*phase7_enable  , 1 mean enable ; 0 mean disable */        \r
-         uint8_t phase8_enable = 0;     /*phase8_enable  , 1 mean enable ; 0 mean disable */ \r
+    uint8_t phase5_enable = 1;     /*phase5_enable  , 1 mean enable ; 0 mean disable */ \r
+    uint8_t phase6_enable = 1;     /*phase6_enable  , 1 mean enable ; 0 mean disable */ \r
+    uint8_t phase7_enable = 1;     /*phase7_enable  , 1 mean enable ; 0 mean disable */        \r
+    uint8_t phase8_enable = 1;     /*phase8_enable  , 1 mean enable ; 0 mean disable */ \r
 \r
     uint8_t phase1_adc_osr = 3;    /* 0 = 128 ; 1 = 256 ; 2 = 512 ; 3 = 1024 ; 4 = 2048*/\r
     uint8_t phase2_adc_osr = 3;    /* 0 = 128 ; 1 = 256 ; 2 = 512 ; 3 = 1024 ; 4 = 2048*/\r
     uint8_t phase3_adc_osr = 3;    /* 0 = 128 ; 1 = 256 ; 2 = 512 ; 3 = 1024 ; 4 = 2048*/\r
     uint8_t phase4_adc_osr = 3;    /* 0 = 128 ; 1 = 256 ; 2 = 512 ; 3 = 1024 ; 4 = 2048*/\r
-               uint8_t phase5_adc_osr = 3;    /* 0 = 128 ; 1 = 256 ; 2 = 512 ; 3 = 1024 ; 4 = 2048*/\r
-         uint8_t phase6_adc_osr = 3;    /* 0 = 128 ; 1 = 256 ; 2 = 512 ; 3 = 1024 ; 4 = 2048*/\r
-               uint8_t phase7_adc_osr = 3;    /* 0 = 128 ; 1 = 256 ; 2 = 512 ; 3 = 1024 ; 4 = 2048*/\r
-               uint8_t phase8_adc_osr = 3;    /* 0 = 128 ; 1 = 256 ; 2 = 512 ; 3 = 1024 ; 4 = 2048*/\r
+    uint8_t phase5_adc_osr = 3;    /* 0 = 128 ; 1 = 256 ; 2 = 512 ; 3 = 1024 ; 4 = 2048*/\r
+    uint8_t phase6_adc_osr = 3;    /* 0 = 128 ; 1 = 256 ; 2 = 512 ; 3 = 1024 ; 4 = 2048*/\r
+    uint8_t phase7_adc_osr = 3;    /* 0 = 128 ; 1 = 256 ; 2 = 512 ; 3 = 1024 ; 4 = 2048*/\r
+    uint8_t phase8_adc_osr = 3;    /* 0 = 128 ; 1 = 256 ; 2 = 512 ; 3 = 1024 ; 4 = 2048*/\r
                         \r
-         uint8_t phase1_mux_sel = 0;    /* sel phase1*/\r
-               uint8_t phase2_mux_sel = 1;    /* sel phase2*/\r
-               uint8_t phase3_mux_sel = 2;    /* sel phase3*/\r
-               uint8_t phase4_mux_sel = 3;    /* sel phase4*/\r
-               uint8_t phase5_mux_sel = 4;    /* sel phase5*/\r
-               uint8_t phase6_mux_sel = 5;    /* sel phase6*/\r
-               uint8_t phase7_mux_sel = 6;    /* sel phase7*/\r
-               uint8_t phase8_mux_sel = 7;    /* sel phase8*/\r
+    uint8_t phase1_mux_sel = 0;    /* sel phase1*/\r
+    uint8_t phase2_mux_sel = 1;    /* sel phase2*/\r
+    uint8_t phase3_mux_sel = 2;    /* sel phase3*/\r
+    uint8_t phase4_mux_sel = 3;    /* sel phase4*/\r
+    uint8_t phase5_mux_sel = 4;    /* sel phase5*/\r
+    uint8_t phase6_mux_sel = 5;    /* sel phase6*/\r
+    uint8_t phase7_mux_sel = 6;    /* sel phase7*/\r
+    uint8_t phase8_mux_sel = 7;    /* sel phase8*/\r
        \r
 \r
-         uint8_t phase1_inner_avg = 0;   /* phase1 adc avg num 0=1, 1=2, 2=4, 3=8 , 4=16*/\r
-    uint8_t phase1_tia_res = 0;     /* 0= 10K; 1= 20k; 2= 50k; 3= 100k; 4= 150k; 5= 200k; 6= 500k; 7= 1M*/\r
-               uint8_t phase1_tia_cap = 4;     /* 0= ; 1= ; 2= ; 3= ; 4= ; 5= ; 6= ; 7= */\r
+    uint8_t phase1_inner_avg = 0;   /* phase1 adc avg num 0=1, 1=2, 2=4, 3=8 , 4=16*/\r
+    uint8_t phase1_tia_res = PS_Gnoise_TIA;     /* 0= 10K; 1= 20k; 2= 50k; 3= 100k; 4= 150k; 5= 200k; 6= 500k; 7= 1M*/\r
+    uint8_t phase1_tia_cap = 4;     /* 0= ; 1= ; 2= ; 3= ; 4= ; 5= ; 6= ; 7= */\r
     uint8_t phase1_led_drv1_cha_sel = 0;     /* 1 = ldr1  NG; 2 = ldr2   GR; 4 = ldr3  IR; 8 = ldr4 RED; */\r
     uint8_t phase1_led_drv2_cha_sel = 0;    /*ldr5:0x20  ldr6: 0x40 red    ldr8 0x80  ir      */\r
-               uint8_t phase1_pd_sel = 0x0c;          /* 1 = pd1; 2 = pd2; 4 = pd3*/\r
+    uint8_t phase1_pd_sel = ALS_PD_FT_SEL;          /* 1 = pd1; 2 = pd2; 4 = pd3*/\r
     uint8_t phase1_als_offset_idac = 0; /* 0~255 = 0 ~ 128ua , step = 0.5ua */\r
-               uint8_t phase1_led_offset_idac = 0; /* 0~255 = 0 ~ 64ua , step = 0.25ua */\r
+    uint8_t phase1_led_offset_idac = 0; /* 0~255 = 0 ~ 64ua , step = 0.25ua */\r
     uint8_t phase1_ldr1_cur = 0;     /* 0~255 = 0 ~ 200ma, step = 0.8ma */\r
-               uint8_t phase1_ldr2_cur = 0;\r
-//             uint8_t phase1_of_idac1_cur = 0;\r
-//    uint8_t phase1_of_idac2_cur = 0;\r
+    uint8_t phase1_ldr2_cur = 0;\r
     uint8_t phase1_ad_inr_ctrl = 3;\r
     uint8_t phase1_ad_of_idac_ctrl = 0;\r
-//    uint8_t afe_offset  =  0;\r
-    uint8_t phase1_led_en = 1;      /* phase1 led enable*/\r
-               \r
-               uint8_t phase1_dsp_mov_avg_num = 0; /* 0=bypass ; 1=2 ; 2=4 ; 3=8 */\r
+    uint8_t phase1_led_en = 0;      /* phase1 led enable*/             \r
+    uint8_t phase1_dsp_mov_avg_num = 0; /* 0=bypass ; 1=2 ; 2=4 ; 3=8 */\r
     uint8_t phase1_dsp_iir_lp_coeff = 0; /* 0=bypass ; 1=1/2 ; 2=1/4 ; 3=1/8 ,...,7=1/128 */\r
 \r
 \r
-\r
-         uint8_t phase2_inner_avg = 0;   /* phase1 adc avg num 0=1, 1=2, 2=4, 3=8 , 4=16*/\r
-    uint8_t phase2_tia_res = 0;     /* 0= 10K; 1= 20k; 2= 50k; 3= 100k; 4= 150k; 5= 200k; 6= 500k; 7= 1M*/\r
-               uint8_t phase2_tia_cap = 4;     /* 0= ; 1= ; 2= ; 3= ; 4= ; 5= ; 6= ; 7= */\r
-    uint8_t phase2_led_drv1_cha_sel = GREEN_LED_SLE;   //GREEN_LED_SLE;     /* 1 = ldr1; 2 = ldr2; 4 = ldr3; 8 = ldr4 ; */\r
+    uint8_t phase2_inner_avg = 0;   /* phase1 adc avg num 0=1, 1=2, 2=4, 3=8 , 4=16*/\r
+    uint8_t phase2_tia_res = 3;     /* 0= 10K; 1= 20k; 2= 50k; 3= 100k; 4= 150k; 5= 200k; 6= 500k; 7= 1M*/\r
+    uint8_t phase2_tia_cap = 4;     /* 0= ; 1= ; 2= ; 3= ; 4= ; 5= ; 6= ; 7= */\r
+    uint8_t phase2_led_drv1_cha_sel = LDR0_FT_SEL;     /* 1 = ldr1; 2 = ldr2; 4 = ldr3; 8 = ldr4 ; */\r
     uint8_t phase2_led_drv2_cha_sel = 0x00;\r
-               uint8_t phase2_pd_sel = 0x0c;      /* 1 = pd1; 2 = pd2; 4 = pd3*/\r
+    uint8_t phase2_pd_sel = LDR0_PD_FT_SEL;      /* 1 = pd1; 2 = pd2; 4 = pd3*/\r
     uint8_t phase2_als_offset_idac = 0; /* 0~255 = 0 ~ 128ua , step = 0.5ua */\r
-               uint8_t phase2_led_offset_idac = 0; /* 0~255 = 0 ~ 64ua , step = 0.25ua */\r
-    uint8_t phase2_ldr1_cur = 16;     /* 0~255 = 0 ~ 200ma, step = 0.8ma */\r
-               uint8_t phase2_ldr2_cur = 0;\r
-//             uint8_t phase2_of_idac1_cur = 0;\r
-//    uint8_t phase2_of_idac2_cur = 0;\r
+    uint8_t phase2_led_offset_idac = 0; /* 0~255 = 0 ~ 64ua , step = 0.25ua */\r
+    uint8_t phase2_ldr1_cur = 0;     /* 0~255 = 0 ~ 200ma, step = 0.8ma */\r
+    uint8_t phase2_ldr2_cur = 0;\r
     uint8_t phase2_ad_inr_ctrl = 3;\r
     uint8_t phase2_ad_of_idac_ctrl = 0;\r
-//    uint8_t phase2_afe_offset  =  0;\r
-    uint8_t phase2_led_en = 1;      /* phase1 led enable*/\r
-               \r
-               uint8_t phase2_dsp_mov_avg_num = 0; /* 0=bypass ; 1=2 ; 2=4 ; 3=8 */\r
+    uint8_t phase2_led_en = 0;      /* phase1 led enable*/             \r
+    uint8_t phase2_dsp_mov_avg_num = 0; /* 0=bypass ; 1=2 ; 2=4 ; 3=8 */\r
     uint8_t phase2_dsp_iir_lp_coeff = 0; /* 0=bypass ; 1=1/2 ; 2=1/4 ; 3=1/8 ,...,7=1/128 */\r
 \r
                \r
     uint8_t phase3_inner_avg = 0;   /* phase1 adc avg num 0=1, 1=2, 2=4, 3=8 , 4=16*/\r
-    uint8_t phase3_tia_res = 0;     /* 0= 10K; 1= 20k; 2= 50k; 3= 100k; 4= 150k; 5= 200k; 6= 500k; 7= 1M*/\r
-               uint8_t phase3_tia_cap = 4;     /* 0= ; 1= ; 2= ; 3= ; 4= ; 5= ; 6= ; 7= */\r
-    uint8_t phase3_led_drv1_cha_sel = RED_LED_SLE;     /* 1 = ldr1; 2 = ldr2; 4 = ldr3; 8 = ldr4 ; */\r
+    uint8_t phase3_tia_res = PS_Gnoise_TIA;     /* 0= 10K; 1= 20k; 2= 50k; 3= 100k; 4= 150k; 5= 200k; 6= 500k; 7= 1M*/\r
+    uint8_t phase3_tia_cap = 4;     /* 0= ; 1= ; 2= ; 3= ; 4= ; 5= ; 6= ; 7= */\r
+    uint8_t phase3_led_drv1_cha_sel = LDR1_FT_SEL;     /* 1 = ldr1; 2 = ldr2; 4 = ldr3; 8 = ldr4 ; */\r
     uint8_t phase3_led_drv2_cha_sel = 0;\r
-               uint8_t phase3_pd_sel = 0x0c;      /* 1 = pd1; 2 = pd2; 4 = pd3*/\r
+    uint8_t phase3_pd_sel = LDR1_PD_FT_SEL;      /* 1 = pd1; 2 = pd2; 4 = pd3*/\r
     uint8_t phase3_als_offset_idac = 0; /* 0~255 = 0 ~ 128ua , step = 0.5ua */\r
-               uint8_t phase3_led_offset_idac = 0; /* 0~255 = 0 ~ 64ua , step = 0.25ua */\r
-    uint8_t phase3_ldr1_cur = 16;     /* 0~255 = 0 ~ 200ma, step = 0.8ma */\r
-               uint8_t phase3_ldr2_cur = 0;\r
-//             uint8_t phase3_of_idac1_cur = 0;\r
-//    uint8_t phase3_of_idac2_cur = 0;\r
+    uint8_t phase3_led_offset_idac = 0; /* 0~255 = 0 ~ 64ua , step = 0.25ua */\r
+    uint8_t phase3_ldr1_cur = 0;     /* 0~255 = 0 ~ 200ma, step = 0.8ma */\r
+    uint8_t phase3_ldr2_cur = 0;\r
     uint8_t phase3_ad_inr_ctrl = 3;\r
     uint8_t phase3_ad_of_idac_ctrl = 0;\r
-//    uint8_t phase3_afe_offset  =  0;\r
-    uint8_t phase3_led_en = 1;      /* phase1 led enable*/\r
-               \r
-               uint8_t phase3_dsp_mov_avg_num = 0; /* 0=bypass ; 1=2 ; 2=4 ; 3=8 */\r
+    uint8_t phase3_led_en = 0;      /* phase1 led enable*/             \r
+    uint8_t phase3_dsp_mov_avg_num = 0; /* 0=bypass ; 1=2 ; 2=4 ; 3=8 */\r
     uint8_t phase3_dsp_iir_lp_coeff = 0; /* 0=bypass ; 1=1/2 ; 2=1/4 ; 3=1/8 ,...,7=1/128 */\r
 \r
                \r
     uint8_t phase4_inner_avg = 0;   /* phase1 adc avg num 0=1, 1=2, 2=4, 3=8 , 4=16*/\r
-    uint8_t phase4_tia_res = 0;     /* 0= 10K; 1= 20k; 2= 50k; 3= 100k; 4= 150k; 5= 200k; 6= 500k; 7= 1M*/\r
-               uint8_t phase4_tia_cap = 4;     /* 0= ; 1= ; 2= ; 3= ; 4= ; 5= ; 6= ; 7= */\r
-    uint8_t phase4_led_drv1_cha_sel = IR_LED_SLE;     /* 1 = ldr1; 2 = ldr2; 4 = ldr3; 8 = ldr4 ; */\r
+    uint8_t phase4_tia_res = PS_Gnoise_TIA;     /* 0= 10K; 1= 20k; 2= 50k; 3= 100k; 4= 150k; 5= 200k; 6= 500k; 7= 1M*/\r
+    uint8_t phase4_tia_cap = 4;     /* 0= ; 1= ; 2= ; 3= ; 4= ; 5= ; 6= ; 7= */\r
+    uint8_t phase4_led_drv1_cha_sel = LDR2_FT_SEL;     /* 1 = ldr1; 2 = ldr2; 4 = ldr3; 8 = ldr4 ; */\r
     uint8_t phase4_led_drv2_cha_sel = 0;\r
-               uint8_t phase4_pd_sel = 0x0c;      /* 1 = pd1; 2 = pd2; 4 = pd3*/\r
+    uint8_t phase4_pd_sel = LDR2_PD_FT_SEL;      /* 1 = pd1; 2 = pd2; 4 = pd3*/\r
     uint8_t phase4_als_offset_idac = 0; /* 0~255 = 0 ~ 128ua , step = 0.5ua */\r
-               uint8_t phase4_led_offset_idac = 0; /* 0~255 = 0 ~ 64ua , step = 0.25ua */\r
-    uint8_t phase4_ldr1_cur = 16;     /* 0~255 = 0 ~ 200ma, step = 0.8ma */\r
-               uint8_t phase4_ldr2_cur = 0;\r
-//             uint8_t phase4_of_idac1_cur = 0;\r
-//    uint8_t phase4_of_idac2_cur = 0;\r
+    uint8_t phase4_led_offset_idac = 0; /* 0~255 = 0 ~ 64ua , step = 0.25ua */\r
+    uint8_t phase4_ldr1_cur = 0;     /* 0~255 = 0 ~ 200ma, step = 0.8ma */\r
+    uint8_t phase4_ldr2_cur = 0;\r
     uint8_t phase4_ad_inr_ctrl = 3;\r
     uint8_t phase4_ad_of_idac_ctrl = 0;\r
-//    uint8_t phase4_afe_offset  =  0;\r
-    uint8_t phase4_led_en = 1;      /* phase1 led enable*/\r
-               \r
-               uint8_t phase4_dsp_mov_avg_num = 0; /* 0=bypass ; 1=2 ; 2=4 ; 3=8 */\r
+    uint8_t phase4_led_en = 0;      /* phase1 led enable*/             \r
+    uint8_t phase4_dsp_mov_avg_num = 0; /* 0=bypass ; 1=2 ; 2=4 ; 3=8 */\r
     uint8_t phase4_dsp_iir_lp_coeff = 0; /* 0=bypass ; 1=1/2 ; 2=1/4 ; 3=1/8 ,...,7=1/128 */\r
 \r
     uint8_t phase5_inner_avg = 0;   /* phase1 adc avg num 0=1, 1=2, 2=4, 3=8 , 4=16*/\r
-    uint8_t phase5_tia_res = 0;     /* 0= 10K; 1= 20k; 2= 50k; 3= 100k; 4= 150k; 5= 200k; 6= 500k; 7= 1M*/\r
-               uint8_t phase5_tia_cap = 4;     /* 0= ; 1= ; 2= ; 3= ; 4= ; 5= ; 6= ; 7= */\r
-    uint8_t phase5_led_drv1_cha_sel = 0;     /* 1 = ldr1; 2 = ldr2; 4 = ldr3; 8 = ldr4 ; */\r
+    uint8_t phase5_tia_res = PS_Gnoise_TIA;     /* 0= 10K; 1= 20k; 2= 50k; 3= 100k; 4= 150k; 5= 200k; 6= 500k; 7= 1M*/\r
+    uint8_t phase5_tia_cap = 4;     /* 0= ; 1= ; 2= ; 3= ; 4= ; 5= ; 6= ; 7= */\r
+    uint8_t phase5_led_drv1_cha_sel = LDR3_FT_SEL;     /* 1 = ldr1; 2 = ldr2; 4 = ldr3; 8 = ldr4 ; */\r
     uint8_t phase5_led_drv2_cha_sel = 0;\r
-               uint8_t phase5_pd_sel = 0x0c;      /* 1 = pd1; 2 = pd2; */\r
+    uint8_t phase5_pd_sel = LDR3_PD_FT_SEL;      /* 1 = pd1; 2 = pd2; */\r
     uint8_t phase5_als_offset_idac = 0; /* 0~255 = 0 ~ 128ua , step = 0.5ua */\r
-               uint8_t phase5_led_offset_idac = 0; /* 0~255 = 0 ~ 64ua , step = 0.25ua */\r
+    uint8_t phase5_led_offset_idac = 0; /* 0~255 = 0 ~ 64ua , step = 0.25ua */\r
     uint8_t phase5_ldr1_cur = 0;     /* 0~255 = 0 ~ 200ma, step = 0.8ma */\r
-               uint8_t phase5_ldr2_cur = 0;\r
-//             uint8_t phase5_of_idac1_cur = 0;\r
-//    uint8_t phase5_of_idac2_cur = 0;\r
+    uint8_t phase5_ldr2_cur = 0;\r
     uint8_t phase5_ad_inr_ctrl = 3;\r
     uint8_t phase5_ad_of_idac_ctrl = 0;\r
-//    uint8_t phase5_afe_offset  =  0;\r
-    uint8_t phase5_led_en = 1;      /* phase1 led enable*/\r
-               \r
-               uint8_t phase5_dsp_mov_avg_num = 0; /* 0=bypass ; 1=2 ; 2=4 ; 3=8 */\r
+    uint8_t phase5_led_en = 0;      /* phase1 led enable*/             \r
+    uint8_t phase5_dsp_mov_avg_num = 0; /* 0=bypass ; 1=2 ; 2=4 ; 3=8 */\r
     uint8_t phase5_dsp_iir_lp_coeff = 0; /* 0=bypass ; 1=1/2 ; 2=1/4 ; 3=1/8 ,...,7=1/128 */\r
 \r
     uint8_t phase6_inner_avg = 0;   /* phase1 adc avg num 0=1, 1=2, 2=4, 3=8 , 4=16*/\r
-    uint8_t phase6_tia_res = 0;     /* 0= 10K; 1= 20k; 2= 50k; 3= 100k; 4= 150k; 5= 200k; 6= 500k; 7= 1M*/\r
-               uint8_t phase6_tia_cap = 4;     /* 0= ; 1= ; 2= ; 3= ; 4= ; 5= ; 6= ; 7= */\r
-    uint8_t phase6_led_drv1_cha_sel = 0;     /* 1 = ldr1; 2 = ldr2; 4 = ldr3; 8 = ldr4 ; */\r
+    uint8_t phase6_tia_res = PS_Gnoise_TIA;     /* 0= 10K; 1= 20k; 2= 50k; 3= 100k; 4= 150k; 5= 200k; 6= 500k; 7= 1M*/\r
+    uint8_t phase6_tia_cap = 4;     /* 0= ; 1= ; 2= ; 3= ; 4= ; 5= ; 6= ; 7= */\r
+    uint8_t phase6_led_drv1_cha_sel = LDR4_FT_SEL;     /* 1 = ldr1; 2 = ldr2; 4 = ldr3; 8 = ldr4 ; */\r
     uint8_t phase6_led_drv2_cha_sel = 0;\r
-               uint8_t phase6_pd_sel = 0x0c;      /* 1 = pd1; 2 = pd2; */\r
+    uint8_t phase6_pd_sel = LDR4_PD_FT_SEL;      /* 1 = pd1; 2 = pd2; */\r
     uint8_t phase6_als_offset_idac = 0; /* 0~255 = 0 ~ 128ua , step = 0.5ua */\r
-               uint8_t phase6_led_offset_idac = 0; /* 0~255 = 0 ~ 64ua , step = 0.25ua */\r
+    uint8_t phase6_led_offset_idac = 0; /* 0~255 = 0 ~ 64ua , step = 0.25ua */\r
     uint8_t phase6_ldr1_cur = 0;     /* 0~255 = 0 ~ 200ma, step = 0.8ma */\r
-               uint8_t phase6_ldr2_cur = 0;\r
-//             uint8_t phase6_of_idac1_cur = 0;\r
-//    uint8_t phase6_of_idac2_cur = 0;\r
+    uint8_t phase6_ldr2_cur = 0;\r
     uint8_t phase6_ad_inr_ctrl = 3;\r
     uint8_t phase6_ad_of_idac_ctrl = 0;\r
-//    uint8_t phase6_afe_offset  =  0;\r
-    uint8_t phase6_led_en = 1;      /* phase1 led enable*/\r
-               \r
-               uint8_t phase6_dsp_mov_avg_num = 0; /* 0=bypass ; 1=2 ; 2=4 ; 3=8 */\r
+    uint8_t phase6_led_en = 0;      /* phase1 led enable*/             \r
+    uint8_t phase6_dsp_mov_avg_num = 0; /* 0=bypass ; 1=2 ; 2=4 ; 3=8 */\r
     uint8_t phase6_dsp_iir_lp_coeff = 0; /* 0=bypass ; 1=1/2 ; 2=1/4 ; 3=1/8 ,...,7=1/128 */\r
 \r
     uint8_t phase7_inner_avg = 0;   /* phase1 adc avg num 0=1, 1=2, 2=4, 3=8 , 4=16*/\r
-    uint8_t phase7_tia_res = 0;     /* 0= 10K; 1= 20k; 2= 50k; 3= 100k; 4= 150k; 5= 200k; 6= 500k; 7= 1M*/\r
-               uint8_t phase7_tia_cap = 4;     /* 0= ; 1= ; 2= ; 3= ; 4= ; 5= ; 6= ; 7= */\r
-    uint8_t phase7_led_drv1_cha_sel = 0;     /* 1 = ldr1; 2 = ldr2; 4 = ldr3; 8 = ldr4 ; */\r
+    uint8_t phase7_tia_res = PS_Gnoise_TIA;     /* 0= 10K; 1= 20k; 2= 50k; 3= 100k; 4= 150k; 5= 200k; 6= 500k; 7= 1M*/\r
+    uint8_t phase7_tia_cap = 4;     /* 0= ; 1= ; 2= ; 3= ; 4= ; 5= ; 6= ; 7= */\r
+    uint8_t phase7_led_drv1_cha_sel = LDR5_FT_SEL;     /* 1 = ldr1; 2 = ldr2; 4 = ldr3; 8 = ldr4 ; */\r
     uint8_t phase7_led_drv2_cha_sel = 0;\r
-               uint8_t phase7_pd_sel = 0x0c;      /* 1 = pd1; 2 = pd2; */\r
+    uint8_t phase7_pd_sel = LDR5_PD_FT_SEL;      /* 1 = pd1; 2 = pd2; */\r
     uint8_t phase7_als_offset_idac = 0; /* 0~255 = 0 ~ 128ua , step = 0.5ua */\r
-               uint8_t phase7_led_offset_idac = 0; /* 0~255 = 0 ~ 64ua , step = 0.25ua */\r
+    uint8_t phase7_led_offset_idac = 0; /* 0~255 = 0 ~ 64ua , step = 0.25ua */\r
     uint8_t phase7_ldr1_cur = 0;     /* 0~255 = 0 ~ 200ma, step = 0.8ma */\r
-               uint8_t phase7_ldr2_cur = 0;\r
-//             uint8_t phase7_of_idac1_cur = 0;\r
-//    uint8_t phase7_of_idac2_cur = 0;\r
+    uint8_t phase7_ldr2_cur = 0;\r
     uint8_t phase7_ad_inr_ctrl = 3;\r
     uint8_t phase7_ad_of_idac_ctrl = 0;\r
-//    uint8_t phase7_afe_offset  =  0;\r
-    uint8_t phase7_led_en = 1;      /* phase1 led enable*/\r
-               \r
-               uint8_t phase7_dsp_mov_avg_num = 0; /* 0=bypass ; 1=2 ; 2=4 ; 3=8 */\r
+    uint8_t phase7_led_en = 0;      /* phase1 led enable*/             \r
+    uint8_t phase7_dsp_mov_avg_num = 0; /* 0=bypass ; 1=2 ; 2=4 ; 3=8 */\r
     uint8_t phase7_dsp_iir_lp_coeff = 0; /* 0=bypass ; 1=1/2 ; 2=1/4 ; 3=1/8 ,...,7=1/128 */\r
 \r
     uint8_t phase8_inner_avg = 0;   /* phase1 adc avg num 0=1, 1=2, 2=4, 3=8 , 4=16*/\r
-    uint8_t phase8_tia_res = 0;     /* 0= 10K; 1= 20k; 2= 50k; 3= 100k; 4= 150k; 5= 200k; 6= 500k; 7= 1M*/\r
-               uint8_t phase8_tia_cap = 4;     /* 0= ; 1= ; 2= ; 3= ; 4= ; 5= ; 6= ; 7= */\r
-    uint8_t phase8_led_drv1_cha_sel = 0;   //IR_LED_SLE;     /* 1 = ldr1; 2 = ldr2; 4 = ldr3; 8 = ldr4 ; */\r
+    uint8_t phase8_tia_res = 3;     /* 0= 10K; 1= 20k; 2= 50k; 3= 100k; 4= 150k; 5= 200k; 6= 500k; 7= 1M*/\r
+    uint8_t phase8_tia_cap = 4;     /* 0= ; 1= ; 2= ; 3= ; 4= ; 5= ; 6= ; 7= */\r
+    uint8_t phase8_led_drv1_cha_sel = 0;     /* 1 = ldr1; 2 = ldr2; 4 = ldr3; 8 = ldr4 ; */\r
     uint8_t phase8_led_drv2_cha_sel = 0;\r
-               uint8_t phase8_pd_sel = 0x0c;      /* 1 = pd1; 2 = pd2; */\r
+    uint8_t phase8_pd_sel = 0;      /* 1 = pd1; 2 = pd2; */\r
     uint8_t phase8_als_offset_idac = 0; /* 0~255 = 0 ~ 128ua , step = 0.5ua */\r
-               uint8_t phase8_led_offset_idac = 0; /* 0~255 = 0 ~ 64ua , step = 0.25ua */\r
+    uint8_t phase8_led_offset_idac = 0; /* 0~255 = 0 ~ 64ua , step = 0.25ua */\r
     uint8_t phase8_ldr1_cur = 0;     /* 0~255 = 0 ~ 200ma, step = 0.8ma */\r
-               uint8_t phase8_ldr2_cur = 0;\r
-//             uint8_t phase8_of_idac1_cur = 0;\r
-//    uint8_t phase8_of_idac2_cur = 0;\r
+    uint8_t phase8_ldr2_cur = 0;\r
     uint8_t phase8_ad_inr_ctrl = 3;\r
     uint8_t phase8_ad_of_idac_ctrl = 0;\r
-//    uint8_t phase8_afe_offset  =  0;\r
-    uint8_t phase8_led_en = 1;      /* phase1 led enable*/\r
-               \r
-               uint8_t phase8_dsp_mov_avg_num = 0; /* 0=bypass ; 1=2 ; 2=4 ; 3=8 */\r
+    uint8_t phase8_led_en = 0;      /* phase1 led enable*/             \r
+    uint8_t phase8_dsp_mov_avg_num = 0; /* 0=bypass ; 1=2 ; 2=4 ; 3=8 */\r
     uint8_t phase8_dsp_iir_lp_coeff = 0; /* 0=bypass ; 1=1/2 ; 2=1/4 ; 3=1/8 ,...,7=1/128 */\r
 \r
-    uint8_t init_wait_delay = 5 ; /* 0 = 31clk ; 1 = 64clk ; 2 = 127clk ; 3 = 255clk(d) ;\r
+    uint8_t init_wait_delay = 4 ; /* 0 = 31clk ; 1 = 64clk ; 2 = 127clk ; 3 = 255clk(d) ;\r
                                      4 = 511clk; 5 = 1023clk; 6 = 2047; 7 = 4095clk */         \r
                                                                                                                                                 \r
     uint8_t afe_reset = 3;        /* 0 = 15clk ; 1 = 31clk ; 2 = 63clk ; 3 = 127clk(d) ;\r
                                      4 = 255clk; 5 = 511clk; 6 = 1024; 7 = 2047clk */\r
                                                                                                                                                 \r
-               uint8_t afe_rst_cnvt = 1;               /* 0 = 15clk ; 1 = 31clk ; 2 = 63clk ; 3 = 127clk(d)*/\r
-    \r
+    uint8_t afe_rst_cnvt = 1;                  /* 0 = 15clk ; 1 = 31clk ; 2 = 63clk ; 3 = 127clk(d)*/\r
+\r
     uint8_t led_en_idac_pre    = 2;    /* 0 = 8clk ; 1 = 16clk ; 2 = 32clk ; 3 = 64clk(d)*/ \r
-               \r
-               uint8_t led_en_idac     =       1;        /* 0 = 4clk ; 1 = 8clk ; 2 = 16clk ; 3 = 32clk(d)*/ \r
-                                                                                                                                                \r
-    uint8_t led_on_time = 2;      /* 0 = 32clk=8us ; 1 = 64clk=16us; 2=128clk=32us ; 3 = 256clk=64us ;\r
+\r
+    uint8_t led_en_idac        =       1;        /* 0 = 4clk ; 1 = 8clk ; 2 = 16clk ; 3 = 32clk(d)*/ \r
+                                                                 \r
+    uint8_t led_on_time = 3;      /* 0 = 32clk=8us ; 1 = 64clk=16us; 2=128clk=32us ; 3 = 256clk=64us ;\r
                                      4 = 512clk=128us ; 5 = 1024clk=256us; 6= 2048clk=512us; 7 = 4096clk=1024us */\r
                                                                                                                                                 \r
     hx3695_delay_ms(10);               \r
-               \r
+                       \r
     hx3695_write_reg(0X2a, (uint8_t)prf_clk_num);    // prf bit<7:0>6\r
     hx3695_write_reg(0X2b, (uint8_t)(prf_clk_num>>8)); // prf bit<15:8>\r
     hx3695_write_reg(0X2c, (uint8_t)(prf_clk_num>>16)); // prf bit<23:16>      \r
                   \r
     hx3695_write_reg(0X25, (afe_rst_cnvt<<4| led_en_idac_pre<<2|led_en_idac)); \r
-               hx3695_write_reg(0X2d, phase7_8_internal); \r
-               hx3695_write_reg(0X2e, 0x33);// gpio ctrl \r
+    hx3695_write_reg(0X2d, phase7_8_internal); \r
+    hx3695_write_reg(0X2e, 0x33);// gpio ctrl \r
     hx3695_write_reg(0X2f, ((afe_reset<<4)| init_wait_delay));\r
-               hx3695_write_reg(0X30, (phase8_led_en<<7 | phase7_led_en<<6 |phase6_led_en<<5 |phase5_led_en<<4 |phase4_led_en<<3 | phase3_led_en<<2 | phase2_led_en<<1 | phase1_led_en) );\r
+    hx3695_write_reg(0X30, (phase8_led_en<<7 | phase7_led_en<<6 |phase6_led_en<<5 |phase5_led_en<<4 |phase4_led_en<<3 | phase3_led_en<<2 | phase2_led_en<<1 | phase1_led_en) );\r
     hx3695_write_reg(0X72, (phase8_led_en<<7 | phase7_led_en<<6 |phase6_led_en<<5 |phase5_led_en<<4 |phase4_led_en<<3 | phase3_led_en<<2 | phase2_led_en<<1 | phase1_led_en) );\r
 \r
 \r
     hx3695_write_reg(0X31, (led_on_time<<4| 0x00));\r
-               hx3695_write_reg(0X33, 0x83);// 中断极性及宽度配置;\r
-               hx3695_write_reg(0X34, 0x00);// 中断特殊配置;\r
-               hx3695_write_reg(0X36, 0x00);// phase data ready 标志设置;\r
-               hx3695_write_reg(0X38, 0x00);\r
+    hx3695_write_reg(0X33, 0x83);// �жϼ��Լ��������ã�\r
+    hx3695_write_reg(0X34, 0x00);// �ж��������ã�\r
+    hx3695_write_reg(0X36, 0x00);// phase data ready ��־���ã�\r
+    hx3695_write_reg(0X38, 0x00);\r
                \r
     hx3695_write_reg(0X3a, (phase1_inner_avg | (phase2_inner_avg<<4)));  \r
     hx3695_write_reg(0X3b, (phase3_inner_avg | (phase4_inner_avg<<4)));  \r
@@ -1114,851 +991,474 @@ void hx3695_factory_ft_single_check_config(void)//灰卡10mm高度测试配置
     hx3695_write_reg(0X3e, adc_rst_post_num<<6 | samp_delay_leden_num<<4 | samp_copy_avg); \r
     hx3695_write_reg(0X3f, data_avg_num<<4 | data_avg_num );\r
     hx3695_write_reg(0X40, data_avg_num<<4 | data_avg_num );\r
-               hx3695_write_reg(0X41, data_avg_num<<4 | data_avg_num );\r
-               hx3695_write_reg(0X42, data_avg_num<<4 | data_avg_num );\r
-               \r
-               hx3695_write_reg(0X43, phase1_mux_sel);  \r
-               hx3695_write_reg(0X44, phase1_tia_cap<<4|phase1_tia_res); \r
-               hx3695_write_reg(0X45, phase1_ldr1_cur);    //LED_DRV1_CUR\r
-               hx3695_write_reg(0x70, phase1_ldr2_cur);   //ps8--ps1  led_drv2_cur\r
-               hx3695_write_reg(0X46, (phase1_pd_sel<<4 | 0x00));\r
-               hx3695_write_reg(0X47, phase1_als_offset_idac);\r
-               hx3695_write_reg(0X48, phase1_led_offset_idac);\r
-\r
+    hx3695_write_reg(0X41, data_avg_num<<4 | data_avg_num );\r
+    hx3695_write_reg(0X42, data_avg_num<<4 | data_avg_num );\r
+    \r
+    hx3695_write_reg(0X43, phase1_mux_sel);  \r
+    hx3695_write_reg(0X44, phase1_tia_cap<<4|phase1_tia_res); \r
+    hx3695_write_reg(0X45, phase1_ldr1_cur);    //LED_DRV1_CUR\r
+    hx3695_write_reg(0x70, phase1_ldr2_cur);   //ps8--ps1  led_drv2_cur\r
+    hx3695_write_reg(0X46, (phase1_pd_sel<<4 | 0x00));\r
+    hx3695_write_reg(0X47, phase1_als_offset_idac);\r
+    hx3695_write_reg(0X48, phase1_led_offset_idac);\r
     hx3695_write_reg(0X49, phase1_ad_inr_ctrl<<4|phase1_ad_of_idac_ctrl); \r
-               hx3695_write_reg(0X4a, phase1_led_drv1_cha_sel);\r
-               hx3695_write_reg(0X4b, phase1_led_drv2_cha_sel);\r
-               hx3695_write_reg(0X71, phase1_dsp_mov_avg_num | phase1_dsp_iir_lp_coeff<<4);\r
+    hx3695_write_reg(0X4a, phase1_led_drv1_cha_sel);\r
+    hx3695_write_reg(0X4b, phase1_led_drv2_cha_sel);\r
+    hx3695_write_reg(0X71, phase1_dsp_mov_avg_num | phase1_dsp_iir_lp_coeff<<4);\r
 \r
-//    hx3695_write_reg(0X4e, thred_value);\r
-//    hx3695_write_reg(0X4f, thred_value>>5);\r
-               \r
+       \r
     hx3695_write_reg(0X43, phase2_mux_sel);  \r
-               hx3695_write_reg(0X44, phase2_tia_cap<<4|phase2_tia_res); \r
-               hx3695_write_reg(0X45, phase2_ldr1_cur);    //LED_DRV1_CUR\r
-               hx3695_write_reg(0x70, phase2_ldr2_cur);   //ps8--ps1  led_drv2_cur\r
-               hx3695_write_reg(0X46, (phase2_pd_sel<<4 | 0x00));\r
-               hx3695_write_reg(0X47, phase2_als_offset_idac);\r
-               hx3695_write_reg(0X48, phase2_led_offset_idac);\r
-//             hx3695_write_reg(0X48, phase1_led_offset_idac);\r
+    hx3695_write_reg(0X44, phase2_tia_cap<<4|phase2_tia_res); \r
+    hx3695_write_reg(0X45, phase2_ldr1_cur);    //LED_DRV1_CUR\r
+    hx3695_write_reg(0x70, phase2_ldr2_cur);   //ps8--ps1  led_drv2_cur\r
+    hx3695_write_reg(0X46, (phase2_pd_sel<<4 | 0x00));\r
+    hx3695_write_reg(0X47, phase2_als_offset_idac);\r
+    hx3695_write_reg(0X48, phase2_led_offset_idac);\r
     hx3695_write_reg(0X49,  phase2_ad_inr_ctrl<<4|phase2_ad_of_idac_ctrl); \r
-               hx3695_write_reg(0X4a, phase2_led_drv1_cha_sel);\r
-               hx3695_write_reg(0X4b, phase2_led_drv2_cha_sel);\r
-               hx3695_write_reg(0X71, phase2_dsp_mov_avg_num | phase2_dsp_iir_lp_coeff<<4);\r
+    hx3695_write_reg(0X4a, phase2_led_drv1_cha_sel);\r
+    hx3695_write_reg(0X4b, phase2_led_drv2_cha_sel);\r
+    hx3695_write_reg(0X71, phase2_dsp_mov_avg_num | phase2_dsp_iir_lp_coeff<<4);\r
                \r
 //phase3 sel\r
 \r
     hx3695_write_reg(0X43, phase3_mux_sel);  \r
-               hx3695_write_reg(0X44, phase3_tia_cap<<4|phase3_tia_res); \r
-               hx3695_write_reg(0X45, phase3_ldr1_cur);    //LED_DRV1_CUR\r
-               hx3695_write_reg(0x70, phase3_ldr2_cur);   //ps8--ps1  led_drv2_cur\r
-               hx3695_write_reg(0X46, (phase3_pd_sel<<4 | 0x00));\r
-               hx3695_write_reg(0X47, phase3_als_offset_idac);\r
-               hx3695_write_reg(0X48, phase3_led_offset_idac);\r
-//             hx3695_write_reg(0X48, phase1_led_offset_idac);\r
+    hx3695_write_reg(0X44, phase3_tia_cap<<4|phase3_tia_res); \r
+    hx3695_write_reg(0X45, phase3_ldr1_cur);    //LED_DRV1_CUR\r
+    hx3695_write_reg(0x70, phase3_ldr2_cur);   //ps8--ps1  led_drv2_cur\r
+    hx3695_write_reg(0X46, (phase3_pd_sel<<4 | 0x00));\r
+    hx3695_write_reg(0X47, phase3_als_offset_idac);\r
+    hx3695_write_reg(0X48, phase3_led_offset_idac);\r
     hx3695_write_reg(0X49,  phase3_ad_inr_ctrl<<4|phase3_ad_of_idac_ctrl); \r
-               hx3695_write_reg(0X4a, phase3_led_drv1_cha_sel);\r
-               hx3695_write_reg(0X4b, phase3_led_drv2_cha_sel);\r
-               hx3695_write_reg(0X71, phase3_dsp_mov_avg_num | phase3_dsp_iir_lp_coeff<<4);\r
+    hx3695_write_reg(0X4a, phase3_led_drv1_cha_sel);\r
+    hx3695_write_reg(0X4b, phase3_led_drv2_cha_sel);\r
+    hx3695_write_reg(0X71, phase3_dsp_mov_avg_num | phase3_dsp_iir_lp_coeff<<4);\r
                \r
 //phase4 sel\r
 \r
     hx3695_write_reg(0X43, phase4_mux_sel);  \r
-               hx3695_write_reg(0X44, phase4_tia_cap<<4|phase4_tia_res); \r
-               hx3695_write_reg(0X45, phase4_ldr1_cur);    //LED_DRV1_CUR\r
-               hx3695_write_reg(0x70, phase4_ldr2_cur);   //ps8--ps1  led_drv2_cur\r
-               hx3695_write_reg(0X46, (phase4_pd_sel<<4 | 0x00));\r
-               hx3695_write_reg(0X47, phase4_als_offset_idac);\r
-               hx3695_write_reg(0X48, phase4_led_offset_idac);\r
-//             hx3695_write_reg(0X48, phase1_led_offset_idac);\r
+    hx3695_write_reg(0X44, phase4_tia_cap<<4|phase4_tia_res); \r
+    hx3695_write_reg(0X45, phase4_ldr1_cur);    //LED_DRV1_CUR\r
+    hx3695_write_reg(0x70, phase4_ldr2_cur);   //ps8--ps1  led_drv2_cur\r
+    hx3695_write_reg(0X46, (phase4_pd_sel<<4 | 0x00));\r
+    hx3695_write_reg(0X47, phase4_als_offset_idac);\r
+    hx3695_write_reg(0X48, phase4_led_offset_idac);\r
     hx3695_write_reg(0X49,  phase4_ad_inr_ctrl<<4|phase4_ad_of_idac_ctrl); \r
-               hx3695_write_reg(0X4a, phase4_led_drv1_cha_sel);\r
-               hx3695_write_reg(0X4b, phase4_led_drv2_cha_sel);\r
-               hx3695_write_reg(0X71, phase4_dsp_mov_avg_num | phase4_dsp_iir_lp_coeff<<4);\r
-\r
-               hx3695_write_reg(0X43, phase5_mux_sel);  \r
-               hx3695_write_reg(0X44, phase5_tia_cap<<4|phase5_tia_res); \r
-               hx3695_write_reg(0X45, phase5_ldr1_cur);    //LED_DRV1_CUR\r
-               hx3695_write_reg(0x70, phase5_ldr2_cur);   //ps8--ps1  led_drv2_cur\r
-               hx3695_write_reg(0X46, (phase5_pd_sel));    //<<4 | 0x00));\r
-               hx3695_write_reg(0X47, phase5_als_offset_idac);\r
-               hx3695_write_reg(0X48, phase5_led_offset_idac);\r
-//             hx3695_write_reg(0X48, phase1_led_offset_idac);\r
+    hx3695_write_reg(0X4a, phase4_led_drv1_cha_sel);\r
+    hx3695_write_reg(0X4b, phase4_led_drv2_cha_sel);\r
+    hx3695_write_reg(0X71, phase4_dsp_mov_avg_num | phase4_dsp_iir_lp_coeff<<4);\r
+\r
+    hx3695_write_reg(0X43, phase5_mux_sel);  \r
+    hx3695_write_reg(0X44, phase5_tia_cap<<4|phase5_tia_res); \r
+    hx3695_write_reg(0X45, phase5_ldr1_cur);    //LED_DRV1_CUR\r
+    hx3695_write_reg(0x70, phase5_ldr2_cur);   //ps8--ps1  led_drv2_cur\r
+    hx3695_write_reg(0X46, (phase5_pd_sel<<4 | 0x00));\r
+    hx3695_write_reg(0X47, phase5_als_offset_idac);\r
+    hx3695_write_reg(0X48, phase5_led_offset_idac);\r
     hx3695_write_reg(0X49,  phase5_ad_inr_ctrl<<4|phase5_ad_of_idac_ctrl); \r
-               hx3695_write_reg(0X4a, phase5_led_drv1_cha_sel);\r
-               hx3695_write_reg(0X4b, phase5_led_drv2_cha_sel);\r
-               hx3695_write_reg(0X71, phase5_dsp_mov_avg_num | phase5_dsp_iir_lp_coeff<<4);\r
-               \r
-               \r
-         hx3695_write_reg(0X43, phase6_mux_sel);  \r
-               hx3695_write_reg(0X44, phase6_tia_cap<<4|phase6_tia_res); \r
-               hx3695_write_reg(0X45, phase6_ldr1_cur);    //LED_DRV1_CUR\r
-               hx3695_write_reg(0x70, phase6_ldr2_cur);   //ps8--ps1  led_drv2_cur\r
-               hx3695_write_reg(0X46, (phase6_pd_sel<<4 | 0x00));\r
-               hx3695_write_reg(0X47, phase6_als_offset_idac);\r
-               hx3695_write_reg(0X48, phase6_led_offset_idac);\r
-//             hx3695_write_reg(0X48, phase6_led_offset_idac);\r
+    hx3695_write_reg(0X4a, phase5_led_drv1_cha_sel);\r
+    hx3695_write_reg(0X4b, phase5_led_drv2_cha_sel);\r
+    hx3695_write_reg(0X71, phase5_dsp_mov_avg_num | phase5_dsp_iir_lp_coeff<<4);\r
+               \r
+               \r
+    hx3695_write_reg(0X43, phase6_mux_sel);  \r
+    hx3695_write_reg(0X44, phase6_tia_cap<<4|phase6_tia_res); \r
+    hx3695_write_reg(0X45, phase6_ldr1_cur);    //LED_DRV1_CUR\r
+    hx3695_write_reg(0x70, phase6_ldr2_cur);   //ps8--ps1  led_drv2_cur\r
+    hx3695_write_reg(0X46, (phase6_pd_sel<<4 | 0x00));\r
+    hx3695_write_reg(0X47, phase6_als_offset_idac);\r
+    hx3695_write_reg(0X48, phase6_led_offset_idac);\r
     hx3695_write_reg(0X49,  phase6_ad_inr_ctrl<<4|phase6_ad_of_idac_ctrl); \r
-               hx3695_write_reg(0X4a, phase6_led_drv1_cha_sel);\r
-               hx3695_write_reg(0X4b, phase6_led_drv2_cha_sel);\r
-               hx3695_write_reg(0X71, phase6_dsp_mov_avg_num | phase6_dsp_iir_lp_coeff<<4);\r
+    hx3695_write_reg(0X4a, phase6_led_drv1_cha_sel);\r
+    hx3695_write_reg(0X4b, phase6_led_drv2_cha_sel);\r
+    hx3695_write_reg(0X71, phase6_dsp_mov_avg_num | phase6_dsp_iir_lp_coeff<<4);\r
                \r
        \r
-         hx3695_write_reg(0X43, phase7_mux_sel);  \r
-               hx3695_write_reg(0X44, phase7_tia_cap<<4|phase7_tia_res); \r
-               hx3695_write_reg(0X45, phase7_ldr1_cur);    //LED_DRV1_CUR\r
-               hx3695_write_reg(0x70, phase7_ldr2_cur);   //ps8--ps1  led_drv2_cur\r
-               hx3695_write_reg(0X46, (phase7_pd_sel<<4 | 0x00));\r
-               hx3695_write_reg(0X47, phase7_als_offset_idac);\r
-               hx3695_write_reg(0X48, phase7_led_offset_idac);\r
-//             hx3695_write_reg(0X48, phase7_led_offset_idac);\r
+    hx3695_write_reg(0X43, phase7_mux_sel);  \r
+    hx3695_write_reg(0X44, phase7_tia_cap<<4|phase7_tia_res); \r
+    hx3695_write_reg(0X45, phase7_ldr1_cur);    //LED_DRV1_CUR\r
+    hx3695_write_reg(0x70, phase7_ldr2_cur);   //ps8--ps1  led_drv2_cur\r
+    hx3695_write_reg(0X46, (phase7_pd_sel<<4 | 0x00));\r
+    hx3695_write_reg(0X47, phase7_als_offset_idac);\r
+    hx3695_write_reg(0X48, phase7_led_offset_idac);\r
     hx3695_write_reg(0X49,  phase7_ad_inr_ctrl<<4|phase7_ad_of_idac_ctrl); \r
-               hx3695_write_reg(0X4a, phase7_led_drv1_cha_sel);\r
-               hx3695_write_reg(0X4b, phase7_led_drv2_cha_sel);\r
-               hx3695_write_reg(0X71, phase7_dsp_mov_avg_num | phase7_dsp_iir_lp_coeff<<4);\r
+    hx3695_write_reg(0X4a, phase7_led_drv1_cha_sel);\r
+    hx3695_write_reg(0X4b, phase7_led_drv2_cha_sel);\r
+    hx3695_write_reg(0X71, phase7_dsp_mov_avg_num | phase7_dsp_iir_lp_coeff<<4);\r
                \r
        \r
-         hx3695_write_reg(0X43, phase8_mux_sel);  \r
-               hx3695_write_reg(0X44, phase8_tia_cap<<4|phase8_tia_res); \r
-               hx3695_write_reg(0X45, phase8_ldr1_cur);    //LED_DRV1_CUR\r
-               hx3695_write_reg(0x70, phase8_ldr2_cur);   //ps8--ps1  led_drv2_cur\r
-               hx3695_write_reg(0X46, (phase8_pd_sel<<4 | 0x00));\r
-               hx3695_write_reg(0X47, phase8_als_offset_idac);\r
-               hx3695_write_reg(0X48, phase8_led_offset_idac);\r
-//             hx3695_write_reg(0X48, phas8_led_offset_idac);\r
+    hx3695_write_reg(0X43, phase8_mux_sel);  \r
+    hx3695_write_reg(0X44, phase8_tia_cap<<4|phase8_tia_res); \r
+    hx3695_write_reg(0X45, phase8_ldr1_cur);    //LED_DRV1_CUR\r
+    hx3695_write_reg(0x70, phase8_ldr2_cur);   //ps8--ps1  led_drv2_cur\r
+    hx3695_write_reg(0X46, (phase8_pd_sel<<4 | 0x00));\r
+    hx3695_write_reg(0X47, phase8_als_offset_idac);\r
+    hx3695_write_reg(0X48, phase8_led_offset_idac);\r
     hx3695_write_reg(0X49,  phase8_ad_inr_ctrl<<4|phase8_ad_of_idac_ctrl); \r
-               hx3695_write_reg(0X4a, phase8_led_drv1_cha_sel);\r
-               hx3695_write_reg(0X4b, phase8_led_drv2_cha_sel);\r
-               hx3695_write_reg(0X71, phase8_dsp_mov_avg_num | phase8_dsp_iir_lp_coeff<<4);\r
+    hx3695_write_reg(0X4a, phase8_led_drv1_cha_sel);\r
+    hx3695_write_reg(0X4b, phase8_led_drv2_cha_sel);\r
+    hx3695_write_reg(0X71, phase8_dsp_mov_avg_num | phase8_dsp_iir_lp_coeff<<4);\r
                \r
 \r
 // analog circuit cfg \r
-    hx3695_write_reg(0X60, 0x14);      //\r
-               hx3695_write_reg(0X61, 0xf0);   \r
-               hx3695_write_reg(0X62, 0x22); \r
-               hx3695_write_reg(0X63, 0x15); \r
-                                                                                                                                                                                                                               \r
-               hx3695_write_reg(0X64, 0x08);   \r
-               hx3695_write_reg(0X65, 0x88); //bug\r
-               \r
-               hx3695_write_reg(0X66, 0x30);   // bits<3>=adc selftest en     0x30\r
-               hx3695_write_reg(0X67, 0x23);   \r
-               hx3695_write_reg(0X68, 0x46);   \r
-               hx3695_write_reg(0X69, 0x42);   \r
-               \r
-               hx3695_write_reg(0X39, 0xff);   // ofset idac1 phase enable cfg\r
-               hx3695_write_reg(0x73, 0xff);    //led_offset_idac phase enable\r
+    hx3695_write_reg(0X60, 0x34);      //\r
+    hx3695_write_reg(0X61, 0xf0);      \r
+    hx3695_write_reg(0X62, 0x22); \r
+    hx3695_write_reg(0X63, 0x15); \r
+                                                                                                            \r
+    hx3695_write_reg(0X64, 0x08);      \r
+    hx3695_write_reg(0X65, 0x88); //bug\r
+    \r
+    hx3695_write_reg(0X66, 0x30);      // bits<3>=adc selftest en     0x30\r
+    hx3695_write_reg(0X67, 0x23);      \r
+    hx3695_write_reg(0X68, 0x46);      \r
+    hx3695_write_reg(0X69, 0x42);      \r
+    \r
+    hx3695_write_reg(0X39, 0xff);   // ofset idac1 phase enable cfg\r
+    hx3695_write_reg(0x73, 0xff);    //led_offset_idac phase enable\r
                \r
     hx3695_write_reg(0X6a, 0X0f);      \r
-               hx3695_write_reg(0X6b, 0X22);   \r
-               hx3695_write_reg(0X6c, 0X00);   \r
-               hx3695_write_reg(0X6d, 0X37);   \r
-               hx3695_write_reg(0X6e, 0X82);   \r
-               hx3695_write_reg(0X6f, 0X08);\r
+    hx3695_write_reg(0X6b, 0X22);      \r
+    hx3695_write_reg(0X6c, 0X00);      \r
+    hx3695_write_reg(0X6d, 0X37);      \r
+    hx3695_write_reg(0X6e, 0X82);      \r
+    hx3695_write_reg(0X6f, 0X00);\r
 /////////FIFO and adc conversion ready config////////\r
 /////////FIFO and adc conversion ready config////////\r
-#if defined(PPG_INT_MODE)\r
-               hx3695_write_reg(0X1b, 0x92);// bits<3:0> fifo data sel, 0000 = p1;0001= p2;0010=p3;\\r
-                                        0011=p4;0100=p5;0101=p6;0110=p7;\\r
-                                        bits<7> fifo enble\r
-                hx3695_write_reg(0X33, 0x83);   // int width                                                                                                                                           \r
-     hx3695_write_reg(0X21, 0x00);   // fifo int sel,00=FIFO INT config clear\r
-                hx3695_write_reg(0X38, 0x01);   // int sel,00=close almost full int,04=enable almost full int\r
-#elif defined(INT_MODE)               //FIFO_ALL_MOST_FULL)\r
-                hx3695_write_reg(0X1b, 0x92);// bits<3:0> fifo data sel, 0000 = p1;0001= p2;0010=p3;\\r
-                                        0011=p4;0100=p5;0101=p6;0110=p7;\\r
-                                        bits<7> fifo enble\r
-                hx3695_write_reg(0X1c, (fifo_watermark&0xff));   //fifo_watermark\r
-                hx3695_write_reg(0X1d, fifo_watermark<<8);       //bit<0>=fifo_watermark[8]  \r
-                hx3695_write_reg(0X33, 0x83);   // int width   \r
-                hx3695_write_reg(0X21, 0x00);   // fifo int sel,00=FIFO INT config clear\r
-     hx3695_write_reg(0X38, 0x04);   // int sel,00=close almost full int,04=enable almost full int\r
+#if  defined(INT_MODE)             //(FIFO_ALL_MOST_FULL)\r
+        hx3695_write_reg(0X1b, 0x90);// bits<3:0> fifo data sel, 0000 = p1;0001= p2;0010=p3;0011=p4;0100=p5;0101=p6;0110=p7;bits<7> fifo enble\r
+        hx3695_write_reg(0X1c, (fifo_watermark&0xff));   //fifo_watermark\r
+        hx3695_write_reg(0X1d, fifo_watermark<<8);       //bit<0>=fifo_watermark[8]  \r
+        hx3695_write_reg(0X33, 0x83);   // int width                                                                                                                                           \r
+        hx3695_write_reg(0X38, 0x04);   // int sel,00=close almost full int,04=enable almost full int\r
 \r
 #else\r
-                hx3695_write_reg(0X1b, 0x92);    // bits<3:0> fifo data sel, 0000 = p1;0001= p2;0010=p3;\r
-                                        // 0011=p4;0100=p5;0101=p6;0110=p7;\r
-                                        // bits<7> fifo enble                                                                          \r
-     hx3695_write_reg(0X38, 0x01);   // int sel,00=close almost full int,04=enable almost full int\r
-     \r
+        hx3695_write_reg(0X1b, 0x90);// bits<3:0> fifo data sel, 0000 = p1;0001= p2;0010=p3;0011=p4;0100=p5;0101=p6;0110=p7;bits<7> fifo enble \r
+        hx3695_write_reg(0X36, 0x00);                    //intrupt                                                                                                                                     \r
+                                                                \r
+        hx3695_write_reg(0X38, 0x00);   // int sel,00=close almost full int,01= prf int  04=enable almost full int\r
+\r
 #endif\r
 \r
                \r
-    hx3695_write_reg(0X26,(phase1_enable<<3)|(phase1_adc_osr)|(phase2_enable<<7)|(phase2_adc_osr<<4) ); \r
-    hx3695_write_reg(0X27,(phase3_enable<<3)|(phase3_adc_osr)|(phase4_enable<<7)|(phase4_adc_osr<<4) );  \r
-    hx3695_write_reg(0X28,(phase5_enable<<3)|(phase5_adc_osr)|(phase6_enable<<7)|(phase6_adc_osr<<4) );\r
-    hx3695_write_reg(0X29,(phase7_enable<<3)|(phase7_adc_osr)|(phase8_enable<<7)|(phase8_adc_osr<<4) );                \r
+        hx3695_write_reg(0X26,(phase1_enable<<3)|(phase1_adc_osr)|(phase2_enable<<7)|(phase2_adc_osr<<4) ); \r
+        hx3695_write_reg(0X27,(phase3_enable<<3)|(phase3_adc_osr)|(phase4_enable<<7)|(phase4_adc_osr<<4) );  \r
+        hx3695_write_reg(0X28,(phase5_enable<<3)|(phase5_adc_osr)|(phase6_enable<<7)|(phase6_adc_osr<<4) );\r
+        hx3695_write_reg(0X29,(phase7_enable<<3)|(phase7_adc_osr)|(phase8_enable<<7)|(phase8_adc_osr<<4) );            \r
 \r
 //    hx3695_write_reg(0X5c, 0x02);//soft reset\r
-    hx3695_delay_ms(5);  \r
-    hx3695_write_reg(0X5c, 0x00);//release\r
+        hx3695_delay_ms(5);  \r
+        hx3695_write_reg(0X5c, 0x00);//release\r
 \r
     return ;\r
 }\r
-\r
-void hx3695_factory_ft_leak_light_test_config(void)//漏光测试配置\r
+void hx3695_LDR0_led_control(uint8_t phase2_led_en,uint8_t phase2_ldr1_cur)\r
 {\r
-    uint16_t sample_rate = 25;                  /*config the data rate of chip alps2_fm ,uint is Hz*/\r
-    uint32_t prf_clk_num = 32000/sample_rate;   /*period in clk num, num = Fclk/fs */\r
-         \r
-\r
-    uint8_t adc_rst_post_num= 0;       /* 00=16,01=32,10=64,11=128*/      \r
-         uint8_t samp_delay_leden_num = 0; /* 00=8,01=16,10=32,11=64*/ \r
-    uint8_t samp_copy_avg = 0;        /* 0=1, 1=2, 2=4 ,3=8, 4=16*/\r
-    uint8_t data_avg_num = 0;         /* 0 = 1 ; 1 = 2; 2 =4 ; 3 =8 ; 4 =16 ;*/\r
-         uint8_t phase7_8_internal = 0;   //0x18;    /* phase7 and phase8 prf internal cfg */\r
-       \r
-//       uint16_t  thred_value = 32500;\r
-       \r
-    uint8_t phase1_enable = 1;     /*phase1_enable  , 1 mean enable ; 0 mean disable */ \r
-    uint8_t phase2_enable = 1;     /*phase2_enable  , 1 mean enable ; 0 mean disable */ \r
-    uint8_t phase3_enable = 1;     /*phase3_enable  , 1 mean enable ; 0 mean disable */ \r
-    uint8_t phase4_enable = 1;     /*phase4_enable  , 1 mean enable ; 0 mean disable */\r
-    uint8_t phase5_enable = 0;     /*phase5_enable  , 1 mean enable ; 0 mean disable */ \r
-    uint8_t phase6_enable = 0;     /*phase6_enable  , 1 mean enable ; 0 mean disable */ \r
-    uint8_t phase7_enable = 0;     /*phase7_enable  , 1 mean enable ; 0 mean disable */        \r
-         uint8_t phase8_enable = 0;     /*phase8_enable  , 1 mean enable ; 0 mean disable */ \r
-\r
-    uint8_t phase1_adc_osr = 3;    /* 0 = 128 ; 1 = 256 ; 2 = 512 ; 3 = 1024 ; 4 = 2048*/\r
-    uint8_t phase2_adc_osr = 3;    /* 0 = 128 ; 1 = 256 ; 2 = 512 ; 3 = 1024 ; 4 = 2048*/\r
-    uint8_t phase3_adc_osr = 3;    /* 0 = 128 ; 1 = 256 ; 2 = 512 ; 3 = 1024 ; 4 = 2048*/\r
-    uint8_t phase4_adc_osr = 3;    /* 0 = 128 ; 1 = 256 ; 2 = 512 ; 3 = 1024 ; 4 = 2048*/\r
-               uint8_t phase5_adc_osr = 3;    /* 0 = 128 ; 1 = 256 ; 2 = 512 ; 3 = 1024 ; 4 = 2048*/\r
-         uint8_t phase6_adc_osr = 3;    /* 0 = 128 ; 1 = 256 ; 2 = 512 ; 3 = 1024 ; 4 = 2048*/\r
-               uint8_t phase7_adc_osr = 3;    /* 0 = 128 ; 1 = 256 ; 2 = 512 ; 3 = 1024 ; 4 = 2048*/\r
-               uint8_t phase8_adc_osr = 3;    /* 0 = 128 ; 1 = 256 ; 2 = 512 ; 3 = 1024 ; 4 = 2048*/\r
-                        \r
-         uint8_t phase1_mux_sel = 0;    /* sel phase1*/\r
-               uint8_t phase2_mux_sel = 1;    /* sel phase2*/\r
-               uint8_t phase3_mux_sel = 2;    /* sel phase3*/\r
-               uint8_t phase4_mux_sel = 3;    /* sel phase4*/\r
-               uint8_t phase5_mux_sel = 4;    /* sel phase5*/\r
-               uint8_t phase6_mux_sel = 5;    /* sel phase6*/\r
-               uint8_t phase7_mux_sel = 6;    /* sel phase7*/\r
-               uint8_t phase8_mux_sel = 7;    /* sel phase8*/\r
-       \r
-\r
-         uint8_t phase1_inner_avg = 0;   /* phase1 adc avg num 0=1, 1=2, 2=4, 3=8 , 4=16*/\r
-    uint8_t phase1_tia_res = 5;     /* 0= 10K; 1= 20k; 2= 50k; 3= 100k; 4= 150k; 5= 200k; 6= 500k; 7= 1M*/\r
-               uint8_t phase1_tia_cap = 4;     /* 0= ; 1= ; 2= ; 3= ; 4= ; 5= ; 6= ; 7= */\r
-    uint8_t phase1_led_drv1_cha_sel = 0;     /* 1 = ldr1  NG; 2 = ldr2   GR; 4 = ldr3  IR; 8 = ldr4 RED; */\r
-    uint8_t phase1_led_drv2_cha_sel = 0;    /*ldr5:0x20  ldr6: 0x40 red    ldr8 0x80  ir      */\r
-               uint8_t phase1_pd_sel = 0x0c;          /* 1 = pd1; 2 = pd2; 4 = pd3*/\r
-    uint8_t phase1_als_offset_idac = 0; /* 0~255 = 0 ~ 128ua , step = 0.5ua */\r
-               uint8_t phase1_led_offset_idac = 0; /* 0~255 = 0 ~ 64ua , step = 0.25ua */\r
-    uint8_t phase1_ldr1_cur = 0;     /* 0~255 = 0 ~ 200ma, step = 0.8ma */\r
-               uint8_t phase1_ldr2_cur = 0;\r
-//             uint8_t phase1_of_idac1_cur = 0;\r
-//    uint8_t phase1_of_idac2_cur = 0;\r
-    uint8_t phase1_ad_inr_ctrl = 3;\r
-    uint8_t phase1_ad_of_idac_ctrl = 0;\r
-//    uint8_t afe_offset  =  0;\r
-    uint8_t phase1_led_en = 1;      /* phase1 led enable*/\r
-               \r
-               uint8_t phase1_dsp_mov_avg_num = 0; /* 0=bypass ; 1=2 ; 2=4 ; 3=8 */\r
-    uint8_t phase1_dsp_iir_lp_coeff = 0; /* 0=bypass ; 1=1/2 ; 2=1/4 ; 3=1/8 ,...,7=1/128 */\r
-\r
-\r
-\r
-         uint8_t phase2_inner_avg = 0;   /* phase1 adc avg num 0=1, 1=2, 2=4, 3=8 , 4=16*/\r
-    uint8_t phase2_tia_res = 5;     /* 0= 10K; 1= 20k; 2= 50k; 3= 100k; 4= 150k; 5= 200k; 6= 500k; 7= 1M*/\r
-               uint8_t phase2_tia_cap = 4;     /* 0= ; 1= ; 2= ; 3= ; 4= ; 5= ; 6= ; 7= */\r
-    uint8_t phase2_led_drv1_cha_sel = GREEN_LED_SLE;     /* 1 = ldr1; 2 = ldr2; 4 = ldr3; 8 = ldr4 ; */\r
+    uint8_t phase2_mux_sel = 1;    /* sel phase2*/\r
+    uint8_t phase2_inner_avg = 0;   /* phase1 adc avg num 0=1, 1=2, 2=4, 3=8 , 4=16*/\r
+    uint8_t phase2_tia_res = PS_SINGLE_TIA;     /* 0= 10K; 1= 20k; 2= 50k; 3= 100k; 4= 150k; 5= 200k; 6= 500k; 7= 1M*/\r
+    uint8_t phase2_tia_cap = 4;     /* 0= ; 1= ; 2= ; 3= ; 4= ; 5= ; 6= ; 7= */\r
+    uint8_t phase2_led_drv1_cha_sel = LDR0_FT_SEL;     /* 1 = ldr1; 2 = ldr2; 4 = ldr3; 8 = ldr4 ; */\r
     uint8_t phase2_led_drv2_cha_sel = 0x00;\r
-               uint8_t phase2_pd_sel = 0x0c;      /* 1 = pd1; 2 = pd2; 4 = pd3*/\r
+    uint8_t phase2_pd_sel = LDR0_PD_FT_SEL;      /* 1 = pd1; 2 = pd2; 4 = pd3*/\r
     uint8_t phase2_als_offset_idac = 0; /* 0~255 = 0 ~ 128ua , step = 0.5ua */\r
-               uint8_t phase2_led_offset_idac = 0; /* 0~255 = 0 ~ 64ua , step = 0.25ua */\r
-    uint8_t phase2_ldr1_cur = 64;     /* 0~255 = 0 ~ 200ma, step = 0.8ma */\r
-               uint8_t phase2_ldr2_cur = 0;\r
-//             uint8_t phase2_of_idac1_cur = 0;\r
-//    uint8_t phase2_of_idac2_cur = 0;\r
+    uint8_t phase2_led_offset_idac = 0; /* 0~255 = 0 ~ 64ua , step = 0.25ua */\r
+//    uint8_t phase2_ldr1_cur = 0;     /* 0~255 = 0 ~ 200ma, step = 0.8ma */\r
+    uint8_t phase2_ldr2_cur = 0;\r
     uint8_t phase2_ad_inr_ctrl = 3;\r
     uint8_t phase2_ad_of_idac_ctrl = 0;\r
-//    uint8_t phase2_afe_offset  =  0;\r
-    uint8_t phase2_led_en = 1;      /* phase1 led enable*/\r
-               \r
-               uint8_t phase2_dsp_mov_avg_num = 0; /* 0=bypass ; 1=2 ; 2=4 ; 3=8 */\r
+//    uint8_t phase2_led_en = 0;      /* phase1 led enable*/           \r
+    uint8_t phase2_dsp_mov_avg_num = 0; /* 0=bypass ; 1=2 ; 2=4 ; 3=8 */\r
     uint8_t phase2_dsp_iir_lp_coeff = 0; /* 0=bypass ; 1=1/2 ; 2=1/4 ; 3=1/8 ,...,7=1/128 */\r
+    \r
+    \r
+    hx3695_write_reg(0X43, phase2_mux_sel);  \r
+    hx3695_write_reg(0X44, phase2_tia_cap<<4|phase2_tia_res); \r
+    hx3695_write_reg(0X45, phase2_ldr1_cur);    //LED_DRV1_CUR\r
+    hx3695_write_reg(0x70, phase2_ldr2_cur);   //ps8--ps1  led_drv2_cur\r
+    hx3695_write_reg(0X46, (phase2_pd_sel<<4 | 0x00));\r
+    hx3695_write_reg(0X47, phase2_als_offset_idac);\r
+    hx3695_write_reg(0X48, phase2_led_offset_idac);\r
+    hx3695_write_reg(0X49,  phase2_ad_inr_ctrl<<4|phase2_ad_of_idac_ctrl); \r
+    hx3695_write_reg(0X4a, phase2_led_drv1_cha_sel);\r
+    hx3695_write_reg(0X4b, phase2_led_drv2_cha_sel);\r
+    hx3695_write_reg(0X71, phase2_dsp_mov_avg_num | phase2_dsp_iir_lp_coeff<<4);\r
+    hx3695_write_reg(0X30, phase2_led_en<<1);\r
+    hx3695_write_reg(0X72, phase2_led_en<<1);\r
+}\r
 \r
-               \r
+void hx3695_LDR1_led_control(uint8_t phase3_led_en,uint8_t phase3_ldr1_cur)\r
+{\r
+    uint8_t phase3_mux_sel = 2;    /* sel phase3*/\r
     uint8_t phase3_inner_avg = 0;   /* phase1 adc avg num 0=1, 1=2, 2=4, 3=8 , 4=16*/\r
-    uint8_t phase3_tia_res = 5;     /* 0= 10K; 1= 20k; 2= 50k; 3= 100k; 4= 150k; 5= 200k; 6= 500k; 7= 1M*/\r
-               uint8_t phase3_tia_cap = 4;     /* 0= ; 1= ; 2= ; 3= ; 4= ; 5= ; 6= ; 7= */\r
-    uint8_t phase3_led_drv1_cha_sel = RED_LED_SLE;     /* 1 = ldr1; 2 = ldr2; 4 = ldr3; 8 = ldr4 ; */\r
+    uint8_t phase3_tia_res = PS_SINGLE_TIA;     /* 0= 10K; 1= 20k; 2= 50k; 3= 100k; 4= 150k; 5= 200k; 6= 500k; 7= 1M*/\r
+    uint8_t phase3_tia_cap = 4;     /* 0= ; 1= ; 2= ; 3= ; 4= ; 5= ; 6= ; 7= */\r
+    uint8_t phase3_led_drv1_cha_sel = LDR1_FT_SEL;     /* 1 = ldr1; 2 = ldr2; 4 = ldr3; 8 = ldr4 ; */\r
     uint8_t phase3_led_drv2_cha_sel = 0;\r
-               uint8_t phase3_pd_sel = 0x0c;      /* 1 = pd1; 2 = pd2; 4 = pd3*/\r
+    uint8_t phase3_pd_sel = LDR1_PD_FT_SEL;      /* 1 = pd1; 2 = pd2; 4 = pd3*/\r
     uint8_t phase3_als_offset_idac = 0; /* 0~255 = 0 ~ 128ua , step = 0.5ua */\r
-               uint8_t phase3_led_offset_idac = 0; /* 0~255 = 0 ~ 64ua , step = 0.25ua */\r
-    uint8_t phase3_ldr1_cur = 64;     /* 0~255 = 0 ~ 200ma, step = 0.8ma */\r
-               uint8_t phase3_ldr2_cur = 0;\r
-//             uint8_t phase3_of_idac1_cur = 0;\r
-//    uint8_t phase3_of_idac2_cur = 0;\r
+    uint8_t phase3_led_offset_idac = 0; /* 0~255 = 0 ~ 64ua , step = 0.25ua */\r
+//    uint8_t phase3_ldr1_cur = 0;     /* 0~255 = 0 ~ 200ma, step = 0.8ma */\r
+    uint8_t phase3_ldr2_cur = 0;\r
     uint8_t phase3_ad_inr_ctrl = 3;\r
-    uint8_t phase3_ad_of_idac_ctrl = 0;\r
-//    uint8_t phase3_afe_offset  =  0;\r
-    uint8_t phase3_led_en = 1;      /* phase1 led enable*/\r
-               \r
-               uint8_t phase3_dsp_mov_avg_num = 0; /* 0=bypass ; 1=2 ; 2=4 ; 3=8 */\r
+    uint8_t phase3_ad_of_idac_ctrl = 0;        \r
+    uint8_t phase3_dsp_mov_avg_num = 0; /* 0=bypass ; 1=2 ; 2=4 ; 3=8 */\r
     uint8_t phase3_dsp_iir_lp_coeff = 0; /* 0=bypass ; 1=1/2 ; 2=1/4 ; 3=1/8 ,...,7=1/128 */\r
+    hx3695_write_reg(0X43, phase3_mux_sel);  \r
+    hx3695_write_reg(0X44, phase3_tia_cap<<4|phase3_tia_res); \r
+    hx3695_write_reg(0X45, phase3_ldr1_cur);    //LED_DRV1_CUR\r
+    hx3695_write_reg(0x70, phase3_ldr2_cur);   //ps8--ps1  led_drv2_cur\r
+    hx3695_write_reg(0X46, (phase3_pd_sel<<4 | 0x00));\r
+    hx3695_write_reg(0X47, phase3_als_offset_idac);\r
+    hx3695_write_reg(0X48, phase3_led_offset_idac);\r
+    hx3695_write_reg(0X49,  phase3_ad_inr_ctrl<<4|phase3_ad_of_idac_ctrl); \r
+    hx3695_write_reg(0X4a, phase3_led_drv1_cha_sel);\r
+    hx3695_write_reg(0X4b, phase3_led_drv2_cha_sel);\r
+    hx3695_write_reg(0X71, phase3_dsp_mov_avg_num | phase3_dsp_iir_lp_coeff<<4);\r
+    hx3695_write_reg(0X30, phase3_led_en<<2);\r
+    hx3695_write_reg(0X72, phase3_led_en<<2);\r
+}\r
 \r
-               \r
+void hx3695_LDR2_led_control(uint8_t phase4_led_en ,uint8_t phase4_ldr1_cur)\r
+{\r
+    uint8_t phase4_mux_sel = 3;    /* sel phase4*/\r
     uint8_t phase4_inner_avg = 0;   /* phase1 adc avg num 0=1, 1=2, 2=4, 3=8 , 4=16*/\r
-    uint8_t phase4_tia_res = 5;     /* 0= 10K; 1= 20k; 2= 50k; 3= 100k; 4= 150k; 5= 200k; 6= 500k; 7= 1M*/\r
-               uint8_t phase4_tia_cap = 4;     /* 0= ; 1= ; 2= ; 3= ; 4= ; 5= ; 6= ; 7= */\r
-    uint8_t phase4_led_drv1_cha_sel = IR_LED_SLE;     /* 1 = ldr1; 2 = ldr2; 4 = ldr3; 8 = ldr4 ; */\r
+    uint8_t phase4_tia_res = PS_SINGLE_TIA;     /* 0= 10K; 1= 20k; 2= 50k; 3= 100k; 4= 150k; 5= 200k; 6= 500k; 7= 1M*/\r
+    uint8_t phase4_tia_cap = 4;     /* 0= ; 1= ; 2= ; 3= ; 4= ; 5= ; 6= ; 7= */\r
+    uint8_t phase4_led_drv1_cha_sel = LDR2_FT_SEL;     /* 1 = ldr1; 2 = ldr2; 4 = ldr3; 8 = ldr4 ; */\r
     uint8_t phase4_led_drv2_cha_sel = 0;\r
-               uint8_t phase4_pd_sel = 0x0c;      /* 1 = pd1; 2 = pd2; 4 = pd3*/\r
+    uint8_t phase4_pd_sel = LDR2_PD_FT_SEL;      /* 1 = pd1; 2 = pd2; 4 = pd3*/\r
     uint8_t phase4_als_offset_idac = 0; /* 0~255 = 0 ~ 128ua , step = 0.5ua */\r
-               uint8_t phase4_led_offset_idac = 0; /* 0~255 = 0 ~ 64ua , step = 0.25ua */\r
-    uint8_t phase4_ldr1_cur = 64;     /* 0~255 = 0 ~ 200ma, step = 0.8ma */\r
-               uint8_t phase4_ldr2_cur = 0;\r
-//             uint8_t phase4_of_idac1_cur = 0;\r
-//    uint8_t phase4_of_idac2_cur = 0;\r
+    uint8_t phase4_led_offset_idac = 0; /* 0~255 = 0 ~ 64ua , step = 0.25ua */\r
+//    uint8_t phase4_ldr1_cur = 0;     /* 0~255 = 0 ~ 200ma, step = 0.8ma */\r
+    uint8_t phase4_ldr2_cur = 0;\r
     uint8_t phase4_ad_inr_ctrl = 3;\r
     uint8_t phase4_ad_of_idac_ctrl = 0;\r
-//    uint8_t phase4_afe_offset  =  0;\r
-    uint8_t phase4_led_en = 1;      /* phase1 led enable*/\r
-               \r
-               uint8_t phase4_dsp_mov_avg_num = 0; /* 0=bypass ; 1=2 ; 2=4 ; 3=8 */\r
+//    uint8_t phase4_led_en = 0;      /* phase1 led enable*/           \r
+    uint8_t phase4_dsp_mov_avg_num = 0; /* 0=bypass ; 1=2 ; 2=4 ; 3=8 */\r
     uint8_t phase4_dsp_iir_lp_coeff = 0; /* 0=bypass ; 1=1/2 ; 2=1/4 ; 3=1/8 ,...,7=1/128 */\r
+    hx3695_write_reg(0X43, phase4_mux_sel);  \r
+    hx3695_write_reg(0X44, phase4_tia_cap<<4|phase4_tia_res); \r
+    hx3695_write_reg(0X45, phase4_ldr1_cur);    //LED_DRV1_CUR\r
+    hx3695_write_reg(0x70, phase4_ldr2_cur);   //ps8--ps1  led_drv2_cur\r
+    hx3695_write_reg(0X46, (phase4_pd_sel<<4 | 0x00));\r
+    hx3695_write_reg(0X47, phase4_als_offset_idac);\r
+    hx3695_write_reg(0X48, phase4_led_offset_idac);\r
+    hx3695_write_reg(0X49,  phase4_ad_inr_ctrl<<4|phase4_ad_of_idac_ctrl); \r
+    hx3695_write_reg(0X4a, phase4_led_drv1_cha_sel);\r
+    hx3695_write_reg(0X4b, phase4_led_drv2_cha_sel);\r
+    hx3695_write_reg(0X71, phase4_dsp_mov_avg_num | phase4_dsp_iir_lp_coeff<<4);\r
+    hx3695_write_reg(0X30, phase4_led_en<<3);\r
+    hx3695_write_reg(0X72, phase4_led_en<<3);\r
+}\r
 \r
+void hx3695_LDR3_led_control(uint8_t phase5_led_en,uint8_t phase5_ldr1_cur)\r
+{\r
+    uint8_t phase5_mux_sel = 4;    /* sel phase5*/\r
     uint8_t phase5_inner_avg = 0;   /* phase1 adc avg num 0=1, 1=2, 2=4, 3=8 , 4=16*/\r
-    uint8_t phase5_tia_res = 0;     /* 0= 10K; 1= 20k; 2= 50k; 3= 100k; 4= 150k; 5= 200k; 6= 500k; 7= 1M*/\r
-               uint8_t phase5_tia_cap = 4;     /* 0= ; 1= ; 2= ; 3= ; 4= ; 5= ; 6= ; 7= */\r
-    uint8_t phase5_led_drv1_cha_sel = 0;     /* 1 = ldr1; 2 = ldr2; 4 = ldr3; 8 = ldr4 ; */\r
+    uint8_t phase5_tia_res = PS_SINGLE_TIA;     /* 0= 10K; 1= 20k; 2= 50k; 3= 100k; 4= 150k; 5= 200k; 6= 500k; 7= 1M*/\r
+    uint8_t phase5_tia_cap = 4;     /* 0= ; 1= ; 2= ; 3= ; 4= ; 5= ; 6= ; 7= */\r
+    uint8_t phase5_led_drv1_cha_sel = LDR3_FT_SEL;     /* 1 = ldr1; 2 = ldr2; 4 = ldr3; 8 = ldr4 ; */\r
     uint8_t phase5_led_drv2_cha_sel = 0;\r
-               uint8_t phase5_pd_sel = 4;      /* 1 = pd1; 2 = pd2; */\r
+    uint8_t phase5_pd_sel = LDR3_PD_FT_SEL;      /* 1 = pd1; 2 = pd2; */\r
     uint8_t phase5_als_offset_idac = 0; /* 0~255 = 0 ~ 128ua , step = 0.5ua */\r
-               uint8_t phase5_led_offset_idac = 0; /* 0~255 = 0 ~ 64ua , step = 0.25ua */\r
-    uint8_t phase5_ldr1_cur = 0;     /* 0~255 = 0 ~ 200ma, step = 0.8ma */\r
-               uint8_t phase5_ldr2_cur = 0;\r
-//             uint8_t phase5_of_idac1_cur = 0;\r
-//    uint8_t phase5_of_idac2_cur = 0;\r
+    uint8_t phase5_led_offset_idac = 0; /* 0~255 = 0 ~ 64ua , step = 0.25ua */\r
+//    uint8_t phase5_ldr1_cur = 0;     /* 0~255 = 0 ~ 200ma, step = 0.8ma */\r
+    uint8_t phase5_ldr2_cur = 0;\r
     uint8_t phase5_ad_inr_ctrl = 3;\r
     uint8_t phase5_ad_of_idac_ctrl = 0;\r
-//    uint8_t phase5_afe_offset  =  0;\r
-    uint8_t phase5_led_en = 0;      /* phase1 led enable*/\r
-               \r
-               uint8_t phase5_dsp_mov_avg_num = 0; /* 0=bypass ; 1=2 ; 2=4 ; 3=8 */\r
+      \r
+    uint8_t phase5_dsp_mov_avg_num = 0; /* 0=bypass ; 1=2 ; 2=4 ; 3=8 */\r
     uint8_t phase5_dsp_iir_lp_coeff = 0; /* 0=bypass ; 1=1/2 ; 2=1/4 ; 3=1/8 ,...,7=1/128 */\r
-\r
+    \r
+    hx3695_write_reg(0X43, phase5_mux_sel);  \r
+    hx3695_write_reg(0X44, phase5_tia_cap<<4|phase5_tia_res); \r
+    hx3695_write_reg(0X45, phase5_ldr1_cur);    //LED_DRV1_CUR\r
+    hx3695_write_reg(0x70, phase5_ldr2_cur);   //ps8--ps1  led_drv2_cur\r
+    hx3695_write_reg(0X46, (phase5_pd_sel<<4 | 0x00));\r
+    hx3695_write_reg(0X47, phase5_als_offset_idac);\r
+    hx3695_write_reg(0X48, phase5_led_offset_idac);\r
+    hx3695_write_reg(0X49,  phase5_ad_inr_ctrl<<4|phase5_ad_of_idac_ctrl); \r
+    hx3695_write_reg(0X4a, phase5_led_drv1_cha_sel);\r
+    hx3695_write_reg(0X4b, phase5_led_drv2_cha_sel);\r
+    hx3695_write_reg(0X71, phase5_dsp_mov_avg_num | phase5_dsp_iir_lp_coeff<<4);\r
+    hx3695_write_reg(0X30, phase5_led_en<<4);\r
+    hx3695_write_reg(0X72, phase5_led_en<<4); \r
+}\r
+void hx3695_LDR4_led_control(uint8_t phase6_led_en,uint8_t phase6_ldr1_cur)\r
+{\r
+    uint8_t phase6_mux_sel = 5;    /* sel phase6*/\r
     uint8_t phase6_inner_avg = 0;   /* phase1 adc avg num 0=1, 1=2, 2=4, 3=8 , 4=16*/\r
-    uint8_t phase6_tia_res = 0;     /* 0= 10K; 1= 20k; 2= 50k; 3= 100k; 4= 150k; 5= 200k; 6= 500k; 7= 1M*/\r
-               uint8_t phase6_tia_cap = 4;     /* 0= ; 1= ; 2= ; 3= ; 4= ; 5= ; 6= ; 7= */\r
-    uint8_t phase6_led_drv1_cha_sel = 0;     /* 1 = ldr1; 2 = ldr2; 4 = ldr3; 8 = ldr4 ; */\r
+    uint8_t phase6_tia_res = PS_SINGLE_TIA;     /* 0= 10K; 1= 20k; 2= 50k; 3= 100k; 4= 150k; 5= 200k; 6= 500k; 7= 1M*/\r
+    uint8_t phase6_tia_cap = 4;     /* 0= ; 1= ; 2= ; 3= ; 4= ; 5= ; 6= ; 7= */\r
+    uint8_t phase6_led_drv1_cha_sel = LDR4_FT_SEL;     /* 1 = ldr1; 2 = ldr2; 4 = ldr3; 8 = ldr4 ; */\r
     uint8_t phase6_led_drv2_cha_sel = 0;\r
-               uint8_t phase6_pd_sel = 4;      /* 1 = pd1; 2 = pd2; */\r
+    uint8_t phase6_pd_sel = LDR4_PD_FT_SEL;      /* 1 = pd1; 2 = pd2; */\r
     uint8_t phase6_als_offset_idac = 0; /* 0~255 = 0 ~ 128ua , step = 0.5ua */\r
-               uint8_t phase6_led_offset_idac = 0; /* 0~255 = 0 ~ 64ua , step = 0.25ua */\r
-    uint8_t phase6_ldr1_cur = 0;     /* 0~255 = 0 ~ 200ma, step = 0.8ma */\r
-               uint8_t phase6_ldr2_cur = 0;\r
-//             uint8_t phase6_of_idac1_cur = 0;\r
-//    uint8_t phase6_of_idac2_cur = 0;\r
+    uint8_t phase6_led_offset_idac = 0; /* 0~255 = 0 ~ 64ua , step = 0.25ua */\r
+//    uint8_t phase6_ldr1_cur = 0;     /* 0~255 = 0 ~ 200ma, step = 0.8ma */\r
+    uint8_t phase6_ldr2_cur = 0;\r
     uint8_t phase6_ad_inr_ctrl = 3;\r
-    uint8_t phase6_ad_of_idac_ctrl = 0;\r
-//    uint8_t phase6_afe_offset  =  0;\r
-    uint8_t phase6_led_en = 0;      /* phase1 led enable*/\r
-               \r
-               uint8_t phase6_dsp_mov_avg_num = 0; /* 0=bypass ; 1=2 ; 2=4 ; 3=8 */\r
+    uint8_t phase6_ad_of_idac_ctrl = 0;        \r
+    uint8_t phase6_dsp_mov_avg_num = 0; /* 0=bypass ; 1=2 ; 2=4 ; 3=8 */\r
     uint8_t phase6_dsp_iir_lp_coeff = 0; /* 0=bypass ; 1=1/2 ; 2=1/4 ; 3=1/8 ,...,7=1/128 */\r
+    \r
+     hx3695_write_reg(0X43, phase6_mux_sel);  \r
+    hx3695_write_reg(0X44, phase6_tia_cap<<4|phase6_tia_res); \r
+    hx3695_write_reg(0X45, phase6_ldr1_cur);    //LED_DRV1_CUR\r
+    hx3695_write_reg(0x70, phase6_ldr2_cur);   //ps8--ps1  led_drv2_cur\r
+    hx3695_write_reg(0X46, (phase6_pd_sel<<4 | 0x00));\r
+    hx3695_write_reg(0X47, phase6_als_offset_idac);\r
+    hx3695_write_reg(0X48, phase6_led_offset_idac);\r
+    hx3695_write_reg(0X49,  phase6_ad_inr_ctrl<<4|phase6_ad_of_idac_ctrl); \r
+    hx3695_write_reg(0X4a, phase6_led_drv1_cha_sel);\r
+    hx3695_write_reg(0X4b, phase6_led_drv2_cha_sel);\r
+    hx3695_write_reg(0X71, phase6_dsp_mov_avg_num | phase6_dsp_iir_lp_coeff<<4);\r
+       hx3695_write_reg(0X30, phase6_led_en<<5);       \r
+       hx3695_write_reg(0X72, phase6_led_en<<5);      \r
+}\r
 \r
-    uint8_t phase7_inner_avg = 0;   /* phase1 adc avg num 0=1, 1=2, 2=4, 3=8 , 4=16*/\r
-    uint8_t phase7_tia_res = 0;     /* 0= 10K; 1= 20k; 2= 50k; 3= 100k; 4= 150k; 5= 200k; 6= 500k; 7= 1M*/\r
-               uint8_t phase7_tia_cap = 4;     /* 0= ; 1= ; 2= ; 3= ; 4= ; 5= ; 6= ; 7= */\r
-    uint8_t phase7_led_drv1_cha_sel = 0;     /* 1 = ldr1; 2 = ldr2; 4 = ldr3; 8 = ldr4 ; */\r
+void hx3695_LDR5_led_control(uint8_t phase7_led_en,uint8_t phase7_ldr1_cur)\r
+{\r
+    uint8_t phase7_mux_sel = 6;    /* sel phase7*/\r
+    uint8_t phase7_tia_res = PS_SINGLE_TIA;     /* 0= 10K; 1= 20k; 2= 50k; 3= 100k; 4= 150k; 5= 200k; 6= 500k; 7= 1M*/\r
+    uint8_t phase7_tia_cap = 4;     /* 0= ; 1= ; 2= ; 3= ; 4= ; 5= ; 6= ; 7= */\r
+    uint8_t phase7_led_drv1_cha_sel = LDR5_FT_SEL;     /* 1 = ldr1; 2 = ldr2; 4 = ldr3; 8 = ldr4 ; */\r
     uint8_t phase7_led_drv2_cha_sel = 0;\r
-               uint8_t phase7_pd_sel = 0x00;      /* 1 = pd1; 2 = pd2; */\r
+    uint8_t phase7_pd_sel = LDR5_PD_FT_SEL;      /* 1 = pd1; 2 = pd2; */\r
     uint8_t phase7_als_offset_idac = 0; /* 0~255 = 0 ~ 128ua , step = 0.5ua */\r
-               uint8_t phase7_led_offset_idac = 0; /* 0~255 = 0 ~ 64ua , step = 0.25ua */\r
-    uint8_t phase7_ldr1_cur = 0;     /* 0~255 = 0 ~ 200ma, step = 0.8ma */\r
-               uint8_t phase7_ldr2_cur = 0;\r
-//             uint8_t phase7_of_idac1_cur = 0;\r
-//    uint8_t phase7_of_idac2_cur = 0;\r
+    uint8_t phase7_led_offset_idac = 0; /* 0~255 = 0 ~ 64ua , step = 0.25ua */\r
+//    uint8_t phase7_ldr1_cur = 0;     /* 0~255 = 0 ~ 200ma, step = 0.8ma */\r
+    uint8_t phase7_ldr2_cur = 0;\r
     uint8_t phase7_ad_inr_ctrl = 3;\r
     uint8_t phase7_ad_of_idac_ctrl = 0;\r
-//    uint8_t phase7_afe_offset  =  0;\r
-    uint8_t phase7_led_en = 0;      /* phase1 led enable*/\r
-               \r
-               uint8_t phase7_dsp_mov_avg_num = 0; /* 0=bypass ; 1=2 ; 2=4 ; 3=8 */\r
+//    uint8_t phase7_led_en = 0;      /* phase7 led enable*/           \r
+    uint8_t phase7_dsp_mov_avg_num = 0; /* 0=bypass ; 1=2 ; 2=4 ; 3=8 */\r
     uint8_t phase7_dsp_iir_lp_coeff = 0; /* 0=bypass ; 1=1/2 ; 2=1/4 ; 3=1/8 ,...,7=1/128 */\r
+    \r
+    hx3695_write_reg(0X43, phase7_mux_sel);  \r
+    hx3695_write_reg(0X44, phase7_tia_cap<<4|phase7_tia_res); \r
+    hx3695_write_reg(0X45, phase7_ldr1_cur);    //LED_DRV1_CUR\r
+    hx3695_write_reg(0x70, phase7_ldr2_cur);   //ps8--ps1  led_drv2_cur\r
+    hx3695_write_reg(0X46, (phase7_pd_sel<<4 | 0x00));\r
+    hx3695_write_reg(0X47, phase7_als_offset_idac);\r
+    hx3695_write_reg(0X48, phase7_led_offset_idac);\r
+    hx3695_write_reg(0X49,  phase7_ad_inr_ctrl<<4|phase7_ad_of_idac_ctrl); \r
+    hx3695_write_reg(0X4a, phase7_led_drv1_cha_sel);\r
+    hx3695_write_reg(0X4b, phase7_led_drv2_cha_sel);\r
+    hx3695_write_reg(0X71, phase7_dsp_mov_avg_num | phase7_dsp_iir_lp_coeff<<4);\r
+    hx3695_write_reg(0X30, phase7_led_en<<6);\r
+    hx3695_write_reg(0X72, phase7_led_en<<6);\r
+}\r
+  \r
+void hx3695_factory_ft_single_check_config(void)\r
+{\r
+    uint16_t sample_rate = 25;                  /*config the data rate of chip alps2_fm ,uint is Hz*/\r
+    uint32_t prf_clk_num = 32000/sample_rate;   /*period in clk num, num = Fclk/fs */\r
 \r
-    uint8_t phase8_inner_avg = 0;   /* phase1 adc avg num 0=1, 1=2, 2=4, 3=8 , 4=16*/\r
-    uint8_t phase8_tia_res = 0;     /* 0= 10K; 1= 20k; 2= 50k; 3= 100k; 4= 150k; 5= 200k; 6= 500k; 7= 1M*/\r
-               uint8_t phase8_tia_cap = 4;     /* 0= ; 1= ; 2= ; 3= ; 4= ; 5= ; 6= ; 7= */\r
-    uint8_t phase8_led_drv1_cha_sel = 0;     /* 1 = ldr1; 2 = ldr2; 4 = ldr3; 8 = ldr4 ; */\r
-    uint8_t phase8_led_drv2_cha_sel = 0;\r
-               uint8_t phase8_pd_sel = 0x0c;      /* 1 = pd1; 2 = pd2; */\r
-    uint8_t phase8_als_offset_idac = 0; /* 0~255 = 0 ~ 128ua , step = 0.5ua */\r
-               uint8_t phase8_led_offset_idac = 0; /* 0~255 = 0 ~ 64ua , step = 0.25ua */\r
-    uint8_t phase8_ldr1_cur = 50;     /* 0~255 = 0 ~ 200ma, step = 0.8ma */\r
-               uint8_t phase8_ldr2_cur = 0;\r
-//             uint8_t phase8_of_idac1_cur = 0;\r
-//    uint8_t phase8_of_idac2_cur = 0;\r
-    uint8_t phase8_ad_inr_ctrl = 3;\r
-    uint8_t phase8_ad_of_idac_ctrl = 0;\r
-//    uint8_t phase8_afe_offset  =  0;\r
-    uint8_t phase8_led_en = 0;      /* phase1 led enable*/\r
-               \r
-               uint8_t phase8_dsp_mov_avg_num = 0; /* 0=bypass ; 1=2 ; 2=4 ; 3=8 */\r
-    uint8_t phase8_dsp_iir_lp_coeff = 0; /* 0=bypass ; 1=1/2 ; 2=1/4 ; 3=1/8 ,...,7=1/128 */\r
-\r
-    uint8_t init_wait_delay = 4 ; /* 0 = 31clk ; 1 = 64clk ; 2 = 127clk ; 3 = 255clk(d) ;\r
-                                     4 = 511clk; 5 = 1023clk; 6 = 2047; 7 = 4095clk */         \r
-                                                                                                                                                \r
-    uint8_t afe_reset = 3;        /* 0 = 15clk ; 1 = 31clk ; 2 = 63clk ; 3 = 127clk(d) ;\r
-                                     4 = 255clk; 5 = 511clk; 6 = 1024; 7 = 2047clk */\r
-                                                                                                                                                \r
-               uint8_t afe_rst_cnvt = 1;               /* 0 = 15clk ; 1 = 31clk ; 2 = 63clk ; 3 = 127clk(d)*/\r
-    \r
-    uint8_t led_en_idac_pre    = 2;    /* 0 = 8clk ; 1 = 16clk ; 2 = 32clk ; 3 = 64clk(d)*/ \r
-               \r
-               uint8_t led_en_idac     =       1;        /* 0 = 4clk ; 1 = 8clk ; 2 = 16clk ; 3 = 32clk(d)*/ \r
-                                                                                                                                                \r
-    uint8_t led_on_time = 2;      /* 0 = 32clk=8us ; 1 = 64clk=16us; 2=128clk=32us ; 3 = 256clk=64us ;\r
-                                     4 = 512clk=128us ; 5 = 1024clk=256us; 6= 2048clk=512us; 7 = 4096clk=1024us */\r
-                                                                                                                                                \r
-    hx3695_delay_ms(10);               \r
-                       \r
-    hx3695_write_reg(0X2a, (uint8_t)prf_clk_num);    // prf bit<7:0>6\r
-    hx3695_write_reg(0X2b, (uint8_t)(prf_clk_num>>8)); // prf bit<15:8>\r
-    hx3695_write_reg(0X2c, (uint8_t)(prf_clk_num>>16)); // prf bit<23:16>      \r
-                  \r
-    hx3695_write_reg(0X25, (afe_rst_cnvt<<4| led_en_idac_pre<<2|led_en_idac)); \r
-               hx3695_write_reg(0X2d, phase7_8_internal); \r
-               hx3695_write_reg(0X2e, 0x33);// gpio ctrl \r
-    hx3695_write_reg(0X2f, ((afe_reset<<4)| init_wait_delay));\r
-               hx3695_write_reg(0X30, (phase8_led_en<<7 | phase7_led_en<<6 |phase6_led_en<<5 |phase5_led_en<<4 |phase4_led_en<<3 | phase3_led_en<<2 | phase2_led_en<<1 | phase1_led_en) );\r
-    hx3695_write_reg(0X72, (phase8_led_en<<7 | phase7_led_en<<6 |phase6_led_en<<5 |phase5_led_en<<4 |phase4_led_en<<3 | phase3_led_en<<2 | phase2_led_en<<1 | phase1_led_en) );\r
-\r
-\r
-    hx3695_write_reg(0X31, (led_on_time<<4| 0x00));\r
-               hx3695_write_reg(0X33, 0x83);// 中断极性及宽度配置;\r
-               hx3695_write_reg(0X34, 0x00);// 中断特殊配置;\r
-               hx3695_write_reg(0X36, 0x00);// phase data ready 标志设置;\r
-               hx3695_write_reg(0X38, 0x00);\r
-               \r
-    hx3695_write_reg(0X3a, (phase1_inner_avg | (phase2_inner_avg<<4)));  \r
-    hx3695_write_reg(0X3b, (phase3_inner_avg | (phase4_inner_avg<<4)));  \r
-    hx3695_write_reg(0X3c, (phase5_inner_avg | (phase6_inner_avg<<4)));        \r
-    hx3695_write_reg(0X3d, (phase7_inner_avg | (phase8_inner_avg<<4)));        \r
-    hx3695_write_reg(0X3e, adc_rst_post_num<<6 | samp_delay_leden_num<<4 | samp_copy_avg); \r
-    hx3695_write_reg(0X3f, data_avg_num<<4 | data_avg_num );\r
-    hx3695_write_reg(0X40, data_avg_num<<4 | data_avg_num );\r
-               hx3695_write_reg(0X41, data_avg_num<<4 | data_avg_num );\r
-               hx3695_write_reg(0X42, data_avg_num<<4 | data_avg_num );\r
-               \r
-               hx3695_write_reg(0X43, phase1_mux_sel);  \r
-               hx3695_write_reg(0X44, phase1_tia_cap<<4|phase1_tia_res); \r
-               hx3695_write_reg(0X45, phase1_ldr1_cur);    //LED_DRV1_CUR\r
-               hx3695_write_reg(0x70, phase1_ldr2_cur);   //ps8--ps1  led_drv2_cur\r
-               hx3695_write_reg(0X46, (phase1_pd_sel<<4 | 0x00));\r
-               hx3695_write_reg(0X47, phase1_als_offset_idac);\r
-               hx3695_write_reg(0X48, phase1_led_offset_idac);\r
-    hx3695_write_reg(0X49, phase1_ad_inr_ctrl<<4|phase1_ad_of_idac_ctrl); \r
-               hx3695_write_reg(0X4a, phase1_led_drv1_cha_sel);\r
-               hx3695_write_reg(0X4b, phase1_led_drv2_cha_sel);\r
-               hx3695_write_reg(0X71, phase1_dsp_mov_avg_num | phase1_dsp_iir_lp_coeff<<4);\r
-\r
-       \r
-    hx3695_write_reg(0X43, phase2_mux_sel);  \r
-               hx3695_write_reg(0X44, phase2_tia_cap<<4|phase2_tia_res); \r
-               hx3695_write_reg(0X45, phase2_ldr1_cur);    //LED_DRV1_CUR\r
-               hx3695_write_reg(0x70, phase2_ldr2_cur);   //ps8--ps1  led_drv2_cur\r
-               hx3695_write_reg(0X46, (phase2_pd_sel<<4 | 0x00));\r
-               hx3695_write_reg(0X47, phase2_als_offset_idac);\r
-               hx3695_write_reg(0X48, phase2_led_offset_idac);\r
-//             hx3695_write_reg(0X48, phase1_led_offset_idac);\r
-    hx3695_write_reg(0X49,  phase2_ad_inr_ctrl<<4|phase2_ad_of_idac_ctrl); \r
-               hx3695_write_reg(0X4a, phase2_led_drv1_cha_sel);\r
-               hx3695_write_reg(0X4b, phase2_led_drv2_cha_sel);\r
-               hx3695_write_reg(0X71, phase2_dsp_mov_avg_num | phase2_dsp_iir_lp_coeff<<4);\r
-               \r
-//phase3 sel\r
-\r
-    hx3695_write_reg(0X43, phase3_mux_sel);  \r
-               hx3695_write_reg(0X44, phase3_tia_cap<<4|phase3_tia_res); \r
-               hx3695_write_reg(0X45, phase3_ldr1_cur);    //LED_DRV1_CUR\r
-               hx3695_write_reg(0x70, phase3_ldr2_cur);   //ps8--ps1  led_drv2_cur\r
-               hx3695_write_reg(0X46, (phase3_pd_sel<<4 | 0x00));\r
-               hx3695_write_reg(0X47, phase3_als_offset_idac);\r
-               hx3695_write_reg(0X48, phase3_led_offset_idac);\r
-//             hx3695_write_reg(0X48, phase1_led_offset_idac);\r
-    hx3695_write_reg(0X49,  phase3_ad_inr_ctrl<<4|phase3_ad_of_idac_ctrl); \r
-               hx3695_write_reg(0X4a, phase3_led_drv1_cha_sel);\r
-               hx3695_write_reg(0X4b, phase3_led_drv2_cha_sel);\r
-               hx3695_write_reg(0X71, phase3_dsp_mov_avg_num | phase3_dsp_iir_lp_coeff<<4);\r
-               \r
-//phase4 sel\r
-\r
-    hx3695_write_reg(0X43, phase4_mux_sel);  \r
-               hx3695_write_reg(0X44, phase4_tia_cap<<4|phase4_tia_res); \r
-               hx3695_write_reg(0X45, phase4_ldr1_cur);    //LED_DRV1_CUR\r
-               hx3695_write_reg(0x70, phase4_ldr2_cur);   //ps8--ps1  led_drv2_cur\r
-               hx3695_write_reg(0X46, (phase4_pd_sel<<4 | 0x00));\r
-               hx3695_write_reg(0X47, phase4_als_offset_idac);\r
-               hx3695_write_reg(0X48, phase4_led_offset_idac);\r
-//             hx3695_write_reg(0X48, phase1_led_offset_idac);\r
-    hx3695_write_reg(0X49,  phase4_ad_inr_ctrl<<4|phase4_ad_of_idac_ctrl); \r
-               hx3695_write_reg(0X4a, phase4_led_drv1_cha_sel);\r
-               hx3695_write_reg(0X4b, phase4_led_drv2_cha_sel);\r
-               hx3695_write_reg(0X71, phase4_dsp_mov_avg_num | phase4_dsp_iir_lp_coeff<<4);\r
-\r
-               hx3695_write_reg(0X43, phase5_mux_sel);  \r
-               hx3695_write_reg(0X44, phase5_tia_cap<<4|phase5_tia_res); \r
-               hx3695_write_reg(0X45, phase5_ldr1_cur);    //LED_DRV1_CUR\r
-               hx3695_write_reg(0x70, phase5_ldr2_cur);   //ps8--ps1  led_drv2_cur\r
-               hx3695_write_reg(0X46, (phase5_pd_sel<<4 | 0x00));\r
-               hx3695_write_reg(0X47, phase5_als_offset_idac);\r
-               hx3695_write_reg(0X48, phase5_led_offset_idac);\r
-//             hx3695_write_reg(0X48, phase1_led_offset_idac);\r
-    hx3695_write_reg(0X49,  phase5_ad_inr_ctrl<<4|phase5_ad_of_idac_ctrl); \r
-               hx3695_write_reg(0X4a, phase5_led_drv1_cha_sel);\r
-               hx3695_write_reg(0X4b, phase5_led_drv2_cha_sel);\r
-               hx3695_write_reg(0X71, phase5_dsp_mov_avg_num | phase5_dsp_iir_lp_coeff<<4);\r
-               \r
-               \r
-         hx3695_write_reg(0X43, phase6_mux_sel);  \r
-               hx3695_write_reg(0X44, phase6_tia_cap<<4|phase6_tia_res); \r
-               hx3695_write_reg(0X45, phase6_ldr1_cur);    //LED_DRV1_CUR\r
-               hx3695_write_reg(0x70, phase6_ldr2_cur);   //ps8--ps1  led_drv2_cur\r
-               hx3695_write_reg(0X46, (phase6_pd_sel<<4 | 0x00));\r
-               hx3695_write_reg(0X47, phase6_als_offset_idac);\r
-               hx3695_write_reg(0X48, phase6_led_offset_idac);\r
-//             hx3695_write_reg(0X48, phase6_led_offset_idac);\r
-    hx3695_write_reg(0X49,  phase6_ad_inr_ctrl<<4|phase6_ad_of_idac_ctrl); \r
-               hx3695_write_reg(0X4a, phase6_led_drv1_cha_sel);\r
-               hx3695_write_reg(0X4b, phase6_led_drv2_cha_sel);\r
-               hx3695_write_reg(0X71, phase6_dsp_mov_avg_num | phase6_dsp_iir_lp_coeff<<4);\r
-               \r
-       \r
-         hx3695_write_reg(0X43, phase7_mux_sel);  \r
-               hx3695_write_reg(0X44, phase7_tia_cap<<4|phase7_tia_res); \r
-               hx3695_write_reg(0X45, phase7_ldr1_cur);    //LED_DRV1_CUR\r
-               hx3695_write_reg(0x70, phase7_ldr2_cur);   //ps8--ps1  led_drv2_cur\r
-               hx3695_write_reg(0X46, (phase7_pd_sel<<4 | 0x00));\r
-               hx3695_write_reg(0X47, phase7_als_offset_idac);\r
-               hx3695_write_reg(0X48, phase7_led_offset_idac);\r
-//             hx3695_write_reg(0X48, phase7_led_offset_idac);\r
-    hx3695_write_reg(0X49,  phase7_ad_inr_ctrl<<4|phase7_ad_of_idac_ctrl); \r
-               hx3695_write_reg(0X4a, phase7_led_drv1_cha_sel);\r
-               hx3695_write_reg(0X4b, phase7_led_drv2_cha_sel);\r
-               hx3695_write_reg(0X71, phase7_dsp_mov_avg_num | phase7_dsp_iir_lp_coeff<<4);\r
-               \r
-       \r
-         hx3695_write_reg(0X43, phase8_mux_sel);  \r
-               hx3695_write_reg(0X44, phase8_tia_cap<<4|phase8_tia_res); \r
-               hx3695_write_reg(0X45, phase8_ldr1_cur);    //LED_DRV1_CUR\r
-               hx3695_write_reg(0x70, phase8_ldr2_cur);   //ps8--ps1  led_drv2_cur\r
-               hx3695_write_reg(0X46, (phase8_pd_sel<<4 | 0x00));\r
-               hx3695_write_reg(0X47, phase8_als_offset_idac);\r
-               hx3695_write_reg(0X48, phase8_led_offset_idac);\r
-//             hx3695_write_reg(0X48, phas8_led_offset_idac);\r
-    hx3695_write_reg(0X49,  phase8_ad_inr_ctrl<<4|phase8_ad_of_idac_ctrl); \r
-               hx3695_write_reg(0X4a, phase8_led_drv1_cha_sel);\r
-               hx3695_write_reg(0X4b, phase8_led_drv2_cha_sel);\r
-               hx3695_write_reg(0X71, phase8_dsp_mov_avg_num | phase8_dsp_iir_lp_coeff<<4);\r
-               \r
-\r
-// analog circuit cfg \r
-    hx3695_write_reg(0X60, 0x14);      //\r
-               hx3695_write_reg(0X61, 0xf0);   \r
-               hx3695_write_reg(0X62, 0x22); \r
-               hx3695_write_reg(0X63, 0x15); \r
-                                                                                                                                                                                                                               \r
-               hx3695_write_reg(0X64, 0x08);   \r
-               hx3695_write_reg(0X65, 0x88); //bug\r
-               \r
-               hx3695_write_reg(0X66, 0x30);   // bits<3>=adc selftest en     0x30\r
-               hx3695_write_reg(0X67, 0x23);   \r
-               hx3695_write_reg(0X68, 0x46);   \r
-               hx3695_write_reg(0X69, 0x42);   \r
-               \r
-               hx3695_write_reg(0X39, 0xff);   // ofset idac1 phase enable cfg\r
-               hx3695_write_reg(0x73, 0xff);    //led_offset_idac phase enable\r
-               \r
-    hx3695_write_reg(0X6a, 0X0f);      \r
-               hx3695_write_reg(0X6b, 0X22);   \r
-               hx3695_write_reg(0X6c, 0X00);   \r
-               hx3695_write_reg(0X6d, 0X37);   \r
-               hx3695_write_reg(0X6e, 0X82);   \r
-               hx3695_write_reg(0X6f, 0X08);\r
-/////////FIFO and adc conversion ready config////////\r
-/////////FIFO and adc conversion ready config////////\r
-#if defined(PPG_INT_MODE)\r
-               hx3695_write_reg(0X1b, 0x00);// bits<3:0> fifo data sel, 0000 = p1;0001= p2;0010=p3;\\r
-                                        0011=p4;0100=p5;0101=p6;0110=p7;\\r
-                                        bits<7> fifo enble\r
-                hx3695_write_reg(0X33, 0x83);   // int width                                                                                                                                           \r
-     hx3695_write_reg(0X21, 0x00);   // fifo int sel,00=FIFO INT config clear\r
-                hx3695_write_reg(0X38, 0x08);   // int sel,00=close almost full int,04=enable almost full int\r
-#elif defined(INT_MODE)             //(FIFO_ALL_MOST_FULL)\r
-                hx3695_write_reg(0X1b, 0x90);// bits<3:0> fifo data sel, 0000 = p1;0001= p2;0010=p3;\\r
-                                        0011=p4;0100=p5;0101=p6;0110=p7;\\r
-                                        bits<7> fifo enble\r
-                hx3695_write_reg(0X1c, (fifo_watermark&0xff));   //fifo_watermark\r
-                hx3695_write_reg(0X1d, fifo_watermark<<8);       //bit<0>=fifo_watermark[8]  \r
-                hx3695_write_reg(0X33, 0x83);   // int width                                                                                                                                           \r
-     hx3695_write_reg(0X38, 0x04);   // int sel,00=close almost full int,04=enable almost full int\r
-\r
-#else\r
-               hx3695_write_reg(0X1b, 0x90);// bits<3:0> fifo data sel, 0000 = p1;0001= p2;0010=p3;\r
-                                        // 0011=p4;0100=p5;0101=p6;0110=p7;\r
-                                        // bits<7> fifo enble  \r
-     hx3695_write_reg(0X36, 0x00);                       //intrupt                                                                                                                                     \r
-                                                                                                                                               \r
-     hx3695_write_reg(0X38, 0x00);   // int sel,00=close almost full int,01= prf int  04=enable almost full int\r
-\r
-#endif\r
-\r
-               \r
-    hx3695_write_reg(0X26,(phase1_enable<<3)|(phase1_adc_osr)|(phase2_enable<<7)|(phase2_adc_osr<<4) ); \r
-    hx3695_write_reg(0X27,(phase3_enable<<3)|(phase3_adc_osr)|(phase4_enable<<7)|(phase4_adc_osr<<4) );  \r
-    hx3695_write_reg(0X28,(phase5_enable<<3)|(phase5_adc_osr)|(phase6_enable<<7)|(phase6_adc_osr<<4) );\r
-    hx3695_write_reg(0X29,(phase7_enable<<3)|(phase7_adc_osr)|(phase8_enable<<7)|(phase8_adc_osr<<4) );                \r
-\r
-//    hx3695_write_reg(0X5c, 0x02);//soft reset\r
-    hx3695_delay_ms(5);  \r
-    hx3695_write_reg(0X5c, 0x00);//release\r
-\r
-    return ;\r
-}\r
-\r
-void hx3695_factory_led_off_config(void)\r
-{\r
-    uint16_t sample_rate = 25;                  /*config the data rate of chip alps2_fm ,uint is Hz*/\r
-    uint32_t prf_clk_num = 32000/sample_rate;   /*period in clk num, num = Fclk/fs */\r
-\r
-    uint8_t adc_rst_post_num=0;       /* 00=16,01=32,10=64,11=128*/      \r
-         uint8_t samp_delay_leden_num = 0; /* 00=8,01=16,10=32,11=64*/ \r
+    uint16_t fifo_watermark= 250 ;\r
+    uint8_t adc_rst_post_num= 0;       /* 00=16,01=32,10=64,11=128*/      \r
+    uint8_t samp_delay_leden_num = 0; /* 00=8,01=16,10=32,11=64*/ \r
     uint8_t samp_copy_avg = 0;        /* 0=1, 1=2, 2=4 ,3=8, 4=16*/\r
     uint8_t data_avg_num = 0;         /* 0 = 1 ; 1 = 2; 2 =4 ; 3 =8 ; 4 =16 ;*/\r
-         uint8_t phase7_8_internal = 0;    /* phase7 and phase8 prf internal cfg */\r
-               \r
+    uint8_t phase7_8_internal = 0;   //0x18;    /* phase7 and phase8 prf internal cfg */\r
+       \r
     uint8_t phase1_enable = 1;     /*phase1_enable  , 1 mean enable ; 0 mean disable */ \r
     uint8_t phase2_enable = 1;     /*phase2_enable  , 1 mean enable ; 0 mean disable */ \r
     uint8_t phase3_enable = 1;     /*phase3_enable  , 1 mean enable ; 0 mean disable */ \r
     uint8_t phase4_enable = 1;     /*phase4_enable  , 1 mean enable ; 0 mean disable */\r
-    uint8_t phase5_enable = 0;     /*phase5_enable  , 1 mean enable ; 0 mean disable */ \r
-    uint8_t phase6_enable = 0;     /*phase6_enable  , 1 mean enable ; 0 mean disable */ \r
-    uint8_t phase7_enable = 0;     /*phase7_enable  , 1 mean enable ; 0 mean disable */        \r
-         uint8_t phase8_enable = 0;     /*phase8_enable  , 1 mean enable ; 0 mean disable */ \r
+    uint8_t phase5_enable = 1;     /*phase5_enable  , 1 mean enable ; 0 mean disable */ \r
+    uint8_t phase6_enable = 1;     /*phase6_enable  , 1 mean enable ; 0 mean disable */ \r
+    uint8_t phase7_enable = 1;     /*phase7_enable  , 1 mean enable ; 0 mean disable */        \r
+    uint8_t phase8_enable = 1;     /*phase8_enable  , 1 mean enable ; 0 mean disable */ \r
 \r
     uint8_t phase1_adc_osr = 3;    /* 0 = 128 ; 1 = 256 ; 2 = 512 ; 3 = 1024 ; 4 = 2048*/\r
     uint8_t phase2_adc_osr = 3;    /* 0 = 128 ; 1 = 256 ; 2 = 512 ; 3 = 1024 ; 4 = 2048*/\r
     uint8_t phase3_adc_osr = 3;    /* 0 = 128 ; 1 = 256 ; 2 = 512 ; 3 = 1024 ; 4 = 2048*/\r
     uint8_t phase4_adc_osr = 3;    /* 0 = 128 ; 1 = 256 ; 2 = 512 ; 3 = 1024 ; 4 = 2048*/\r
-               uint8_t phase5_adc_osr = 3;    /* 0 = 128 ; 1 = 256 ; 2 = 512 ; 3 = 1024 ; 4 = 2048*/\r
-         uint8_t phase6_adc_osr = 3;    /* 0 = 128 ; 1 = 256 ; 2 = 512 ; 3 = 1024 ; 4 = 2048*/\r
-               uint8_t phase7_adc_osr = 3;    /* 0 = 128 ; 1 = 256 ; 2 = 512 ; 3 = 1024 ; 4 = 2048*/\r
-               uint8_t phase8_adc_osr = 3;    /* 0 = 128 ; 1 = 256 ; 2 = 512 ; 3 = 1024 ; 4 = 2048*/\r
+    uint8_t phase5_adc_osr = 3;    /* 0 = 128 ; 1 = 256 ; 2 = 512 ; 3 = 1024 ; 4 = 2048*/\r
+    uint8_t phase6_adc_osr = 3;    /* 0 = 128 ; 1 = 256 ; 2 = 512 ; 3 = 1024 ; 4 = 2048*/\r
+    uint8_t phase7_adc_osr = 3;    /* 0 = 128 ; 1 = 256 ; 2 = 512 ; 3 = 1024 ; 4 = 2048*/\r
+    uint8_t phase8_adc_osr = 3;    /* 0 = 128 ; 1 = 256 ; 2 = 512 ; 3 = 1024 ; 4 = 2048*/\r
                         \r
-         uint8_t phase1_mux_sel = 0;    /* sel phase1*/\r
-               uint8_t phase2_mux_sel = 1;    /* sel phase2*/\r
-               uint8_t phase3_mux_sel = 2;    /* sel phase3*/\r
-               uint8_t phase4_mux_sel = 3;    /* sel phase4*/\r
-               uint8_t phase5_mux_sel = 4;    /* sel phase5*/\r
-               uint8_t phase6_mux_sel = 5;    /* sel phase6*/\r
-               uint8_t phase7_mux_sel = 6;    /* sel phase7*/\r
-               uint8_t phase8_mux_sel = 7;    /* sel phase8*/\r
+    uint8_t phase1_mux_sel = 0;    /* sel phase1*/   \r
+    uint8_t phase8_mux_sel = 7;    /* sel phase8*/\r
        \r
 \r
-         uint8_t phase1_inner_avg = 0;   /* phase1 adc avg num 0=1, 1=2, 2=4, 3=8 , 4=16*/\r
-    uint8_t phase1_tia_res = 5;     /* 0= 10K; 1= 20k; 2= 50k; 3= 100k; 4= 150k; 5= 200k; 6= 500k; 7= 1M*/\r
-               uint8_t phase1_tia_cap = 4;     /* 0= ; 1= ; 2= ; 3= ; 4= ; 5= ; 6= ; 7= */\r
+    uint8_t phase1_inner_avg = 0;   /* phase1 adc avg num 0=1, 1=2, 2=4, 3=8 , 4=16*/\r
+    uint8_t phase2_inner_avg = 0;   /* phase1 adc avg num 0=1, 1=2, 2=4, 3=8 , 4=16*/\r
+    uint8_t phase3_inner_avg = 0;   /* phase1 adc avg num 0=1, 1=2, 2=4, 3=8 , 4=16*/\r
+    uint8_t phase4_inner_avg = 0;   /* phase1 adc avg num 0=1, 1=2, 2=4, 3=8 , 4=16*/\r
+    uint8_t phase5_inner_avg = 0;   /* phase1 adc avg num 0=1, 1=2, 2=4, 3=8 , 4=16*/\r
+    uint8_t phase6_inner_avg = 0;   /* phase1 adc avg num 0=1, 1=2, 2=4, 3=8 , 4=16*/   \r
+    uint8_t phase7_inner_avg = 0;   /* phase1 adc avg num 0=1, 1=2, 2=4, 3=8 , 4=16*/\r
+    uint8_t phase8_inner_avg = 0;   /* phase1 adc avg num 0=1, 1=2, 2=4, 3=8 , 4=16*/\r
+     \r
+    uint8_t phase1_tia_res = PS_SINGLE_TIA;     /* 0= 10K; 1= 20k; 2= 50k; 3= 100k; 4= 150k; 5= 200k; 6= 500k; 7= 1M*/\r
+    uint8_t phase1_tia_cap = 4;     /* 0= ; 1= ; 2= ; 3= ; 4= ; 5= ; 6= ; 7= */\r
     uint8_t phase1_led_drv1_cha_sel = 0;     /* 1 = ldr1  NG; 2 = ldr2   GR; 4 = ldr3  IR; 8 = ldr4 RED; */\r
     uint8_t phase1_led_drv2_cha_sel = 0;    /*ldr5:0x20  ldr6: 0x40 red    ldr8 0x80  ir      */\r
-               uint8_t phase1_pd_sel = 0x0c;          /* 1 = pd1; 2 = pd2; 4 = pd3*/\r
+    uint8_t phase1_pd_sel = ALS_PD_FT_SEL;          /* 1 = pd1; 2 = pd2; 4 = pd3*/\r
     uint8_t phase1_als_offset_idac = 0; /* 0~255 = 0 ~ 128ua , step = 0.5ua */\r
-               uint8_t phase1_led_offset_idac = 0; /* 0~255 = 0 ~ 64ua , step = 0.25ua */\r
+    uint8_t phase1_led_offset_idac = 0; /* 0~255 = 0 ~ 64ua , step = 0.25ua */\r
     uint8_t phase1_ldr1_cur = 0;     /* 0~255 = 0 ~ 200ma, step = 0.8ma */\r
-               uint8_t phase1_ldr2_cur = 0;\r
-//             uint8_t phase1_of_idac1_cur = 0;\r
-//    uint8_t phase1_of_idac2_cur = 0;\r
+    uint8_t phase1_ldr2_cur = 0;\r
     uint8_t phase1_ad_inr_ctrl = 3;\r
     uint8_t phase1_ad_of_idac_ctrl = 0;\r
-//    uint8_t afe_offset  =  0;\r
-    uint8_t phase1_led_en = 1;      /* phase1 led enable*/\r
-               \r
-               uint8_t phase1_dsp_mov_avg_num = 0; /* 0=bypass ; 1=2 ; 2=4 ; 3=8 */\r
+    uint8_t phase1_led_en = 0;      /* phase1 led enable*/             \r
+    uint8_t phase1_dsp_mov_avg_num = 0; /* 0=bypass ; 1=2 ; 2=4 ; 3=8 */\r
     uint8_t phase1_dsp_iir_lp_coeff = 0; /* 0=bypass ; 1=1/2 ; 2=1/4 ; 3=1/8 ,...,7=1/128 */\r
-\r
-\r
-\r
-         uint8_t phase2_inner_avg = 0;   /* phase1 adc avg num 0=1, 1=2, 2=4, 3=8 , 4=16*/\r
-    uint8_t phase2_tia_res = 5;     /* 0= 10K; 1= 20k; 2= 50k; 3= 100k; 4= 150k; 5= 200k; 6= 500k; 7= 1M*/\r
-               uint8_t phase2_tia_cap = 4;     /* 0= ; 1= ; 2= ; 3= ; 4= ; 5= ; 6= ; 7= */\r
-    uint8_t phase2_led_drv1_cha_sel = GREEN_LED_SLE;     /* 1 = ldr1; 2 = ldr2; 4 = ldr3; 8 = ldr4 ; */\r
-    uint8_t phase2_led_drv2_cha_sel = 0;\r
-               uint8_t phase2_pd_sel = 0x0c;      /* 1 = pd1; 2 = pd2; 4 = pd3*/\r
-    uint8_t phase2_als_offset_idac = 0; /* 0~255 = 0 ~ 128ua , step = 0.5ua */\r
-               uint8_t phase2_led_offset_idac = 0; /* 0~255 = 0 ~ 64ua , step = 0.25ua */\r
-    uint8_t phase2_ldr1_cur = 15;     /* 0~255 = 0 ~ 200ma, step = 0.8ma */\r
-               uint8_t phase2_ldr2_cur = 0;\r
-//             uint8_t phase2_of_idac1_cur = 0;\r
-//    uint8_t phase2_of_idac2_cur = 0;\r
-    uint8_t phase2_ad_inr_ctrl = 3;\r
-    uint8_t phase2_ad_of_idac_ctrl = 0;\r
-//    uint8_t phase2_afe_offset  =  0;\r
-    uint8_t phase2_led_en = 1;      /* phase1 led enable*/\r
-               \r
-               uint8_t phase2_dsp_mov_avg_num = 0; /* 0=bypass ; 1=2 ; 2=4 ; 3=8 */\r
-    uint8_t phase2_dsp_iir_lp_coeff = 0; /* 0=bypass ; 1=1/2 ; 2=1/4 ; 3=1/8 ,...,7=1/128 */\r
-\r
-               \r
-    uint8_t phase3_inner_avg = 0;   /* phase1 adc avg num 0=1, 1=2, 2=4, 3=8 , 4=16*/\r
-    uint8_t phase3_tia_res = 5;     /* 0= 10K; 1= 20k; 2= 50k; 3= 100k; 4= 150k; 5= 200k; 6= 500k; 7= 1M*/\r
-               uint8_t phase3_tia_cap = 4;     /* 0= ; 1= ; 2= ; 3= ; 4= ; 5= ; 6= ; 7= */\r
-    uint8_t phase3_led_drv1_cha_sel = RED_LED_SLE;     /* 1 = ldr1; 2 = ldr2; 4 = ldr3; 8 = ldr4 ; */\r
-    uint8_t phase3_led_drv2_cha_sel = 0;\r
-               uint8_t phase3_pd_sel = 0x0c;      /* 1 = pd1; 2 = pd2; 4 = pd3*/\r
-    uint8_t phase3_als_offset_idac = 0; /* 0~255 = 0 ~ 128ua , step = 0.5ua */\r
-               uint8_t phase3_led_offset_idac = 0; /* 0~255 = 0 ~ 64ua , step = 0.25ua */\r
-    uint8_t phase3_ldr1_cur = 15;     /* 0~255 = 0 ~ 200ma, step = 0.8ma */\r
-               uint8_t phase3_ldr2_cur = 0;\r
-//             uint8_t phase3_of_idac1_cur = 0;\r
-//    uint8_t phase3_of_idac2_cur = 0;\r
-    uint8_t phase3_ad_inr_ctrl = 3;\r
-    uint8_t phase3_ad_of_idac_ctrl = 0;\r
-//    uint8_t phase3_afe_offset  =  0;\r
-    uint8_t phase3_led_en = 1;      /* phase1 led enable*/\r
-               \r
-               uint8_t phase3_dsp_mov_avg_num = 0; /* 0=bypass ; 1=2 ; 2=4 ; 3=8 */\r
-    uint8_t phase3_dsp_iir_lp_coeff = 0; /* 0=bypass ; 1=1/2 ; 2=1/4 ; 3=1/8 ,...,7=1/128 */\r
-\r
-               \r
-    uint8_t phase4_inner_avg = 0;   /* phase1 adc avg num 0=1, 1=2, 2=4, 3=8 , 4=16*/\r
-    uint8_t phase4_tia_res = 5;     /* 0= 10K; 1= 20k; 2= 50k; 3= 100k; 4= 150k; 5= 200k; 6= 500k; 7= 1M*/\r
-               uint8_t phase4_tia_cap = 4;     /* 0= ; 1= ; 2= ; 3= ; 4= ; 5= ; 6= ; 7= */\r
-    uint8_t phase4_led_drv1_cha_sel = IR_LED_SLE;     /* 1 = ldr1; 2 = ldr2; 4 = ldr3; 8 = ldr4 ; */\r
-    uint8_t phase4_led_drv2_cha_sel = 0;\r
-               uint8_t phase4_pd_sel = 0x0c;      /* 1 = pd1; 2 = pd2; 4 = pd3*/\r
-    uint8_t phase4_als_offset_idac = 0; /* 0~255 = 0 ~ 128ua , step = 0.5ua */\r
-               uint8_t phase4_led_offset_idac = 0; /* 0~255 = 0 ~ 64ua , step = 0.25ua */\r
-    uint8_t phase4_ldr1_cur = 15;     /* 0~255 = 0 ~ 200ma, step = 0.8ma */\r
-               uint8_t phase4_ldr2_cur = 0;\r
-//             uint8_t phase4_of_idac1_cur = 0;\r
-//    uint8_t phase4_of_idac2_cur = 0;\r
-    uint8_t phase4_ad_inr_ctrl = 3;\r
-    uint8_t phase4_ad_of_idac_ctrl = 0;\r
-//    uint8_t phase4_afe_offset  =  0;\r
-    uint8_t phase4_led_en = 1;      /* phase1 led enable*/\r
-               \r
-               uint8_t phase4_dsp_mov_avg_num = 0; /* 0=bypass ; 1=2 ; 2=4 ; 3=8 */\r
-    uint8_t phase4_dsp_iir_lp_coeff = 0; /* 0=bypass ; 1=1/2 ; 2=1/4 ; 3=1/8 ,...,7=1/128 */\r
-\r
-    uint8_t phase5_inner_avg = 0;   /* phase1 adc avg num 0=1, 1=2, 2=4, 3=8 , 4=16*/\r
-    uint8_t phase5_tia_res = 0;     /* 0= 10K; 1= 20k; 2= 50k; 3= 100k; 4= 150k; 5= 200k; 6= 500k; 7= 1M*/\r
-               uint8_t phase5_tia_cap = 4;     /* 0= ; 1= ; 2= ; 3= ; 4= ; 5= ; 6= ; 7= */\r
-    uint8_t phase5_led_drv1_cha_sel = 0;     /* 1 = ldr1; 2 = ldr2; 4 = ldr3; 8 = ldr4 ; */\r
-    uint8_t phase5_led_drv2_cha_sel = 0;\r
-               uint8_t phase5_pd_sel = 0x0c;      /* 1 = pd1; 2 = pd2; */\r
-    uint8_t phase5_als_offset_idac = 0; /* 0~255 = 0 ~ 128ua , step = 0.5ua */\r
-               uint8_t phase5_led_offset_idac = 0; /* 0~255 = 0 ~ 64ua , step = 0.25ua */\r
-    uint8_t phase5_ldr1_cur = 0;     /* 0~255 = 0 ~ 200ma, step = 0.8ma */\r
-               uint8_t phase5_ldr2_cur = 0;\r
-//             uint8_t phase5_of_idac1_cur = 0;\r
-//    uint8_t phase5_of_idac2_cur = 0;\r
-    uint8_t phase5_ad_inr_ctrl = 3;\r
-    uint8_t phase5_ad_of_idac_ctrl = 0;\r
-//    uint8_t phase5_afe_offset  =  0;\r
-    uint8_t phase5_led_en = 1;      /* phase1 led enable*/\r
-               \r
-               uint8_t phase5_dsp_mov_avg_num = 0; /* 0=bypass ; 1=2 ; 2=4 ; 3=8 */\r
-    uint8_t phase5_dsp_iir_lp_coeff = 0; /* 0=bypass ; 1=1/2 ; 2=1/4 ; 3=1/8 ,...,7=1/128 */\r
-\r
-    uint8_t phase6_inner_avg = 0;   /* phase1 adc avg num 0=1, 1=2, 2=4, 3=8 , 4=16*/\r
-    uint8_t phase6_tia_res = 0;     /* 0= 10K; 1= 20k; 2= 50k; 3= 100k; 4= 150k; 5= 200k; 6= 500k; 7= 1M*/\r
-               uint8_t phase6_tia_cap = 4;     /* 0= ; 1= ; 2= ; 3= ; 4= ; 5= ; 6= ; 7= */\r
-    uint8_t phase6_led_drv1_cha_sel = 0;     /* 1 = ldr1; 2 = ldr2; 4 = ldr3; 8 = ldr4 ; */\r
-    uint8_t phase6_led_drv2_cha_sel = 0;\r
-               uint8_t phase6_pd_sel = 0x0c;      /* 1 = pd1; 2 = pd2; */\r
-    uint8_t phase6_als_offset_idac = 0; /* 0~255 = 0 ~ 128ua , step = 0.5ua */\r
-               uint8_t phase6_led_offset_idac = 0; /* 0~255 = 0 ~ 64ua , step = 0.25ua */\r
-    uint8_t phase6_ldr1_cur = 0;     /* 0~255 = 0 ~ 200ma, step = 0.8ma */\r
-               uint8_t phase6_ldr2_cur = 0;\r
-//             uint8_t phase6_of_idac1_cur = 0;\r
-//    uint8_t phase6_of_idac2_cur = 0;\r
-    uint8_t phase6_ad_inr_ctrl = 3;\r
-    uint8_t phase6_ad_of_idac_ctrl = 0;\r
-//    uint8_t phase6_afe_offset  =  0;\r
-    uint8_t phase6_led_en = 1;      /* phase1 led enable*/\r
-               \r
-               uint8_t phase6_dsp_mov_avg_num = 0; /* 0=bypass ; 1=2 ; 2=4 ; 3=8 */\r
-    uint8_t phase6_dsp_iir_lp_coeff = 0; /* 0=bypass ; 1=1/2 ; 2=1/4 ; 3=1/8 ,...,7=1/128 */\r
-\r
-    uint8_t phase7_inner_avg = 0;   /* phase1 adc avg num 0=1, 1=2, 2=4, 3=8 , 4=16*/\r
-    uint8_t phase7_tia_res = 0;     /* 0= 10K; 1= 20k; 2= 50k; 3= 100k; 4= 150k; 5= 200k; 6= 500k; 7= 1M*/\r
-               uint8_t phase7_tia_cap = 4;     /* 0= ; 1= ; 2= ; 3= ; 4= ; 5= ; 6= ; 7= */\r
-    uint8_t phase7_led_drv1_cha_sel = 0;     /* 1 = ldr1; 2 = ldr2; 4 = ldr3; 8 = ldr4 ; */\r
-    uint8_t phase7_led_drv2_cha_sel = 0;\r
-               uint8_t phase7_pd_sel = 0x0c;      /* 1 = pd1; 2 = pd2; */\r
-    uint8_t phase7_als_offset_idac = 0; /* 0~255 = 0 ~ 128ua , step = 0.5ua */\r
-               uint8_t phase7_led_offset_idac = 0; /* 0~255 = 0 ~ 64ua , step = 0.25ua */\r
-    uint8_t phase7_ldr1_cur = 0;     /* 0~255 = 0 ~ 200ma, step = 0.8ma */\r
-               uint8_t phase7_ldr2_cur = 0;\r
-//             uint8_t phase7_of_idac1_cur = 0;\r
-//    uint8_t phase7_of_idac2_cur = 0;\r
-    uint8_t phase7_ad_inr_ctrl = 3;\r
-    uint8_t phase7_ad_of_idac_ctrl = 0;\r
-//    uint8_t phase7_afe_offset  =  0;\r
-    uint8_t phase7_led_en = 1;      /* phase1 led enable*/\r
-               \r
-               uint8_t phase7_dsp_mov_avg_num = 0; /* 0=bypass ; 1=2 ; 2=4 ; 3=8 */\r
-    uint8_t phase7_dsp_iir_lp_coeff = 0; /* 0=bypass ; 1=1/2 ; 2=1/4 ; 3=1/8 ,...,7=1/128 */\r
-\r
-    uint8_t phase8_inner_avg = 0;   /* phase1 adc avg num 0=1, 1=2, 2=4, 3=8 , 4=16*/\r
-    uint8_t phase8_tia_res = 0;     /* 0= 10K; 1= 20k; 2= 50k; 3= 100k; 4= 150k; 5= 200k; 6= 500k; 7= 1M*/\r
-               uint8_t phase8_tia_cap = 4;     /* 0= ; 1= ; 2= ; 3= ; 4= ; 5= ; 6= ; 7= */\r
-    uint8_t phase8_led_drv1_cha_sel = 0;   //IR_LED_SLE;     /* 1 = ldr1; 2 = ldr2; 4 = ldr3; 8 = ldr4 ; */\r
+     \r
+   \r
+    uint8_t phase8_tia_res = 3;     /* 0= 10K; 1= 20k; 2= 50k; 3= 100k; 4= 150k; 5= 200k; 6= 500k; 7= 1M*/\r
+    uint8_t phase8_tia_cap = 4;     /* 0= ; 1= ; 2= ; 3= ; 4= ; 5= ; 6= ; 7= */\r
+    uint8_t phase8_led_drv1_cha_sel = 0;     /* 1 = ldr1; 2 = ldr2; 4 = ldr3; 8 = ldr4 ; */\r
     uint8_t phase8_led_drv2_cha_sel = 0;\r
-               uint8_t phase8_pd_sel = 0x0c;      /* 1 = pd1; 2 = pd2; */\r
+    uint8_t phase8_pd_sel = 0;      /* 1 = pd1; 2 = pd2; */\r
     uint8_t phase8_als_offset_idac = 0; /* 0~255 = 0 ~ 128ua , step = 0.5ua */\r
-               uint8_t phase8_led_offset_idac = 0; /* 0~255 = 0 ~ 64ua , step = 0.25ua */\r
-    uint8_t phase8_ldr1_cur = 20;     /* 0~255 = 0 ~ 200ma, step = 0.8ma */\r
-               uint8_t phase8_ldr2_cur = 0;\r
-//             uint8_t phase8_of_idac1_cur = 0;\r
-//    uint8_t phase8_of_idac2_cur = 0;\r
+    uint8_t phase8_led_offset_idac = 0; /* 0~255 = 0 ~ 64ua , step = 0.25ua */\r
+    uint8_t phase8_ldr1_cur = 0;     /* 0~255 = 0 ~ 200ma, step = 0.8ma */\r
+    uint8_t phase8_ldr2_cur = 0;\r
     uint8_t phase8_ad_inr_ctrl = 3;\r
     uint8_t phase8_ad_of_idac_ctrl = 0;\r
-//    uint8_t phase8_afe_offset  =  0;\r
-    uint8_t phase8_led_en = 1;      /* phase1 led enable*/\r
-               \r
-               uint8_t phase8_dsp_mov_avg_num = 0; /* 0=bypass ; 1=2 ; 2=4 ; 3=8 */\r
+    uint8_t phase8_led_en = 0;      /* phase1 led enable*/             \r
+    uint8_t phase8_dsp_mov_avg_num = 0; /* 0=bypass ; 1=2 ; 2=4 ; 3=8 */\r
     uint8_t phase8_dsp_iir_lp_coeff = 0; /* 0=bypass ; 1=1/2 ; 2=1/4 ; 3=1/8 ,...,7=1/128 */\r
 \r
-    uint8_t init_wait_delay = 5 ; /* 0 = 31clk ; 1 = 64clk ; 2 = 127clk ; 3 = 255clk(d) ;\r
+    uint8_t init_wait_delay = 4 ; /* 0 = 31clk ; 1 = 64clk ; 2 = 127clk ; 3 = 255clk(d) ;\r
                                      4 = 511clk; 5 = 1023clk; 6 = 2047; 7 = 4095clk */         \r
                                                                                                                                                 \r
     uint8_t afe_reset = 3;        /* 0 = 15clk ; 1 = 31clk ; 2 = 63clk ; 3 = 127clk(d) ;\r
                                      4 = 255clk; 5 = 511clk; 6 = 1024; 7 = 2047clk */\r
                                                                                                                                                 \r
-               uint8_t afe_rst_cnvt = 1;               /* 0 = 15clk ; 1 = 31clk ; 2 = 63clk ; 3 = 127clk(d)*/\r
-    \r
+    uint8_t afe_rst_cnvt = 1;                  /* 0 = 15clk ; 1 = 31clk ; 2 = 63clk ; 3 = 127clk(d)*/\r
+\r
     uint8_t led_en_idac_pre    = 2;    /* 0 = 8clk ; 1 = 16clk ; 2 = 32clk ; 3 = 64clk(d)*/ \r
-               \r
-               uint8_t led_en_idac     =       1;        /* 0 = 4clk ; 1 = 8clk ; 2 = 16clk ; 3 = 32clk(d)*/ \r
-                                                                                                                                                \r
-    uint8_t led_on_time = 2;      /* 0 = 32clk=8us ; 1 = 64clk=16us; 2=128clk=32us ; 3 = 256clk=64us ;\r
+\r
+    uint8_t led_en_idac        =       1;        /* 0 = 4clk ; 1 = 8clk ; 2 = 16clk ; 3 = 32clk(d)*/ \r
+                                                                 \r
+    uint8_t led_on_time = 3;      /* 0 = 32clk=8us ; 1 = 64clk=16us; 2=128clk=32us ; 3 = 256clk=64us ;\r
                                      4 = 512clk=128us ; 5 = 1024clk=256us; 6= 2048clk=512us; 7 = 4096clk=1024us */\r
                                                                                                                                                 \r
     hx3695_delay_ms(10);               \r
-               \r
+                       \r
     hx3695_write_reg(0X2a, (uint8_t)prf_clk_num);    // prf bit<7:0>6\r
     hx3695_write_reg(0X2b, (uint8_t)(prf_clk_num>>8)); // prf bit<15:8>\r
     hx3695_write_reg(0X2c, (uint8_t)(prf_clk_num>>16)); // prf bit<23:16>      \r
                   \r
     hx3695_write_reg(0X25, (afe_rst_cnvt<<4| led_en_idac_pre<<2|led_en_idac)); \r
-               hx3695_write_reg(0X2d, phase7_8_internal); \r
-               hx3695_write_reg(0X2e, 0x33);// gpio ctrl \r
+    hx3695_write_reg(0X2d, phase7_8_internal); \r
+    hx3695_write_reg(0X2e, 0x33);// gpio ctrl \r
     hx3695_write_reg(0X2f, ((afe_reset<<4)| init_wait_delay));\r
-               hx3695_write_reg(0X30, (phase8_led_en<<7 | phase7_led_en<<6 |phase6_led_en<<5 |phase5_led_en<<4 |phase4_led_en<<3 | phase3_led_en<<2 | phase2_led_en<<1 | phase1_led_en) );\r
-    hx3695_write_reg(0X72, (phase8_led_en<<7 | phase7_led_en<<6 |phase6_led_en<<5 |phase5_led_en<<4 |phase4_led_en<<3 | phase3_led_en<<2 | phase2_led_en<<1 | phase1_led_en) );\r
-\r
+    \r
+    hx3695_write_reg(0X30, (phase8_led_en<<7 |  phase1_led_en));\r
+    hx3695_write_reg(0X72, (phase8_led_en<<7 |  phase1_led_en));\r
+    hx3695_write_reg(0X2e, 0x33);// gpio ctrl \r
 \r
     hx3695_write_reg(0X31, (led_on_time<<4| 0x00));\r
-               hx3695_write_reg(0X33, 0x83);// 中断极性及宽度配置;\r
-               hx3695_write_reg(0X34, 0x00);// 中断特殊配置;\r
-               hx3695_write_reg(0X36, 0x00);// phase data ready 标志设置;\r
-               hx3695_write_reg(0X38, 0x00);\r
+    hx3695_write_reg(0X33, 0x83);// �жϼ��Լ��������ã�\r
+    hx3695_write_reg(0X34, 0x00);// �ж��������ã�\r
+    hx3695_write_reg(0X36, 0x00);// phase data ready ��־���ã�\r
+    hx3695_write_reg(0X38, 0x00);\r
                \r
     hx3695_write_reg(0X3a, (phase1_inner_avg | (phase2_inner_avg<<4)));  \r
     hx3695_write_reg(0X3b, (phase3_inner_avg | (phase4_inner_avg<<4)));  \r
@@ -1967,424 +1467,292 @@ void hx3695_factory_led_off_config(void)
     hx3695_write_reg(0X3e, adc_rst_post_num<<6 | samp_delay_leden_num<<4 | samp_copy_avg); \r
     hx3695_write_reg(0X3f, data_avg_num<<4 | data_avg_num );\r
     hx3695_write_reg(0X40, data_avg_num<<4 | data_avg_num );\r
-               hx3695_write_reg(0X41, data_avg_num<<4 | data_avg_num );\r
-               hx3695_write_reg(0X42, data_avg_num<<4 | data_avg_num );\r
-               \r
-               hx3695_write_reg(0X43, phase1_mux_sel);  \r
-               hx3695_write_reg(0X44, phase1_tia_cap<<4|phase1_tia_res); \r
-               hx3695_write_reg(0X45, phase1_ldr1_cur);    //LED_DRV1_CUR\r
-               hx3695_write_reg(0x70, phase1_ldr2_cur);   //ps8--ps1  led_drv2_cur\r
-               hx3695_write_reg(0X46, (phase1_pd_sel<<4 | 0x00));\r
-               hx3695_write_reg(0X47, phase1_als_offset_idac);\r
-               hx3695_write_reg(0X48, phase1_led_offset_idac);\r
-\r
+    hx3695_write_reg(0X41, data_avg_num<<4 | data_avg_num );\r
+    hx3695_write_reg(0X42, data_avg_num<<4 | data_avg_num );\r
+    \r
+    hx3695_write_reg(0X43, phase1_mux_sel);  \r
+    hx3695_write_reg(0X44, phase1_tia_cap<<4|phase1_tia_res); \r
+    hx3695_write_reg(0X45, phase1_ldr1_cur);    //LED_DRV1_CUR\r
+    hx3695_write_reg(0x70, phase1_ldr2_cur);   //ps8--ps1  led_drv2_cur\r
+    hx3695_write_reg(0X46, (phase1_pd_sel<<4 | 0x00));\r
+    hx3695_write_reg(0X47, phase1_als_offset_idac);\r
+    hx3695_write_reg(0X48, phase1_led_offset_idac);\r
     hx3695_write_reg(0X49, phase1_ad_inr_ctrl<<4|phase1_ad_of_idac_ctrl); \r
-               hx3695_write_reg(0X4a, phase1_led_drv1_cha_sel);\r
-               hx3695_write_reg(0X4b, phase1_led_drv2_cha_sel);\r
-               hx3695_write_reg(0X71, phase1_dsp_mov_avg_num | phase1_dsp_iir_lp_coeff<<4);\r
-\r
-//    hx3695_write_reg(0X4e, thred_value);\r
-//    hx3695_write_reg(0X4f, thred_value>>5);\r
-               \r
-    hx3695_write_reg(0X43, phase2_mux_sel);  \r
-               hx3695_write_reg(0X44, phase2_tia_cap<<4|phase2_tia_res); \r
-               hx3695_write_reg(0X45, phase2_ldr1_cur);    //LED_DRV1_CUR\r
-               hx3695_write_reg(0x70, phase2_ldr2_cur);   //ps8--ps1  led_drv2_cur\r
-               hx3695_write_reg(0X46, (phase2_pd_sel<<4 | 0x00));\r
-               hx3695_write_reg(0X47, phase2_als_offset_idac);\r
-               hx3695_write_reg(0X48, phase2_led_offset_idac);\r
-//             hx3695_write_reg(0X48, phase1_led_offset_idac);\r
-    hx3695_write_reg(0X49,  phase2_ad_inr_ctrl<<4|phase2_ad_of_idac_ctrl); \r
-               hx3695_write_reg(0X4a, phase2_led_drv1_cha_sel);\r
-               hx3695_write_reg(0X4b, phase2_led_drv2_cha_sel);\r
-               hx3695_write_reg(0X71, phase2_dsp_mov_avg_num | phase2_dsp_iir_lp_coeff<<4);\r
-               \r
-//phase3 sel\r
-\r
-    hx3695_write_reg(0X43, phase3_mux_sel);  \r
-               hx3695_write_reg(0X44, phase3_tia_cap<<4|phase3_tia_res); \r
-               hx3695_write_reg(0X45, phase3_ldr1_cur);    //LED_DRV1_CUR\r
-               hx3695_write_reg(0x70, phase3_ldr2_cur);   //ps8--ps1  led_drv2_cur\r
-               hx3695_write_reg(0X46, (phase3_pd_sel<<4 | 0x00));\r
-               hx3695_write_reg(0X47, phase3_als_offset_idac);\r
-               hx3695_write_reg(0X48, phase3_led_offset_idac);\r
-//             hx3695_write_reg(0X48, phase1_led_offset_idac);\r
-    hx3695_write_reg(0X49,  phase3_ad_inr_ctrl<<4|phase3_ad_of_idac_ctrl); \r
-               hx3695_write_reg(0X4a, phase3_led_drv1_cha_sel);\r
-               hx3695_write_reg(0X4b, phase3_led_drv2_cha_sel);\r
-               hx3695_write_reg(0X71, phase3_dsp_mov_avg_num | phase3_dsp_iir_lp_coeff<<4);\r
-               \r
-//phase4 sel\r
-\r
-    hx3695_write_reg(0X43, phase4_mux_sel);  \r
-               hx3695_write_reg(0X44, phase4_tia_cap<<4|phase4_tia_res); \r
-               hx3695_write_reg(0X45, phase4_ldr1_cur);    //LED_DRV1_CUR\r
-               hx3695_write_reg(0x70, phase4_ldr2_cur);   //ps8--ps1  led_drv2_cur\r
-               hx3695_write_reg(0X46, (phase4_pd_sel<<4 | 0x00));\r
-               hx3695_write_reg(0X47, phase4_als_offset_idac);\r
-               hx3695_write_reg(0X48, phase4_led_offset_idac);\r
-//             hx3695_write_reg(0X48, phase1_led_offset_idac);\r
-    hx3695_write_reg(0X49,  phase4_ad_inr_ctrl<<4|phase4_ad_of_idac_ctrl); \r
-               hx3695_write_reg(0X4a, phase4_led_drv1_cha_sel);\r
-               hx3695_write_reg(0X4b, phase4_led_drv2_cha_sel);\r
-               hx3695_write_reg(0X71, phase4_dsp_mov_avg_num | phase4_dsp_iir_lp_coeff<<4);\r
-\r
-               hx3695_write_reg(0X43, phase5_mux_sel);  \r
-               hx3695_write_reg(0X44, phase5_tia_cap<<4|phase5_tia_res); \r
-               hx3695_write_reg(0X45, phase5_ldr1_cur);    //LED_DRV1_CUR\r
-               hx3695_write_reg(0x70, phase5_ldr2_cur);   //ps8--ps1  led_drv2_cur\r
-               hx3695_write_reg(0X46, (phase5_pd_sel));    //<<4 | 0x00));\r
-               hx3695_write_reg(0X47, phase5_als_offset_idac);\r
-               hx3695_write_reg(0X48, phase5_led_offset_idac);\r
-//             hx3695_write_reg(0X48, phase1_led_offset_idac);\r
-    hx3695_write_reg(0X49,  phase5_ad_inr_ctrl<<4|phase5_ad_of_idac_ctrl); \r
-               hx3695_write_reg(0X4a, phase5_led_drv1_cha_sel);\r
-               hx3695_write_reg(0X4b, phase5_led_drv2_cha_sel);\r
-               hx3695_write_reg(0X71, phase5_dsp_mov_avg_num | phase5_dsp_iir_lp_coeff<<4);\r
-               \r
-               \r
-         hx3695_write_reg(0X43, phase6_mux_sel);  \r
-               hx3695_write_reg(0X44, phase6_tia_cap<<4|phase6_tia_res); \r
-               hx3695_write_reg(0X45, phase6_ldr1_cur);    //LED_DRV1_CUR\r
-               hx3695_write_reg(0x70, phase6_ldr2_cur);   //ps8--ps1  led_drv2_cur\r
-               hx3695_write_reg(0X46, (phase6_pd_sel<<4 | 0x00));\r
-               hx3695_write_reg(0X47, phase6_als_offset_idac);\r
-               hx3695_write_reg(0X48, phase6_led_offset_idac);\r
-//             hx3695_write_reg(0X48, phase6_led_offset_idac);\r
-    hx3695_write_reg(0X49,  phase6_ad_inr_ctrl<<4|phase6_ad_of_idac_ctrl); \r
-               hx3695_write_reg(0X4a, phase6_led_drv1_cha_sel);\r
-               hx3695_write_reg(0X4b, phase6_led_drv2_cha_sel);\r
-               hx3695_write_reg(0X71, phase6_dsp_mov_avg_num | phase6_dsp_iir_lp_coeff<<4);\r
-               \r
-       \r
-         hx3695_write_reg(0X43, phase7_mux_sel);  \r
-               hx3695_write_reg(0X44, phase7_tia_cap<<4|phase7_tia_res); \r
-               hx3695_write_reg(0X45, phase7_ldr1_cur);    //LED_DRV1_CUR\r
-               hx3695_write_reg(0x70, phase7_ldr2_cur);   //ps8--ps1  led_drv2_cur\r
-               hx3695_write_reg(0X46, (phase7_pd_sel<<4 | 0x00));\r
-               hx3695_write_reg(0X47, phase7_als_offset_idac);\r
-               hx3695_write_reg(0X48, phase7_led_offset_idac);\r
-//             hx3695_write_reg(0X48, phase7_led_offset_idac);\r
-    hx3695_write_reg(0X49,  phase7_ad_inr_ctrl<<4|phase7_ad_of_idac_ctrl); \r
-               hx3695_write_reg(0X4a, phase7_led_drv1_cha_sel);\r
-               hx3695_write_reg(0X4b, phase7_led_drv2_cha_sel);\r
-               hx3695_write_reg(0X71, phase7_dsp_mov_avg_num | phase7_dsp_iir_lp_coeff<<4);\r
-               \r
-       \r
-         hx3695_write_reg(0X43, phase8_mux_sel);  \r
-               hx3695_write_reg(0X44, phase8_tia_cap<<4|phase8_tia_res); \r
-               hx3695_write_reg(0X45, phase8_ldr1_cur);    //LED_DRV1_CUR\r
-               hx3695_write_reg(0x70, phase8_ldr2_cur);   //ps8--ps1  led_drv2_cur\r
-               hx3695_write_reg(0X46, (phase8_pd_sel<<4 | 0x00));\r
-               hx3695_write_reg(0X47, phase8_als_offset_idac);\r
-               hx3695_write_reg(0X48, phase8_led_offset_idac);\r
-//             hx3695_write_reg(0X48, phas8_led_offset_idac);\r
+    hx3695_write_reg(0X4a, phase1_led_drv1_cha_sel);\r
+    hx3695_write_reg(0X4b, phase1_led_drv2_cha_sel);\r
+    hx3695_write_reg(0X71, phase1_dsp_mov_avg_num | phase1_dsp_iir_lp_coeff<<4);\r
+    \r
+    hx3695_write_reg(0X43, phase8_mux_sel);  \r
+    hx3695_write_reg(0X44, phase8_tia_cap<<4|phase8_tia_res); \r
+    hx3695_write_reg(0X45, phase8_ldr1_cur);    //LED_DRV1_CUR\r
+    hx3695_write_reg(0x70, phase8_ldr2_cur);   //ps8--ps1  led_drv2_cur\r
+    hx3695_write_reg(0X46, (phase8_pd_sel<<4 | 0x00));\r
+    hx3695_write_reg(0X47, phase8_als_offset_idac);\r
+    hx3695_write_reg(0X48, phase8_led_offset_idac);\r
     hx3695_write_reg(0X49,  phase8_ad_inr_ctrl<<4|phase8_ad_of_idac_ctrl); \r
-               hx3695_write_reg(0X4a, phase8_led_drv1_cha_sel);\r
-               hx3695_write_reg(0X4b, phase8_led_drv2_cha_sel);\r
-               hx3695_write_reg(0X71, phase8_dsp_mov_avg_num | phase8_dsp_iir_lp_coeff<<4);\r
+    hx3695_write_reg(0X4a, phase8_led_drv1_cha_sel);\r
+    hx3695_write_reg(0X4b, phase8_led_drv2_cha_sel);\r
+    hx3695_write_reg(0X71, phase8_dsp_mov_avg_num | phase8_dsp_iir_lp_coeff<<4);\r
                \r
-\r
 // analog circuit cfg \r
-    hx3695_write_reg(0X60, 0x14);      //\r
-               hx3695_write_reg(0X61, 0xf0);   \r
-               hx3695_write_reg(0X62, 0x22); \r
-               hx3695_write_reg(0X63, 0x15); \r
-                                                                                                                                                                                                                               \r
-               hx3695_write_reg(0X64, 0x08);   \r
-               hx3695_write_reg(0X65, 0x88); //bug\r
-               \r
-               hx3695_write_reg(0X66, 0x30);   // bits<3>=adc selftest en     0x30\r
-               hx3695_write_reg(0X67, 0x23);   \r
-               hx3695_write_reg(0X68, 0x46);   \r
-               hx3695_write_reg(0X69, 0x42);   \r
-               \r
-               hx3695_write_reg(0X39, 0xff);   // ofset idac1 phase enable cfg\r
-               hx3695_write_reg(0x73, 0xff);    //led_offset_idac phase enable\r
+    hx3695_write_reg(0X60, 0x34);      //\r
+    hx3695_write_reg(0X61, 0xf0);      \r
+    hx3695_write_reg(0X62, 0x22); \r
+    hx3695_write_reg(0X63, 0x15); \r
+                                                                                                            \r
+    hx3695_write_reg(0X64, 0x08);      \r
+    hx3695_write_reg(0X65, 0x88); //bug\r
+    \r
+    hx3695_write_reg(0X66, 0x30);      // bits<3>=adc selftest en     0x30\r
+    hx3695_write_reg(0X67, 0x23);      \r
+    hx3695_write_reg(0X68, 0x46);      \r
+    hx3695_write_reg(0X69, 0x42);      \r
+    \r
+    hx3695_write_reg(0X39, 0xff);   // ofset idac1 phase enable cfg\r
+    hx3695_write_reg(0x73, 0xff);    //led_offset_idac phase enable\r
                \r
     hx3695_write_reg(0X6a, 0X0f);      \r
-               hx3695_write_reg(0X6b, 0X22);   \r
-               hx3695_write_reg(0X6c, 0X00);   \r
-               hx3695_write_reg(0X6d, 0X37);   \r
-               hx3695_write_reg(0X6e, 0X82);   \r
-               hx3695_write_reg(0X6f, 0X08);\r
+    hx3695_write_reg(0X6b, 0X22);      \r
+    hx3695_write_reg(0X6c, 0X00);      \r
+    hx3695_write_reg(0X6d, 0X37);      \r
+    hx3695_write_reg(0X6e, 0X82);      \r
+    hx3695_write_reg(0X6f, 0X00);\r
 /////////FIFO and adc conversion ready config////////\r
 /////////FIFO and adc conversion ready config////////\r
-#if defined(PPG_INT_MODE)\r
-               hx3695_write_reg(0X1b, 0x92);// bits<3:0> fifo data sel, 0000 = p1;0001= p2;0010=p3;\\r
-                                        0011=p4;0100=p5;0101=p6;0110=p7;\\r
-                                        bits<7> fifo enble\r
-                hx3695_write_reg(0X33, 0x83);   // int width                                                                                                                                           \r
-     hx3695_write_reg(0X21, 0x00);   // fifo int sel,00=FIFO INT config clear\r
-                hx3695_write_reg(0X38, 0x01);   // int sel,00=close almost full int,04=enable almost full int\r
-#elif defined(INT_MODE)               //FIFO_ALL_MOST_FULL)\r
-                hx3695_write_reg(0X1b, 0x92);// bits<3:0> fifo data sel, 0000 = p1;0001= p2;0010=p3;\\r
-                                        0011=p4;0100=p5;0101=p6;0110=p7;\\r
-                                        bits<7> fifo enble\r
-                hx3695_write_reg(0X1c, (fifo_watermark&0xff));   //fifo_watermark\r
-                hx3695_write_reg(0X1d, fifo_watermark<<8);       //bit<0>=fifo_watermark[8]  \r
-                hx3695_write_reg(0X33, 0x83);   // int width   \r
-                hx3695_write_reg(0X21, 0x00);   // fifo int sel,00=FIFO INT config clear\r
-     hx3695_write_reg(0X38, 0x04);   // int sel,00=close almost full int,04=enable almost full int\r
+#if  defined(INT_MODE)             //(FIFO_ALL_MOST_FULL)\r
+        hx3695_write_reg(0X1b, 0x90);// bits<3:0> fifo data sel, 0000 = p1;0001= p2;0010=p3;0011=p4;0100=p5;0101=p6;0110=p7;bits<7> fifo enble\r
+        hx3695_write_reg(0X1c, (fifo_watermark&0xff));   //fifo_watermark\r
+        hx3695_write_reg(0X1d, fifo_watermark<<8);       //bit<0>=fifo_watermark[8]  \r
+        hx3695_write_reg(0X33, 0x83);   // int width                                                                                                                                           \r
+        hx3695_write_reg(0X38, 0x04);   // int sel,00=close almost full int,04=enable almost full int\r
 \r
 #else\r
-                hx3695_write_reg(0X1b, 0x92);    // bits<3:0> fifo data sel, 0000 = p1;0001= p2;0010=p3;\r
-                                        // 0011=p4;0100=p5;0101=p6;0110=p7;\r
-                                        // bits<7> fifo enble                                                                          \r
-     hx3695_write_reg(0X38, 0x01);   // int sel,00=close almost full int,04=enable almost full int\r
-     \r
+        hx3695_write_reg(0X1b, 0x90);// bits<3:0> fifo data sel, 0000 = p1;0001= p2;0010=p3;0011=p4;0100=p5;0101=p6;0110=p7;\bits<7> fifo enble        \r
+        hx3695_write_reg(0X36, 0x00);                    //intrupt                                                                                                                                                                                                     \r
+        hx3695_write_reg(0X38, 0x00);   // int sel,00=close almost full int,01= prf int  04=enable almost full int\r
+\r
 #endif\r
 \r
                \r
-    hx3695_write_reg(0X26,(phase1_enable<<3)|(phase1_adc_osr)|(phase2_enable<<7)|(phase2_adc_osr<<4) ); \r
-    hx3695_write_reg(0X27,(phase3_enable<<3)|(phase3_adc_osr)|(phase4_enable<<7)|(phase4_adc_osr<<4) );  \r
-    hx3695_write_reg(0X28,(phase5_enable<<3)|(phase5_adc_osr)|(phase6_enable<<7)|(phase6_adc_osr<<4) );\r
-    hx3695_write_reg(0X29,(phase7_enable<<3)|(phase7_adc_osr)|(phase8_enable<<7)|(phase8_adc_osr<<4) );                \r
+        hx3695_write_reg(0X26,(phase1_enable<<3)|(phase1_adc_osr)|(phase2_enable<<7)|(phase2_adc_osr<<4) ); \r
+        hx3695_write_reg(0X27,(phase3_enable<<3)|(phase3_adc_osr)|(phase4_enable<<7)|(phase4_adc_osr<<4) );  \r
+        hx3695_write_reg(0X28,(phase5_enable<<3)|(phase5_adc_osr)|(phase6_enable<<7)|(phase6_adc_osr<<4) );\r
+        hx3695_write_reg(0X29,(phase7_enable<<3)|(phase7_adc_osr)|(phase8_enable<<7)|(phase8_adc_osr<<4) );            \r
 \r
 //    hx3695_write_reg(0X5c, 0x02);//soft reset\r
-    hx3695_delay_ms(5);  \r
-    hx3695_write_reg(0X5c, 0x00);//release\r
-//    read_fifo_first_flg = 1;\r
+        hx3695_delay_ms(5);  \r
+        hx3695_write_reg(0X5c, 0x00);//release\r
+\r
     return ;\r
 }\r
 \r
-void hx3695_factory_ft_int_test_config(void)//中断测试配置\r
+void hx3695_factory_ft_aging_check_config(void)\r
 {\r
-           uint16_t sample_rate = 25;                  /*config the data rate of chip alps2_fm ,uint is Hz*/\r
+    uint16_t sample_rate = 25;                  /*config the data rate of chip alps2_fm ,uint is Hz*/\r
     uint32_t prf_clk_num = 32000/sample_rate;   /*period in clk num, num = Fclk/fs */\r
 \r
-    uint8_t adc_rst_post_num=0;       /* 00=16,01=32,10=64,11=128*/      \r
-         uint8_t samp_delay_leden_num = 0; /* 00=8,01=16,10=32,11=64*/ \r
+    uint16_t fifo_watermark= 250 ;\r
+    uint8_t adc_rst_post_num= 0;       /* 00=16,01=32,10=64,11=128*/      \r
+    uint8_t samp_delay_leden_num = 0; /* 00=8,01=16,10=32,11=64*/ \r
     uint8_t samp_copy_avg = 0;        /* 0=1, 1=2, 2=4 ,3=8, 4=16*/\r
     uint8_t data_avg_num = 0;         /* 0 = 1 ; 1 = 2; 2 =4 ; 3 =8 ; 4 =16 ;*/\r
-         uint8_t phase7_8_internal = 0;    /* phase7 and phase8 prf internal cfg */\r
-               \r
+    uint8_t phase7_8_internal = 0;   //0x18;    /* phase7 and phase8 prf internal cfg */\r
+\r
+       \r
     uint8_t phase1_enable = 1;     /*phase1_enable  , 1 mean enable ; 0 mean disable */ \r
     uint8_t phase2_enable = 1;     /*phase2_enable  , 1 mean enable ; 0 mean disable */ \r
     uint8_t phase3_enable = 1;     /*phase3_enable  , 1 mean enable ; 0 mean disable */ \r
     uint8_t phase4_enable = 1;     /*phase4_enable  , 1 mean enable ; 0 mean disable */\r
-    uint8_t phase5_enable = 0;     /*phase5_enable  , 1 mean enable ; 0 mean disable */ \r
-    uint8_t phase6_enable = 0;     /*phase6_enable  , 1 mean enable ; 0 mean disable */ \r
-    uint8_t phase7_enable = 0;     /*phase7_enable  , 1 mean enable ; 0 mean disable */        \r
-         uint8_t phase8_enable = 0;     /*phase8_enable  , 1 mean enable ; 0 mean disable */ \r
+    uint8_t phase5_enable = 1;     /*phase5_enable  , 1 mean enable ; 0 mean disable */ \r
+    uint8_t phase6_enable = 1;     /*phase6_enable  , 1 mean enable ; 0 mean disable */ \r
+    uint8_t phase7_enable = 1;     /*phase7_enable  , 1 mean enable ; 0 mean disable */        \r
+    uint8_t phase8_enable = 1;     /*phase8_enable  , 1 mean enable ; 0 mean disable */ \r
 \r
     uint8_t phase1_adc_osr = 3;    /* 0 = 128 ; 1 = 256 ; 2 = 512 ; 3 = 1024 ; 4 = 2048*/\r
     uint8_t phase2_adc_osr = 3;    /* 0 = 128 ; 1 = 256 ; 2 = 512 ; 3 = 1024 ; 4 = 2048*/\r
     uint8_t phase3_adc_osr = 3;    /* 0 = 128 ; 1 = 256 ; 2 = 512 ; 3 = 1024 ; 4 = 2048*/\r
     uint8_t phase4_adc_osr = 3;    /* 0 = 128 ; 1 = 256 ; 2 = 512 ; 3 = 1024 ; 4 = 2048*/\r
-               uint8_t phase5_adc_osr = 3;    /* 0 = 128 ; 1 = 256 ; 2 = 512 ; 3 = 1024 ; 4 = 2048*/\r
-         uint8_t phase6_adc_osr = 3;    /* 0 = 128 ; 1 = 256 ; 2 = 512 ; 3 = 1024 ; 4 = 2048*/\r
-               uint8_t phase7_adc_osr = 3;    /* 0 = 128 ; 1 = 256 ; 2 = 512 ; 3 = 1024 ; 4 = 2048*/\r
-               uint8_t phase8_adc_osr = 3;    /* 0 = 128 ; 1 = 256 ; 2 = 512 ; 3 = 1024 ; 4 = 2048*/\r
+    uint8_t phase5_adc_osr = 3;    /* 0 = 128 ; 1 = 256 ; 2 = 512 ; 3 = 1024 ; 4 = 2048*/\r
+    uint8_t phase6_adc_osr = 3;    /* 0 = 128 ; 1 = 256 ; 2 = 512 ; 3 = 1024 ; 4 = 2048*/\r
+    uint8_t phase7_adc_osr = 3;    /* 0 = 128 ; 1 = 256 ; 2 = 512 ; 3 = 1024 ; 4 = 2048*/\r
+    uint8_t phase8_adc_osr = 3;    /* 0 = 128 ; 1 = 256 ; 2 = 512 ; 3 = 1024 ; 4 = 2048*/\r
                         \r
-         uint8_t phase1_mux_sel = 0;    /* sel phase1*/\r
-               uint8_t phase2_mux_sel = 1;    /* sel phase2*/\r
-               uint8_t phase3_mux_sel = 2;    /* sel phase3*/\r
-               uint8_t phase4_mux_sel = 3;    /* sel phase4*/\r
-               uint8_t phase5_mux_sel = 4;    /* sel phase5*/\r
-               uint8_t phase6_mux_sel = 5;    /* sel phase6*/\r
-               uint8_t phase7_mux_sel = 6;    /* sel phase7*/\r
-               uint8_t phase8_mux_sel = 7;    /* sel phase8*/\r
+    uint8_t phase1_mux_sel = 0;    /* sel phase1*/\r
+    uint8_t phase2_mux_sel = 1;    /* sel phase2*/\r
+    uint8_t phase3_mux_sel = 2;    /* sel phase3*/\r
+    uint8_t phase4_mux_sel = 3;    /* sel phase4*/\r
+    uint8_t phase5_mux_sel = 4;    /* sel phase5*/\r
+    uint8_t phase6_mux_sel = 5;    /* sel phase6*/\r
+    uint8_t phase7_mux_sel = 6;    /* sel phase7*/\r
+    uint8_t phase8_mux_sel = 7;    /* sel phase8*/\r
        \r
 \r
-         uint8_t phase1_inner_avg = 0;   /* phase1 adc avg num 0=1, 1=2, 2=4, 3=8 , 4=16*/\r
-    uint8_t phase1_tia_res = 3;     /* 0= 10K; 1= 20k; 2= 50k; 3= 100k; 4= 150k; 5= 200k; 6= 500k; 7= 1M*/\r
-               uint8_t phase1_tia_cap = 4;     /* 0= ; 1= ; 2= ; 3= ; 4= ; 5= ; 6= ; 7= */\r
+    uint8_t phase1_inner_avg = 0;   /* phase1 adc avg num 0=1, 1=2, 2=4, 3=8 , 4=16*/\r
+    uint8_t phase1_tia_res = PS_AGING_TIA;     /* 0= 10K; 1= 20k; 2= 50k; 3= 100k; 4= 150k; 5= 200k; 6= 500k; 7= 1M*/\r
+    uint8_t phase1_tia_cap = 4;     /* 0= ; 1= ; 2= ; 3= ; 4= ; 5= ; 6= ; 7= */\r
     uint8_t phase1_led_drv1_cha_sel = 0;     /* 1 = ldr1  NG; 2 = ldr2   GR; 4 = ldr3  IR; 8 = ldr4 RED; */\r
     uint8_t phase1_led_drv2_cha_sel = 0;    /*ldr5:0x20  ldr6: 0x40 red    ldr8 0x80  ir      */\r
-               uint8_t phase1_pd_sel = 0x0c;          /* 1 = pd1; 2 = pd2; 4 = pd3*/\r
-    uint8_t phase1_als_offset_idac = 0; /* 0~255 = 0 ~ 128ua , step = 0.5ua */\r
-               uint8_t phase1_led_offset_idac = 0; /* 0~255 = 0 ~ 64ua , step = 0.25ua */\r
+    uint8_t phase1_pd_sel = ALS_PD_FT_SEL;          /* 1 = pd1; 2 = pd2; 4 = pd3*/\r
+    uint8_t phase1_als_offset_idac = 1; /* 0~255 = 0 ~ 128ua , step = 0.5ua */\r
+    uint8_t phase1_led_offset_idac = 1; /* 0~255 = 0 ~ 64ua , step = 0.25ua */\r
     uint8_t phase1_ldr1_cur = 0;     /* 0~255 = 0 ~ 200ma, step = 0.8ma */\r
-               uint8_t phase1_ldr2_cur = 0;\r
-//             uint8_t phase1_of_idac1_cur = 0;\r
-//    uint8_t phase1_of_idac2_cur = 0;\r
+    uint8_t phase1_ldr2_cur = 0;\r
     uint8_t phase1_ad_inr_ctrl = 3;\r
     uint8_t phase1_ad_of_idac_ctrl = 0;\r
-//    uint8_t afe_offset  =  0;\r
-    uint8_t phase1_led_en = 1;      /* phase1 led enable*/\r
-               \r
-               uint8_t phase1_dsp_mov_avg_num = 0; /* 0=bypass ; 1=2 ; 2=4 ; 3=8 */\r
+    uint8_t phase1_led_en = 1;      /* phase1 led enable*/     \r
+    uint8_t phase1_dsp_mov_avg_num = 0; /* 0=bypass ; 1=2 ; 2=4 ; 3=8 */\r
     uint8_t phase1_dsp_iir_lp_coeff = 0; /* 0=bypass ; 1=1/2 ; 2=1/4 ; 3=1/8 ,...,7=1/128 */\r
 \r
 \r
 \r
-         uint8_t phase2_inner_avg = 0;   /* phase1 adc avg num 0=1, 1=2, 2=4, 3=8 , 4=16*/\r
-    uint8_t phase2_tia_res = 3;     /* 0= 10K; 1= 20k; 2= 50k; 3= 100k; 4= 150k; 5= 200k; 6= 500k; 7= 1M*/\r
-               uint8_t phase2_tia_cap = 4;     /* 0= ; 1= ; 2= ; 3= ; 4= ; 5= ; 6= ; 7= */\r
-    uint8_t phase2_led_drv1_cha_sel = GREEN_LED_SLE;     /* 1 = ldr1; 2 = ldr2; 4 = ldr3; 8 = ldr4 ; */\r
-    uint8_t phase2_led_drv2_cha_sel = 0;\r
-               uint8_t phase2_pd_sel = 0x0c;      /* 1 = pd1; 2 = pd2; 4 = pd3*/\r
+    uint8_t phase2_inner_avg = 0;   /* phase1 adc avg num 0=1, 1=2, 2=4, 3=8 , 4=16*/\r
+    uint8_t phase2_tia_res = PS_AGING_TIA;     /* 0= 10K; 1= 20k; 2= 50k; 3= 100k; 4= 150k; 5= 200k; 6= 500k; 7= 1M*/\r
+    uint8_t phase2_tia_cap = 4;     /* 0= ; 1= ; 2= ; 3= ; 4= ; 5= ; 6= ; 7= */\r
+    uint8_t phase2_led_drv1_cha_sel = LDR0_FT_SEL;     /* 1 = ldr1; 2 = ldr2; 4 = ldr3; 8 = ldr4 ; */\r
+    uint8_t phase2_led_drv2_cha_sel = LDR0_FT_SEL;\r
+    uint8_t phase2_pd_sel = LDR0_PD_FT_SEL;      /* 1 = pd1; 2 = pd2; 4 = pd3*/\r
     uint8_t phase2_als_offset_idac = 0; /* 0~255 = 0 ~ 128ua , step = 0.5ua */\r
-               uint8_t phase2_led_offset_idac = 0; /* 0~255 = 0 ~ 64ua , step = 0.25ua */\r
-    uint8_t phase2_ldr1_cur = 15;     /* 0~255 = 0 ~ 200ma, step = 0.8ma */\r
-               uint8_t phase2_ldr2_cur = 0;\r
-//             uint8_t phase2_of_idac1_cur = 0;\r
-//    uint8_t phase2_of_idac2_cur = 0;\r
+    uint8_t phase2_led_offset_idac = 0; /* 0~255 = 0 ~ 64ua , step = 0.25ua */\r
+    uint8_t phase2_ldr1_cur = DRV1_AGING_CUR;     /* 0~255 = 0 ~ 200ma, step = 0.8ma */\r
+    uint8_t phase2_ldr2_cur = DRV2_AGING_CUR;\r
     uint8_t phase2_ad_inr_ctrl = 3;\r
     uint8_t phase2_ad_of_idac_ctrl = 0;\r
-//    uint8_t phase2_afe_offset  =  0;\r
-    uint8_t phase2_led_en = 1;      /* phase1 led enable*/\r
-               \r
-               uint8_t phase2_dsp_mov_avg_num = 0; /* 0=bypass ; 1=2 ; 2=4 ; 3=8 */\r
+    uint8_t phase2_led_en = 1;      /* phase1 led enable*/             \r
+    uint8_t phase2_dsp_mov_avg_num = 0; /* 0=bypass ; 1=2 ; 2=4 ; 3=8 */\r
     uint8_t phase2_dsp_iir_lp_coeff = 0; /* 0=bypass ; 1=1/2 ; 2=1/4 ; 3=1/8 ,...,7=1/128 */\r
 \r
                \r
     uint8_t phase3_inner_avg = 0;   /* phase1 adc avg num 0=1, 1=2, 2=4, 3=8 , 4=16*/\r
-    uint8_t phase3_tia_res = 3;     /* 0= 10K; 1= 20k; 2= 50k; 3= 100k; 4= 150k; 5= 200k; 6= 500k; 7= 1M*/\r
-               uint8_t phase3_tia_cap = 4;     /* 0= ; 1= ; 2= ; 3= ; 4= ; 5= ; 6= ; 7= */\r
-    uint8_t phase3_led_drv1_cha_sel = RED_LED_SLE;     /* 1 = ldr1; 2 = ldr2; 4 = ldr3; 8 = ldr4 ; */\r
-    uint8_t phase3_led_drv2_cha_sel = 0;\r
-               uint8_t phase3_pd_sel = 0x0c;      /* 1 = pd1; 2 = pd2; 4 = pd3*/\r
+    uint8_t phase3_tia_res = PS_AGING_TIA;     /* 0= 10K; 1= 20k; 2= 50k; 3= 100k; 4= 150k; 5= 200k; 6= 500k; 7= 1M*/\r
+    uint8_t phase3_tia_cap = 4;     /* 0= ; 1= ; 2= ; 3= ; 4= ; 5= ; 6= ; 7= */\r
+    uint8_t phase3_led_drv1_cha_sel = LDR1_FT_SEL;     /* 1 = ldr1; 2 = ldr2; 4 = ldr3; 8 = ldr4 ; */\r
+    uint8_t phase3_led_drv2_cha_sel = LDR1_FT_SEL;\r
+    uint8_t phase3_pd_sel = LDR1_PD_FT_SEL;      /* 1 = pd1; 2 = pd2; 4 = pd3*/\r
     uint8_t phase3_als_offset_idac = 0; /* 0~255 = 0 ~ 128ua , step = 0.5ua */\r
-               uint8_t phase3_led_offset_idac = 0; /* 0~255 = 0 ~ 64ua , step = 0.25ua */\r
-    uint8_t phase3_ldr1_cur = 15;     /* 0~255 = 0 ~ 200ma, step = 0.8ma */\r
-               uint8_t phase3_ldr2_cur = 0;\r
-//             uint8_t phase3_of_idac1_cur = 0;\r
-//    uint8_t phase3_of_idac2_cur = 0;\r
+    uint8_t phase3_led_offset_idac = 0; /* 0~255 = 0 ~ 64ua , step = 0.25ua */\r
+    uint8_t phase3_ldr1_cur = DRV1_AGING_CUR;     /* 0~255 = 0 ~ 200ma, step = 0.8ma */\r
+    uint8_t phase3_ldr2_cur = DRV2_AGING_CUR;\r
     uint8_t phase3_ad_inr_ctrl = 3;\r
     uint8_t phase3_ad_of_idac_ctrl = 0;\r
-//    uint8_t phase3_afe_offset  =  0;\r
-    uint8_t phase3_led_en = 1;      /* phase1 led enable*/\r
-               \r
-               uint8_t phase3_dsp_mov_avg_num = 0; /* 0=bypass ; 1=2 ; 2=4 ; 3=8 */\r
+    uint8_t phase3_led_en = 1;      /* phase1 led enable*/             \r
+    uint8_t phase3_dsp_mov_avg_num = 0; /* 0=bypass ; 1=2 ; 2=4 ; 3=8 */\r
     uint8_t phase3_dsp_iir_lp_coeff = 0; /* 0=bypass ; 1=1/2 ; 2=1/4 ; 3=1/8 ,...,7=1/128 */\r
 \r
                \r
     uint8_t phase4_inner_avg = 0;   /* phase1 adc avg num 0=1, 1=2, 2=4, 3=8 , 4=16*/\r
-    uint8_t phase4_tia_res = 3;     /* 0= 10K; 1= 20k; 2= 50k; 3= 100k; 4= 150k; 5= 200k; 6= 500k; 7= 1M*/\r
-               uint8_t phase4_tia_cap = 4;     /* 0= ; 1= ; 2= ; 3= ; 4= ; 5= ; 6= ; 7= */\r
-    uint8_t phase4_led_drv1_cha_sel = IR_LED_SLE;     /* 1 = ldr1; 2 = ldr2; 4 = ldr3; 8 = ldr4 ; */\r
-    uint8_t phase4_led_drv2_cha_sel = 0;\r
-               uint8_t phase4_pd_sel = 0x0c;      /* 1 = pd1; 2 = pd2; 4 = pd3*/\r
+    uint8_t phase4_tia_res = PS_AGING_TIA;     /* 0= 10K; 1= 20k; 2= 50k; 3= 100k; 4= 150k; 5= 200k; 6= 500k; 7= 1M*/\r
+    uint8_t phase4_tia_cap = 4;     /* 0= ; 1= ; 2= ; 3= ; 4= ; 5= ; 6= ; 7= */\r
+    uint8_t phase4_led_drv1_cha_sel = LDR2_FT_SEL;     /* 1 = ldr1; 2 = ldr2; 4 = ldr3; 8 = ldr4 ; */\r
+    uint8_t phase4_led_drv2_cha_sel = LDR2_FT_SEL;\r
+    uint8_t phase4_pd_sel = LDR2_PD_FT_SEL;      /* 1 = pd1; 2 = pd2; 4 = pd3*/\r
     uint8_t phase4_als_offset_idac = 0; /* 0~255 = 0 ~ 128ua , step = 0.5ua */\r
-               uint8_t phase4_led_offset_idac = 0; /* 0~255 = 0 ~ 64ua , step = 0.25ua */\r
-    uint8_t phase4_ldr1_cur = 15;     /* 0~255 = 0 ~ 200ma, step = 0.8ma */\r
-               uint8_t phase4_ldr2_cur = 0;\r
-//             uint8_t phase4_of_idac1_cur = 0;\r
-//    uint8_t phase4_of_idac2_cur = 0;\r
+    uint8_t phase4_led_offset_idac = 0; /* 0~255 = 0 ~ 64ua , step = 0.25ua */\r
+    uint8_t phase4_ldr1_cur = DRV1_AGING_CUR;     /* 0~255 = 0 ~ 200ma, step = 0.8ma */\r
+    uint8_t phase4_ldr2_cur = DRV2_AGING_CUR;\r
     uint8_t phase4_ad_inr_ctrl = 3;\r
     uint8_t phase4_ad_of_idac_ctrl = 0;\r
-//    uint8_t phase4_afe_offset  =  0;\r
-    uint8_t phase4_led_en = 1;      /* phase1 led enable*/\r
-               \r
-               uint8_t phase4_dsp_mov_avg_num = 0; /* 0=bypass ; 1=2 ; 2=4 ; 3=8 */\r
+    uint8_t phase4_led_en = 1;      /* phase1 led enable*/             \r
+    uint8_t phase4_dsp_mov_avg_num = 0; /* 0=bypass ; 1=2 ; 2=4 ; 3=8 */\r
     uint8_t phase4_dsp_iir_lp_coeff = 0; /* 0=bypass ; 1=1/2 ; 2=1/4 ; 3=1/8 ,...,7=1/128 */\r
 \r
     uint8_t phase5_inner_avg = 0;   /* phase1 adc avg num 0=1, 1=2, 2=4, 3=8 , 4=16*/\r
-    uint8_t phase5_tia_res = 0;     /* 0= 10K; 1= 20k; 2= 50k; 3= 100k; 4= 150k; 5= 200k; 6= 500k; 7= 1M*/\r
-               uint8_t phase5_tia_cap = 4;     /* 0= ; 1= ; 2= ; 3= ; 4= ; 5= ; 6= ; 7= */\r
-    uint8_t phase5_led_drv1_cha_sel = 0;     /* 1 = ldr1; 2 = ldr2; 4 = ldr3; 8 = ldr4 ; */\r
-    uint8_t phase5_led_drv2_cha_sel = 0;\r
-               uint8_t phase5_pd_sel = 0x0c;      /* 1 = pd1; 2 = pd2; */\r
+    uint8_t phase5_tia_res = PS_AGING_TIA;     /* 0= 10K; 1= 20k; 2= 50k; 3= 100k; 4= 150k; 5= 200k; 6= 500k; 7= 1M*/\r
+    uint8_t phase5_tia_cap = 4;     /* 0= ; 1= ; 2= ; 3= ; 4= ; 5= ; 6= ; 7= */\r
+    uint8_t phase5_led_drv1_cha_sel = LDR3_FT_SEL;     /* 1 = ldr1; 2 = ldr2; 4 = ldr3; 8 = ldr4 ; */\r
+    uint8_t phase5_led_drv2_cha_sel = LDR3_FT_SEL;\r
+    uint8_t phase5_pd_sel = LDR3_PD_FT_SEL;      /* 1 = pd1; 2 = pd2; */\r
     uint8_t phase5_als_offset_idac = 0; /* 0~255 = 0 ~ 128ua , step = 0.5ua */\r
-               uint8_t phase5_led_offset_idac = 0; /* 0~255 = 0 ~ 64ua , step = 0.25ua */\r
-    uint8_t phase5_ldr1_cur = 0;     /* 0~255 = 0 ~ 200ma, step = 0.8ma */\r
-               uint8_t phase5_ldr2_cur = 0;\r
-//             uint8_t phase5_of_idac1_cur = 0;\r
-//    uint8_t phase5_of_idac2_cur = 0;\r
+    uint8_t phase5_led_offset_idac = 0; /* 0~255 = 0 ~ 64ua , step = 0.25ua */\r
+    uint8_t phase5_ldr1_cur = DRV1_AGING_CUR;     /* 0~255 = 0 ~ 200ma, step = 0.8ma */\r
+    uint8_t phase5_ldr2_cur = DRV2_AGING_CUR;\r
     uint8_t phase5_ad_inr_ctrl = 3;\r
     uint8_t phase5_ad_of_idac_ctrl = 0;\r
-//    uint8_t phase5_afe_offset  =  0;\r
-    uint8_t phase5_led_en = 1;      /* phase1 led enable*/\r
-               \r
-               uint8_t phase5_dsp_mov_avg_num = 0; /* 0=bypass ; 1=2 ; 2=4 ; 3=8 */\r
+    uint8_t phase5_led_en = 1;      /* phase1 led enable*/             \r
+    uint8_t phase5_dsp_mov_avg_num = 0; /* 0=bypass ; 1=2 ; 2=4 ; 3=8 */\r
     uint8_t phase5_dsp_iir_lp_coeff = 0; /* 0=bypass ; 1=1/2 ; 2=1/4 ; 3=1/8 ,...,7=1/128 */\r
 \r
     uint8_t phase6_inner_avg = 0;   /* phase1 adc avg num 0=1, 1=2, 2=4, 3=8 , 4=16*/\r
-    uint8_t phase6_tia_res = 0;     /* 0= 10K; 1= 20k; 2= 50k; 3= 100k; 4= 150k; 5= 200k; 6= 500k; 7= 1M*/\r
-               uint8_t phase6_tia_cap = 4;     /* 0= ; 1= ; 2= ; 3= ; 4= ; 5= ; 6= ; 7= */\r
-    uint8_t phase6_led_drv1_cha_sel = 0;     /* 1 = ldr1; 2 = ldr2; 4 = ldr3; 8 = ldr4 ; */\r
-    uint8_t phase6_led_drv2_cha_sel = 0;\r
-               uint8_t phase6_pd_sel = 0x0c;      /* 1 = pd1; 2 = pd2; */\r
+    uint8_t phase6_tia_res = PS_AGING_TIA;     /* 0= 10K; 1= 20k; 2= 50k; 3= 100k; 4= 150k; 5= 200k; 6= 500k; 7= 1M*/\r
+    uint8_t phase6_tia_cap = 4;     /* 0= ; 1= ; 2= ; 3= ; 4= ; 5= ; 6= ; 7= */\r
+    uint8_t phase6_led_drv1_cha_sel = LDR4_FT_SEL;     /* 1 = ldr1; 2 = ldr2; 4 = ldr3; 8 = ldr4 ; */\r
+    uint8_t phase6_led_drv2_cha_sel = LDR4_FT_SEL;\r
+    uint8_t phase6_pd_sel = LDR4_PD_FT_SEL;      /* 1 = pd1; 2 = pd2; */\r
     uint8_t phase6_als_offset_idac = 0; /* 0~255 = 0 ~ 128ua , step = 0.5ua */\r
-               uint8_t phase6_led_offset_idac = 0; /* 0~255 = 0 ~ 64ua , step = 0.25ua */\r
-    uint8_t phase6_ldr1_cur = 0;     /* 0~255 = 0 ~ 200ma, step = 0.8ma */\r
-               uint8_t phase6_ldr2_cur = 0;\r
-//             uint8_t phase6_of_idac1_cur = 0;\r
-//    uint8_t phase6_of_idac2_cur = 0;\r
+    uint8_t phase6_led_offset_idac = 0; /* 0~255 = 0 ~ 64ua , step = 0.25ua */\r
+    uint8_t phase6_ldr1_cur = DRV1_AGING_CUR;     /* 0~255 = 0 ~ 200ma, step = 0.8ma */\r
+    uint8_t phase6_ldr2_cur = DRV2_AGING_CUR;\r
     uint8_t phase6_ad_inr_ctrl = 3;\r
     uint8_t phase6_ad_of_idac_ctrl = 0;\r
-//    uint8_t phase6_afe_offset  =  0;\r
-    uint8_t phase6_led_en = 1;      /* phase1 led enable*/\r
-               \r
-               uint8_t phase6_dsp_mov_avg_num = 0; /* 0=bypass ; 1=2 ; 2=4 ; 3=8 */\r
+    uint8_t phase6_led_en = 1;      /* phase1 led enable*/             \r
+    uint8_t phase6_dsp_mov_avg_num = 0; /* 0=bypass ; 1=2 ; 2=4 ; 3=8 */\r
     uint8_t phase6_dsp_iir_lp_coeff = 0; /* 0=bypass ; 1=1/2 ; 2=1/4 ; 3=1/8 ,...,7=1/128 */\r
 \r
     uint8_t phase7_inner_avg = 0;   /* phase1 adc avg num 0=1, 1=2, 2=4, 3=8 , 4=16*/\r
-    uint8_t phase7_tia_res = 0;     /* 0= 10K; 1= 20k; 2= 50k; 3= 100k; 4= 150k; 5= 200k; 6= 500k; 7= 1M*/\r
-               uint8_t phase7_tia_cap = 4;     /* 0= ; 1= ; 2= ; 3= ; 4= ; 5= ; 6= ; 7= */\r
-    uint8_t phase7_led_drv1_cha_sel = 0;     /* 1 = ldr1; 2 = ldr2; 4 = ldr3; 8 = ldr4 ; */\r
-    uint8_t phase7_led_drv2_cha_sel = 0;\r
-               uint8_t phase7_pd_sel = 0x0c;      /* 1 = pd1; 2 = pd2; */\r
+    uint8_t phase7_tia_res = PS_AGING_TIA;     /* 0= 10K; 1= 20k; 2= 50k; 3= 100k; 4= 150k; 5= 200k; 6= 500k; 7= 1M*/\r
+    uint8_t phase7_tia_cap = 4;     /* 0= ; 1= ; 2= ; 3= ; 4= ; 5= ; 6= ; 7= */\r
+    uint8_t phase7_led_drv1_cha_sel = LDR5_FT_SEL;     /* 1 = ldr1; 2 = ldr2; 4 = ldr3; 8 = ldr4 ; */\r
+    uint8_t phase7_led_drv2_cha_sel = LDR5_FT_SEL;\r
+    uint8_t phase7_pd_sel = LDR5_PD_FT_SEL;      /* 1 = pd1; 2 = pd2; */\r
     uint8_t phase7_als_offset_idac = 0; /* 0~255 = 0 ~ 128ua , step = 0.5ua */\r
-               uint8_t phase7_led_offset_idac = 0; /* 0~255 = 0 ~ 64ua , step = 0.25ua */\r
-    uint8_t phase7_ldr1_cur = 0;     /* 0~255 = 0 ~ 200ma, step = 0.8ma */\r
-               uint8_t phase7_ldr2_cur = 0;\r
-//             uint8_t phase7_of_idac1_cur = 0;\r
-//    uint8_t phase7_of_idac2_cur = 0;\r
+    uint8_t phase7_led_offset_idac = 0; /* 0~255 = 0 ~ 64ua , step = 0.25ua */\r
+    uint8_t phase7_ldr1_cur = DRV1_AGING_CUR;     /* 0~255 = 0 ~ 200ma, step = 0.8ma */\r
+    uint8_t phase7_ldr2_cur = DRV2_AGING_CUR;\r
     uint8_t phase7_ad_inr_ctrl = 3;\r
     uint8_t phase7_ad_of_idac_ctrl = 0;\r
-//    uint8_t phase7_afe_offset  =  0;\r
-    uint8_t phase7_led_en = 1;      /* phase1 led enable*/\r
-               \r
-               uint8_t phase7_dsp_mov_avg_num = 0; /* 0=bypass ; 1=2 ; 2=4 ; 3=8 */\r
+    uint8_t phase7_led_en = 1;      /* phase1 led enable*/     \r
+    uint8_t phase7_dsp_mov_avg_num = 0; /* 0=bypass ; 1=2 ; 2=4 ; 3=8 */\r
     uint8_t phase7_dsp_iir_lp_coeff = 0; /* 0=bypass ; 1=1/2 ; 2=1/4 ; 3=1/8 ,...,7=1/128 */\r
 \r
     uint8_t phase8_inner_avg = 0;   /* phase1 adc avg num 0=1, 1=2, 2=4, 3=8 , 4=16*/\r
-    uint8_t phase8_tia_res = 0;     /* 0= 10K; 1= 20k; 2= 50k; 3= 100k; 4= 150k; 5= 200k; 6= 500k; 7= 1M*/\r
-               uint8_t phase8_tia_cap = 4;     /* 0= ; 1= ; 2= ; 3= ; 4= ; 5= ; 6= ; 7= */\r
-    uint8_t phase8_led_drv1_cha_sel = 0;   //IR_LED_SLE;     /* 1 = ldr1; 2 = ldr2; 4 = ldr3; 8 = ldr4 ; */\r
+    uint8_t phase8_tia_res = 5;     /* 0= 10K; 1= 20k; 2= 50k; 3= 100k; 4= 150k; 5= 200k; 6= 500k; 7= 1M*/\r
+    uint8_t phase8_tia_cap = 4;     /* 0= ; 1= ; 2= ; 3= ; 4= ; 5= ; 6= ; 7= */\r
+    uint8_t phase8_led_drv1_cha_sel = 0;     /* 1 = ldr1; 2 = ldr2; 4 = ldr3; 8 = ldr4 ; */\r
     uint8_t phase8_led_drv2_cha_sel = 0;\r
-               uint8_t phase8_pd_sel = 0x0c;      /* 1 = pd1; 2 = pd2; */\r
+    uint8_t phase8_pd_sel = 0;      /* 1 = pd1; 2 = pd2; */\r
     uint8_t phase8_als_offset_idac = 0; /* 0~255 = 0 ~ 128ua , step = 0.5ua */\r
-               uint8_t phase8_led_offset_idac = 0; /* 0~255 = 0 ~ 64ua , step = 0.25ua */\r
+    uint8_t phase8_led_offset_idac = 0; /* 0~255 = 0 ~ 64ua , step = 0.25ua */\r
     uint8_t phase8_ldr1_cur = 0;     /* 0~255 = 0 ~ 200ma, step = 0.8ma */\r
-               uint8_t phase8_ldr2_cur = 0;\r
-//             uint8_t phase8_of_idac1_cur = 0;\r
-//    uint8_t phase8_of_idac2_cur = 0;\r
+    uint8_t phase8_ldr2_cur = 0;\r
     uint8_t phase8_ad_inr_ctrl = 3;\r
     uint8_t phase8_ad_of_idac_ctrl = 0;\r
-//    uint8_t phase8_afe_offset  =  0;\r
-    uint8_t phase8_led_en = 1;      /* phase1 led enable*/\r
-               \r
-               uint8_t phase8_dsp_mov_avg_num = 0; /* 0=bypass ; 1=2 ; 2=4 ; 3=8 */\r
+    uint8_t phase8_led_en = 1;      /* phase1 led enable*/             \r
+    uint8_t phase8_dsp_mov_avg_num = 0; /* 0=bypass ; 1=2 ; 2=4 ; 3=8 */\r
     uint8_t phase8_dsp_iir_lp_coeff = 0; /* 0=bypass ; 1=1/2 ; 2=1/4 ; 3=1/8 ,...,7=1/128 */\r
 \r
-    uint8_t init_wait_delay = 5 ; /* 0 = 31clk ; 1 = 64clk ; 2 = 127clk ; 3 = 255clk(d) ;\r
+    uint8_t init_wait_delay = 4 ; /* 0 = 31clk ; 1 = 64clk ; 2 = 127clk ; 3 = 255clk(d) ;\r
                                      4 = 511clk; 5 = 1023clk; 6 = 2047; 7 = 4095clk */         \r
                                                                                                                                                 \r
     uint8_t afe_reset = 3;        /* 0 = 15clk ; 1 = 31clk ; 2 = 63clk ; 3 = 127clk(d) ;\r
                                      4 = 255clk; 5 = 511clk; 6 = 1024; 7 = 2047clk */\r
                                                                                                                                                 \r
-               uint8_t afe_rst_cnvt = 1;               /* 0 = 15clk ; 1 = 31clk ; 2 = 63clk ; 3 = 127clk(d)*/\r
-    \r
+    uint8_t afe_rst_cnvt = 1;                  /* 0 = 15clk ; 1 = 31clk ; 2 = 63clk ; 3 = 127clk(d)*/\r
+\r
     uint8_t led_en_idac_pre    = 2;    /* 0 = 8clk ; 1 = 16clk ; 2 = 32clk ; 3 = 64clk(d)*/ \r
-               \r
-               uint8_t led_en_idac     =       1;        /* 0 = 4clk ; 1 = 8clk ; 2 = 16clk ; 3 = 32clk(d)*/ \r
-                                                                                                                                                \r
+\r
+    uint8_t led_en_idac        =       1;        /* 0 = 4clk ; 1 = 8clk ; 2 = 16clk ; 3 = 32clk(d)*/ \r
+                                                                 \r
     uint8_t led_on_time = 2;      /* 0 = 32clk=8us ; 1 = 64clk=16us; 2=128clk=32us ; 3 = 256clk=64us ;\r
                                      4 = 512clk=128us ; 5 = 1024clk=256us; 6= 2048clk=512us; 7 = 4096clk=1024us */\r
                                                                                                                                                 \r
     hx3695_delay_ms(10);               \r
-               \r
+                       \r
     hx3695_write_reg(0X2a, (uint8_t)prf_clk_num);    // prf bit<7:0>6\r
     hx3695_write_reg(0X2b, (uint8_t)(prf_clk_num>>8)); // prf bit<15:8>\r
     hx3695_write_reg(0X2c, (uint8_t)(prf_clk_num>>16)); // prf bit<23:16>      \r
                   \r
     hx3695_write_reg(0X25, (afe_rst_cnvt<<4| led_en_idac_pre<<2|led_en_idac)); \r
-               hx3695_write_reg(0X2d, phase7_8_internal); \r
-               hx3695_write_reg(0X2e, 0x33);// gpio ctrl \r
+    hx3695_write_reg(0X2d, phase7_8_internal); \r
+    hx3695_write_reg(0X2e, 0x33);// gpio ctrl \r
     hx3695_write_reg(0X2f, ((afe_reset<<4)| init_wait_delay));\r
-               hx3695_write_reg(0X30, (phase8_led_en<<7 | phase7_led_en<<6 |phase6_led_en<<5 |phase5_led_en<<4 |phase4_led_en<<3 | phase3_led_en<<2 | phase2_led_en<<1 | phase1_led_en) );\r
+    hx3695_write_reg(0X30, (phase8_led_en<<7 | phase7_led_en<<6 |phase6_led_en<<5 |phase5_led_en<<4 |phase4_led_en<<3 | phase3_led_en<<2 | phase2_led_en<<1 | phase1_led_en) );\r
     hx3695_write_reg(0X72, (phase8_led_en<<7 | phase7_led_en<<6 |phase6_led_en<<5 |phase5_led_en<<4 |phase4_led_en<<3 | phase3_led_en<<2 | phase2_led_en<<1 | phase1_led_en) );\r
 \r
 \r
     hx3695_write_reg(0X31, (led_on_time<<4| 0x00));\r
-               hx3695_write_reg(0X33, 0x83);// 中断极性及宽度配置;\r
-               hx3695_write_reg(0X34, 0x00);// 中断特殊配置;\r
-               hx3695_write_reg(0X36, 0x00);// phase data ready 标志设置;\r
-               hx3695_write_reg(0X38, 0x00);\r
+    hx3695_write_reg(0X33, 0x83);// �жϼ��Լ��������ã�\r
+    hx3695_write_reg(0X34, 0x00);// �ж��������ã�\r
+    hx3695_write_reg(0X36, 0x00);// phase data ready ��־���ã�\r
+    hx3695_write_reg(0X38, 0x00);\r
                \r
     hx3695_write_reg(0X3a, (phase1_inner_avg | (phase2_inner_avg<<4)));  \r
     hx3695_write_reg(0X3b, (phase3_inner_avg | (phase4_inner_avg<<4)));  \r
@@ -2393,206 +1761,201 @@ void hx3695_factory_ft_int_test_config(void)//中断测试配置
     hx3695_write_reg(0X3e, adc_rst_post_num<<6 | samp_delay_leden_num<<4 | samp_copy_avg); \r
     hx3695_write_reg(0X3f, data_avg_num<<4 | data_avg_num );\r
     hx3695_write_reg(0X40, data_avg_num<<4 | data_avg_num );\r
-               hx3695_write_reg(0X41, data_avg_num<<4 | data_avg_num );\r
-               hx3695_write_reg(0X42, data_avg_num<<4 | data_avg_num );\r
-               \r
-               hx3695_write_reg(0X43, phase1_mux_sel);  \r
-               hx3695_write_reg(0X44, phase1_tia_cap<<4|phase1_tia_res); \r
-               hx3695_write_reg(0X45, phase1_ldr1_cur);    //LED_DRV1_CUR\r
-               hx3695_write_reg(0x70, phase1_ldr2_cur);   //ps8--ps1  led_drv2_cur\r
-               hx3695_write_reg(0X46, (phase1_pd_sel<<4 | 0x00));\r
-               hx3695_write_reg(0X47, phase1_als_offset_idac);\r
-               hx3695_write_reg(0X48, phase1_led_offset_idac);\r
-\r
+    hx3695_write_reg(0X41, data_avg_num<<4 | data_avg_num );\r
+    hx3695_write_reg(0X42, data_avg_num<<4 | data_avg_num );\r
+    \r
+    hx3695_write_reg(0X43, phase1_mux_sel);  \r
+    hx3695_write_reg(0X44, phase1_tia_cap<<4|phase1_tia_res); \r
+    hx3695_write_reg(0X45, phase1_ldr1_cur);    //LED_DRV1_CUR\r
+    hx3695_write_reg(0x70, phase1_ldr2_cur);   //ps8--ps1  led_drv2_cur\r
+    hx3695_write_reg(0X46, (phase1_pd_sel<<4 | 0x00));\r
+    hx3695_write_reg(0X47, phase1_als_offset_idac);\r
+    hx3695_write_reg(0X48, phase1_led_offset_idac);\r
     hx3695_write_reg(0X49, phase1_ad_inr_ctrl<<4|phase1_ad_of_idac_ctrl); \r
-               hx3695_write_reg(0X4a, phase1_led_drv1_cha_sel);\r
-               hx3695_write_reg(0X4b, phase1_led_drv2_cha_sel);\r
-               hx3695_write_reg(0X71, phase1_dsp_mov_avg_num | phase1_dsp_iir_lp_coeff<<4);\r
+    hx3695_write_reg(0X4a, phase1_led_drv1_cha_sel);\r
+    hx3695_write_reg(0X4b, phase1_led_drv2_cha_sel);\r
+    hx3695_write_reg(0X71, phase1_dsp_mov_avg_num | phase1_dsp_iir_lp_coeff<<4);\r
 \r
-//    hx3695_write_reg(0X4e, thred_value);\r
-//    hx3695_write_reg(0X4f, thred_value>>5);\r
-               \r
+       \r
     hx3695_write_reg(0X43, phase2_mux_sel);  \r
-               hx3695_write_reg(0X44, phase2_tia_cap<<4|phase2_tia_res); \r
-               hx3695_write_reg(0X45, phase2_ldr1_cur);    //LED_DRV1_CUR\r
-               hx3695_write_reg(0x70, phase2_ldr2_cur);   //ps8--ps1  led_drv2_cur\r
-               hx3695_write_reg(0X46, (phase2_pd_sel<<4 | 0x00));\r
-               hx3695_write_reg(0X47, phase2_als_offset_idac);\r
-               hx3695_write_reg(0X48, phase2_led_offset_idac);\r
-//             hx3695_write_reg(0X48, phase1_led_offset_idac);\r
+    hx3695_write_reg(0X44, phase2_tia_cap<<4|phase2_tia_res); \r
+    hx3695_write_reg(0X45, phase2_ldr1_cur);    //LED_DRV1_CUR\r
+    hx3695_write_reg(0x70, phase2_ldr2_cur);   //ps8--ps1  led_drv2_cur\r
+    hx3695_write_reg(0X46, (phase2_pd_sel<<4 | 0x00));\r
+    hx3695_write_reg(0X47, phase2_als_offset_idac);\r
+    hx3695_write_reg(0X48, phase2_led_offset_idac);\r
     hx3695_write_reg(0X49,  phase2_ad_inr_ctrl<<4|phase2_ad_of_idac_ctrl); \r
-               hx3695_write_reg(0X4a, phase2_led_drv1_cha_sel);\r
-               hx3695_write_reg(0X4b, phase2_led_drv2_cha_sel);\r
-               hx3695_write_reg(0X71, phase2_dsp_mov_avg_num | phase2_dsp_iir_lp_coeff<<4);\r
+    hx3695_write_reg(0X4a, phase2_led_drv1_cha_sel);\r
+    hx3695_write_reg(0X4b, phase2_led_drv2_cha_sel);\r
+    hx3695_write_reg(0X71, phase2_dsp_mov_avg_num | phase2_dsp_iir_lp_coeff<<4);\r
                \r
 //phase3 sel\r
 \r
     hx3695_write_reg(0X43, phase3_mux_sel);  \r
-               hx3695_write_reg(0X44, phase3_tia_cap<<4|phase3_tia_res); \r
-               hx3695_write_reg(0X45, phase3_ldr1_cur);    //LED_DRV1_CUR\r
-               hx3695_write_reg(0x70, phase3_ldr2_cur);   //ps8--ps1  led_drv2_cur\r
-               hx3695_write_reg(0X46, (phase3_pd_sel<<4 | 0x00));\r
-               hx3695_write_reg(0X47, phase3_als_offset_idac);\r
-               hx3695_write_reg(0X48, phase3_led_offset_idac);\r
-//             hx3695_write_reg(0X48, phase1_led_offset_idac);\r
+    hx3695_write_reg(0X44, phase3_tia_cap<<4|phase3_tia_res); \r
+    hx3695_write_reg(0X45, phase3_ldr1_cur);    //LED_DRV1_CUR\r
+    hx3695_write_reg(0x70, phase3_ldr2_cur);   //ps8--ps1  led_drv2_cur\r
+    hx3695_write_reg(0X46, (phase3_pd_sel<<4 | 0x00));\r
+    hx3695_write_reg(0X47, phase3_als_offset_idac);\r
+    hx3695_write_reg(0X48, phase3_led_offset_idac);\r
     hx3695_write_reg(0X49,  phase3_ad_inr_ctrl<<4|phase3_ad_of_idac_ctrl); \r
-               hx3695_write_reg(0X4a, phase3_led_drv1_cha_sel);\r
-               hx3695_write_reg(0X4b, phase3_led_drv2_cha_sel);\r
-               hx3695_write_reg(0X71, phase3_dsp_mov_avg_num | phase3_dsp_iir_lp_coeff<<4);\r
+    hx3695_write_reg(0X4a, phase3_led_drv1_cha_sel);\r
+    hx3695_write_reg(0X4b, phase3_led_drv2_cha_sel);\r
+    hx3695_write_reg(0X71, phase3_dsp_mov_avg_num | phase3_dsp_iir_lp_coeff<<4);\r
                \r
 //phase4 sel\r
 \r
     hx3695_write_reg(0X43, phase4_mux_sel);  \r
-               hx3695_write_reg(0X44, phase4_tia_cap<<4|phase4_tia_res); \r
-               hx3695_write_reg(0X45, phase4_ldr1_cur);    //LED_DRV1_CUR\r
-               hx3695_write_reg(0x70, phase4_ldr2_cur);   //ps8--ps1  led_drv2_cur\r
-               hx3695_write_reg(0X46, (phase4_pd_sel<<4 | 0x00));\r
-               hx3695_write_reg(0X47, phase4_als_offset_idac);\r
-               hx3695_write_reg(0X48, phase4_led_offset_idac);\r
-//             hx3695_write_reg(0X48, phase1_led_offset_idac);\r
+    hx3695_write_reg(0X44, phase4_tia_cap<<4|phase4_tia_res); \r
+    hx3695_write_reg(0X45, phase4_ldr1_cur);    //LED_DRV1_CUR\r
+    hx3695_write_reg(0x70, phase4_ldr2_cur);   //ps8--ps1  led_drv2_cur\r
+    hx3695_write_reg(0X46, (phase4_pd_sel<<4 | 0x00));\r
+    hx3695_write_reg(0X47, phase4_als_offset_idac);\r
+    hx3695_write_reg(0X48, phase4_led_offset_idac);\r
     hx3695_write_reg(0X49,  phase4_ad_inr_ctrl<<4|phase4_ad_of_idac_ctrl); \r
-               hx3695_write_reg(0X4a, phase4_led_drv1_cha_sel);\r
-               hx3695_write_reg(0X4b, phase4_led_drv2_cha_sel);\r
-               hx3695_write_reg(0X71, phase4_dsp_mov_avg_num | phase4_dsp_iir_lp_coeff<<4);\r
-\r
-               hx3695_write_reg(0X43, phase5_mux_sel);  \r
-               hx3695_write_reg(0X44, phase5_tia_cap<<4|phase5_tia_res); \r
-               hx3695_write_reg(0X45, phase5_ldr1_cur);    //LED_DRV1_CUR\r
-               hx3695_write_reg(0x70, phase5_ldr2_cur);   //ps8--ps1  led_drv2_cur\r
-               hx3695_write_reg(0X46, (phase5_pd_sel));    //<<4 | 0x00));\r
-               hx3695_write_reg(0X47, phase5_als_offset_idac);\r
-               hx3695_write_reg(0X48, phase5_led_offset_idac);\r
-//             hx3695_write_reg(0X48, phase1_led_offset_idac);\r
+    hx3695_write_reg(0X4a, phase4_led_drv1_cha_sel);\r
+    hx3695_write_reg(0X4b, phase4_led_drv2_cha_sel);\r
+    hx3695_write_reg(0X71, phase4_dsp_mov_avg_num | phase4_dsp_iir_lp_coeff<<4);\r
+\r
+    hx3695_write_reg(0X43, phase5_mux_sel);  \r
+    hx3695_write_reg(0X44, phase5_tia_cap<<4|phase5_tia_res); \r
+    hx3695_write_reg(0X45, phase5_ldr1_cur);    //LED_DRV1_CUR\r
+    hx3695_write_reg(0x70, phase5_ldr2_cur);   //ps8--ps1  led_drv2_cur\r
+    hx3695_write_reg(0X46, (phase5_pd_sel<<4 | 0x00));\r
+    hx3695_write_reg(0X47, phase5_als_offset_idac);\r
+    hx3695_write_reg(0X48, phase5_led_offset_idac);\r
     hx3695_write_reg(0X49,  phase5_ad_inr_ctrl<<4|phase5_ad_of_idac_ctrl); \r
-               hx3695_write_reg(0X4a, phase5_led_drv1_cha_sel);\r
-               hx3695_write_reg(0X4b, phase5_led_drv2_cha_sel);\r
-               hx3695_write_reg(0X71, phase5_dsp_mov_avg_num | phase5_dsp_iir_lp_coeff<<4);\r
-               \r
-               \r
-         hx3695_write_reg(0X43, phase6_mux_sel);  \r
-               hx3695_write_reg(0X44, phase6_tia_cap<<4|phase6_tia_res); \r
-               hx3695_write_reg(0X45, phase6_ldr1_cur);    //LED_DRV1_CUR\r
-               hx3695_write_reg(0x70, phase6_ldr2_cur);   //ps8--ps1  led_drv2_cur\r
-               hx3695_write_reg(0X46, (phase6_pd_sel<<4 | 0x00));\r
-               hx3695_write_reg(0X47, phase6_als_offset_idac);\r
-               hx3695_write_reg(0X48, phase6_led_offset_idac);\r
-//             hx3695_write_reg(0X48, phase6_led_offset_idac);\r
+    hx3695_write_reg(0X4a, phase5_led_drv1_cha_sel);\r
+    hx3695_write_reg(0X4b, phase5_led_drv2_cha_sel);\r
+    hx3695_write_reg(0X71, phase5_dsp_mov_avg_num | phase5_dsp_iir_lp_coeff<<4);\r
+               \r
+               \r
+    hx3695_write_reg(0X43, phase6_mux_sel);  \r
+    hx3695_write_reg(0X44, phase6_tia_cap<<4|phase6_tia_res); \r
+    hx3695_write_reg(0X45, phase6_ldr1_cur);    //LED_DRV1_CUR\r
+    hx3695_write_reg(0x70, phase6_ldr2_cur);   //ps8--ps1  led_drv2_cur\r
+    hx3695_write_reg(0X46, (phase6_pd_sel<<4 | 0x00));\r
+    hx3695_write_reg(0X47, phase6_als_offset_idac);\r
+    hx3695_write_reg(0X48, phase6_led_offset_idac);\r
     hx3695_write_reg(0X49,  phase6_ad_inr_ctrl<<4|phase6_ad_of_idac_ctrl); \r
-               hx3695_write_reg(0X4a, phase6_led_drv1_cha_sel);\r
-               hx3695_write_reg(0X4b, phase6_led_drv2_cha_sel);\r
-               hx3695_write_reg(0X71, phase6_dsp_mov_avg_num | phase6_dsp_iir_lp_coeff<<4);\r
+    hx3695_write_reg(0X4a, phase6_led_drv1_cha_sel);\r
+    hx3695_write_reg(0X4b, phase6_led_drv2_cha_sel);\r
+    hx3695_write_reg(0X71, phase6_dsp_mov_avg_num | phase6_dsp_iir_lp_coeff<<4);\r
                \r
        \r
-         hx3695_write_reg(0X43, phase7_mux_sel);  \r
-               hx3695_write_reg(0X44, phase7_tia_cap<<4|phase7_tia_res); \r
-               hx3695_write_reg(0X45, phase7_ldr1_cur);    //LED_DRV1_CUR\r
-               hx3695_write_reg(0x70, phase7_ldr2_cur);   //ps8--ps1  led_drv2_cur\r
-               hx3695_write_reg(0X46, (phase7_pd_sel<<4 | 0x00));\r
-               hx3695_write_reg(0X47, phase7_als_offset_idac);\r
-               hx3695_write_reg(0X48, phase7_led_offset_idac);\r
-//             hx3695_write_reg(0X48, phase7_led_offset_idac);\r
+    hx3695_write_reg(0X43, phase7_mux_sel);  \r
+    hx3695_write_reg(0X44, phase7_tia_cap<<4|phase7_tia_res); \r
+    hx3695_write_reg(0X45, phase7_ldr1_cur);    //LED_DRV1_CUR\r
+    hx3695_write_reg(0x70, phase7_ldr2_cur);   //ps8--ps1  led_drv2_cur\r
+    hx3695_write_reg(0X46, (phase7_pd_sel<<4 | 0x00));\r
+    hx3695_write_reg(0X47, phase7_als_offset_idac);\r
+    hx3695_write_reg(0X48, phase7_led_offset_idac);\r
     hx3695_write_reg(0X49,  phase7_ad_inr_ctrl<<4|phase7_ad_of_idac_ctrl); \r
-               hx3695_write_reg(0X4a, phase7_led_drv1_cha_sel);\r
-               hx3695_write_reg(0X4b, phase7_led_drv2_cha_sel);\r
-               hx3695_write_reg(0X71, phase7_dsp_mov_avg_num | phase7_dsp_iir_lp_coeff<<4);\r
+    hx3695_write_reg(0X4a, phase7_led_drv1_cha_sel);\r
+    hx3695_write_reg(0X4b, phase7_led_drv2_cha_sel);\r
+    hx3695_write_reg(0X71, phase7_dsp_mov_avg_num | phase7_dsp_iir_lp_coeff<<4);\r
                \r
        \r
-         hx3695_write_reg(0X43, phase8_mux_sel);  \r
-               hx3695_write_reg(0X44, phase8_tia_cap<<4|phase8_tia_res); \r
-               hx3695_write_reg(0X45, phase8_ldr1_cur);    //LED_DRV1_CUR\r
-               hx3695_write_reg(0x70, phase8_ldr2_cur);   //ps8--ps1  led_drv2_cur\r
-               hx3695_write_reg(0X46, (phase8_pd_sel<<4 | 0x00));\r
-               hx3695_write_reg(0X47, phase8_als_offset_idac);\r
-               hx3695_write_reg(0X48, phase8_led_offset_idac);\r
-//             hx3695_write_reg(0X48, phas8_led_offset_idac);\r
+    hx3695_write_reg(0X43, phase8_mux_sel);  \r
+    hx3695_write_reg(0X44, phase8_tia_cap<<4|phase8_tia_res); \r
+    hx3695_write_reg(0X45, phase8_ldr1_cur);    //LED_DRV1_CUR\r
+    hx3695_write_reg(0x70, phase8_ldr2_cur);   //ps8--ps1  led_drv2_cur\r
+    hx3695_write_reg(0X46, (phase8_pd_sel<<4 | 0x00));\r
+    hx3695_write_reg(0X47, phase8_als_offset_idac);\r
+    hx3695_write_reg(0X48, phase8_led_offset_idac);\r
     hx3695_write_reg(0X49,  phase8_ad_inr_ctrl<<4|phase8_ad_of_idac_ctrl); \r
-               hx3695_write_reg(0X4a, phase8_led_drv1_cha_sel);\r
-               hx3695_write_reg(0X4b, phase8_led_drv2_cha_sel);\r
-               hx3695_write_reg(0X71, phase8_dsp_mov_avg_num | phase8_dsp_iir_lp_coeff<<4);\r
+    hx3695_write_reg(0X4a, phase8_led_drv1_cha_sel);\r
+    hx3695_write_reg(0X4b, phase8_led_drv2_cha_sel);\r
+    hx3695_write_reg(0X71, phase8_dsp_mov_avg_num | phase8_dsp_iir_lp_coeff<<4);\r
                \r
 \r
 // analog circuit cfg \r
-    hx3695_write_reg(0X60, 0x14);      //\r
-               hx3695_write_reg(0X61, 0xf0);   \r
-               hx3695_write_reg(0X62, 0x22); \r
-               hx3695_write_reg(0X63, 0x15); \r
-                                                                                                                                                                                                                               \r
-               hx3695_write_reg(0X64, 0x08);   \r
-               hx3695_write_reg(0X65, 0x88); //bug\r
-               \r
-               hx3695_write_reg(0X66, 0x30);   // bits<3>=adc selftest en     0x30\r
-               hx3695_write_reg(0X67, 0x23);   \r
-               hx3695_write_reg(0X68, 0x46);   \r
-               hx3695_write_reg(0X69, 0x42);   \r
-               \r
-               hx3695_write_reg(0X39, 0xff);   // ofset idac1 phase enable cfg\r
-               hx3695_write_reg(0x73, 0xff);    //led_offset_idac phase enable\r
+    hx3695_write_reg(0X60, 0x34);      //\r
+    hx3695_write_reg(0X61, 0xf0);      \r
+    hx3695_write_reg(0X62, 0x22); \r
+    hx3695_write_reg(0X63, 0x15); \r
+                                                                                                            \r
+    hx3695_write_reg(0X64, 0x08);      \r
+    hx3695_write_reg(0X65, 0x88); //bug\r
+    \r
+    hx3695_write_reg(0X66, 0x30);      // bits<3>=adc selftest en     0x30\r
+    hx3695_write_reg(0X67, 0x23);      \r
+    hx3695_write_reg(0X68, 0x46);      \r
+    hx3695_write_reg(0X69, 0x42);      \r
+    \r
+    hx3695_write_reg(0X39, 0xff);   // ofset idac1 phase enable cfg\r
+    hx3695_write_reg(0x73, 0xff);    //led_offset_idac phase enable\r
                \r
     hx3695_write_reg(0X6a, 0X0f);      \r
-               hx3695_write_reg(0X6b, 0X22);   \r
-               hx3695_write_reg(0X6c, 0X00);   \r
-               hx3695_write_reg(0X6d, 0X37);   \r
-               hx3695_write_reg(0X6e, 0X82);   \r
-               hx3695_write_reg(0X6f, 0X08);\r
+    hx3695_write_reg(0X6b, 0X22);      \r
+    hx3695_write_reg(0X6c, 0X00);      \r
+    hx3695_write_reg(0X6d, 0X37);      \r
+    hx3695_write_reg(0X6e, 0X82);      \r
+    hx3695_write_reg(0X6f, 0X00);\r
 /////////FIFO and adc conversion ready config////////\r
 /////////FIFO and adc conversion ready config////////\r
-#if defined(PPG_INT_MODE)\r
-               hx3695_write_reg(0X1b, 0x92);// bits<3:0> fifo data sel, 0000 = p1;0001= p2;0010=p3;\r
-                                        // 0011=p4;0100=p5;0101=p6;0110=p7;\r
-                                        // bits<7> fifo enble\r
-                hx3695_write_reg(0X33, 0x83);   // int width                                                                                                                                           \r
-     hx3695_write_reg(0X21, 0x00);   // fifo int sel,00=FIFO INT config clear\r
-                hx3695_write_reg(0X38, 0x01);   // int sel,00=close almost full int,04=enable almost full int\r
-#elif defined(INT_MODE)               //FIFO_ALL_MOST_FULL)\r
-                hx3695_write_reg(0X1b, 0x92);// bits<3:0> fifo data sel, 0000 = p1;0001= p2;0010=p3;\r
-                                        // 0011=p4;0100=p5;0101=p6;0110=p7;\r
-                                        // bits<7> fifo enble\r
-                hx3695_write_reg(0X1c, (fifo_watermark&0xff));   //fifo_watermark\r
-                hx3695_write_reg(0X1d, fifo_watermark<<8);       //bit<0>=fifo_watermark[8]  \r
-                hx3695_write_reg(0X33, 0x83);   // int width   \r
-                hx3695_write_reg(0X21, 0x00);   // fifo int sel,00=FIFO INT config clear\r
-     hx3695_write_reg(0X38, 0x04);   // int sel,00=close almost full int,04=enable almost full int\r
+#if defined(INT_MODE)             //(FIFO_ALL_MOST_FULL)\r
+        hx3695_write_reg(0X1b, 0x90);// bits<3:0> fifo data sel, 0000 = p1;0001= p2;0010=p3;\\r
+                                0011=p4;0100=p5;0101=p6;0110=p7;\\r
+                                bits<7> fifo enble\r
+        hx3695_write_reg(0X1c, (fifo_watermark&0xff));   //fifo_watermark\r
+        hx3695_write_reg(0X1d, fifo_watermark<<8);       //bit<0>=fifo_watermark[8]  \r
+        hx3695_write_reg(0X33, 0x83);   // int width                                                                                                                                           \r
+        hx3695_write_reg(0X38, 0x04);   // int sel,00=close almost full int,04=enable almost full int\r
 \r
 #else\r
-                hx3695_write_reg(0X1b, 0x92);    // bits<3:0> fifo data sel, 0000 = p1;0001= p2;0010=p3;\r
-                                        // 0011=p4;0100=p5;0101=p6;0110=p7;\r
-                                        // bits<7> fifo enble                                                                          \r
-     hx3695_write_reg(0X38, 0x01);   // int sel,00=close almost full int,04=enable almost full int\r
-     \r
+        hx3695_write_reg(0X1b, 0x90);// bits<3:0> fifo data sel, 0000 = p1;0001= p2;0010=p3;0011=p4;0100=p5;0101=p6;0110=p7;bits<7> fifo enble \r
+        hx3695_write_reg(0X36, 0x00);                    //intrupt                                                                                                                                     \r
+                                                                \r
+        hx3695_write_reg(0X38, 0x00);   // int sel,00=close almost full int,01= prf int  04=enable almost full int\r
+\r
 #endif\r
 \r
                \r
-    hx3695_write_reg(0X26,(phase1_enable<<3)|(phase1_adc_osr)|(phase2_enable<<7)|(phase2_adc_osr<<4) ); \r
-    hx3695_write_reg(0X27,(phase3_enable<<3)|(phase3_adc_osr)|(phase4_enable<<7)|(phase4_adc_osr<<4) );  \r
-    hx3695_write_reg(0X28,(phase5_enable<<3)|(phase5_adc_osr)|(phase6_enable<<7)|(phase6_adc_osr<<4) );\r
-    hx3695_write_reg(0X29,(phase7_enable<<3)|(phase7_adc_osr)|(phase8_enable<<7)|(phase8_adc_osr<<4) );                \r
+        hx3695_write_reg(0X26,(phase1_enable<<3)|(phase1_adc_osr)|(phase2_enable<<7)|(phase2_adc_osr<<4) ); \r
+        hx3695_write_reg(0X27,(phase3_enable<<3)|(phase3_adc_osr)|(phase4_enable<<7)|(phase4_adc_osr<<4) );  \r
+        hx3695_write_reg(0X28,(phase5_enable<<3)|(phase5_adc_osr)|(phase6_enable<<7)|(phase6_adc_osr<<4) );\r
+        hx3695_write_reg(0X29,(phase7_enable<<3)|(phase7_adc_osr)|(phase8_enable<<7)|(phase8_adc_osr<<4) );            \r
 \r
 //    hx3695_write_reg(0X5c, 0x02);//soft reset\r
-    hx3695_delay_ms(5);  \r
-    hx3695_write_reg(0X5c, 0x00);//release\r
+        hx3695_delay_ms(5);  \r
+        hx3695_write_reg(0X5c, 0x00);//release\r
 \r
-       \r
+    return ;\r
+    \r
 }\r
 \r
 bool hx3695_factory_test_read(int32_t *phase_data)\r
 {\r
     uint8_t  databuf[12] = {0};\r
+    uint8_t  databuf2[12] = {0};\r
     int32_t P1 = 0, P2 = 0,P3 = 0,P4 = 0;\r
+    int32_t P5 = 0, P6 = 0,P7 = 0,P8 = 0;\r
+    uint8_t  m,k;\r
     hx3695_brust_read_reg(0x03, databuf, 12);\r
+    hx3695_brust_read_reg(0x0F, databuf2, 12);\r
     P1 = ((databuf[0])|(databuf[1]<<8)|(databuf[2]<<16));\r
     P2 = ((databuf[3])|(databuf[4]<<8)|(databuf[5]<<16));\r
     P3 = ((databuf[6])|(databuf[7]<<8)|(databuf[8]<<16));\r
     P4 = ((databuf[9])|(databuf[10]<<8)|(databuf[11]<<16));\r
-\r
+    \r
+    P5 = ((databuf2[0])|(databuf2[1]<<8)|(databuf2[2]<<16));\r
+    P6 = ((databuf2[3])|(databuf2[4]<<8)|(databuf2[5]<<16));\r
+    P7 = ((databuf2[6])|(databuf2[7]<<8)|(databuf2[8]<<16));\r
+    P8 = ((databuf2[9])|(databuf2[10]<<8)|(databuf2[11]<<16));\r
     phase_data[0] = P1 ;\r
     phase_data[1] = P2 ;\r
     phase_data[2] = P3 ;\r
     phase_data[3] = P4 ;\r
+    phase_data[4] = P5 ;\r
+    phase_data[5] = P6 ;\r
+    phase_data[6] = P7 ;\r
+    phase_data[7] = P8 ;\r
+   \r
+//    DEBUG_PRINTF("p1,p2,p3,p4,p5,p6,p7 %d %d %d %d %d %d %d\r\n", P1, P2, P3, P4,P5, P6,P7);\r
 \r
-    DEBUG_PRINTF("p1,p2,p3,p4 %d %d %d %d\r\n", P1, P2, P3, P4);\r
     return true;\r
 }\r
-\r
 int32_t hx3695_sort_cal(int32_t *data)\r
 {\r
     uint8_t ii,jj;\r
@@ -2613,7 +1976,66 @@ int32_t hx3695_sort_cal(int32_t *data)
     data_final = (data[1]+data[2])>>1;\r
     return data_final;\r
 }\r
-\r
+int32_t hx3695_sort_cal_min(int32_t *data)\r
+{\r
+    uint8_t ii,jj;\r
+    int32_t data_temp = 0;\r
+    int32_t data_final = 0;\r
+    for(ii=0; ii<(TEST_NUM-1); ii++)\r
+    {\r
+        for(jj=0; jj<9-ii; jj++)\r
+        {\r
+            if(data[jj]>=data[jj+1])\r
+            {\r
+                data_temp = data[jj];\r
+                data[jj] = data[jj+1];\r
+                data[jj+1] = data_temp;\r
+            }\r
+        }\r
+    }\r
+    data_final = data[0];\r
+    return data_final;\r
+}\r
+int32_t hx3695_sort_cal_mid(int32_t *data)\r
+{\r
+    uint8_t ii,jj;\r
+    int32_t data_temp = 0;\r
+    int32_t data_final = 0;\r
+    for(ii=0; ii<(TEST_NUM-1); ii++)\r
+    {\r
+        for(jj=0; jj<9-ii; jj++)\r
+        {\r
+            if(data[jj]>=data[jj+1])\r
+            {\r
+                data_temp = data[jj];\r
+                data[jj] = data[jj+1];\r
+                data[jj+1] = data_temp;\r
+            }\r
+        }\r
+    }\r
+    data_final = ((data[3]+data[4]+data[5]+data[6]+data[7]+data[8])/6);\r
+    return data_final;\r
+}\r
+int32_t hx3695_sort_cal_max(int32_t *data)\r
+{\r
+    uint8_t ii,jj;\r
+    int32_t data_temp = 0;\r
+    int32_t data_final = 0;\r
+    for(ii=0; ii<(TEST_NUM-1); ii++)\r
+    {\r
+        for(jj=0; jj<9-ii; jj++)\r
+        {\r
+            if(data[jj]>=data[jj+1])\r
+            {\r
+                data_temp = data[jj];\r
+                data[jj] = data[jj+1];\r
+                data[jj+1] = data_temp;\r
+            }\r
+        }\r
+    }\r
+    data_final = data[9];\r
+    return data_final;\r
+}\r
 \r
 bool hx3695_chip_check_id(void)\r
 {\r
@@ -2631,290 +2053,595 @@ bool hx3695_chip_check_id(void)
     return false;\r
 }\r
 \r
-FT_RESULTS_t hx3695_factory_led_off_get_result(void)\r
+bool hx3695_led_off(void)\r
 {\r
-    uint8_t ii = 0;\r
-    int32_t phase_data[4] = {0,0,0,0};\r
-    int32_t phase1_data[4] = {0,0,0,0};\r
-    int32_t phase2_data[4] = {0,0,0,0};\r
-    int32_t phase3_data[4] = {0,0,0,0};\r
-    int32_t phase4_data[4] = {0,0,0,0};\r
-    int32_t gr_buffer[4] = {0,0,0,0};\r
-    int32_t red_buffer[4] = {0,0,0,0};\r
-    int32_t ir_buffer[4] = {0,0,0,0};\r
-    FT_RESULTS_t ft_result = {0,0,0,0,0,0,0,0,0,0,0,0};\r
+    hx3695_delay_ms(10);\r
+    hx3695_write_reg(0x30, 0x00);\r
+    hx3695_write_reg(0x72, 0x00);\r
+    hx3695_delay_ms(100);\r
+    return 1;\r
+}\r
 \r
+FT_RESULTS_t hx3695_factory_ft_leak_light_test_get_result(void)\r
+{\r
+    uint8_t ii = 0;\r
+    int32_t phase_data[8] = {0,0,0,0,0,0,0,0};\r
+    int32_t ldr0_buffer[10] = {0,0,0,0,0,0,0,0,0,0};\r
+    int32_t ldr1_buffer[10] = {0,0,0,0,0,0,0,0,0,0};\r
+    int32_t ldr2_buffer[10] = {0,0,0,0,0,0,0,0,0,0};\r
+    int32_t ldr3_buffer[10] = {0,0,0,0,0,0,0,0,0,0};\r
+    int32_t ldr4_buffer[10] = {0,0,0,0,0,0,0,0,0,0};\r
+    int32_t ldr5_buffer[10] = {0,0,0,0,0,0,0,0,0,0};\r
+    int32_t ldr0_OFF_buffer[10] = {0,0,0,0,0,0,0,0,0,0};\r
+    int32_t ldr1_OFF_buffer[10] = {0,0,0,0,0,0,0,0,0,0};\r
+    int32_t ldr2_OFF_buffer[10] = {0,0,0,0,0,0,0,0,0,0};\r
+    int32_t ldr3_OFF_buffer[10] = {0,0,0,0,0,0,0,0,0,0};\r
+    int32_t ldr4_OFF_buffer[10] = {0,0,0,0,0,0,0,0,0,0};\r
+    int32_t ldr5_OFF_buffer[10] = {0,0,0,0,0,0,0,0,0,0};\r
+    int32_t ldr0_data_ledoff = 0;\r
+    int32_t ldr1_data_ledoff = 0;\r
+    int32_t ldr2_data_ledoff = 0;\r
+    int32_t ldr3_data_ledoff = 0;\r
+    int32_t ldr4_data_ledoff = 0;\r
+    int32_t ldr5_data_ledoff = 0;\r
+    int32_t ldr0_data_ledon = 0;\r
+    int32_t ldr1_data_ledon = 0;\r
+    int32_t ldr2_data_ledon = 0;\r
+    int32_t ldr3_data_ledon = 0;\r
+    int32_t ldr4_data_ledon = 0;\r
+    int32_t ldr5_data_ledon = 0;\r
+//       uint8_t  i,j;\r
+    FT_RESULTS_t ft_result = {0};\r
+\r
+    for(ii=0; ii<TEST_NUM; ii++)\r
+    {\r
+        hx3695_delay_ms(40);\r
+        hx3695_factory_test_read(phase_data);\r
+        \r
+         for(int j=1;j<(LDR_NUM+1);j++)\r
+               {\r
+\r
+                       phase_result[ii][j] = phase_data[j];\r
+            \r
+            DEBUG_PRINTF("%d ", phase_result[ii][j]);\r
+               }\r
+        \r
+      DEBUG_PRINTF("\n");\r
+        \r
+        ldr0_buffer[ii]  = phase_data[1] - phase_data[0];\r
+        ldr1_buffer[ii]  = phase_data[2] - phase_data[0];\r
+        ldr2_buffer[ii]  = phase_data[3] - phase_data[0];\r
+        \r
+        ldr3_buffer[ii]  = phase_data[4] - phase_data[0];\r
+        ldr4_buffer[ii]  = phase_data[5] - phase_data[0];\r
+        ldr5_buffer[ii]  = phase_data[6] - phase_data[0];\r
+   \r
+         }\r
+    ldr0_data_ledon   = hx3695_sort_cal_max(ldr0_buffer);\r
+    ldr1_data_ledon  = hx3695_sort_cal_max(ldr1_buffer);\r
+    ldr2_data_ledon   = hx3695_sort_cal_max(ldr2_buffer);\r
+    ldr3_data_ledon  = hx3695_sort_cal_max(ldr3_buffer);\r
+    ldr4_data_ledon = hx3695_sort_cal_max(ldr4_buffer);\r
+    ldr5_data_ledon  = hx3695_sort_cal_max(ldr5_buffer);\r
+\r
+         hx3695_led_off();\r
+//     DEBUG_PRINTF("LED_OFF RESULTS:\r\n ");\r
     for(ii=0; ii<4; ii++)\r
     {\r
         hx3695_delay_ms(40);\r
         hx3695_factory_test_read(phase_data);\r
-        gr_buffer[ii] = phase_data[1] - phase_data[0];\r
-        red_buffer[ii] = phase_data[2] - phase_data[0];\r
-        ir_buffer[ii] = phase_data[3] - phase_data[0];\r
-        phase1_data[ii] = phase_data[0];\r
-        phase2_data[ii] = phase_data[1];\r
-        phase3_data[ii] = phase_data[2];\r
-        phase4_data[ii] = phase_data[3];\r
+//          for(int j=1;j<(LDR_NUM+1);j++)\r
+//             {\r
+\r
+//                     phase_result[ii][j] = phase_data[j];\r
+//            DEBUG_PRINTF("%d ", phase_result[ii][j]);\r
+//             }\r
+//        \r
+//      DEBUG_PRINTF("\n");\r
+//        \r
+        ldr0_OFF_buffer[ii]  = phase_data[1] - phase_data[0];\r
+        ldr1_OFF_buffer[ii]  = phase_data[2] - phase_data[0];\r
+        ldr2_OFF_buffer[ii]  = phase_data[3] - phase_data[0];\r
+        \r
+        ldr3_OFF_buffer[ii] = phase_data[4] - phase_data[0];\r
+        ldr4_OFF_buffer[ii] = phase_data[5] - phase_data[0];\r
+        ldr5_OFF_buffer[ii] = phase_data[6] - phase_data[0];\r
     }\r
-    ft_result.phase1_data_avg = hx3695_sort_cal(phase1_data);\r
-    ft_result.phase2_data_avg = hx3695_sort_cal(phase2_data);\r
-    ft_result.phase3_data_avg = hx3695_sort_cal(phase3_data);\r
-    ft_result.phase4_data_avg = hx3695_sort_cal(phase4_data);\r
-    ft_result.gr_ps_dif = hx3695_sort_cal(gr_buffer);\r
-    ft_result.red_ps_dif = hx3695_sort_cal(red_buffer);\r
-    ft_result.ir_ps_dif = hx3695_sort_cal(ir_buffer);\r
+    ldr0_data_ledoff = hx3695_sort_cal(ldr0_buffer);\r
+    ldr1_data_ledoff = hx3695_sort_cal(ldr1_buffer);\r
+    ldr2_data_ledoff = hx3695_sort_cal(ldr2_buffer);\r
+    \r
+    ldr3_data_ledoff = hx3695_sort_cal(ldr3_buffer);\r
+    ldr4_data_ledoff = hx3695_sort_cal(ldr4_buffer);\r
+    ldr5_data_ledoff = hx3695_sort_cal(ldr5_buffer);\r
+    \r
+    ft_result.ldr0_ps_dif = ldr0_data_ledoff;\r
+    ft_result.ldr1_ps_dif = ldr1_data_ledoff;\r
+    ft_result.ldr2_ps_dif = ldr2_data_ledoff;\r
+    \r
+    ft_result.ldr0_data_final = ldr0_data_ledon - ldr0_data_ledoff;\r
+    ft_result.ldr1_data_final = ldr1_data_ledon - ldr1_data_ledoff;\r
+    ft_result.ldr2_data_final = ldr2_data_ledon - ldr2_data_ledoff;\r
+    \r
+    ft_result.ldr3_ps_dif = ldr3_data_ledoff;\r
+    ft_result.ldr4_ps_dif = ldr4_data_ledoff;\r
+    ft_result.ldr5_ps_dif = ldr5_data_ledoff;\r
+    ft_result.ldr3_data_final = ldr3_data_ledon - ldr3_data_ledoff;\r
+    ft_result.ldr4_data_final = ldr4_data_ledon - ldr4_data_ledoff;\r
+    ft_result.ldr5_data_final = ldr5_data_ledon - ldr5_data_ledoff;\r
+    \r
+   \r
+    \r
+ \r
+    if(ft_result.ldr0_data_final<0)\r
+    {\r
+        ft_result.ldr0_data_final = 0;\r
+    }\r
+    if(ft_result.ldr1_data_final<0)\r
+    {\r
+        ft_result.ldr1_data_final = 0;\r
+    }\r
+    if(ft_result.ldr2_data_final<0)\r
+    {\r
+        ft_result.ldr2_data_final = 0;\r
+    }\r
+    \r
+      if(ft_result.ldr3_data_final<0)\r
+    {\r
+        ft_result.ldr3_data_final = 0;\r
+    }\r
+    if(ft_result.ldr4_data_final<0)\r
+    {\r
+        ft_result.ldr4_data_final = 0;\r
+    }\r
+    if(ft_result.ldr5_data_final<0)\r
+    {\r
+        ft_result.ldr5_data_final = 0;\r
+    }\r
+    TYHX_LOG("leaking result 1=%d   leaking result2=%d\r\n",ft_result.ldr0_data_final,ft_result.ldr3_data_final);\r
+    //hrsresult.leak_green =ft_result.ldr0_data_final;\r
+    DEBUG_PRINTF("ft card,LDR0:%d,LDR1:%d,LDR2:%d,LDR3:%d,LDR4:%d,LDR5:%d\r\n",ft_result.ldr0_data_final,ft_result.ldr1_data_final,ft_result.ldr2_data_final ,\r
+                                                                ft_result.ldr3_data_final,ft_result.ldr4_data_final,ft_result.ldr5_data_final);\r
+\r
 \r
     return ft_result;\r
 }\r
 \r
-FT_RESULTS_t hx3695_factory_wear_mode_get_result(void)\r
+FT_RESULTS_t hx3695_factory_ft_card_test_get_result(void)\r
 {\r
     uint8_t ii = 0;\r
-    int32_t phase_data[4] = {0,0,0,0};\r
-    int32_t data_buffer[4] = {0,0,0,0};\r
-    FT_RESULTS_t ft_result = {0,0,0,0,0,0,0,0,0,0,0,0};\r
-\r
-    for(ii=0; ii<4; ii++)\r
+    int32_t phase_data[8] = {0,0,0,0,0,0,0,0};\r
+    int32_t ldr0_buffer[10] = {0,0,0,0,0,0,0,0,0,0};\r
+    int32_t ldr1_buffer[10] = {0,0,0,0,0,0,0,0,0,0};\r
+    int32_t ldr2_buffer[10] = {0,0,0,0,0,0,0,0,0,0};\r
+    int32_t ldr3_buffer[10] = {0,0,0,0,0,0,0,0,0,0};\r
+    int32_t ldr4_buffer[10] = {0,0,0,0,0,0,0,0,0,0};\r
+    int32_t ldr5_buffer[10] = {0,0,0,0,0,0,0,0,0,0};\r
+  \r
+    FT_RESULTS_t ft_result = {0};\r
+\r
+    for(ii=0; ii<TEST_NUM; ii++)\r
     {\r
-        hx3695_delay_ms(110);\r
+        hx3695_delay_ms(40);\r
         hx3695_factory_test_read(phase_data);\r
-        data_buffer[ii] = phase_data[0] - phase_data[1];\r
+         for(int j=1;j<(LDR_NUM+1);j++)\r
+               {\r
+                       phase_result[ii][j] = phase_data[j];\r
+            DEBUG_PRINTF("%d ", phase_result[ii][j]);\r
+               }\r
+        \r
+      DEBUG_PRINTF("\n");\r
+        ldr0_buffer[ii] =  phase_data[1] - phase_data[0];\r
+        ldr1_buffer[ii] =  phase_data[2] - phase_data[0];\r
+        ldr2_buffer[ii] =  phase_data[3] - phase_data[0];\r
+        \r
+        ldr3_buffer[ii] =  phase_data[4] - phase_data[0];\r
+        ldr4_buffer[ii] =  phase_data[5] - phase_data[0];\r
+        ldr5_buffer[ii] =  phase_data[6] - phase_data[0];\r
     }\r
-    ft_result.gr_data_final = hx3695_sort_cal(data_buffer);\r
-    if(data_buffer[0]==data_buffer[1] && data_buffer[0]==data_buffer[2] && data_buffer[0]==data_buffer[3])\r
+    hx3695_led_off();\r
+    \r
+    ft_result.ldr0_data_final = hx3695_sort_cal(ldr0_buffer);\r
+    ft_result.ldr1_data_final = hx3695_sort_cal(ldr1_buffer);\r
+    ft_result.ldr2_data_final = hx3695_sort_cal(ldr2_buffer);\r
+    \r
+    ft_result.ldr3_data_final = hx3695_sort_cal(ldr3_buffer);\r
+    ft_result.ldr4_data_final = hx3695_sort_cal(ldr4_buffer);\r
+    ft_result.ldr5_data_final = hx3695_sort_cal(ldr5_buffer);\r
+    \r
+    DEBUG_PRINTF("ft card,LDR0:%d,LDR1:%d,LDR2:%d,LDR3 :%d,LDR4 :%d,LDR5 :%d\r\n",ft_result.ldr0_data_final,ft_result.ldr1_data_final,ft_result.ldr2_data_final ,\r
+                                                                ft_result.ldr3_data_final,ft_result.ldr4_data_final,ft_result.ldr5_data_final);\r
+  \r
+    if(ldr0_buffer[0] == ldr0_buffer[1] && ldr0_buffer[0] == ldr0_buffer[2] && ldr0_buffer[0] == ldr0_buffer[3])\r
     {\r
-        ft_result.gr_data_final = 0;\r
+        ft_result.ldr0_data_final = 0;\r
+        ft_result.ldr1_data_final = 0;\r
+        ft_result.ldr2_data_final = 0;\r
+    }\r
+    if(ft_result.ldr0_data_final < 0)\r
+    {\r
+        ft_result.ldr0_data_final = 0;\r
+    }\r
+    if(ft_result.ldr1_data_final < 0)\r
+    {\r
+        ft_result.ldr1_data_final = 0;\r
+    }\r
+    if(ft_result.ldr2_data_final < 0)\r
+    {\r
+        ft_result.ldr2_data_final = 0;\r
+    }\r
+if(ldr3_buffer[0] == ldr3_buffer[1] && ldr3_buffer[0] == ldr3_buffer[2] && ldr3_buffer[0] == ldr3_buffer[3])\r
+    {\r
+        ft_result.ldr3_data_final = 0;\r
+        ft_result.ldr4_data_final = 0;\r
+        ft_result.ldr5_data_final = 0;\r
+    }\r
+    if(ft_result.ldr3_data_final < 0)\r
+    {\r
+        ft_result.ldr3_data_final = 0;\r
+    }\r
+    if(ft_result.ldr4_data_final < 0)\r
+    {\r
+        ft_result.ldr4_data_final = 0;\r
+    }\r
+    if(ft_result.ldr5_data_final < 0)\r
+    {\r
+        ft_result.ldr5_data_final = 0;\r
     }\r
-\r
     return ft_result;\r
 }\r
-\r
-FT_RESULTS_t hx3695_factory_ft_leak_light_test_get_result(void)\r
+FT_RESULTS_t hx3695_factory_Gnoise_result(void)\r
 {\r
     uint8_t ii = 0;\r
-    int32_t phase_data[4] = {0,0,0,0};\r
-    int32_t gr_buffer[4] = {0,0,0,0};\r
-    int32_t red_buffer[4] = {0,0,0,0};\r
-    int32_t ir_buffer[4] = {0,0,0,0};\r
-    int32_t gr_data_ledoff = 0;\r
-    int32_t red_data_ledoff = 0;\r
-    int32_t ir_data_ledoff = 0;\r
-    int32_t gr_data_ledon = 0;\r
-    int32_t red_data_ledon = 0;\r
-    int32_t ir_data_ledon = 0;\r
-    FT_RESULTS_t ft_result = {0,0,0,0,0,0,0,0,0,0,0,0};\r
-\r
-    for(ii=0; ii<4; ii++)\r
+    int32_t phase_data[8] = {0,0,0,0,0,0,0,0};\r
+    int32_t phase1_data[10] = {0,0,0,0,0,0,0,0,0,0};\r
+    int32_t phase2_data[10] = {0,0,0,0,0,0,0,0,0,0};\r
+    int32_t phase3_data[10] = {0,0,0,0,0,0,0,0,0,0};\r
+    int32_t phase4_data[10] = {0,0,0,0,0,0,0,0,0,0};\r
+    int32_t phase5_data[10] = {0,0,0,0,0,0,0,0,0,0};\r
+    int32_t phase6_data[10] = {0,0,0,0,0,0,0,0,0,0};\r
+    int32_t phase7_data[10] = {0,0,0,0,0,0,0,0,0,0};\r
+    int32_t phase8_data[10] = {0,0,0,0,0,0,0,0,0,0};\r
+    int32_t ldr0_buffer[10] = {0,0,0,0,0,0,0,0,0,0};\r
+    int32_t ldr1_buffer[10] = {0,0,0,0,0,0,0,0,0,0};\r
+    int32_t ldr2_buffer[10] = {0,0,0,0,0,0,0,0,0,0};\r
+    int32_t ldr3_buffer[10] = {0,0,0,0,0,0,0,0,0,0};\r
+    int32_t ldr4_buffer[10] = {0,0,0,0,0,0,0,0,0,0};\r
+    int32_t ldr5_buffer[10] = {0,0,0,0,0,0,0,0,0,0};\r
+    FT_RESULTS_t ft_result = {0};\r
+\r
+    for(ii=0; ii<TEST_NUM; ii++)\r
     {\r
         hx3695_delay_ms(40);\r
         hx3695_factory_test_read(phase_data);\r
-        gr_buffer[ii]  = phase_data[1] - phase_data[0];\r
-        red_buffer[ii] = phase_data[2] - phase_data[0];\r
-        ir_buffer[ii]  = phase_data[3] - phase_data[0];\r
-    }\r
-    gr_data_ledon = hx3695_sort_cal(gr_buffer);\r
-    red_data_ledon = hx3695_sort_cal(red_buffer);\r
-    ir_data_ledon = hx3695_sort_cal(ir_buffer);\r
 \r
-    hx3695_write_reg(0x30, 0x00);\r
-               hx3695_write_reg(0x72, 0x00);\r
-    hx3695_delay_ms(100);\r
+        phase1_data[ii] = phase_data[0];\r
+        phase2_data[ii] = phase_data[1];\r
+        phase3_data[ii] = phase_data[2];\r
+        phase4_data[ii] = phase_data[3];\r
+        phase5_data[ii] = phase_data[4];\r
+        phase6_data[ii] = phase_data[5];\r
+        phase7_data[ii] = phase_data[6];\r
+        phase8_data[ii] = phase_data[7];\r
+        \r
+         for(int j=1;j<(LDR_NUM+1);j++)\r
+               {\r
+                       phase_result[ii][j] = phase_data[j];\r
+            DEBUG_PRINTF("%d ", phase_result[ii][j]);\r
+               }\r
+         DEBUG_PRINTF("\n");\r
+    }\r
+    ft_result.phase1_data_avg = hx3695_sort_cal_max(phase1_data);\r
+    ft_result.phase2_data_avg = hx3695_sort_cal_max(phase2_data);\r
+    ft_result.phase3_data_avg = hx3695_sort_cal_max(phase3_data);\r
+    ft_result.phase4_data_avg = hx3695_sort_cal_max(phase4_data);\r
+    ft_result.phase5_data_avg = hx3695_sort_cal_max(phase5_data);\r
+    ft_result.phase6_data_avg = hx3695_sort_cal_max(phase6_data);\r
+    ft_result.phase7_data_avg = hx3695_sort_cal_max(phase7_data);\r
+    ft_result.phase8_data_avg = hx3695_sort_cal_max(phase8_data);\r
+    \r
+    \r
+    ft_result.ldr0_data_final = hx3695_sort_cal_max(ldr0_buffer);\r
+    ft_result.ldr1_data_final = hx3695_sort_cal_max(ldr1_buffer);\r
+    ft_result.ldr2_data_final = hx3695_sort_cal_max(ldr2_buffer);\r
+    \r
+    ft_result.ldr3_data_final = hx3695_sort_cal_max(ldr3_buffer);\r
+    ft_result.ldr4_data_final = hx3695_sort_cal_max(ldr4_buffer);\r
+    ft_result.ldr5_data_final = hx3695_sort_cal_max(ldr5_buffer);\r
+  \r
+    DEBUG_PRINTF("%d %d %d %d %d %d %d %d %d %d %d %d %d %d\r\n", ft_result.phase1_data_avg, ft_result.phase2_data_avg, ft_result.phase3_data_avg, ft_result.phase4_data_avg, \r
+               ft_result.phase5_data_avg, ft_result.phase6_data_avg, ft_result.phase7_data_avg,  ft_result.phase8_data_avg, \r
+                 ft_result.ldr0_data_final, ft_result.ldr1_data_final, ft_result.ldr2_data_final,ft_result.ldr3_data_final, ft_result.ldr4_data_final, ft_result.ldr5_data_final);\r
 \r
-    for(ii=0; ii<4; ii++)\r
+    return ft_result;\r
+}\r
+FT_RESULTS_t hx3695_factory_ft_single_check_get_result(void)\r
+{\r
+    uint8_t ii = 0;\r
+    int32_t phase_data[8] = {0,0,0,0,0,0,0,0};\r
+    int32_t ldr0_buffer[10] = {0,0,0,0,0,0,0,0,0,0};\r
+    int32_t ldr1_buffer[10] = {0,0,0,0,0,0,0,0,0,0};\r
+    int32_t ldr2_buffer[10] = {0,0,0,0,0,0,0,0,0,0};\r
+    int32_t ldr3_buffer[10] = {0,0,0,0,0,0,0,0,0,0};\r
+    int32_t ldr4_buffer[10] = {0,0,0,0,0,0,0,0,0,0};\r
+    int32_t ldr5_buffer[10] = {0,0,0,0,0,0,0,0,0,0};\r
+    FT_RESULTS_t ft_result = {0};\r
+    \r
+    for(ii=0; ii<TEST_NUM; ii++)\r
+    {\r
+        hx3695_delay_ms(20);\r
+        hx3695_LDR0_led_control(1,32); //1=led on;0=led off;ledcur= (led_config*0.8 )ma\r
+        hx3695_delay_ms(40);\r
+        hx3695_factory_test_read(phase_data);        \r
+        ldr0_buffer[ii] = phase_data[1] - phase_data[0];\r
+        DEBUG_PRINTF("LDR0: %d \r\n", ldr0_buffer[ii]);\r
+    }\r
+    ft_result.ldr0_data_final = hx3695_sort_cal_mid(ldr0_buffer);\r
+    \r
+    hx3695_led_off();\r
+    hx3695_delay_ms(1000);\r
+    DEBUG_PRINTF("ft single,LDR0: %d\r\n",ft_result.ldr0_data_final);\r
+    \r
+    for(ii=0; ii<TEST_NUM; ii++)\r
     {\r
+        hx3695_delay_ms(20);        \r
+        hx3695_LDR1_led_control(1,32); //1=led on;0=led off;ledcur= (led_config*0.8 )ma\r
         hx3695_delay_ms(40);\r
         hx3695_factory_test_read(phase_data);\r
-        gr_buffer[ii] = phase_data[1] - phase_data[0];\r
-        red_buffer[ii] = phase_data[2] - phase_data[0];\r
-        ir_buffer[ii] = phase_data[3] - phase_data[0];\r
+        ldr1_buffer[ii] = phase_data[2] - phase_data[0];\r
+        DEBUG_PRINTF("LDR1: %d \r\n", ldr1_buffer[ii]);\r
     }\r
-    gr_data_ledoff = hx3695_sort_cal(gr_buffer);\r
-    red_data_ledoff = hx3695_sort_cal(red_buffer);\r
-    ir_data_ledoff = hx3695_sort_cal(ir_buffer);\r
-\r
-    ft_result.gr_ps_dif = gr_data_ledoff;\r
-    ft_result.red_ps_dif = red_data_ledoff;\r
-    ft_result.ir_ps_dif = ir_data_ledoff;\r
-    ft_result.gr_data_final = gr_data_ledon - gr_data_ledoff;\r
-    ft_result.red_data_final = red_data_ledon - red_data_ledoff;\r
-    ft_result.ir_data_final = ir_data_ledon - ir_data_ledoff;\r
-    if(ft_result.gr_data_final<0)\r
+    ft_result.ldr1_data_final = hx3695_sort_cal_mid(ldr1_buffer);\r
+    hx3695_led_off();\r
+    hx3695_delay_ms(1000);\r
+    DEBUG_PRINTF("ft single,LDR1:%d,\r\n",ft_result.ldr1_data_final );\r
+    \r
+    for(ii=0; ii<TEST_NUM; ii++)\r
     {\r
-        ft_result.gr_data_final = 0;\r
+        hx3695_delay_ms(20);\r
+        hx3695_LDR2_led_control(1,32); //1=led on;0=led off;ledcur= (led_config*0.8 )ma\r
+        hx3695_delay_ms(40);  \r
+        hx3695_factory_test_read(phase_data);              \r
+        ldr2_buffer[ii] = phase_data[3] - phase_data[0];  \r
+        DEBUG_PRINTF("LDR2: %d \r\n", ldr2_buffer[ii]);        \r
     }\r
-    if(ft_result.red_data_final<0)\r
+    ft_result.ldr2_data_final = hx3695_sort_cal_mid(ldr2_buffer);\r
+    hx3695_led_off();\r
+    hx3695_delay_ms(1000);\r
+    DEBUG_PRINTF("ft single,LDR2:%d\r\n",ft_result.ldr2_data_final );   \r
+    \r
+    for(ii=0; ii<TEST_NUM; ii++)\r
     {\r
-        ft_result.red_data_final = 0;\r
+        hx3695_delay_ms(10);\r
+        hx3695_LDR3_led_control(1,32);  //1=led on;0=led off;ledcur= (led_config*0.8 )ma    \r
+        hx3695_delay_ms(40);          \r
+        hx3695_factory_test_read(phase_data); \r
+               \r
+        ldr3_buffer[ii] = phase_data[4] - phase_data[0];\r
+        DEBUG_PRINTF("LDR3: %d \r\n", ldr3_buffer[ii]);\r
     }\r
-    if(ft_result.ir_data_final<0)\r
+    ft_result.ldr3_data_final = hx3695_sort_cal_mid(ldr3_buffer);\r
+    hx3695_led_off();\r
+    hx3695_delay_ms(1000);\r
+    DEBUG_PRINTF("ft single,LDR3:%d\r\n",ft_result.ldr0_data_final);\r
+    \r
+    for(ii=0; ii<TEST_NUM; ii++)\r
     {\r
-        ft_result.ir_data_final = 0;\r
+        hx3695_delay_ms(20);\r
+        hx3695_LDR4_led_control(1,32); //1=led on;0=led off;ledcur= (led_config*0.8 )ma\r
+        hx3695_delay_ms(40);\r
+        hx3695_factory_test_read(phase_data);     \r
+        ldr4_buffer[ii] = phase_data[5] - phase_data[0];\r
+        DEBUG_PRINTF("LDR4: %d \r\n", ldr4_buffer[ii]);\r
     }\r
-    //TYHX_LOG("leaking result=%d\r\n",ft_result.gr_data_final );\r
-    //hrsresult.leak_green =ft_result.gr_data_final;\r
-\r
-\r
-\r
-    return ft_result;\r
-}\r
-\r
-FT_RESULTS_t hx3695_factory_ft_card_test_get_result(void)\r
-{\r
-    uint8_t ii = 0;\r
-    int32_t phase_data[4] = {0,0,0,0};\r
-    int32_t gr_buffer[4] = {0,0,0,0};\r
-    int32_t red_buffer[4] = {0,0,0,0};\r
-    int32_t ir_buffer[4] = {0,0,0,0};\r
-    FT_RESULTS_t ft_result = {0,0,0,0,0,0,0,0,0,0,0,0};\r
-\r
-    for(ii=0; ii<4; ii++)\r
+    ft_result.ldr4_data_final = hx3695_sort_cal_mid(ldr4_buffer);\r
+    hx3695_led_off();\r
+    hx3695_delay_ms(1000);\r
+    DEBUG_PRINTF("ft single,LDR4:%d,\r\n",ft_result.ldr4_data_final );\r
+    \r
+    for(ii=0; ii<TEST_NUM; ii++)\r
     {\r
+        hx3695_delay_ms(20);\r
+        hx3695_LDR5_led_control(1,32); //1=led on;0=led off;ledcur= (led_config*0.8 )ma\r
         hx3695_delay_ms(40);\r
         hx3695_factory_test_read(phase_data);\r
-        gr_buffer[ii] =  phase_data[1] - phase_data[0];\r
-        red_buffer[ii] = phase_data[2] - phase_data[0];\r
-        ir_buffer[ii] =  phase_data[3] - phase_data[0];\r
+        \r
+        ldr5_buffer[ii] = phase_data[6] - phase_data[0]; \r
+      DEBUG_PRINTF("LDR5: %d \r\n", ldr5_buffer[ii]);        \r
     }\r
-    ft_result.gr_data_final = hx3695_sort_cal(gr_buffer);\r
-    ft_result.red_data_final = hx3695_sort_cal(red_buffer);\r
-    ft_result.ir_data_final = hx3695_sort_cal(ir_buffer);\r
-    DEBUG_PRINTF("ft card,g%d,r%d,ir%d\r\n",ft_result.gr_data_final,ft_result.red_data_final,ft_result.ir_data_final );\r
+    ft_result.ldr5_data_final = hx3695_sort_cal_mid(ldr5_buffer);\r
+    hx3695_led_off();\r
+    hx3695_delay_ms(1000);\r
+    DEBUG_PRINTF("ft single,LDR5:%d\r\n",ft_result.ldr5_data_final );      \r
+        \r
+    hx3695_delay_ms(10);\r
 \r
-    if(gr_buffer[0] == gr_buffer[1] && gr_buffer[0] == gr_buffer[2] && gr_buffer[0] == gr_buffer[3])\r
+    if(ldr0_buffer[0] == ldr0_buffer[1] && ldr0_buffer[0] == ldr0_buffer[2] && ldr0_buffer[0] == ldr0_buffer[3])\r
+    {\r
+        ft_result.ldr0_data_final = 0;\r
+        ft_result.ldr1_data_final = 0;\r
+        ft_result.ldr2_data_final = 0;\r
+    }\r
+    if(ft_result.ldr0_data_final < 0)\r
+    {\r
+        ft_result.ldr0_data_final = 0;\r
+    }\r
+    if(ft_result.ldr1_data_final < 0)\r
     {\r
-        ft_result.gr_data_final = 0;\r
-        ft_result.red_data_final = 0;\r
-        ft_result.ir_data_final = 0;\r
+        ft_result.ldr1_data_final = 0;\r
     }\r
-    if(ft_result.gr_data_final < 0)\r
+    if(ft_result.ldr2_data_final < 0)\r
     {\r
-        ft_result.gr_data_final = 0;\r
+        ft_result.ldr2_data_final = 0;\r
     }\r
-    if(ft_result.red_data_final < 0)\r
+    if(ft_result.ldr0_data_final > 0)\r
     {\r
-        ft_result.red_data_final = 0;\r
+        ft_result.single_gr_led_judge = ft_result.ldr0_data_final*100/ft_result.ldr0_data_final;\r
     }\r
-    if(ft_result.ir_data_final < 0)\r
+    if(ldr3_buffer[0] == ldr3_buffer[1] && ldr3_buffer[0] == ldr3_buffer[2] && ldr3_buffer[0] == ldr3_buffer[3])\r
     {\r
-        ft_result.ir_data_final = 0;\r
+        ft_result.ldr3_data_final = 0;\r
+        ft_result.ldr4_data_final = 0;\r
+        ft_result.ldr5_data_final = 0;\r
+    }\r
+    if(ft_result.ldr3_data_final < 0)\r
+    {\r
+        ft_result.ldr3_data_final = 0;\r
+    }\r
+    if(ft_result.ldr4_data_final < 0)\r
+    {\r
+        ft_result.ldr4_data_final = 0;\r
+    }\r
+    if(ft_result.ldr5_data_final < 0)\r
+    {\r
+        ft_result.ldr5_data_final = 0;\r
     }\r
 \r
     return ft_result;\r
 }\r
-\r
-FT_RESULTS_t hx3695_factory_ft_single_check_get_result(void)\r
+FT_RESULTS_t hx3695_factory_ft_aging_test_get_result(void)\r
 {\r
     uint8_t ii = 0;\r
-    int32_t phase_data[4] = {0,0,0,0};\r
-    int32_t gr_buffer[4] = {0,0,0,0};\r
-    int32_t red_buffer[4] = {0,0,0,0};\r
-    int32_t ir_buffer[4] = {0,0,0,0};\r
-    FT_RESULTS_t ft_result = {0,0,0,0,0,0,0,0,0,0,0,0};\r
-\r
-    for(ii=0; ii<4; ii++)\r
+    int32_t phase_data[8] = {0,0,0,0,0,0,0,0};\r
+    int32_t ldr0_buffer[10] = {0,0,0,0,0,0,0,0,0,0};\r
+    int32_t ldr1_buffer[10] = {0,0,0,0,0,0,0,0,0,0};\r
+    int32_t ldr2_buffer[10] = {0,0,0,0,0,0,0,0,0,0};\r
+    int32_t ldr3_buffer[10] = {0,0,0,0,0,0,0,0,0,0};\r
+    int32_t ldr4_buffer[10] = {0,0,0,0,0,0,0,0,0,0};\r
+    int32_t ldr5_buffer[10] = {0,0,0,0,0,0,0,0,0,0};\r
+  \r
+    FT_RESULTS_t ft_result = {0};\r
+\r
+    for(ii=0; ii<TEST_NUM; ii++)\r
     {\r
-        hx3695_delay_ms(12);\r
+        hx3695_delay_ms(40);\r
         hx3695_factory_test_read(phase_data);\r
-        gr_buffer[ii] = phase_data[1] - phase_data[0];\r
-        red_buffer[ii] = phase_data[2] - phase_data[0];\r
-        ir_buffer[ii] = phase_data[3] - phase_data[0];\r
+         for(int j=1;j<(LDR_NUM+1);j++)\r
+               {\r
+                       phase_result[ii][j] = phase_data[j];\r
+            DEBUG_PRINTF("%d ", phase_result[ii][j]);\r
+               }\r
+        \r
+      DEBUG_PRINTF("\n");\r
+        \r
+        ldr0_buffer[ii] =  phase_data[1] - phase_data[0];\r
+        ldr1_buffer[ii] =  phase_data[2] - phase_data[0];\r
+        ldr2_buffer[ii] =  phase_data[3] - phase_data[0];\r
+        \r
+        ldr3_buffer[ii] =  phase_data[4] - phase_data[0];\r
+        ldr4_buffer[ii] =  phase_data[5] - phase_data[0];\r
+        ldr5_buffer[ii] =  phase_data[6] - phase_data[0];\r
     }\r
-    ft_result.gr_data_final = hx3695_sort_cal(gr_buffer);\r
-    ft_result.red_data_final = hx3695_sort_cal(red_buffer);\r
-    ft_result.ir_data_final = hx3695_sort_cal(ir_buffer);\r
-\r
-    hx3695_write_reg(0x33, 0xff);\r
-    hx3695_delay_ms(10);\r
+//    hx3695_led_off();\r
+    \r
+    ft_result.ldr0_data_final = hx3695_sort_cal(ldr0_buffer);\r
+    ft_result.ldr1_data_final = hx3695_sort_cal(ldr1_buffer);\r
+    ft_result.ldr2_data_final = hx3695_sort_cal(ldr2_buffer);\r
+    \r
+    ft_result.ldr3_data_final = hx3695_sort_cal(ldr3_buffer);\r
+    ft_result.ldr4_data_final = hx3695_sort_cal(ldr4_buffer);\r
+    ft_result.ldr5_data_final = hx3695_sort_cal(ldr5_buffer);\r
+    \r
+    DEBUG_PRINTF("aging,LDR0:%d,LDR1:%d,LDR2:%d,LDR3:%d,LDR4:%d,LDR5 :%d\r\n",ft_result.ldr0_data_final,ft_result.ldr1_data_final,ft_result.ldr2_data_final ,\r
+                                                                ft_result.ldr3_data_final,ft_result.ldr4_data_final,ft_result.ldr5_data_final);\r
+  \r
 \r
-    for(ii=0; ii<4; ii++)\r
+    if(ldr0_buffer[0] == ldr0_buffer[1] && ldr0_buffer[0] == ldr0_buffer[2] && ldr0_buffer[0] == ldr0_buffer[3])\r
     {\r
-        hx3695_delay_ms(12);\r
-        hx3695_factory_test_read(phase_data);\r
-        gr_buffer[ii] = phase_data[1] - phase_data[0];\r
-        red_buffer[ii] = phase_data[2] - phase_data[0];\r
-        ir_buffer[ii] = phase_data[3] - phase_data[0];\r
+        ft_result.ldr0_data_final = 0;\r
+        ft_result.ldr1_data_final = 0;\r
+        ft_result.ldr2_data_final = 0;\r
     }\r
-    ft_result.gr_data_high = hx3695_sort_cal(gr_buffer);\r
-\r
-    if(gr_buffer[0] == gr_buffer[1] && gr_buffer[0] == gr_buffer[2] && gr_buffer[0] == gr_buffer[3])\r
+    if(ft_result.ldr0_data_final < 0)\r
     {\r
-        ft_result.gr_data_final = 0;\r
-        ft_result.red_data_final = 0;\r
-        ft_result.ir_data_final = 0;\r
+        ft_result.ldr0_data_final = 0;\r
     }\r
-    if(ft_result.gr_data_final < 0)\r
+    if(ft_result.ldr1_data_final < 0)\r
     {\r
-        ft_result.gr_data_final = 0;\r
+        ft_result.ldr1_data_final = 0;\r
     }\r
-    if(ft_result.red_data_final < 0)\r
+    if(ft_result.ldr2_data_final < 0)\r
     {\r
-        ft_result.red_data_final = 0;\r
+        ft_result.ldr2_data_final = 0;\r
     }\r
-    if(ft_result.ir_data_final < 0)\r
+if(ldr3_buffer[0] == ldr3_buffer[1] && ldr3_buffer[0] == ldr3_buffer[2] && ldr3_buffer[0] == ldr3_buffer[3])\r
     {\r
-        ft_result.ir_data_final = 0;\r
+        ft_result.ldr3_data_final = 0;\r
+        ft_result.ldr4_data_final = 0;\r
+        ft_result.ldr5_data_final = 0;\r
     }\r
-    if(ft_result.gr_data_final > 0)\r
+    if(ft_result.ldr3_data_final < 0)\r
     {\r
-        ft_result.single_gr_led_judge = ft_result.gr_data_high*100/ft_result.gr_data_final;\r
+        ft_result.ldr3_data_final = 0;\r
+    }\r
+    if(ft_result.ldr4_data_final < 0)\r
+    {\r
+        ft_result.ldr4_data_final = 0;\r
+    }\r
+    if(ft_result.ldr5_data_final < 0)\r
+    {\r
+        ft_result.ldr5_data_final = 0;\r
     }\r
-\r
     return ft_result;\r
 }\r
-\r
 FT_RESULTS_t hx3695_factroy_test(TEST_MODE_t  test_mode)\r
 {\r
-    FT_RESULTS_t ft_result = {0,0,0,0,0,0,0,0,0,0,0,0};\r
 \r
-    //if (hx3695_chip_check_id() == false)\r
-    {\r
-        //   return ft_result;\r
-    }\r
+    FT_RESULTS_t ft_result = {0};\r
+\r
     switch(test_mode)\r
     {\r
-    case LED_OFF_TEST:\r
-        hx3695_factory_led_off_config();\r
-        hx3695_delay_ms(50);\r
-        ft_result = hx3695_factory_led_off_get_result();\r
-        break;\r
-    case WEAR_MODE_TEST:\r
-        hx3695_factory_wear_mode_config();\r
-        hx3695_delay_ms(50);\r
-        ft_result = hx3695_factory_wear_mode_get_result();\r
-        break;\r
+\r
     case LEAK_LIGHT_TEST:\r
+        \r
         hx3695_factory_ft_leak_light_test_config();\r
         hx3695_delay_ms(50);\r
         ft_result = hx3695_factory_ft_leak_light_test_get_result();\r
-        factory_green = ft_result.gr_data_final;\r
-        factory_red = ft_result.red_data_final;\r
-        factory_ir = ft_result.ir_data_final;\r
-        printf("factory_green : %d, factory_red:%d, factory_ir:%d\n",factory_green,factory_red,factory_ir);\r
+        // hrsresult.leak_ldr0 = ft_result.ldr0_data_final;\r
+        // hrsresult.leak_ldr1 = ft_result.ldr1_data_final;\r
+        // hrsresult.leak_ldr2 = ft_result.ldr2_data_final;\r
+\r
+        factory_green = ft_result.ldr0_data_final;\r
+        factory_red = ft_result.ldr1_data_final;\r
+        factory_ir = ft_result.ldr2_data_final;\r
+\r
+        // TYHX_LOG("leak LDR0=%d\r\n",hrsresult.leak_ldr0);\r
         break;\r
+    \r
     case GRAY_CARD_TEST:\r
+        \r
         hx3695_factory_ft_card_test_config();\r
         hx3695_delay_ms(50);\r
         ft_result = hx3695_factory_ft_card_test_get_result();\r
-        factory_green = ft_result.gr_data_final;\r
-        factory_red = ft_result.red_data_final;\r
-        factory_ir = ft_result.ir_data_final;\r
+        // hrsresult.card_ldr0 = ft_result.ldr0_data_final;\r
+        // hrsresult.card_ldr1 = ft_result.ldr1_data_final;\r
+        // hrsresult.card_ldr2 = ft_result.ldr2_data_final;\r
+\r
+        factory_green = ft_result.ldr0_data_final;\r
+        factory_red = ft_result.ldr1_data_final;\r
+        factory_ir = ft_result.ldr2_data_final;\r
         break;\r
-    case FT_INT_TEST:\r
-        hx3695_factory_ft_int_test_config();\r
+    case GNOISE_TEST:\r
+        hx3695_factory_Gnoise_config();\r
+        hx3695_delay_ms(50);\r
+        ft_result = hx3695_factory_Gnoise_result();\r
         break;\r
-    case SINGLE_CHECK_TEST:\r
+   case SINGLE_CHECK_TEST:\r
         hx3695_factory_ft_single_check_config();\r
         hx3695_delay_ms(50);\r
         ft_result = hx3695_factory_ft_single_check_get_result();\r
         break;\r
-    default:\r
+      case AGING_CHECK_TEST:\r
+        hx3695_factory_ft_aging_check_config();\r
+        hx3695_delay_ms(50);\r
+        ft_result = hx3695_factory_ft_aging_test_get_result();\r
         break;\r
     }\r
 \r
-    //hx3695_ppg_off();\r
-    DEBUG_PRINTF("%d %d %d %d %d %d %d %d %d %d %d %d\r\n", ft_result.phase1_data_avg, ft_result.phase2_data_avg, ft_result.phase3_data_avg, ft_result.phase4_data_avg, \\r
-                 ft_result.gr_ps_dif, ft_result.red_ps_dif, ft_result.ir_ps_dif, ft_result.gr_data_final, ft_result.red_data_final, ft_result.ir_data_final, ft_result.gr_data_high, \\r
-                 ft_result.single_gr_led_judge);\r
+       //hx3695_ppg_off();\r
+//    DEBUG_PRINTF("%d %d %d %d %d %d %d %d %d %d %d %d\r\n", ft_result.phase1_data_avg, ft_result.phase2_data_avg, ft_result.phase3_data_avg, ft_result.phase4_data_avg, \\r
+//                 ft_result.ldr0_data_final, ft_result.ldr1_data_final, ft_result.ldr2_data_final, ft_result.ldr0_data_final, ft_result.ldr1_data_final, ft_result.ldr2_data_final, ft_result.ldr0_data_final, \\r
+//                 ft_result.single_gr_led_judge);\r
 \r
     return ft_result;\r
 }\r
index 54cef21..723a9fc 100644 (file)
@@ -1,24 +1,61 @@
-/*\r
- * @Author: penglei 1624952103@qq.com\r
- * @Date: 2025-05-15 11:28:07\r
- * @LastEditors: penglei 1624952103@qq.com\r
- * @LastEditTime: 2025-07-31 17:02:23\r
- * @FilePath: /FD230/code/sdk/zhihui/drivers/ppg/hx3695/hx3695_factory_test.h\r
- * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE\r
- */\r
 #ifndef _HX3695_FACTORY_TEST_H_\r
 #define _HX3695_FACTORY_TEST_H_\r
 \r
 #include <stdint.h>\r
 #include <stdbool.h>\r
 \r
+\r
+/***********ѡ��*************/\r
+#define LDR0_FT_SEL    0x50 \r
+#define LDR1_FT_SEL    0x28\r
+#define LDR2_FT_SEL    0x81\r
+#define LDR3_FT_SEL    0x81\r
+#define LDR4_FT_SEL    0x40\r
+#define LDR5_FT_SEL    0x80\r
+\r
+/***********ѡPD*************/\r
+#define LDR0_PD_FT_SEL     0x06\r
+#define LDR1_PD_FT_SEL     0x06\r
+#define LDR2_PD_FT_SEL     0x06\r
+#define LDR3_PD_FT_SEL     0x06\r
+#define LDR4_PD_FT_SEL     0x0f\r
+#define LDR5_PD_FT_SEL     0x0f\r
+#define ALS_PD_FT_SEL      0x0f\r
+\r
+/***********���õ���*************/\r
+\r
+#define DRV1_LEAK_CUR 64     //Ĭ������ led driver 1 ����50MA��driver2�����õ���\r
+#define DRV2_LEAK_CUR 0\r
+\r
+#define DRV1_GRAD_CUR 32     //Ĭ������ led driver 1 ����25MA��driver2�����õ���\r
+#define DRV2_GRAD_CUR 0\r
+\r
+#define DRV1_AGING_CUR 128    //Ĭ������ led driver 1 ����100MA��driver2����100MA���� �ϼ�200mA\r
+#define DRV2_AGING_CUR 128\r
+\r
+#define DRV1_SINGLE_CUR 64     //Ĭ������ led driver 1 ����50MA��driver2�����õ���\r
+#define DRV2_SINGLE_CUR 0\r
+\r
+/***********��������TIA*************/\r
+\r
+#define  PS_LEAK_TIA 5\r
+\r
+#define  PS_GRAD_TIA 1\r
+\r
+#define  PS_AGING_TIA 5\r
+\r
+#define  PS_SINGLE_TIA 3\r
+\r
+#define  PS_Gnoise_TIA 3\r
+\r
+#define TEST_NUM 6    //���Դ��� \r
+#define LDR_NUM 3   //LDR�򿪸���������ldr˳�򿪹�\r
 typedef enum {\r
        LEAK_LIGHT_TEST = 1,\r
        GRAY_CARD_TEST = 2,\r
-       FT_INT_TEST = 3,\r
-       SINGLE_CHECK_TEST = 4,\r
-    LED_OFF_TEST = 5,\r
-    WEAR_MODE_TEST = 6\r
+       GNOISE_TEST=3,\r
+    SINGLE_CHECK_TEST=4,\r
+    AGING_CHECK_TEST=5\r
 } TEST_MODE_t;\r
 \r
 typedef struct { \r
@@ -26,19 +63,31 @@ typedef struct {
     int32_t phase2_data_avg;\r
     int32_t phase3_data_avg;\r
     int32_t phase4_data_avg;\r
-    int32_t gr_ps_dif;\r
-    int32_t red_ps_dif;\r
-    int32_t ir_ps_dif;\r
-    int32_t gr_data_final;\r
-    int32_t red_data_final;\r
-    int32_t ir_data_final;\r
-    int32_t gr_data_high;\r
+    int32_t phase5_data_avg;\r
+    int32_t phase6_data_avg;\r
+    int32_t phase7_data_avg;\r
+    int32_t phase8_data_avg;\r
+    int32_t ldr0_ps_dif;\r
+    int32_t ldr1_ps_dif;\r
+    int32_t ldr2_ps_dif;\r
+    int32_t ldr0_data_final;\r
+    int32_t ldr1_data_final;\r
+    int32_t ldr2_data_final;\r
+    int32_t ldr0_data_high;\r
+    int32_t ldr3_ps_dif;\r
+    int32_t ldr4_ps_dif;\r
+    int32_t ldr5_ps_dif;\r
+    int32_t ldr3_data_final;\r
+    int32_t ldr4_data_final;\r
+    int32_t ldr5_data_final;\r
+    int32_t ldr3_data_high;\r
     int32_t single_gr_led_judge;\r
 } FT_RESULTS_t;\r
 \r
 void hx3695_factory_ft_leak_light_test_config(void);\r
 void hx3695_factory_ft_card_test_config(void);\r
 void hx3695_factory_ft_int_test_config(void);\r
+void hx3695_factory_new_config_init(void) ;\r
 \r
 bool hx3695_factory_test_read(int32_t *phase_data);\r
 FT_RESULTS_t hx3695_factroy_test(TEST_MODE_t  test_mode);\r
index 45936e2..9c63fff 100644 (file)
@@ -816,35 +816,35 @@ void hx3695_hrs_set_mode(uint8_t mode_cmd)
     }\r
 }\r
 \r
-SENSOR_ERROR_T hx3695_hrs_enable(void)\r
-{\r
-    if (!hx3695_chip_check())\r
-    {\r
-        AGC_LOG("hx3695 check id failed!\r\n");\r
-        return SENSOR_OP_FAILED;\r
-    }\r
+// SENSOR_ERROR_T hx3695_hrs_enable(void)\r
+// {\r
+//     if (!hx3695_chip_check())\r
+//     {\r
+//         AGC_LOG("hx3695 check id failed!\r\n");\r
+//         return SENSOR_OP_FAILED;\r
+//     }\r
 \r
-    AGC_LOG("hx3695 check id success!\r\n");\r
+//     AGC_LOG("hx3695 check id success!\r\n");\r
 \r
-    if (s_ppg_state)\r
-    {\r
-        AGC_LOG("ppg already on!\r\n");\r
-        return SENSOR_OP_FAILED;\r
-    }\r
-    if(!tyhx_hrs_alg_open())\r
-    {\r
-        AGC_LOG("hrs alg open fail,or dynamic ram not enough!\r\n");\r
-    }\r
+//     if (s_ppg_state)\r
+//     {\r
+//         AGC_LOG("ppg already on!\r\n");\r
+//         return SENSOR_OP_FAILED;\r
+//     }\r
+//     if(!tyhx_hrs_alg_open())\r
+//     {\r
+//         AGC_LOG("hrs alg open fail,or dynamic ram not enough!\r\n");\r
+//     }\r
 \r
-    hrs_wear_status = MSG_HRS_NO_WEAR;\r
-    hrs_wear_status_pre = MSG_HRS_NO_WEAR;\r
+//     hrs_wear_status = MSG_HRS_NO_WEAR;\r
+//     hrs_wear_status_pre = MSG_HRS_NO_WEAR;\r
 \r
-    hx3695_hrs_set_mode(PPG_INIT);\r
+//     hx3695_hrs_set_mode(PPG_INIT);\r
 \r
-    AGC_LOG("hx3695 enable!\r\n");\r
+//     AGC_LOG("hx3695 enable!\r\n");\r
 \r
-    return SENSOR_OK;\r
-}\r
+//     return SENSOR_OK;\r
+// }\r
 \r
 void hx3695_hrs_disable(void)\r
 {\r
@@ -896,83 +896,83 @@ HRS_CAL_SET_T get_hrs_agc_status(void)
       return cal;\r
 }\r
 \r
-uint8_t hx3695_hrs_read(hrs_sensor_data_t * s_dat)\r
-{\r
-    int32_t PPG_src_data, PPG_src_data2;\r
-    int32_t Ir_src_data;\r
-    bool recal = false;\r
-    uint8_t size = 0;\r
-         uint8_t  data_count = 0;\r
-    uint8_t size_byte = 0;\r
-    int32_t *PPG_buf =  &(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
+// uint8_t hx3695_hrs_read(hrs_sensor_data_t * s_dat)\r
+// {\r
+//     int32_t PPG_src_data, PPG_src_data2;\r
+//     int32_t Ir_src_data;\r
+//     bool recal = false;\r
+//     uint8_t size = 0;\r
+//       uint8_t  data_count = 0;\r
+//     uint8_t size_byte = 0;\r
+//     int32_t *PPG_buf =  &(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 ps_data[8] =  {0};\r
-               int32_t ps_green_data = 0;\r
-               s_dat->agc_green =  calReg_Hrs.Group1_Cur;\r
-\r
-    if (!s_ppg_state || hrs_cal_state) \r
-    {\r
-//                     TYHX_LOG("ppg_state: %d ,hrs_cal_state:  %d\r\n",s_ppg_state,hrs_cal_state);\r
-        return 0;\r
-    }  \r
-//    TYHX_LOG("ppg_state: %d ,hrs_cal_state:  %d\r\n",s_ppg_state,hrs_cal_state);             \r
-                   data_count = hx3695_read_fifo_data(s_buf,hrs_phase_num,1); \r
-\r
-        if(data_count > 9)\r
-          return 0;\r
-\r
-                   // PRINT("ppg data size: %d %d\r\n", data_count,hrs_phase_num);\r
-//                             SEGGER_RTT_printf(0,"af_hx3695_read_fifo_data:::%d %d %d\r\n", hx3695_read_reg(0X2a),hx3695_read_reg(0X2b),hx3695_read_reg(0X2c));\r
-        s_dat->count =  data_count; \r
-\r
-                   read_hrs_data_packet(ps_data);\r
-        for (uint8_t i=0; i<data_count; i++) \r
-        {\r
-//            PPG_src_data =  ps_data[1] - ps_data[0];     //   s_buf[i*3];\r
-            Ir_src_data  =    ps_data[7] - ps_data[6];   //s_buf[i*3+2]; \r
-            PPG_src_data =    s_buf[i*3];\r
-                                         PPG_src_data2 =   s_buf[i*3+1];\r
-//            Ir_src_data  =    s_buf[i*4+3];          \r
-\r
-            PPG_buf[i] = PPG_src_data * 2;\r
-            ir_buf[i] = Ir_src_data;        //Ir_src_data;\r
-//                                     SEGGER_RTT_printf(0,"PPG_data:  %d , PPG_src_data2: %d\r\n", PPG_src_data,PPG_src_data2);\r
-                       // PRINT("hx3695 Ir_src_data %d \r\n", Ir_src_data);\r
-            hx3695_hrs_wear_mode_check(HRS_MODE,Ir_src_data); \r
-\r
-        }\r
-                               ps_green_data = ps_data[1];   //  -  ((ps_data[2]+ps_data[0])>>1);\r
-//                             SEGGER_RTT_printf(0,"ps_green_data: %d  PS8: %d, PS7:  %d\r\n", ps_green_data,ps_data[7],ps_data[6]);\r
-                               if (ps_green_data<300000 || ps_green_data>800000)            \r
-                               {\r
-                                               recal = true;\r
+//             int32_t ps_data[8] =  {0};\r
+//             int32_t ps_green_data = 0;\r
+//             s_dat->agc_green =  calReg_Hrs.Group1_Cur;\r
+\r
+//     if (!s_ppg_state || hrs_cal_state) \r
+//     {\r
+// //                  TYHX_LOG("ppg_state: %d ,hrs_cal_state:  %d\r\n",s_ppg_state,hrs_cal_state);\r
+//         return 0;\r
+//     }  \r
+// //    TYHX_LOG("ppg_state: %d ,hrs_cal_state:  %d\r\n",s_ppg_state,hrs_cal_state);          \r
+//                 data_count = hx3695_read_fifo_data(s_buf,hrs_phase_num,1); \r
+\r
+//         if(data_count > 9)\r
+//           return 0;\r
+\r
+//                 // PRINT("ppg data size: %d %d\r\n", data_count,hrs_phase_num);\r
+// //                          SEGGER_RTT_printf(0,"af_hx3695_read_fifo_data:::%d %d %d\r\n", hx3695_read_reg(0X2a),hx3695_read_reg(0X2b),hx3695_read_reg(0X2c));\r
+//         s_dat->count =  data_count; \r
+\r
+//                 read_hrs_data_packet(ps_data);\r
+//         for (uint8_t i=0; i<data_count; i++) \r
+//         {\r
+// //            PPG_src_data =  ps_data[1] - ps_data[0];     //   s_buf[i*3];\r
+//             Ir_src_data  =    ps_data[7] - ps_data[6];   //s_buf[i*3+2]; \r
+//             PPG_src_data =    s_buf[i*3];\r
+//                                       PPG_src_data2 =   s_buf[i*3+1];\r
+// //            Ir_src_data  =    s_buf[i*4+3];          \r
+\r
+//             PPG_buf[i] = PPG_src_data * 2;\r
+//             ir_buf[i] = Ir_src_data;        //Ir_src_data;\r
+// //                                  SEGGER_RTT_printf(0,"PPG_data:  %d , PPG_src_data2: %d\r\n", PPG_src_data,PPG_src_data2);\r
+//                     // PRINT("hx3695 Ir_src_data %d \r\n", Ir_src_data);\r
+//             hx3695_hrs_wear_mode_check(HRS_MODE,Ir_src_data); \r
+\r
+//         }\r
+//                             ps_green_data = ps_data[1];   //  -  ((ps_data[2]+ps_data[0])>>1);\r
+// //                          SEGGER_RTT_printf(0,"ps_green_data: %d  PS8: %d, PS7:  %d\r\n", ps_green_data,ps_data[7],ps_data[6]);\r
+//                             if (ps_green_data<300000 || ps_green_data>800000)            \r
+//                             {\r
+//                                             recal = true;\r
                                         \r
-                                               if(hrs_wear_status==MSG_HRS_NO_WEAR)\r
-                                               {\r
-                                                                recal = false;\r
-                                               }                \r
-                               }\r
-        if (recal) \r
-                               //if (0)\r
-        {\r
-            cal_delay--;\r
-\r
-            if (cal_delay <= 0) \r
-            {\r
-                cal_delay = CAL_DELAY_COUNT;\r
-                hx3695_hrs_set_mode(RECAL_INIT);\r
-                AGC_LOG("========>>>>LED_IDAC = %d   %d   %d\r\n",calReg_Hrs.Group1_Ledidac,calReg_Hrs.Group2_Ledidac,calReg_Hrs.Group3_Ledidac);\r
-            }\r
-        }\r
-        else                       \r
-        {\r
-            cal_delay = CAL_DELAY_COUNT;\r
-        }\r
-//    }    \r
-    return 1;\r
-}\r
+//                                             if(hrs_wear_status==MSG_HRS_NO_WEAR)\r
+//                                             {\r
+//                                                              recal = false;\r
+//                                             }                \r
+//                             }\r
+//         if (recal) \r
+//                             //if (0)\r
+//         {\r
+//             cal_delay--;\r
+\r
+//             if (cal_delay <= 0) \r
+//             {\r
+//                 cal_delay = CAL_DELAY_COUNT;\r
+//                 hx3695_hrs_set_mode(RECAL_INIT);\r
+//                 AGC_LOG("========>>>>LED_IDAC = %d   %d   %d\r\n",calReg_Hrs.Group1_Ledidac,calReg_Hrs.Group2_Ledidac,calReg_Hrs.Group3_Ledidac);\r
+//             }\r
+//         }\r
+//         else                       \r
+//         {\r
+//             cal_delay = CAL_DELAY_COUNT;\r
+//         }\r
+// //    }    \r
+//     return 1;\r
+// }\r
 \r
 \r
 #endif\r
index 91aea99..d18ec00 100644 (file)
@@ -102,10 +102,10 @@ void hx3695_hrs_low_power(void);
 void hx3695_hrs_normal_power(void);\r
 void hx3695_hrs_updata_reg(void);\r
 void hx3695_hrs_set_mode(uint8_t mode_cmd);\r
-SENSOR_ERROR_T hx3695_hrs_enable(void);\r
+// SENSOR_ERROR_T hx3695_hrs_enable(void);\r
 void hx3695_hrs_disable(void);\r
 hrs_wear_msg_code_t hx3695_hrs_get_wear_status(void);\r
-uint8_t hx3695_hrs_read(hrs_sensor_data_t *s_dat);\r
+// uint8_t hx3695_hrs_read(hrs_sensor_data_t *s_dat);\r
 bool hx3695_hrs_init(void);  \r
 hrs_wear_msg_code_t hx3695_hrs_wear_mode_check(WORK_MODE_T mode, int32_t infrared_data);\r
 \r
index 1bf2916..4767286 100644 (file)
@@ -1,3 +1,11 @@
+/*\r
+ * @Author: penglei 1624952103@qq.com\r
+ * @Date: 2025-05-15 11:28:07\r
+ * @LastEditors: penglei 1624952103@qq.com\r
+ * @LastEditTime: 2025-10-25 10:14:36\r
+ * @FilePath: /FD230/code/sdk/zhihui/drivers/ppg/hx3695/hx3695_hrv_agc.c\r
+ * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE\r
+ */\r
 #include <stdio.h>\r
 #include <stdbool.h>\r
 #include <stdint.h>\r
@@ -579,35 +587,37 @@ void hx3695_hrv_set_mode(uint8_t mode_cmd)
     }\r
 }\r
 \r
-SENSOR_ERROR_T hx3695_hrv_enable(void)\r
-{\r
-    if (!hx3695_chip_check())\r
-    {\r
-        AGC_LOG("hx3695 check id failed!\r\n");\r
-        return SENSOR_OP_FAILED;\r
-    }\r
+// SENSOR_ERROR_T hx3695_hrv_enable(void)\r
+// {\r
+//     if (!hx3695_chip_check())\r
+//     {\r
+//         AGC_LOG("hx3695 check id failed!\r\n");\r
+//         return SENSOR_OP_FAILED;\r
+//     }\r
 \r
-    AGC_LOG("hx3695 check id success!\r\n");\r
+//     AGC_LOG("hx3695 check id success!\r\n");\r
 \r
-    if (s_ppg_state)\r
-    {\r
-        AGC_LOG("ppg already on!\r\n");\r
-        return SENSOR_OP_FAILED;\r
-    }\r
-    if(!tyhx_hrv_alg_open())\r
-    {\r
-        AGC_LOG("hrv alg open fail,or dynamic ram not enough!\r\n");\r
-    }\r
+//     if (s_ppg_state)\r
+//     {\r
+//         AGC_LOG("ppg already on!\r\n");\r
+//         return SENSOR_OP_FAILED;\r
+//     }\r
+//     if(!tyhx_hrv_alg_open())\r
+//     {\r
+//         AGC_LOG("hrv alg open fail,or dynamic ram not enough!\r\n");\r
+//     }\r
 \r
-    hrv_wear_status = MSG_HRV_NO_WEAR;\r
-    hrv_wear_status_pre = MSG_HRV_NO_WEAR;\r
+//     hrv_wear_status = MSG_HRV_NO_WEAR;\r
+//     hrv_wear_status_pre = MSG_HRV_NO_WEAR;\r
 \r
-    hx3695_hrv_set_mode(PPG_INIT);\r
+//     hx3695_hrv_set_mode(PPG_INIT);\r
 \r
-    AGC_LOG("hx3695 enable!\r\n");\r
+//     AGC_LOG("hx3695 enable!\r\n");\r
 \r
-    return SENSOR_OK;\r
-}\r
+//     printf("hx3695_hrv_enable!!!\n");\r
+\r
+//     return SENSOR_OK;\r
+// }\r
 \r
 \r
 void hx3695_hrv_disable(void)\r
@@ -710,75 +720,75 @@ HRV_CAL_SET_T get_hrv_agc_status(void)
 //    }\r
 //}\r
 \r
-uint8_t hx3695_hrv_read(hrv_sensor_data_t *s_dat)\r
-{\r
-    uint8_t i = 0;\r
-    int32_t PPG_src_data = 0;\r
-    int32_t Ir_src_data = 0;\r
-    bool recal = false;\r
-    uint8_t size = 0;\r
-    uint8_t fifo_out_size = 0;\r
-    int32_t *PPG_buf =  &(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
-    s_dat->green_cur =  calReg.LED;\r
-    int32_t ps_data[4];\r
-\r
-    if (!s_ppg_state || s_cal_state)\r
-    {\r
-       DEBUG_PRINTF("ppg state = %d, cal_state = %d\r\n",s_ppg_state,s_cal_state);\r
-        return 0;\r
-    }\r
-//    size = hx3695_read_fifo_size();\r
-//       DEBUG_PRINTF("size = %d\r\n",size);\r
-\r
-//    if(size<1)\r
-//    {\r
-//        return 0;\r
-//    }\r
-\r
-    hx3695_hrv_read_data_packet(ps_data);\r
-    Ir_src_data = ps_data[2]-ps_data[3];\r
-         DEBUG_PRINTF("%d %d \r\n" ,ps_data[2],ps_data[3]);\r
-    ir_buf[0] = Ir_src_data;\r
-       //DEBUG_PRINTF("111: %d \r\n" ,ir_buf[0] );\r
-    hx3695_hrv_wear_mode_check(Ir_src_data);\r
-\r
-//    if ((size) && (size <= 64))\r
-//    {\r
-        fifo_out_size = hx3695_read_fifo_data(s_buf,hrv_phase_num,1);\r
-        s_dat->count = fifo_out_size;\r
-        for (i=0; i<fifo_out_size; i++)\r
-        {\r
-            PPG_src_data = s_buf[i];\r
-            if (s_buf[i]<350000 || s_buf[i]>750000)\r
-            {\r
-                recal = true;\r
-\r
-                if(hrv_wear_status==MSG_HRV_NO_WEAR)\r
-                {\r
-                    recal = false;\r
-                }\r
-            }\r
-            PPG_buf[i] = PPG_src_data;\r
-            //AGC_LOG("%d/%d %d %d %d\r\n" ,1+i,size, s_buf[i],calReg.LED,recal);\r
-        }\r
-\r
-        if (recal)\r
-        {\r
-            cal_delay--;\r
-            if (cal_delay <= 0)\r
-            {\r
-                cal_delay = HRV_CAL_DELAY_COUNT;\r
-                hx3695_hrv_set_mode(RECAL_INIT);\r
-            }\r
-        }\r
-        else\r
-        {\r
-            cal_delay = HRV_CAL_DELAY_COUNT;\r
-        }\r
-//    }\r
-    return 1;\r
-}\r
+// uint8_t hx3695_hrv_read(hrv_sensor_data_t *s_dat)\r
+// {\r
+//     uint8_t i = 0;\r
+//     int32_t PPG_src_data = 0;\r
+//     int32_t Ir_src_data = 0;\r
+//     bool recal = false;\r
+//     uint8_t size = 0;\r
+//     uint8_t fifo_out_size = 0;\r
+//     int32_t *PPG_buf =  &(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
+//     s_dat->green_cur =  calReg.LED;\r
+//     int32_t ps_data[4];\r
+\r
+//     if (!s_ppg_state || s_cal_state)\r
+//     {\r
+//             DEBUG_PRINTF("ppg state = %d, cal_state = %d\r\n",s_ppg_state,s_cal_state);\r
+//         return 0;\r
+//     }\r
+// //    size = hx3695_read_fifo_size();\r
+// //    DEBUG_PRINTF("size = %d\r\n",size);\r
+\r
+// //    if(size<1)\r
+// //    {\r
+// //        return 0;\r
+// //    }\r
+\r
+//     hx3695_hrv_read_data_packet(ps_data);\r
+//     Ir_src_data = ps_data[2]-ps_data[3];\r
+//       DEBUG_PRINTF("%d %d \r\n" ,ps_data[2],ps_data[3]);\r
+//     ir_buf[0] = Ir_src_data;\r
+//     DEBUG_PRINTF("111: %d \r\n" ,ir_buf[0] );\r
+//     hx3695_hrv_wear_mode_check(Ir_src_data);\r
+\r
+// //    if ((size) && (size <= 64))\r
+// //    {\r
+//         fifo_out_size = hx3695_read_fifo_data(s_buf,hrv_phase_num,1);\r
+//         s_dat->count = fifo_out_size;\r
+//         for (i=0; i<fifo_out_size; i++)\r
+//         {\r
+//             PPG_src_data = s_buf[i];\r
+//             if (s_buf[i]<350000 || s_buf[i]>750000)\r
+//             {\r
+//                 recal = true;\r
+\r
+//                 if(hrv_wear_status==MSG_HRV_NO_WEAR)\r
+//                 {\r
+//                     recal = false;\r
+//                 }\r
+//             }\r
+//             PPG_buf[i] = PPG_src_data;\r
+//             AGC_LOG("%d/%d %d %d %d\r\n" ,1+i,size, s_buf[i],calReg.LED,recal);\r
+//         }\r
+\r
+//         if (recal)\r
+//         {\r
+//             cal_delay--;\r
+//             if (cal_delay <= 0)\r
+//             {\r
+//                 cal_delay = HRV_CAL_DELAY_COUNT;\r
+//                 hx3695_hrv_set_mode(RECAL_INIT);\r
+//             }\r
+//         }\r
+//         else\r
+//         {\r
+//             cal_delay = HRV_CAL_DELAY_COUNT;\r
+//         }\r
+// //    }\r
+//     return 1;\r
+// }\r
 \r
 #endif\r
index 3804a5b..5fa5b07 100644 (file)
@@ -1,3 +1,11 @@
+/*\r
+ * @Author: penglei 1624952103@qq.com\r
+ * @Date: 2025-05-15 11:28:07\r
+ * @LastEditors: penglei 1624952103@qq.com\r
+ * @LastEditTime: 2025-10-25 10:13:59\r
+ * @FilePath: /FD230/code/sdk/zhihui/drivers/ppg/hx3695/hx3695_hrv_agc.h\r
+ * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE\r
+ */\r
 #ifndef _hx3695_hrv_agc_H_\r
 #define _hx3695_hrv_agc_H_\r
 //#endif\r
@@ -71,10 +79,10 @@ void hx3695_hrv_read_data_packet(int32_t *buf);
 void hx3695_hrv_low_power(void);\r
 void hx3695_hrv_updata_reg(void);\r
 void hx3695_hrv_set_mode(uint8_t mode_cmd);\r
-SENSOR_ERROR_T hx3695_hrv_enable(void);\r
+// SENSOR_ERROR_T hx3695_hrv_enable(void);\r
 void hx3695_hrv_disable(void);\r
 hrv_wear_msg_code_t hx3695_hrv_get_wear_status(void);\r
-uint8_t hx3695_hrv_read(hrv_sensor_data_t * s_dat);\r
+// uint8_t hx3695_hrv_read(hrv_sensor_data_t * s_dat);\r
 bool hx3695_hrv_init(void);\r
 HRV_CAL_SET_T PPG_hrv_agc(void);\r
 hrv_wear_msg_code_t hx3695_hrv_wear_mode_check(int32_t infrared_data);\r
index 9a230be..dc658a1 100644 (file)
@@ -835,70 +835,70 @@ void hx3695_spo2_set_mode(uint8_t mode_cmd)
     }\r
 }\r
 \r
-SENSOR_ERROR_T hx3695_spo2_enable(void)\r
-{\r
-    if (!hx3695_chip_check())\r
-    {\r
-        AGC_LOG("hx3695 check id failed!\r\n");\r
-        return SENSOR_OP_FAILED;\r
-    }\r
-\r
-    AGC_LOG("hx3695 check id success!\r\n");\r
-\r
-    if (s_ppg_state)\r
-    {\r
-        AGC_LOG("ppg already on!\r\n");\r
-        return SENSOR_OP_FAILED;\r
-    }\r
-\r
-    if(!tyhx_spo2_alg_open())\r
-    {\r
-        AGC_LOG("spo2 alg open fail,or dynamic ram not enough!\r\n");\r
-        return SENSOR_OP_FAILED;\r
-    }\r
-    spo2_wear_status = MSG_SPO2_NO_WEAR;\r
-    spo2_wear_status_pre = MSG_SPO2_NO_WEAR;\r
-    hx3695_spo2_set_mode(PPG_INIT);\r
-\r
-    AGC_LOG("hx3695 enable!\r\n");\r
-\r
-    return SENSOR_OK;\r
-}\r
-\r
-SENSOR_ERROR_T hx3695_hrspo2_enable(void)\r
-{\r
-    if (!hx3695_chip_check())\r
-    {\r
-        AGC_LOG("hx3695 check id failed!\r\n");\r
-        return SENSOR_OP_FAILED;\r
-    }\r
-\r
-    AGC_LOG("hx3695 check id success!\r\n");\r
-\r
-    if (s_ppg_state)\r
-    {\r
-        AGC_LOG("ppg already on!\r\n");\r
-        return SENSOR_OP_FAILED;\r
-    }\r
-\r
-    if(!tyhx_spo2_alg_open())\r
-    {\r
-        AGC_LOG("spo2 alg open fail,or dynamic ram not enough!\r\n");\r
-        return SENSOR_OP_FAILED;\r
-    }\r
-    if(!tyhx_hrs_alg_open())\r
-    {\r
-        AGC_LOG("spo2 alg open fail,or dynamic ram not enough!\r\n");\r
-        return SENSOR_OP_FAILED;\r
-    }\r
-    spo2_wear_status = MSG_SPO2_NO_WEAR;\r
-    spo2_wear_status_pre = MSG_SPO2_NO_WEAR;\r
-    hx3695_spo2_set_mode(PPG_INIT);\r
-\r
-    AGC_LOG("hx3695 enable!\r\n");\r
-\r
-    return SENSOR_OK;\r
-}\r
+// SENSOR_ERROR_T hx3695_spo2_enable(void)\r
+// {\r
+//     if (!hx3695_chip_check())\r
+//     {\r
+//         AGC_LOG("hx3695 check id failed!\r\n");\r
+//         return SENSOR_OP_FAILED;\r
+//     }\r
+\r
+//     AGC_LOG("hx3695 check id success!\r\n");\r
+\r
+//     if (s_ppg_state)\r
+//     {\r
+//         AGC_LOG("ppg already on!\r\n");\r
+//         return SENSOR_OP_FAILED;\r
+//     }\r
+\r
+//     if(!tyhx_spo2_alg_open())\r
+//     {\r
+//         AGC_LOG("spo2 alg open fail,or dynamic ram not enough!\r\n");\r
+//         return SENSOR_OP_FAILED;\r
+//     }\r
+//     spo2_wear_status = MSG_SPO2_NO_WEAR;\r
+//     spo2_wear_status_pre = MSG_SPO2_NO_WEAR;\r
+//     hx3695_spo2_set_mode(PPG_INIT);\r
+\r
+//     AGC_LOG("hx3695 enable!\r\n");\r
+\r
+//     return SENSOR_OK;\r
+// }\r
+\r
+// SENSOR_ERROR_T hx3695_hrspo2_enable(void)\r
+// {\r
+//     if (!hx3695_chip_check())\r
+//     {\r
+//         AGC_LOG("hx3695 check id failed!\r\n");\r
+//         return SENSOR_OP_FAILED;\r
+//     }\r
+\r
+//     AGC_LOG("hx3695 check id success!\r\n");\r
+\r
+//     if (s_ppg_state)\r
+//     {\r
+//         AGC_LOG("ppg already on!\r\n");\r
+//         return SENSOR_OP_FAILED;\r
+//     }\r
+\r
+//     if(!tyhx_spo2_alg_open())\r
+//     {\r
+//         AGC_LOG("spo2 alg open fail,or dynamic ram not enough!\r\n");\r
+//         return SENSOR_OP_FAILED;\r
+//     }\r
+//     if(!tyhx_hrs_alg_open())\r
+//     {\r
+//         AGC_LOG("spo2 alg open fail,or dynamic ram not enough!\r\n");\r
+//         return SENSOR_OP_FAILED;\r
+//     }\r
+//     spo2_wear_status = MSG_SPO2_NO_WEAR;\r
+//     spo2_wear_status_pre = MSG_SPO2_NO_WEAR;\r
+//     hx3695_spo2_set_mode(PPG_INIT);\r
+\r
+//     AGC_LOG("hx3695 enable!\r\n");\r
+\r
+//     return SENSOR_OK;\r
+// }\r
 \r
 void hx3695_spo2_disable(void)\r
 {\r
index db736ff..b9135a2 100644 (file)
@@ -117,7 +117,7 @@ void hx3695_spo2_low_power(void);
 void hx3695_spo2_normal_power(void); \r
 void hx3695_spo2_updata_reg(void);\r
 void hx3695_spo2_set_mode(uint8_t mode_cmd);\r
-SENSOR_ERROR_T hx3695_spo2_enable(void);\r
+// SENSOR_ERROR_T hx3695_spo2_enable(void);\r
 void hx3695_spo2_disable(void);\r
 spo2_wear_msg_code_t hx3695_spo2_get_wear_status(void);\r
 uint8_t hx3695_spo2_read(spo2_sensor_data_t * s_dat);\r
diff --git a/code/sdk/zhihui/drivers/ppg/hx3695/libHX3697_hs_20240607_3333__02_spo.a b/code/sdk/zhihui/drivers/ppg/hx3695/libHX3697_hs_20240607_3333__02_spo.a
new file mode 100644 (file)
index 0000000..d72722b
Binary files /dev/null and b/code/sdk/zhihui/drivers/ppg/hx3695/libHX3697_hs_20240607_3333__02_spo.a differ
diff --git a/code/sdk/zhihui/drivers/ppg/hx3695/libHX3697_hs_20241230_103__01_hrv.a b/code/sdk/zhihui/drivers/ppg/hx3695/libHX3697_hs_20241230_103__01_hrv.a
new file mode 100644 (file)
index 0000000..32ccac4
Binary files /dev/null and b/code/sdk/zhihui/drivers/ppg/hx3695/libHX3697_hs_20241230_103__01_hrv.a differ
diff --git a/code/sdk/zhihui/drivers/ppg/hx3695/libHX3697_hs_20241230_3153__01_hrs.a b/code/sdk/zhihui/drivers/ppg/hx3695/libHX3697_hs_20241230_3153__01_hrs.a
new file mode 100644 (file)
index 0000000..0b85766
Binary files /dev/null and b/code/sdk/zhihui/drivers/ppg/hx3695/libHX3697_hs_20241230_3153__01_hrs.a differ
index b693581..f7eeaf4 100644 (file)
@@ -1,22 +1,22 @@
-//vesion3.1.35\r
+//vesion3.1.53\r
 #ifndef _TYHX_HRS_ALG_H_\r
 #define _TYHX_HRS_ALG_H_\r
 \r
 #include <stdint.h>\r
-#if 0\r
-/* portable 8-bit unsigned integer */\r
-typedef unsigned char           uint8_t;\r
-/* portable 8-bit signed integer */\r
-typedef signed char             int8_t;\r
-/* portable 16-bit unsigned integer */\r
-typedef unsigned short int      uint16_t;\r
-/* portable 16-bit signed integer */\r
-typedef signed short int        int16_t;\r
-/* portable 32-bit unsigned integer */\r
-typedef unsigned int            uint32_t;\r
-/* portable 32-bit signed integer */\r
-typedef signed int              int32_t;\r
-#endif\r
+\r
+// /* portable 8-bit unsigned integer */\r
+// typedef unsigned char           uint8_t;\r
+// /* portable 8-bit signed integer */\r
+// typedef signed char             int8_t;\r
+// /* portable 16-bit unsigned integer */\r
+// typedef unsigned short int      uint16_t;\r
+// /* portable 16-bit signed integer */\r
+// typedef signed short int        int16_t;\r
+// /* portable 32-bit unsigned integer */\r
+// //typedef unsigned int            uint32_t;\r
+// /* portable 32-bit signed integer */\r
+// //typedef signed int              int32_t;\r
+\r
 #ifndef bool\r
 #define bool unsigned char\r
 #endif\r
@@ -28,7 +28,25 @@ typedef signed int              int32_t;
 #define  false  0\r
 #endif\r
 \r
-#ifdef HRS_ALG_LIB\r
+\r
+/////////////////////////  config  ///////////////////////////\r
+#define BP_CUSTDOWN_ALG_LIB\r
+#define SHARED_RAM\r
+#define NO_MATH_LIB\r
+\r
+//define DEBUG_DATA\r
+//////////////////////////////////////////////////////////////\r
+\r
+\r
+// #ifdef DEBUG_DATA\r
+// #define  DEBUG_PRINTF(...)     SEGGER_RTT_printf(0,__VA_ARGS__)\r
+// #else\r
+// #define      DEBUG_PRINTF(...)\r
+// #endif\r
+\r
+#ifdef SHARED_RAM\r
+extern uint8_t alg_ram[11 * 1024] __attribute__((aligned(4)));\r
+#endif\r
 \r
 typedef enum {\r
        NORMAL_MODE,\r
@@ -36,7 +54,8 @@ typedef enum {
        WALK_MODE,\r
        JUMP_MODE,\r
        ALLDAY_HR_MODE,\r
-       HIGH_POW_MODE\r
+       HIGH_POW_MODE,\r
+    CLICK_MODE\r
 } hrs_sports_mode_t;\r
 \r
 typedef enum {\r
@@ -60,6 +79,13 @@ typedef struct {
        uint16_t            cal_result;\r
        uint8_t             hr_result_qual;\r
     uint32_t            hr_result_std;\r
+    hrs_sports_mode_t   hr_mode;\r
+    uint8_t             stress;\r
+    uint8_t             breath;\r
+    uint32_t            rri;\r
+    uint32_t            rri_num;\r
+    uint32_t            rri_std;\r
+    uint32_t            rmssd;\r
 } hrs_results_t;\r
 \r
 #ifdef BP_CUSTDOWN_ALG_LIB\r
@@ -84,7 +110,7 @@ typedef struct {
 typedef struct {\r
        bp_msg_code_t   bp_alg_status;\r
        uint8_t         sbp;\r
-       uint8_t         dbp; \r
+       uint8_t         dbp;\r
        uint32_t        data_cnt;\r
        uint8_t         hr_result;\r
        bool            object_flg;\r
@@ -105,7 +131,6 @@ bool tyhx_motion_pedometer(int16_t gsen_data_x, int16_t gsen_data_y, int16_t gse
 hrs_results_t tyhx_hrs_alg_get_results(void);\r
 void tyhx_hrs_set_alg_para(hrs_sports_mode_t sports_mode, uint16_t static_thre_val, uint8_t gsen_fun_lv_val);\r
 void tyhx_hrs_set_living(uint8_t mode, uint8_t qu_thre, uint8_t st_thre);\r
-#endif //HRS_ALG_LIB\r
 \r
 #endif\r
 \r
index d956bbd..fcab35d 100644 (file)
@@ -8,7 +8,7 @@
  * @Author: penglei 1624952103@qq.com
  * @Date: 2024-03-26 20:29:58
  * @LastEditors: penglei 1624952103@qq.com
- * @LastEditTime: 2024-11-18 17:32:40
+ * @LastEditTime: 2025-10-22 17:41:15
  * @FilePath: /FD230/code/sdk/drivers/peripheral/ppg/hx3695/tyhx_hrs_custom.h
  * @Description: 
  * 
@@ -36,7 +36,8 @@ typedef struct {
 } FT_CUSTOM_RESULTS_t;
 
 extern FT_CUSTOM_RESULTS_t hrsresult;
-//#define TYHX_DEBUG
+
+#define TYHX_DEBUG
 
 #ifdef TYHX_DEBUG
 #define TYHX_LOG(fmt, ...)                    \
index 116e278..1917614 100644 (file)
@@ -1,8 +1,10 @@
+//tyhx_hrv_v1.0.3\r
+\r
 #ifndef _TYHX_HRV_ALG_H_\r
 #define _TYHX_HRV_ALG_H_\r
-#endif\r
        \r
 #include <stdint.h>\r
+\r
 #if 0\r
 /* portable 8-bit unsigned integer */\r
 typedef unsigned char           uint8_t;\r
@@ -16,7 +18,7 @@ typedef signed short int        int16_t;
 typedef unsigned int            uint32_t;\r
 /* portable 32-bit signed integer */\r
 typedef signed int              int32_t;\r
-#endif\r
+\r
 #ifndef  bool\r
 #define  bool unsigned char\r
 #endif\r
@@ -26,11 +28,27 @@ typedef signed int              int32_t;
 #ifndef  false\r
 #define  false  0\r
 #endif\r
+#endif\r
+\r
 \r
 #define HRV_GLITCH_THRES     20000 \r
 #define HRV_GSEN_POW_THRE    150\r
 \r
-#ifdef HRV_ALG_LIB\r
+/////////////////////////  config  ///////////////////////////\r
+#define SHARED_RAM\r
+//define DEBUG_DATA\r
+//////////////////////////////////////////////////////////////\r
+\r
+\r
+// #ifdef DEBUG_DATA\r
+// #define  DEBUG_PRINTF(...)     SEGGER_RTT_printf(0,__VA_ARGS__)\r
+// #else\r
+// #define      DEBUG_PRINTF(...)\r
+// #endif\r
+\r
+#ifdef SHARED_RAM\r
+extern uint8_t alg_ram[11 * 1024] __attribute__((aligned(4)));\r
+#endif\r
 \r
 typedef enum {\r
     MSG_HRV_ALG_NOT_OPEN,\r
@@ -42,8 +60,10 @@ typedef enum {
 typedef struct {\r
     hrv_alg_msg_code_t  hrv_alg_status;\r
     uint32_t    data_cnt;\r
-    uint8_t     hrv_result;\r
+    uint32_t    hrv_result;\r
+    uint32_t    hr;\r
     uint32_t    hrv_peak; \r
+    uint32_t    rri_cnt; \r
     uint8_t     spirit_pressure;\r
     uint8_t     p_m;\r
     uint8_t     screen_up;\r
@@ -60,5 +80,5 @@ void kfft(double *pr,double *pi,int n,int k,double *fr,double *fi);
 \r
 hrv_results_t tyhx_hrv_alg_send_data(int32_t new_raw_data, int32_t green_data_als, int32_t infrared_data);\r
 hrv_results_t tyhx_hrv_alg_send_bufdata(int32_t *new_raw_data, uint8_t count, int16_t *gsen_data_x, int16_t *gsen_data_y, int16_t *gsen_data_z);\r
-#endif //HRV_ALG_LIB\r
-               \r
+\r
+#endif\r
index e330cc6..56afe77 100644 (file)
@@ -3,24 +3,23 @@
 #endif\r
 #include <stdint.h>\r
 \r
-//version:3.3.17\r
+//version:xiaoche3.3.5\r
 \r
 //#include "tyhx_spo2_alg_para.h"\r
 \r
-#if 0\r
-/* portable 8-bit unsigned integer */\r
-typedef unsigned char           uint8_t;\r
-/* portable 8-bit signed integer */\r
-typedef signed char             int8_t;\r
-/* portable 16-bit unsigned integer */\r
-typedef unsigned short int      uint16_t;\r
-/* portable 16-bit signed integer */\r
-typedef signed short int        int16_t;\r
-/* portable 32-bit unsigned integer */\r
-typedef unsigned int            uint32_t;\r
-/* portable 32-bit signed integer */\r
-typedef signed int              int32_t;\r
-#endif\r
+\r
+// /* portable 8-bit unsigned integer */\r
+// typedef unsigned char           uint8_t;\r
+// /* portable 8-bit signed integer */\r
+// typedef signed char             int8_t;\r
+// /* portable 16-bit unsigned integer */\r
+// typedef unsigned short int      uint16_t;\r
+// /* portable 16-bit signed integer */\r
+// typedef signed short int        int16_t;\r
+// /* portable 32-bit unsigned integer */\r
+// //typedef unsigned int            uint32_t;\r
+// /* portable 32-bit signed integer */\r
+// //typedef signed int              int32_t;\r
 \r
 #ifndef bool\r
 #define bool unsigned char\r
@@ -35,7 +34,7 @@ typedef signed int              int32_t;
 \r
 \r
 #ifdef SPO2_ALG_LIB\r
-\r
+extern uint32_t hr_sqrt(uint32_t x);\r
 typedef enum {\r
        MSG_SPO2_ALG_NOT_OPEN,\r
        MSG_SPO2_ALG_OPEN,\r
@@ -68,10 +67,10 @@ typedef struct {
     uint8_t                    screen_up;\r
     uint8_t                    motion;\r
     uint8_t                    poor_signal;\r
-    \r
+\r
     uint8_t         signal_snr;\r
     uint32_t        signal_std;\r
-    \r
+\r
 } spo2_results_t;\r
 \r
 typedef struct {\r
@@ -82,38 +81,29 @@ typedef struct {
 \r
 typedef struct {\r
        uint32_t data_cnt;\r
-       int32_t red_new_raw_data;\r
-       int32_t ir_new_raw_data;\r
-       int32_t green_new_raw_data;\r
-       int32_t ir_iir_data_filter_out;\r
-       int32_t ir_data_smooth;\r
-       int32_t red_iir_data_filter_out;\r
-       int32_t red_data_smooth;\r
+    uint8_t  motion;\r
        uint8_t ir_offset_50;\r
        uint8_t red_offset_50;\r
        uint8_t green_offset_50;\r
        int32_t ir_dc;\r
        int32_t red_dc;\r
        int32_t green_dc;\r
-       int32_t ir_data_o2_128;\r
-       int32_t red_data_o2_128;\r
-       int32_t green_data_o2_128;\r
-       int16_t red_ir_dc;\r
-       int16_t red_green_dc;\r
-       int16_t ir_green_dc;\r
-       int16_t ir_fft_snr;\r
-       int8_t  motion_status;\r
-       uint8_t xcorr_max;\r
-       int16_t COUNT_IN_judge;\r
+    int32_t ir_ac;\r
+       int32_t red_ac;\r
+       int32_t green_ac;\r
+       int32_t sa_temp;\r
+       int32_t gi_temp;\r
+       int32_t sa_final;\r
+       uint16_t ir_fft_snr;\r
+       uint16_t red_fft_snr;\r
+    uint8_t count_block;\r
        uint8_t spo2_result;\r
-       uint8_t count_block;\r
-       int32_t SaO2_data_temp;\r
 } spo2_debug_t;\r
 \r
 typedef struct {\r
          uint8_t       red_offset_idac;\r
-         uint8_t       ir_offset_idac; \r
-         uint8_t       green_offset_idac; \r
+         uint8_t       ir_offset_idac;\r
+         uint8_t       green_offset_idac;\r
          uint16_t      spo2_start_cnt;\r
 } spo2_agcpara_t;\r
 \r
@@ -161,5 +151,5 @@ bool tyhx_spo2_alg_open_deep(void);
 spo2_results_t tyhx_spo2_alg_get_results(void);\r
 spo2_debug_t tyhx_spo2_alg_debug_results(void);\r
 \r
-#endif \r
+#endif\r
 \r
index 8f6a71c..30c8cc0 100644 (file)
@@ -2,7 +2,7 @@
  * @Author: penglei 1624952103@qq.com\r
  * @Date: 2024-06-17 14:31:08\r
  * @LastEditors: penglei 1624952103@qq.com\r
- * @LastEditTime: 2025-10-21 11:11:55\r
+ * @LastEditTime: 2025-10-24 17:25:15\r
  * @FilePath: /FD230/code/sdk/application/wearable/service/factorytest_service/factorytest_protocol.c\r
  * @Description: \r
  * \r
@@ -1622,17 +1622,17 @@ void factorytest_protocol_soft_test_decode(uint8_t submode,uint8_t testitem,uint
                 uint8_t databuf[4] = {0};\r
 #ifdef BOARD_FD230\r
 #ifdef PPG_HX3695\r
-                send_ppg_cmd_msg(PPG_SERVICE_CMD_TYPE_DO_SINGLE_CHECK_MODE_TEST);\r
-                LOS_Msleep(2000);\r
-                FT_RESULTS_t ft_result = hx3695_factroy_test(SINGLE_CHECK_TEST);\r
-                send_ppg_cmd_msg(PPG_SERVICE_CMD_TYPE_STOP_PPG_TEST);\r
+                // send_ppg_cmd_msg(PPG_SERVICE_CMD_TYPE_DO_SINGLE_CHECK_MODE_TEST);\r
+                // LOS_Msleep(2000);\r
+                // FT_RESULTS_t ft_result = ppg_get_factory_data(SINGLE_CHECK_TEST);\r
+                // send_ppg_cmd_msg(PPG_SERVICE_CMD_TYPE_STOP_PPG_TEST);\r
 \r
-                databuf[0] = (uint8_t)((ft_result.gr_data_final & 0xFF000000) >> 24);\r
-                databuf[1] = (uint8_t)((ft_result.gr_data_final & 0x00FF0000) >> 16);\r
-                databuf[2] = (uint8_t)((ft_result.gr_data_final & 0x0000FF00) >> 8);\r
-                databuf[3] = (uint8_t)((ft_result.gr_data_final & 0x000000FF) >> 0);\r
+                // databuf[0] = (uint8_t)((ft_result.gr_data_final & 0xFF000000) >> 24);\r
+                // databuf[1] = (uint8_t)((ft_result.gr_data_final & 0x00FF0000) >> 16);\r
+                // databuf[2] = (uint8_t)((ft_result.gr_data_final & 0x0000FF00) >> 8);\r
+                // databuf[3] = (uint8_t)((ft_result.gr_data_final & 0x000000FF) >> 0);\r
 \r
-                PRINT("%2X %2X %2X %2X \r\n",databuf[0],databuf[1],databuf[2],databuf[3]);\r
+                // PRINT("%2X %2X %2X %2X \r\n",databuf[0],databuf[1],databuf[2],databuf[3]);\r
 \r
                 factorytest_protocol_replymsg(BLE_TEST_CMD_MODE_SOFT_TEST,\r
                                     BLE_TEST_CMD_SOFT_TEST_SUB_MODE_HRS,\r
@@ -1670,15 +1670,15 @@ void factorytest_protocol_soft_test_decode(uint8_t submode,uint8_t testitem,uint
                 uint8_t databuf[4] = {0};\r
 #ifdef BOARD_FD230\r
 #ifdef PPG_HX3695\r
-                send_ppg_cmd_msg(PPG_SERVICE_CMD_TYPE_DO_SINGLE_CHECK_MODE_TEST);\r
-                LOS_Msleep(500);\r
-                FT_RESULTS_t ft_result = hx3695_factroy_test(SINGLE_CHECK_TEST);\r
-                send_ppg_cmd_msg(PPG_SERVICE_CMD_TYPE_STOP_PPG_TEST);\r
-\r
-                databuf[0] = (uint8_t)((ft_result.red_data_final & 0xFF000000) >> 24);\r
-                databuf[1] = (uint8_t)((ft_result.red_data_final & 0x00FF0000) >> 16);\r
-                databuf[2] = (uint8_t)((ft_result.red_data_final & 0x0000FF00) >> 8);\r
-                databuf[3] = (uint8_t)((ft_result.red_data_final & 0x000000FF) >> 0);\r
+                // send_ppg_cmd_msg(PPG_SERVICE_CMD_TYPE_DO_SINGLE_CHECK_MODE_TEST);\r
+                // LOS_Msleep(500);\r
+                // FT_RESULTS_t ft_result = hx3695_factroy_test(SINGLE_CHECK_TEST);\r
+                // send_ppg_cmd_msg(PPG_SERVICE_CMD_TYPE_STOP_PPG_TEST);\r
+\r
+                // databuf[0] = (uint8_t)((ft_result.red_data_final & 0xFF000000) >> 24);\r
+                // databuf[1] = (uint8_t)((ft_result.red_data_final & 0x00FF0000) >> 16);\r
+                // databuf[2] = (uint8_t)((ft_result.red_data_final & 0x0000FF00) >> 8);\r
+                // databuf[3] = (uint8_t)((ft_result.red_data_final & 0x000000FF) >> 0);\r
 #endif\r
 #elif defined BOARD_N9\r
                 //获取红灯数据\r
@@ -1712,21 +1712,21 @@ void factorytest_protocol_soft_test_decode(uint8_t submode,uint8_t testitem,uint
                 send_ppg_cmd_msg(PPG_SERVICE_CMD_TYPE_DO_GRAYCARD_TEST);\r
                 LOS_Msleep(2000);\r
                 uint8_t databuf[12] = {0};\r
-                FT_RESULTS_t ft_result = hx3695_factroy_test(GRAY_CARD_TEST);\r
-                databuf[0] = (uint8_t)((ft_result.gr_data_final & 0xFF000000) >> 24);\r
-                databuf[1] = (uint8_t)((ft_result.gr_data_final & 0x00FF0000) >> 16);\r
-                databuf[2] = (uint8_t)((ft_result.gr_data_final & 0x0000FF00) >> 8);\r
-                databuf[3] = (uint8_t)((ft_result.gr_data_final & 0x000000FF) >> 0);\r
-\r
-                databuf[4] = (uint8_t)((ft_result.red_data_final & 0xFF000000) >> 24);\r
-                databuf[5] = (uint8_t)((ft_result.red_data_final & 0x00FF0000) >> 16);\r
-                databuf[6] = (uint8_t)((ft_result.red_data_final & 0x0000FF00) >> 8);\r
-                databuf[7] = (uint8_t)((ft_result.red_data_final & 0x000000FF) >> 0);\r
-\r
-                databuf[8] = (uint8_t)((ft_result.ir_data_final & 0xFF000000) >> 24);\r
-                databuf[9] = (uint8_t)((ft_result.ir_data_final & 0x00FF0000) >> 16);\r
-                databuf[10] = (uint8_t)((ft_result.ir_data_final & 0x0000FF00) >> 8);\r
-                databuf[11] = (uint8_t)((ft_result.ir_data_final & 0x000000FF) >> 0);\r
+                // FT_RESULTS_t ft_result = hx3695_factroy_test(GRAY_CARD_TEST);\r
+                // databuf[0] = (uint8_t)((ft_result.gr_data_final & 0xFF000000) >> 24);\r
+                // databuf[1] = (uint8_t)((ft_result.gr_data_final & 0x00FF0000) >> 16);\r
+                // databuf[2] = (uint8_t)((ft_result.gr_data_final & 0x0000FF00) >> 8);\r
+                // databuf[3] = (uint8_t)((ft_result.gr_data_final & 0x000000FF) >> 0);\r
+\r
+                // databuf[4] = (uint8_t)((ft_result.red_data_final & 0xFF000000) >> 24);\r
+                // databuf[5] = (uint8_t)((ft_result.red_data_final & 0x00FF0000) >> 16);\r
+                // databuf[6] = (uint8_t)((ft_result.red_data_final & 0x0000FF00) >> 8);\r
+                // databuf[7] = (uint8_t)((ft_result.red_data_final & 0x000000FF) >> 0);\r
+\r
+                // databuf[8] = (uint8_t)((ft_result.ir_data_final & 0xFF000000) >> 24);\r
+                // databuf[9] = (uint8_t)((ft_result.ir_data_final & 0x00FF0000) >> 16);\r
+                // databuf[10] = (uint8_t)((ft_result.ir_data_final & 0x0000FF00) >> 8);\r
+                // databuf[11] = (uint8_t)((ft_result.ir_data_final & 0x000000FF) >> 0);\r
 \r
                 factorytest_protocol_replymsg(BLE_TEST_CMD_MODE_SOFT_TEST,\r
                     BLE_TEST_CMD_SOFT_TEST_SUB_MODE_HRS,\r