From: p15692025051 <846603105@qq.com> Date: Tue, 18 Apr 2023 08:19:42 +0000 (+0800) Subject: GH3018调整,功耗优化 X-Git-Url: http://git.snicker.com.cn/css/static/gitweb.css?a=commitdiff_plain;h=029d699fc65a93359206abeb02a4b7fa4c3b5c3c;p=mirrors%2FASR1603_G5.git GH3018调整,功耗优化 --- diff --git a/2.sdk/Helios_SDK/services/microPython/lib/lvgl/lv_conf.h b/2.sdk/Helios_SDK/services/microPython/lib/lvgl/lv_conf.h index 0f0a709b..56b2ff97 100644 --- a/2.sdk/Helios_SDK/services/microPython/lib/lvgl/lv_conf.h +++ b/2.sdk/Helios_SDK/services/microPython/lib/lvgl/lv_conf.h @@ -227,7 +227,7 @@ #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 diff --git a/2.sdk/Helios_SDK/services/microPython/ports/quectel/core/source/modGsensor_SC7A20.c b/2.sdk/Helios_SDK/services/microPython/ports/quectel/core/source/modGsensor_SC7A20.c index 3d3925a5..cd61787c 100644 --- a/2.sdk/Helios_SDK/services/microPython/ports/quectel/core/source/modGsensor_SC7A20.c +++ b/2.sdk/Helios_SDK/services/microPython/ports/quectel/core/source/modGsensor_SC7A20.c @@ -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); } //清空步数,建议隔天清空 diff --git a/2.sdk/Helios_SDK/services/microPython/ports/quectel/core/source/modHsensor_GH3018.c b/2.sdk/Helios_SDK/services/microPython/ports/quectel/core/source/modHsensor_GH3018.c index 98ddaabc..24a41f1f 100644 --- a/2.sdk/Helios_SDK/services/microPython/ports/quectel/core/source/modHsensor_GH3018.c +++ b/2.sdk/Helios_SDK/services/microPython/ports/quectel/core/source/modHsensor_GH3018.c @@ -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); diff --git a/2.sdk/Helios_SDK/system/platform/ASR_1606/boards/EG810MCN_GA_ALIPAY/images/firmware_base_release_pack.zip b/2.sdk/Helios_SDK/system/platform/ASR_1606/boards/EG810MCN_GA_ALIPAY/images/firmware_base_release_pack.zip index c247682a..cbef121f 100644 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