#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};
#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;
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);
}
}
void GH3018_irq_cb(void)
{
GH3018_irq_flag = 1;
+ //GH3018_LOG("GH3018_irq_cb: 1111111111111!!!!!!!!\r\n");
Helios_ExtInt_Enable(g_GH3018->irq);
}
/*
// 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;
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
{
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_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();
{
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);
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);
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);
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);
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);
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();
{
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);