gsensor参数调整
authorp15692025051 <846603105@qq.com>
Thu, 4 May 2023 08:02:07 +0000 (16:02 +0800)
committerp15692025051 <846603105@qq.com>
Thu, 4 May 2023 08:02:07 +0000 (16:02 +0800)
hsensor线程调整

2.sdk/Helios_SDK/services/microPython/ports/quectel/core/source/modGsensor_SC7A20.c
2.sdk/Helios_SDK/services/microPython/ports/quectel/core/source/modHsensor_GH3018.c

index cd61787..08b5aa8 100644 (file)
@@ -100,7 +100,7 @@ static bool           SL_SWAY_STATUS           = 0;
 static bool           SL_SWAY_ENABLE           = 0;
 
 static unsigned char  SL_INT_TIME_CNT          = 0;
-#define SL_INT_TIME_TH   20  //per lsb is 0.5s
+#define SL_INT_TIME_TH   12  //per lsb is 0.5s
 unsigned char sl_sleep_sys_hour;
 
 typedef struct _SC7A20_obj_t
@@ -190,7 +190,7 @@ unsigned int  SL_SC7A20_PEDO_KCAL_WRIST_SLEEP_SWAY_L_ALGO(void)
        SC7A20_INT_STATUS=SL_INT_STATUS_READ();
        if((SC7A20_INT_STATUS==1)||(SL_STEP_TEMP!= SL_STEP))
        {
-               if(SL_INT_TIME_CNT>=SL_INT_TIME_TH)  SC7A20_ODR_SET(1);
+               //if(SL_INT_TIME_CNT>=SL_INT_TIME_TH)  SC7A20_ODR_SET(1);
                SL_INT_TIME_CNT =0;
                SL_STEP_TEMP    =SL_STEP;
        }
@@ -202,7 +202,7 @@ unsigned int  SL_SC7A20_PEDO_KCAL_WRIST_SLEEP_SWAY_L_ALGO(void)
                }
        }
        
-       if(SL_INT_TIME_CNT<SL_INT_TIME_TH)//10s
+       if(SL_INT_TIME_CNT<SL_INT_TIME_TH)//6s
        {
            /*******get sc7a20 FIFO data******/
                SC7A20_FIFO_NUM= SL_SC7A20_Read_FIFO();
@@ -258,7 +258,7 @@ unsigned int  SL_SC7A20_PEDO_KCAL_WRIST_SLEEP_SWAY_L_ALGO(void)
                //SL_Turn_Wrist_WorkMode_Reset();please not use this function
                //SC7A20_FIFO_NUM=0;
                //SC7A20_ODR_SET(0);//data for 10Hz 0.5S=5'S data //for heart rate algo
-               SC7A20_ODR_SET(1);//data for 25Hz 0.5S=12-13'S data //for heart rate algo
+               SC7A20_ODR_SET(0);//data for 25Hz 0.5S=12-13'S data //for heart rate algo
        }
        //以下代码为了筹够25个数据给hsensor
        if(SC7A20_XYZ_Buf_tmp_len+SC7A20_FIFO_NUM > 32)
@@ -335,7 +335,7 @@ signed char SL_SC7A20_PEDO_KCAL_WRIST_SLEEP_SWAY_L_INIT(void)
        unsigned char  fifo_status       =0;
        unsigned char  sl_person_para[4] ={178,60,26,1};
        unsigned char  Turn_Wrist_Para[2]={1,3};//refer pdf
-       unsigned char s_pedo_th_set[5] =  {26,10,0,40,50};
+       unsigned char s_pedo_th_set[5] =  {20,9,0,40,50};
        unsigned char s_pedo_int_set[3] = {3,2,1} ;
 /*****if use spi mode please config first******/    
 #if SL_SC7A20_SPI_IIC_MODE == 0//spi
@@ -461,6 +461,7 @@ STATIC mp_obj_t mp_SC7A20_deinit(mp_obj_t self_in);
 **功能:初始化SC7A20
 */
 extern void sensor_thread_entry(void * argv);
+extern Helios_ThreadAttr ThreadAttr;
 // extern void sensor_timerout_cb(void);
 int SC7A20_init(void)
 {
@@ -493,15 +494,9 @@ int SC7A20_init(void)
        }
        SL_SC7A20_PEDO_KCAL_WRIST_SLEEP_SWAY_L_INIT();
 
-       // Helios_ThreadAttr ThreadAttr = {
-    //     .name = "GH3018",
-    //     .stack_size = 1024*10,
-    //     .priority = 300,
-    //     .entry = sensor_thread_entry,
-    //     .argv = NULL
-    // };
-       // if(sensor_thread_id == 0)
-    //         sensor_thread_id = Helios_Thread_Create(&ThreadAttr);//和hsensor一个iic,必须在一个线程读数据
+
+       if(sensor_thread_id == 0)
+       sensor_thread_id = Helios_Thread_Create(&ThreadAttr);//和hsensor一个iic,必须在一个线程读数据
        Gsensor_init_flag = 1;
        return 1;
 }
@@ -529,7 +524,7 @@ STATIC mp_obj_t mp_SC7A20_poll(mp_obj_t self_in)
 //获取步数
 STATIC mp_obj_t mp_SC7A20_get_step(mp_obj_t self_in)
 {
-       SL_SC7A20_PEDO_KCAL_WRIST_SLEEP_SWAY_L_ALGO();
+       //SL_SC7A20_PEDO_KCAL_WRIST_SLEEP_SWAY_L_ALGO();
     return mp_obj_new_int(SL_STEP);
 }
 //清空步数,建议隔天清空
index 6e1f236..917eaf5 100644 (file)
@@ -74,7 +74,7 @@ extern unsigned char Gsensor_init_flag ;
 extern void hal_gh30x_int_handler(void);
 // int test_count1 = 0;
 // int test_count2 = 0;
-int32_t gh3018_run_mode = 0;
+
 void sensor_timerout_cb(void);
 Helios_ThreadAttr ThreadAttr = {
         .name = "GH3018",
@@ -164,23 +164,7 @@ void sensor_thread_entry(void * argv)
 {
        //GH3018_LOG("sensor_thread_entry: 11111111!!!!!!!!\r\n");
        
-       int ret = gh30x_module_init();
-
-       GH3018_LOG("mp_GH3018_open_heart gh30x_module_init:ret:%d\r\n",ret);
-       if(ret == 1)
-       {
-               gh30x_module_stop();
-               Helios_msleep(10);
-               gh30x_module_start_without_adt(gh3018_run_mode);
-               //gh30x_module_start(gh3018_run_mode);
-               is_open_gh3018 = 1;
-               if(sensor_timer== 0)
-               {
-                       sensor_timer = Helios_Timer_init( (void* )sensor_timerout_cb, NULL);
-               }
-               
-               Helios_Timer_Start(sensor_timer, TIMER_TIME_MS, IS_CYCLICAL);
-       }
+       
        while(1)
        {
                if(is_gh3018 == 1 && is_open_gh3018 == 1)//处理Hsensor中断数据
@@ -196,13 +180,14 @@ void sensor_thread_entry(void * argv)
                                timer_Gsensor_count = 0;
                                SL_SC7A20_PEDO_KCAL_WRIST_SLEEP_SWAY_L_ALGO();
                        }
-                       
-                       
-                       
+               }
+               else
+               {
+                       SL_SC7A20_PEDO_KCAL_WRIST_SLEEP_SWAY_L_ALGO();
+                       Helios_msleep(1000);
                }
                Helios_msleep(1);
        }
-       
 }
 
 void sensor_timerout_cb(void)
@@ -278,7 +263,11 @@ mp_obj_t mp_GH3018_init(mp_obj_t self_in)
        {
                sensor_timer = Helios_Timer_init( (void* )sensor_timerout_cb, NULL);
        }
-               
+       if(sensor_thread_id == 0)
+       {
+               GH3018_LOG("mp_GH3018_open_heart Helios_Thread_Create\r\n");
+               sensor_thread_id = Helios_Thread_Create(&ThreadAttr);
+       }       
        
        
        int ret = 0;
@@ -311,11 +300,8 @@ STATIC mp_obj_t mp_GH3018_deinit(mp_obj_t self_in)
 
     return mp_const_none;
 }
-//打开心律测试
-STATIC mp_obj_t mp_GH3018_open_heart(mp_obj_t self_in)
+void GH3018_test(mp_obj_t self_in,uint32_t mode)
 {
-       int ret = 0 ;
-       
        s_gh3018_heart_rate = 0x0;
        s_gh3018_heart_rate_buff_count = 0; 
        s_gh3018_high_blood = 0x0;
@@ -323,72 +309,53 @@ STATIC mp_obj_t mp_GH3018_open_heart(mp_obj_t self_in)
        s_gh3018_HRV = 0;
        s_gh3018_wear_status = 0;
        s_gh3018_blood_oxygen = 0x0;
-       if(sensor_thread_id == 0)
-       {
-               GH3018_LOG("mp_GH3018_open_heart Helios_Thread_Create\r\n");
-               sensor_thread_id = Helios_Thread_Create(&ThreadAttr);
-       }
+       
+       
        GH3018_obj_t *self = MP_OBJ_TO_PTR(self_in);
        Helios_GPIO_SetLevel(self->power, HELIOS_LVL_LOW);
        Helios_msleep(10);
        Helios_GPIO_SetLevel(self->power, HELIOS_LVL_HIGH);
        Helios_msleep(20);
-       
-       gh3018_run_mode = GH30X_RUN_MODE_HB; 
+       int ret = gh30x_module_init();
+       GH3018_LOG("mp_GH3018_open_heart gh30x_module_init:ret:%d\r\n",ret);
+       if(ret == 1)
+       {
+               gh30x_module_stop();
+               Helios_msleep(10);
+               gh30x_module_start_without_adt(mode);
+               //gh30x_module_start(gh3018_run_mode);
+               is_open_gh3018 = 1;
+               if(sensor_timer== 0)
+               {
+                       sensor_timer = Helios_Timer_init( (void* )sensor_timerout_cb, NULL);
+               }
+               
+               Helios_Timer_Start(sensor_timer, TIMER_TIME_MS, IS_CYCLICAL);
+       }
+       //gh3018_run_mode = GH30X_RUN_MODE_HB;
+}
+//打开心律测试
+STATIC mp_obj_t mp_GH3018_open_heart(mp_obj_t self_in)
+{
+       GH3018_test(self_in,GH30X_RUN_MODE_HB);
     return mp_obj_new_int(1);
 }
 //打开血氧测试
 STATIC mp_obj_t mp_GH3018_open_blood_oxygen(mp_obj_t self_in)
 {
-    int ret = 0 ;
-       s_gh3018_heart_rate = 0x0;
-       s_gh3018_heart_rate_buff_count = 0; 
-       s_gh3018_high_blood = 0x0;
-       s_gh3018_low_blood = 0x0;
-       s_gh3018_HRV = 0;
-       s_gh3018_wear_status = 0;
-       s_gh3018_blood_oxygen = 0x0;
-       if(sensor_thread_id == 0)
-       sensor_thread_id = Helios_Thread_Create(&ThreadAttr);
-       gh3018_run_mode = GH30X_RUN_MODE_SPO2; 
-       GH3018_obj_t *self = MP_OBJ_TO_PTR(self_in);
-       Helios_GPIO_SetLevel(self->power, HELIOS_LVL_LOW);
-       Helios_msleep(10);
-       Helios_GPIO_SetLevel(self->power, HELIOS_LVL_HIGH);
-       Helios_msleep(20);
-               
+       GH3018_test(self_in,GH30X_RUN_MODE_SPO2);       
     return mp_obj_new_int(1);
 }
 //打开HRV测试
 STATIC mp_obj_t mp_GH3018_open_hrv(mp_obj_t self_in)
 {
-    int ret = 0 ;
-       s_gh3018_heart_rate = 0x0;
-       s_gh3018_heart_rate_buff_count = 0; 
-       s_gh3018_high_blood = 0x0;
-       s_gh3018_low_blood = 0x0;
-       s_gh3018_HRV = 0;
-       s_gh3018_wear_status = 0;
-       s_gh3018_blood_oxygen = 0x0;
-       if(sensor_thread_id == 0)
-       sensor_thread_id = Helios_Thread_Create(&ThreadAttr);
-       gh3018_run_mode = GH30X_RUN_MODE_HRV;   
-       GH3018_obj_t *self = MP_OBJ_TO_PTR(self_in);
-       Helios_GPIO_SetLevel(self->power, HELIOS_LVL_LOW);
-       Helios_msleep(10);
-       Helios_GPIO_SetLevel(self->power, HELIOS_LVL_HIGH);
-       Helios_msleep(20);      
+       GH3018_test(self_in,GH30X_RUN_MODE_HRV);
     return mp_obj_new_int(1);
 }
 //关闭hsensor
 STATIC mp_obj_t mp_GH3018_close(mp_obj_t self_in)
 {
     GH3018_obj_t *self = MP_OBJ_TO_PTR(self_in);
-       if(sensor_thread_id != 0)
-       {
-               Helios_Thread_Delete(sensor_thread_id);
-               sensor_thread_id = 0;
-       }
        if(is_open_gh3018 == 1)
        {
                gh30x_module_stop();
@@ -396,14 +363,9 @@ STATIC mp_obj_t mp_GH3018_close(mp_obj_t self_in)
                {
                        Helios_Timer_Stop(sensor_timer);
                }
-               
-               
        }
-               
        is_open_gh3018 = 0;
        //Helios_GPIO_SetLevel(self->power, HELIOS_LVL_LOW);
-       
-       
     return mp_obj_new_int(1);
 }
 //获取心律