mcu_hi3321_watch/tjd/driver/hr/hx3695/hx3695.h
2025-05-26 20:15:20 +08:00

212 lines
5.9 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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