pinebuds/services/ble_profiles/glp/glpc/src/glpc.h

210 lines
6.5 KiB
C

#ifndef _GLPC_H_
#define _GLPC_H_
/**
****************************************************************************************
* @addtogroup GLPC Glucose Profile Collector
* @ingroup GLP
* @brief Glucose Profile Collector
*
* The GLPC is responsible for providing Glucose Profile Collector functionalities
* to upper layer module or application. The device using this profile takes the role
* of Glucose Profile Collector.
*
* Glucose Profile Collector. (GLPC): A GLPC (e.g. PC, phone, etc)
* is the term used by this profile to describe a device that can interpret Glucose
* measurement in a way suitable to the user application.
*
* @{
****************************************************************************************
*/
/*
* INCLUDE FILES
****************************************************************************************
*/
#include "rwip_config.h"
#if (BLE_GL_COLLECTOR)
#include "glp_common.h"
#include "ke_task.h"
#include "prf.h"
#include "prf_types.h"
#include "prf_utils.h"
#include "glpc_task.h"
/*
* DEFINES
****************************************************************************************
*/
/// Maximum number of Glucose Collector task instances
#define GLPC_IDX_MAX (BLE_CONNECTION_MAX)
/// 30 seconds record access control point timer
#define GLPC_RACP_TIMEOUT 0x0BB8
/// Possible states of the GLPC task
enum glpc_state
{
/// Not Connected state
GLPC_FREE,
/// IDLE state
GLPC_IDLE,
/// Discovering Glucose SVC and Chars
GLPC_DISCOVERING,
/// Number of defined states.
GLPC_STATE_MAX
};
/*
* TYPE DEFINITIONS
****************************************************************************************
*/
/// Glucose Profile Collector environment variable per connection
struct glpc_cnx_env
{
///Last requested UUID(to keep track of the two services and char)
uint16_t last_uuid_req;
/// counter used to check service uniqueness
uint8_t nb_svc;
/// used to store if measurement context
uint8_t meas_ctx_en;
///HTS characteristics
struct gls_content gls;
};
/// Glucose Profile Collector environment variable
struct glpc_env_tag
{
/// profile environment
prf_env_t prf_env;
/// Environment variable pointer for each connections
struct glpc_cnx_env* env[GLPC_IDX_MAX];
/// State of different task instances
ke_state_t state[GLPC_IDX_MAX];
};
/*
* GLOBAL VARIABLE DEFINITIONS
****************************************************************************************
*/
/*
* FUNCTION DECLARATIONS
****************************************************************************************
*/
/**
****************************************************************************************
* @brief Retrieve GLP client profile interface
*
* @return GLP client profile interface
****************************************************************************************
*/
const struct prf_task_cbs* glpc_prf_itf_get(void);
/**
****************************************************************************************
* @brief Send Glucose ATT DB discovery results to GLPC host.
****************************************************************************************
*/
void glpc_enable_rsp_send(struct glpc_env_tag *glpc_env, uint8_t conidx, uint8_t status);
/**
****************************************************************************************
* @brief Unpack Glucose measurement value
*
* @param[in] packed_meas Glucose measurement value packed
* @param[out] meas_val Glucose measurement value
* @param[out] seq_num Glucose measurement sequence number
*
* @return size of packed value
****************************************************************************************
*/
uint8_t glpc_unpack_meas_value(uint8_t *packed_meas, struct glp_meas* meas_val,
uint16_t* seq_num);
/**
****************************************************************************************
* @brief Unpack Glucose measurement context value
*
* @param[in] packed_meas Glucose measurement context value packed
* @param[out] meas_val Glucose measurement context value
* @param[out] seq_num Glucose measurement sequence number
*
* @return size of packed value
****************************************************************************************
*/
uint8_t glpc_unpack_meas_ctx_value(uint8_t *packed_meas_ctx,
struct glp_meas_ctx* meas_ctx_val,
uint16_t* seq_num);
/**
****************************************************************************************
* @brief Pack Record Access Control request
*
* @param[out] packed_val Record Access Control Point value packed
* @param[in] racp_req Record Access Control Request value
*
* @return size of packed data
****************************************************************************************
*/
uint8_t glpc_pack_racp_req(uint8_t *packed_val,
const struct glp_racp_req* racp_req);
/**
****************************************************************************************
* @brief Unpack Record Access Control response
*
* @param[in] packed_val Record Access Control Point value packed
* @param[out] racp_rsp Record Access Control Response value
*
* @return size of packed data
****************************************************************************************
*/
uint8_t glpc_unpack_racp_rsp(uint8_t *packed_val,
struct glp_racp_rsp* racp_rsp);
/**
****************************************************************************************
* @brief Check if collector request is possible or not
*
* @param[in] conidx Connection Index.
* @param[in] atthdl Attribute handle.
*
* @return GAP_ERR_NO_ERROR if request can be performed, error code else.
****************************************************************************************
*/
uint8_t glpc_validate_request(struct glpc_env_tag *glpc_env, uint8_t conidx, uint8_t char_code);
/*
* TASK DESCRIPTOR DECLARATIONS
****************************************************************************************
*/
/**
****************************************************************************************
* Initialize task handler
*
* @param task_desc Task descriptor to fill
****************************************************************************************
*/
void glpc_task_init(struct ke_task_desc *task_desc);
#endif /* (BLE_GL_COLLECTOR) */
/// @} GLPC
#endif /* _GLPC_H_ */