pinebuds/services/ble_profiles/blp/blpc/src/blpc.h

156 lines
4.8 KiB
C

#ifndef _BLPC_H_
#define _BLPC_H_
/**
****************************************************************************************
* @addtogroup BLPC Blood Pressure Profile Collector
* @ingroup BLP
* @brief Blood Pressure Profile Collector
*
* The BLPC is responsible for providing Blood Pressure Profile Collector functionalities
* to upper layer module or application. The device using this profile takes the role
* of Blood Pressure Profile Collector.
*
* Blood Pressure Profile Collector. (BLPC): A BLPC (e.g. PC, phone, etc)
* is the term used by this profile to describe a device that can interpret blood pressure
* measurement in a way suitable to the user application.
*
* @{
****************************************************************************************
*/
/*
* INCLUDE FILES
****************************************************************************************
*/
#include "rwip_config.h"
#if (BLE_BP_COLLECTOR)
#include "blpc_task.h"
#include "ke_task.h"
#include "prf_types.h"
#include "prf_utils.h"
/*
* DEFINES
****************************************************************************************
*/
///Maximum number of Blood Pressure Collector task instances
#define BLPC_IDX_MAX (BLE_CONNECTION_MAX)
/// Possible states of the BLPC task
enum
{
/// Free state
BLPC_FREE,
/// IDLE state
BLPC_IDLE,
/// Discovering Blood Pressure SVC and CHars
BLPC_DISCOVERING,
/// Busy state
BLPC_BUSY,
/// Number of defined states.
BLPC_STATE_MAX
};
/// Internal codes for reading a BPS or DIS characteristic with one single request
enum
{
///Read BPS Blood pressure Measurement
BLPC_RD_BPS_BP_MEAS = BLPC_CHAR_BP_MEAS,
///Read BPS Intermdiate Cuff Pressure
BLPC_RD_BPS_CP_MEAS = BLPC_CHAR_CP_MEAS,
///Read BPS Blood pressure Features
BLPC_RD_BPS_FEATURE = BLPC_CHAR_BP_FEATURE,
///Read BPS Blood pressure Measurement Client Cfg. Desc
BLPC_RD_BPS_BP_MEAS_CFG = (BLPC_DESC_MASK | BLPC_DESC_BP_MEAS_CLI_CFG),
///Read BPS Intermdiate Cuff Pressure Client Cfg. Desc
BLPC_RD_BPS_CP_MEAS_CFG = (BLPC_DESC_MASK | BLPC_DESC_IC_MEAS_CLI_CFG),
};
/*
* TYPE DEFINITIONS
****************************************************************************************
*/
struct blpc_cnx_env
{
/// 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;
/// Current operation code
uint8_t operation;
///HTS characteristics
struct bps_content bps;
};
/// Blood Pressure Profile Collector environment variable
struct blpc_env_tag
{
/// profile environment
prf_env_t prf_env;
/// Environment variable pointer for each connections
struct blpc_cnx_env* env[BLPC_IDX_MAX];
/// State of different task instances
ke_state_t state[BLPC_IDX_MAX];
};
/*
* FUNCTION DECLARATIONS
****************************************************************************************
*/
/**
****************************************************************************************
* @brief Retrieve BLP client profile interface
* @return BLP client profile interface
****************************************************************************************
*/
const struct prf_task_cbs* blpc_prf_itf_get(void);
/**
****************************************************************************************
* @brief Send Blood Pressure ATT DB discovery results to BLPC host.
****************************************************************************************
*/
void blpc_enable_rsp_send(struct blpc_env_tag *blpc_env, uint8_t conidx, uint8_t status);
/**
****************************************************************************************
* @brief Unpack Blood pressure measurement data into a comprehensive structure.
*
* @param[out] pmeas_val Pointer to Blood pressure measurement structure destination
* @param[in] packed_bp Pointer of the packed data of Blood Pressure Measurement
* information
****************************************************************************************
*/
void blpc_unpack_meas_value(struct bps_bp_meas* pmeas_val, uint8_t* packed_bp);
/*
* TASK DESCRIPTOR DECLARATIONS
****************************************************************************************
*/
/**
****************************************************************************************
* Initialize task handler
*
* @param task_desc Task descriptor to fill
****************************************************************************************
*/
void blpc_task_init(struct ke_task_desc *task_desc);
#endif /* (BLE_BP_COLLECTOR) */
/// @} BLPC
#endif /* _BLPC_H_ */