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
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;
}
}
}
- 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();
//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)
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
**功能:初始化SC7A20
*/
extern void sensor_thread_entry(void * argv);
+extern Helios_ThreadAttr ThreadAttr;
// extern void sensor_timerout_cb(void);
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;
}
//获取步数
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);
}
//清空步数,建议隔天清空
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",
{
//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中断数据
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)
{
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;
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;
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();
{
Helios_Timer_Stop(sensor_timer);
}
-
-
}
-
is_open_gh3018 = 0;
//Helios_GPIO_SetLevel(self->power, HELIOS_LVL_LOW);
-
-
return mp_obj_new_int(1);
}
//获取心律