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