#ifndef _hx3695_H_ #define _hx3695_H_ #include #include #include "sys_config.h" #define HRS_ALG_LIB #define SPO2_ALG_LIB #define HRV_ALG_LIB // #define CHECK_TOUCH_LIB // #define CHECK_LIVING_LIB #define BP_CUSTDOWN_ALG_LIB //**************** read_data_mode ******************// #define TIMMER_MODE //timmer read fifo //#define INT_MODE // this is fifo_all_most_full mode //****************** gsen_cgf *********************// // #define GSEN_40MS_TIMMER // #define NEW_GSEN_SCHME // #define TYHX_DEMO // for ty demo // #define DOUBLE_GREEN //****************** other_cgf ********************// #define EVB // #define HRS_BLE_APP // #define SPO2_DATA_CALI //***************** vecter_swi ********************// // #define SPO2_VECTOR // #define HR_VECTOR // #define HRV_TESTVEC //**************** lab_test_mode ******************// // #define LAB_TEST // #define LAB_TEST_AGC //****************** print_swi ********************// // #define HRS_DEBUG // #define AGC_DEBUG // #define TYHX_DEBUG //**************************************************// #ifdef TYHX_DEBUG #define TYHX_LOG(...) SEGGER_RTT_printf(0,__VA_ARGS__) #else #define TYHX_LOG(...) #endif #ifdef AGC_DEBUG #define AGC_LOG(...) SEGGER_RTT_printf(0,__VA_ARGS__) #else #define AGC_LOG(...) #endif #ifdef HRS_DEBUG #define DEBUG_PRINTF(...) sys_hr_log_d(__VA_ARGS__) #else #define DEBUG_PRINTF(...) #endif #if defined(DEMO_COMMON) #define HRS4100_IIC_CLK 9 #define HRS4100_IIC_SDA 10 #define LIS3DH_IIC_CLK 13 #define LIS3DH_IIC_SDA 14 #define EXT_INT_PIN 11 #define FIFO_DATA_LENGTH 200 //fifo_max = 256 #define PHASE_DATA_LENGTH 64 #define LED0_LDR_SEL 0x80 //�̵� #define LED1_LDR_SEL 0x04 // ��� #define LED2_LDR_SEL 0x02 // ���� #define LED3_LDR_SEL 0x02 // ���� #define LED0_PD_SEL 0x03 //ѡpd1 #define LED1_PD_SEL 0x01 #define LED2_PD_SEL 0x01 #define LED3_PD_SEL 0x01 #ifdef DOUBLE_GREEN #define LED1N_LDR_SEL 0x01 #define LED1N_PD_SEL 0x01 #endif #define CHECK_TOUCH_NUM 5 //��������ʱ,N��data #define CHECK_WEAR_THRE 30000 #define CHECK_UNWEAR_THRE 20000 #elif defined(EVB) #define HRS4100_IIC_CLK 9 #define HRS4100_IIC_SDA 10 #define LIS3DH_IIC_CLK 13 #define LIS3DH_IIC_SDA 14 #define EXT_INT_PIN 11 #define FIFO_DATA_LENGTH 200 //fifo_max = 256 #define PHASE_DATA_LENGTH 64 #define LED0_LDR_SEL 0x21 // 绿灯 #define LED1_LDR_SEL 0x42 // 红灯 #define LED2_LDR_SEL 0x84 // 红外 #define LED3_LDR_SEL 0x84 // 红外 #define LED0_PD_SEL 0x06 //ѡpd1 #define LED1_PD_SEL 0x06 #define LED2_PD_SEL 0x06 #define LED3_PD_SEL 0x06 #ifdef DOUBLE_GREEN #define LED1N_LDR_SEL 0x03 #define LED1N_PD_SEL 0x02 #endif #define CHECK_TOUCH_NUM 5 //��������ʱ,N��data #define CHECK_WEAR_THRE 30000 #define CHECK_UNWEAR_THRE 20000 #endif typedef enum { PPG_INIT, PPG_OFF, PPG_LED_OFF, CAL_INIT, CAL_OFF, RECAL_INIT } hx3695_mode_t; typedef enum { MSG_NO_WEAR, MSG_WEAR } wear_msg_code_t; typedef enum { HRS_MODE, SPO2_MODE, WEAR_MODE, HRV_MODE, HRSDAILY_MODE, LIVING_MODE, LAB_TEST_MODE, FT_LEAK_LIGHT_MODE, FT_GRAY_CARD_MODE, FT_INT_TEST_MODE, FT_SINGLE_CHECK_MODE, FT_LED_OFF_MODE, FT_WEAR_MODE, NULL_MODE, } WORK_MODE_T; typedef enum { InActivating, InActivated, Activating, Activated, } led_state_t; typedef struct { int32_t data_val[PHASE_DATA_LENGTH]; uint8_t data_count; uint16_t led_current; uint8_t offset_idac; uint8_t tia_rf; led_state_t led_state; bool isneed_cal_start; }led_data_t; typedef struct { WORK_MODE_T mode; led_data_t led_data[4]; uint8_t s_buf[FIFO_DATA_LENGTH*3]; uint8_t led_activated; uint8_t watermark; uint8_t fs; }ppg_sensor_data_t; extern uint8_t alg_ram[11 * 1024]; void hx3695_delay_us(uint32_t us); void hx3695_delay_ms(uint32_t ms); bool hx3695_write_reg(uint8_t addr, uint8_t data); uint8_t hx3695_read_reg(uint8_t addr); void hx3695_brust_read_reg(uint8_t addr, uint8_t *buf, uint16_t length); bool hx3695_chip_check(void); uint8_t hx3695_read_fifo_size(void); uint16_t hx3695_read_fifo_data(ppg_sensor_data_t *ppg_sensor_data); uint16_t hx3695_led_data_analysis(ppg_sensor_data_t *ppg_sensor_dat, uint16_t fifo_read_length, uint8_t sig); void hx3695_get_led_para(ppg_sensor_data_t *ppg_sensor_dat); void hx3695_read_phase_data(int32_t *s_buf); void hx3695_read_led_data(int32_t *s_buf); void hx3695_ppg_off(void); void hx3695_ppg_on(void); void hx3695_ppg_para_init(ppg_sensor_data_t *ppg_sensor_dat); void hx3695_wear_low_power(ppg_sensor_data_t *ppg_sensor_dat); void hx3695_set_fs(ppg_sensor_data_t *ppg_sensor_dat); void hx3695_set_watermark(ppg_sensor_data_t *ppg_sensor_dat); void hx3695_led_control(ppg_sensor_data_t *ppg_sensor_dat, uint8_t index); void hx3695_updata_sensor(ppg_sensor_data_t *ppg_sensor_dat); void hx3695_hrs_enable(ppg_sensor_data_t *ppg_sensor_dat); void hx3695_spo2_enable(ppg_sensor_data_t *ppg_sensor_dat); void hx3695_hrv_enable(ppg_sensor_data_t *ppg_sensor_dat); void hx3695_ppg_set_mode(uint8_t mode_cmd); void hx3695_320ms_timer_cfg(bool en); void hx3695_40ms_timer_cfg(bool en); void hx3695_gpioint_cfg(bool en); bool hx3695_init(WORK_MODE_T mode); void hx3695_agc_Int_handle(ppg_sensor_data_t *ppg_sensor_dat); void hx3695_ppg_Int_handle(ppg_sensor_data_t *ppg_sensor_dat); void heart_rate_meas_timeout_handler(void *p_context); void agc_timeout_handler(void *p_context); void hx3695_alg_send_data(ppg_sensor_data_t *ppg_sensor_dat, WORK_MODE_T mode, uint8_t data_count); #endif