pinebuds/services/ble_profiles/hrp/hrpc/src/hrpc.h

163 lines
4.8 KiB
C

#ifndef _HRPC_H_
#define _HRPC_H_
/**
****************************************************************************************
* @addtogroup HRPC Heart Rate Profile Collector
* @ingroup HRP
* @brief Heart Rate Profile Collector
*
* The HRPC is responsible for providing Heart Rate Profile Collector functionalities
* to upper layer module or application. The device using this profile takes the role
* of Heart Rate Profile Collector.
*
* Heart Rate Profile Collector. (HRPC): A HRPC (e.g. PC, phone, etc)
* is the term used by this profile to describe a device that can interpret Heart Rate
* measurement in a way suitable to the user application.
*
* @{
****************************************************************************************
*/
/*
* INCLUDE FILES
****************************************************************************************
*/
#include "rwip_config.h"
#if (BLE_HR_COLLECTOR)
#include "hrp_common.h"
#include "hrpc_task.h"
#include "ke_task.h"
#include "prf_types.h"
#include "prf_utils.h"
/*
* DEFINES
****************************************************************************************
*/
///Maximum number of Heart Rate Collector task instances
#define HRPC_IDX_MAX (BLE_CONNECTION_MAX)
/// Possible states of the HRPC task
enum
{
/// Free state
HRPC_FREE,
/// Idle state
HRPC_IDLE,
/// Discovering Heart Rate SVC and Chars
HRPC_DISCOVERING,
/// Busy state
HRPC_BUSY,
/// Number of defined states.
HRPC_STATE_MAX
};
/// Internal codes for reading a HRS or DIS characteristic with one single request
enum
{
///Read HRS Heart Rate Measurement
HRPC_RD_HRS_HR_MEAS = HRPC_CHAR_HR_MEAS,
///Body Sensor Location
HRPC_RD_HRS_BODY_SENSOR_LOC = HRPC_CHAR_BODY_SENSOR_LOCATION,
///Heart Rate Control Point
HRPC_RD_HRS_CNTL_POINT = HRPC_CHAR_HR_CNTL_POINT,
///Read HRS Heart Rate Measurement Client Cfg. Desc
HRPC_RD_HRS_HR_MEAS_CFG = (HRPC_DESC_MASK | HRPC_DESC_HR_MEAS_CLI_CFG),
};
/*
* TYPE DEFINITIONS
****************************************************************************************
*/
struct hrpc_cnx_env
{
/// Current operation code
void *operation;
/// Last requested UUID(to keep track of the two services and char)
uint16_t last_uuid_req;
/// Last characteristic code used in a read or a write request
uint16_t last_char_code;
/// Counter used to check service uniqueness
uint8_t nb_svc;
///HTS characteristics
struct hrs_content hrs;
};
/// Heart Rate Profile Collector environment variable
struct hrpc_env_tag
{
/// profile environment
prf_env_t prf_env;
/// Environment variable pointer for each connection
struct hrpc_cnx_env* env[HRPC_IDX_MAX];
/// State of different task instances
ke_state_t state[HRPC_IDX_MAX];
};
/*
* GLOBAL VARIABLE DEFINITIONS
****************************************************************************************
*/
/*
* FUNCTION DECLARATIONS
****************************************************************************************
*/
/**
****************************************************************************************
* @brief Retrieve HRP client profile interface
* @return HRP client profile interface
****************************************************************************************
*/
const struct prf_task_cbs* hrpc_prf_itf_get(void);
/**
****************************************************************************************
* @brief Send Heart Rate ATT DB discovery results to HRPC host.
****************************************************************************************
*/
void hrpc_enable_rsp_send(struct hrpc_env_tag *hrpc_env, uint8_t conidx, uint8_t status);
/**
****************************************************************************************
* @brief Unpack Heart Rate measurement data into a comprehensive structure.
*
* @param[out] pmeas_val Pointer to Heart Rate measurement structure destination
* @param[in] packed_hr Pointer of the packed data of Heart Rate Measurement
* information
* @param[in] size Packet data size
****************************************************************************************
*/
void hrpc_unpack_meas_value(struct hrs_hr_meas* pmeas_val, uint8_t* packed_hr, uint8_t size);
/*
* TASK DESCRIPTOR DECLARATIONS
****************************************************************************************
*/
/**
****************************************************************************************
* Initialize task handler
*
* @param task_desc Task descriptor to fill
****************************************************************************************
*/
void hrpc_task_init(struct ke_task_desc *task_desc);
#endif /* (BLE_HR_COLLECTOR) */
/// @} HRPC
#endif /* _HRPC_H_ */