pinebuds/services/ble_stack/hl/inc/gattc.h
2022-08-15 17:20:27 +08:00

163 lines
4.5 KiB
C

#ifndef GATTC_H_
#define GATTC_H_
/**
****************************************************************************************
* @addtogroup GATTC Generic Attribute Profile Controller
* @ingroup GATT
* @brief Generic Attribute Profile Controller.
*
* This GATT module is responsible for providing an API for all attribute related operations
* related to a BLE connection.
* It is responsible for all the service framework activities using the Attribute protocol
* for discovering services and for reading and writing characteristic values on a peer device.
* To achieve this, the GATT interfaces with @ref ATTC "ATTC" and the @ref ATTS "ATTS".
*
* @{
****************************************************************************************
*/
/*
* INCLUDE FILES
****************************************************************************************
*/
/* kernel task */
#include "rwip_config.h"
#if (BLE_GATTC)
#include "co_list.h"
/*
* DEFINES
****************************************************************************************
*/
/// Operation type
enum gattc_op_type
{
#if (BLE_ATTS)
/// Operation used to Server Request operations
GATTC_OP_SERVER,
#endif // (BLE_ATTS)
#if (BLE_ATTC)
/// Operation used to Client Request operations
GATTC_OP_CLIENT,
/// Service Discovery Procedure operation
GATTC_OP_SDP,
#endif // (BLE_ATTC)
/// Max number of operations
GATTC_OP_MAX
};
/*
* TYPES DEFINITIONS
****************************************************************************************
*/
#if (BLE_ATTC)
/// Attribute Client environment variable requirements
struct attc_env
{
/// List of ATT message used to aggregate long value in a single buffer.
struct co_list rsp_list;
/// List that contains peer device event registration
struct co_list reg_evt;
/// List that contains data for service discovery
struct co_list sdp_data;
};
#endif // (BLE_ATTC)
#if (BLE_ATTS)
/// Attribute server environment variables
struct atts_env
{
/// This is used to merge save all the prepare write request received ,
/// before receiving the execute or cancel or disconnection.
struct co_list prep_wr_req_list;
/// This list is used to put any data in order to send a response to peer device
struct co_list rsp;
/// This structure is used to store in cache latest attribute read value
struct gattc_read_cfm* read_cache;
/// pointer to the PDU which is currently handled by ATTS
struct l2cc_pdu_recv_ind* pdu;
};
#endif // (BLE_ATTS)
/// GATT controller environment variable structure.
struct gattc_env_tag
{
/// Request operation Kernel message
void* operation[GATTC_OP_MAX];
#if (BLE_ATTC)
struct attc_env client;
#endif // (BLE_ATTC)
#if (BLE_ATTS)
struct atts_env server;
#endif // (BLE_ATTS)
/// Current MTU Size
uint16_t mtu_size;
/// A transaction timeout occurs, reject next attribute commands
bool trans_timeout;
};
/*
* MACRO DEFINITIONS
****************************************************************************************
*/
/*
* FUNCTION DECLARATIONS
****************************************************************************************
*/
/**
****************************************************************************************
* @brief Created link connection parameters (from bond data) has been set, connection
* ready to be used.
*
* @param[in] conidx Connection Index
*
****************************************************************************************
*/
void gattc_con_enable(uint8_t conidx);
/**
****************************************************************************************
* @brief Gets the negotiated MTU. This function gets the negotiated MTU.
*
* @param[in] idx connection record index
*
* @return MTU negotiated
*
****************************************************************************************
*/
uint16_t gattc_get_mtu(uint8_t idx);
/**
****************************************************************************************
* @brief Sets the negotiated MTU This function stores the negotiated MTU.
*
* @param[in] idx connection record index
* @param[in] mtu negotiated MTU
*
* @return status indicates if the MTU setting operation is successful
*
****************************************************************************************
*/
void gattc_set_mtu(uint8_t idx, uint16_t mtu);
#endif /* (BLE_GATTC) */
/// @} GATTC
#endif // GATTC_H_