#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_