212 lines
5.9 KiB
C
212 lines
5.9 KiB
C
#ifndef _hx3695_H_
|
||
#define _hx3695_H_
|
||
#include <stdint.h>
|
||
#include <stdbool.h>
|
||
#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 //<2F>̵<EFBFBD>
|
||
#define LED1_LDR_SEL 0x04 // <20><><EFBFBD>
|
||
#define LED2_LDR_SEL 0x02 // <20><><EFBFBD><EFBFBD>
|
||
#define LED3_LDR_SEL 0x02 // <20><><EFBFBD><EFBFBD>
|
||
|
||
#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 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ,N<><4E>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 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ,N<><4E>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
|