163 lines
4.8 KiB
C
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_ */
|