138 lines
3.6 KiB
C
138 lines
3.6 KiB
C
/*----------------------------------------------------------------------------
|
||
* Copyright (c) TJD Technologies Co., Ltd. 2020. All rights reserved.
|
||
*
|
||
* Description: hr_api.c
|
||
*
|
||
* @section function_call_steps 使用心率api函数调用步骤
|
||
* 1. 创建hrsensor_info型指针,调用tjd_driver_hr_api_get_ops获取函数表对象
|
||
* 2. 通过指针调用hrsensor_open启动心率测量
|
||
* 3. 通过指针调用hrsensor_get_**data获取数据值(这个值会从0逐渐增加,大约10秒后稳定)
|
||
* 4. 通过指针调用hrsensor_close关闭心率测量
|
||
*
|
||
* Author: liangjianfei
|
||
*
|
||
* Create: 2024-4-26
|
||
*--------------------------------------------------------------------------*/
|
||
|
||
#include "string.h"
|
||
#include "hr_port.h"
|
||
#include "hr_api.h"
|
||
#include "i2c.h"
|
||
#include "cmsis_os.h"
|
||
#include "sys_config.h"
|
||
#ifdef TJD_PCBA_0
|
||
#include "tyhx_hrs_alg.h"
|
||
#include "hr_drv_HX3602.h"
|
||
#elif defined(TJD_PCBA_1)
|
||
#include "hx3695.h"
|
||
#endif
|
||
|
||
#define ENABLE_PRINT_INFO 1
|
||
#define ENABLE_DEBUG 0
|
||
|
||
#if ENABLE_PRINT_INFO
|
||
#define static_print_info(...) sys_hr_log_i(__VA_ARGS__) //一般信息打印宏控制
|
||
#define static_print_warn(...) sys_hr_log_w(__VA_ARGS__) //警告信息打印一般常开
|
||
#define static_print_error(...) sys_hr_log_e(__VA_ARGS__) //错误信息打印一般常开
|
||
#if ENABLE_DEBUG
|
||
#define static_print_debug(...) sys_hr_log_d(__VA_ARGS__)
|
||
#else
|
||
#define static_print_debug(...)
|
||
#endif
|
||
#else
|
||
#define static_print_info(...)
|
||
#define static_print_warn(...)
|
||
#define static_print_error(...)
|
||
#endif
|
||
|
||
static uint8_t real_value_flag;
|
||
hrs_sports_mode_t hrs_sports_mode = NORMAL_MODE;
|
||
|
||
#ifdef TJD_PCBA_0
|
||
static void tjd_driver_hr_api_low_power(void)
|
||
{
|
||
Hrs3602_low_power();
|
||
}
|
||
|
||
static void tjd_driver_hr_api_normal_power(void)
|
||
{
|
||
Hrs3602_normal_power();
|
||
}
|
||
|
||
static void tjd_driver_hr_api_processing_handle(void)
|
||
{
|
||
gsensor_info *g_gs_driver = NULL;
|
||
g_gs_driver = tjd_driver_gs_api_get_ops();
|
||
gsensor_xyz_info gsenser_xyz_curdata = g_gs_driver->gs_get_xyz_curdata();
|
||
g_hr_data = tjd_hrx3602_processing_handle(&gsenser_xyz_curdata);
|
||
}
|
||
|
||
void tjd_driver_hr_api_alg_init(void)
|
||
{
|
||
tjd_hrx3602_init();
|
||
}
|
||
#elif defined(TJD_PCBA_1)
|
||
static void hr3695_mode_set(enum HR3695_MODE mode)
|
||
{
|
||
switch (mode)
|
||
{
|
||
case HR3695_HRS_MODE:
|
||
hx3695_init(HRS_MODE);
|
||
break;
|
||
case HR3695_SPO2_MODE:
|
||
hx3695_init(SPO2_MODE);
|
||
break;
|
||
case HR3695_WEAR_MODE:
|
||
hx3695_init(WEAR_MODE);
|
||
break;
|
||
case HR3695_HRV_MODE:
|
||
hx3695_init(HRV_MODE);
|
||
break;
|
||
case HR3695_FT_LEAK_LIGHT_MODE:
|
||
hx3695_init(FT_LEAK_LIGHT_MODE);
|
||
break;
|
||
case HR3695_FT_GRAY_CARD_MODE:
|
||
hx3695_init(FT_GRAY_CARD_MODE);
|
||
break;
|
||
case HR3695_CLOSE:
|
||
hx3695_ppg_set_mode(PPG_OFF);
|
||
static_print_debug("hx3695_ppg_set_mode PPG_OFF.");
|
||
break;
|
||
|
||
default:
|
||
static_print_debug("mode is invalid.");
|
||
break;
|
||
}
|
||
}
|
||
#endif
|
||
|
||
static errcode_t hr_open(void)
|
||
{
|
||
errcode_t ret = hrsensor_iic_init();
|
||
hx3695_ppg_set_mode(PPG_OFF);
|
||
return ret;
|
||
}
|
||
|
||
static errcode_t hr_close(void)
|
||
{
|
||
hx3695_ppg_set_mode(PPG_OFF);
|
||
return hrsensor_iic_deinit();
|
||
}
|
||
static void hr_sport_mode_set(hrs_sports_mode_t mode)
|
||
{
|
||
hrs_sports_mode = mode;
|
||
}
|
||
|
||
static hrsensor_info g_hrsensor_info = {
|
||
.open = hr_open,
|
||
.close = hr_close,
|
||
.mode_set = hr3695_mode_set,
|
||
.sport_mode_set = hr_sport_mode_set,
|
||
};
|
||
|
||
hrsensor_info *tjd_driver_hr_api_get_ops(void)
|
||
{
|
||
return &g_hrsensor_info;
|
||
}
|
||
|