GH3018调整,功耗优化
authorp15692025051 <846603105@qq.com>
Tue, 18 Apr 2023 08:19:42 +0000 (16:19 +0800)
committerp15692025051 <846603105@qq.com>
Tue, 18 Apr 2023 08:19:42 +0000 (16:19 +0800)
2.sdk/Helios_SDK/services/microPython/lib/lvgl/lv_conf.h
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
2.sdk/Helios_SDK/system/platform/ASR_1606/boards/EG810MCN_GA_ALIPAY/images/firmware_base_release_pack.zip

index 0f0a709..56b2ff9 100644 (file)
 #elif defined(BOARD_EC800MCN_GA_ALIPAY) 
 #define LV_IMG_CACHE_DEF_SIZE       16
 #elif defined(BOARD_EG810MCN_GA_ALIPAY)
-#define LV_IMG_CACHE_DEF_SIZE       16
+#define LV_IMG_CACHE_DEF_SIZE       23
 #else
 #define LV_IMG_CACHE_DEF_SIZE       1
 #endif
index 3d3925a..cd61787 100644 (file)
@@ -493,15 +493,15 @@ int SC7A20_init(void)
        }
        SL_SC7A20_PEDO_KCAL_WRIST_SLEEP_SWAY_L_INIT();
 
-       Helios_ThreadAttr ThreadAttr = {
-        .name = "GH3018",
-        .stack_size = 1024*10,
-        .priority = 100,
-        .entry = sensor_thread_entry,
-        .argv = NULL
-    };
-       if(sensor_thread_id == 0)
-       sensor_thread_id = Helios_Thread_Create(&ThreadAttr);//和hsensor一个iic,必须在一个线程读数据
+       // 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,必须在一个线程读数据
        Gsensor_init_flag = 1;
        return 1;
 }
@@ -529,6 +529,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();
     return mp_obj_new_int(SL_STEP);
 }
 //清空步数,建议隔天清空
index 98ddaab..24a41f1 100644 (file)
@@ -59,7 +59,14 @@ static unsigned char s_gh3018_wear_status = 0;//佩戴状态
 #define HEART_RATE_BUFF_LEN 10
 unsigned char s_gh3018_heart_rate_buff[HEART_RATE_BUFF_LEN]={0};
 unsigned short s_gh3018_heart_rate_buff_count = 0;
-
+void sensor_thread_entry(void * argv);
+Helios_ThreadAttr ThreadAttr = {
+        .name = "GH3018",
+        .stack_size = 1024*10,
+        .priority = 100,
+        .entry = sensor_thread_entry,
+        .argv = NULL
+    };
 void GH3018_result_set_heart_rate(unsigned char heart_rate)
 {
 //    s_gh3018_heart_rate_buff[HEART_RATE_BUFF_LEN]={0};
@@ -139,7 +146,7 @@ STATIC mp_obj_t mp_GH3018_deinit(mp_obj_t self_in);
 #include "helios_extint.h"
 Helios_Thread_t sensor_thread_id = 0;
 int sensor_timer = 0;
-#define TIMER_TIME_MS  10 //10ms
+#define TIMER_TIME_MS  100 //10ms
 #define IS_CYCLICAL 1
 uint8_t GH3018_irq_flag = 0;
 static uint32_t timer_Gsensor_count = 0;
@@ -147,38 +154,31 @@ int SC7A20_init(void);
 extern signed char SL_SC7A20_PEDO_KCAL_WRIST_SLEEP_SWAY_L_ALGO(void);
 extern unsigned char Gsensor_init_flag ;
 extern void hal_gh30x_int_handler(void);
-
+// int test_count1 = 0;
+// int test_count2 = 0;
 void sensor_thread_entry(void * argv)
 {
-       static int sc7a20_timer = 0;
+       //GH3018_LOG("sensor_thread_entry: 11111111!!!!!!!!\r\n");
        while(1)
        {
                if(is_gh3018 == 1 && is_open_gh3018 == 1)//处理Hsensor中断数据
                {
-                       if(timer_Gsensor_count>(1000/TIMER_TIME_MS))//1秒定时,轮询更新Gsensor数据
-                       {
-                               timer_Gsensor_count = 0;
-                               SL_SC7A20_PEDO_KCAL_WRIST_SLEEP_SWAY_L_ALGO();
-                       }
                        if(GH3018_irq_flag)
                        {
                                hal_gh30x_int_handler();
+                               //GH3018_LOG("hal_gh30x_int_handler:test_count1:%d test_count2:%d\r\n",test_count1,test_count2);
                                GH3018_irq_flag = 0;
                        }
-                       Helios_msleep(1);
-               }else 
-               {
-                       sc7a20_timer++;
-                       Helios_msleep(1);
-                       if(sc7a20_timer>1000)
+                       if(timer_Gsensor_count>(1000/TIMER_TIME_MS))//1秒定时,轮询更新Gsensor数据
                        {
+                               timer_Gsensor_count = 0;
                                SL_SC7A20_PEDO_KCAL_WRIST_SLEEP_SWAY_L_ALGO();
-                               sc7a20_timer = 0;
                        }
                        
+                       
+                       
                }
-               
-               
+               Helios_msleep(1);
        }
        
 }
@@ -189,6 +189,7 @@ void sensor_timerout_cb(void)
 void GH3018_irq_cb(void)
 {
        GH3018_irq_flag = 1;
+       //GH3018_LOG("GH3018_irq_cb: 1111111111111!!!!!!!!\r\n");
        Helios_ExtInt_Enable(g_GH3018->irq);
 }
 /*
@@ -210,9 +211,16 @@ mp_obj_t mp_GH3018_init(mp_obj_t self_in)
        // ret = Helios_GPIO_Init((Helios_GPIONum) self->irq, &gpio_struct);
        // GH3018_LOG("cst816 irq=%d, irq ret: %d\n", self->irq, ret);
 
+       gpio_struct.pull = HELIOS_PULL_NONE;
        gpio_struct.dir = HELIOS_GPIO_OUTPUT;
        Helios_GPIO_Init(self->power, &gpio_struct);//ldo
 
+       gpio_struct.dir = HELIOS_GPIO_OUTPUT;
+       gpio_struct.pull = HELIOS_PULL_NONE;
+       gpio_struct.value = HELIOS_LVL_LOW;
+       Helios_GPIO_Init(25, &gpio_struct);//体温
+       Helios_GPIO_Init(31, &gpio_struct);//体温
+
        gpio_struct.dir = HELIOS_GPIO_INPUT;
        gpio_struct.pull = HELIOS_PULL_NONE;
        gpio_struct.value = HELIOS_LVL_LOW;
@@ -248,19 +256,13 @@ mp_obj_t mp_GH3018_init(mp_obj_t self_in)
                sensor_timer = Helios_Timer_init( (void* )sensor_timerout_cb, NULL);
        }
                
-       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);
+       
+       
        int ret = 0;
        ret = gh30x_module_init();
        if(ret != 1){
                //mp_raise_ValueError("i2c init fail ");
+               GH3018_LOG("gh30x_module_init: i2c init fail\r\n");
                is_gh3018 = 0;
        }else
        {
@@ -297,7 +299,11 @@ 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);
@@ -305,6 +311,7 @@ STATIC mp_obj_t mp_GH3018_open_heart(mp_obj_t self_in)
        Helios_msleep(20);
 
        ret = gh30x_module_init();
+       GH3018_LOG("mp_GH3018_open_heart gh30x_module_init:ret:%d\r\n",ret);
        if(ret == 1)
        {
                gh30x_module_stop();
@@ -315,7 +322,11 @@ STATIC mp_obj_t mp_GH3018_open_heart(mp_obj_t self_in)
                {
                        sensor_timer = Helios_Timer_init( (void* )sensor_timerout_cb, NULL);
                }
+               
                Helios_Timer_Start(sensor_timer, TIMER_TIME_MS, IS_CYCLICAL);
+               
+               
+
        }
        
     return mp_obj_new_int(ret);
@@ -332,6 +343,8 @@ STATIC mp_obj_t mp_GH3018_open_blood_oxygen(mp_obj_t self_in)
        s_gh3018_wear_status = 0;
        s_gh3018_blood_oxygen = 0x0;
        GH3018_obj_t *self = MP_OBJ_TO_PTR(self_in);
+       if(sensor_thread_id == 0)
+       sensor_thread_id = Helios_Thread_Create(&ThreadAttr);
        Helios_GPIO_SetLevel(self->power, HELIOS_LVL_LOW);
        Helios_msleep(10);
        Helios_GPIO_SetLevel(self->power, HELIOS_LVL_HIGH);
@@ -350,6 +363,7 @@ STATIC mp_obj_t mp_GH3018_open_blood_oxygen(mp_obj_t self_in)
                        sensor_timer = Helios_Timer_init( (void* )sensor_timerout_cb, NULL);
                }
                Helios_Timer_Start(sensor_timer, TIMER_TIME_MS, IS_CYCLICAL);
+               
        }
                
     return mp_obj_new_int(ret);
@@ -365,6 +379,8 @@ STATIC mp_obj_t mp_GH3018_open_hrv(mp_obj_t self_in)
        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_obj_t *self = MP_OBJ_TO_PTR(self_in);
        Helios_GPIO_SetLevel(self->power, HELIOS_LVL_LOW);
        Helios_msleep(10);
@@ -383,6 +399,7 @@ STATIC mp_obj_t mp_GH3018_open_hrv(mp_obj_t self_in)
                        sensor_timer = Helios_Timer_init( (void* )sensor_timerout_cb, NULL);
                }
                Helios_Timer_Start(sensor_timer, TIMER_TIME_MS, IS_CYCLICAL);
+               
        }
                
     return mp_obj_new_int(ret);
@@ -391,6 +408,11 @@ STATIC mp_obj_t mp_GH3018_open_hrv(mp_obj_t self_in)
 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();
@@ -398,10 +420,12 @@ 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);
+       //Helios_GPIO_SetLevel(self->power, HELIOS_LVL_LOW);
        
        
     return mp_obj_new_int(1);
index c247682..cbef121 100644 (file)
Binary files a/2.sdk/Helios_SDK/system/platform/ASR_1606/boards/EG810MCN_GA_ALIPAY/images/firmware_base_release_pack.zip and b/2.sdk/Helios_SDK/system/platform/ASR_1606/boards/EG810MCN_GA_ALIPAY/images/firmware_base_release_pack.zip differ