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

138 lines
3.6 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.

/*----------------------------------------------------------------------------
* 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;
}