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