237 lines
6.8 KiB
C
237 lines
6.8 KiB
C
#ifndef _GAPC_H_
|
|
#define _GAPC_H_
|
|
|
|
/**
|
|
****************************************************************************************
|
|
* @addtogroup GAPC Generic Access Profile Controller
|
|
* @ingroup GAP
|
|
* @brief Generic Access Profile Controller.
|
|
*
|
|
* The GAP Controller module is responsible for providing an API to the application in
|
|
* to perform GAP action related to a BLE connection (pairing, update parameters,
|
|
* disconnect ...). GAP controller is multi-instantiated, one task instance per BLE
|
|
* connection.
|
|
*
|
|
* @{
|
|
****************************************************************************************
|
|
*/
|
|
|
|
|
|
/*
|
|
* INCLUDE FILES
|
|
****************************************************************************************
|
|
*/
|
|
#include "rwip_config.h"
|
|
|
|
#if (BLE_GAPC)
|
|
|
|
#include "ke_task.h"
|
|
#include "gap.h"
|
|
#include "smpc.h"
|
|
|
|
|
|
|
|
/*
|
|
* DEFINES
|
|
****************************************************************************************
|
|
*/
|
|
|
|
|
|
/// Operation type
|
|
enum gapc_op_type
|
|
{
|
|
/// Operation used to manage Link (update params, get peer info)
|
|
GAPC_OP_LINK_INFO = 0x00,
|
|
|
|
/// Operation used to manage SMP
|
|
GAPC_OP_SMP = 0x01,
|
|
|
|
/// Operation used to manage connection update
|
|
GAPC_OP_LINK_UPD = 0x02,
|
|
|
|
/// Max number of operations
|
|
GAPC_OP_MAX
|
|
};
|
|
|
|
/// Link security status. This status represents the authentication/authorization/bonding levels of the connection
|
|
enum gapc_lk_sec_req
|
|
{
|
|
/// Link is bonded
|
|
GAPC_LK_BONDED,
|
|
/// Link is Encrypted
|
|
GAPC_LK_ENCRYPTED,
|
|
/// Link LTK Exchanged during pairing
|
|
GAPC_LK_LTK_PRESENT,
|
|
};
|
|
|
|
/*
|
|
* TYPE DEFINITIONS
|
|
****************************************************************************************
|
|
*/
|
|
|
|
/// GAP controller environment variable structure.
|
|
struct gapc_env_tag
|
|
{
|
|
/// Request operation Kernel message
|
|
void* operation[GAPC_OP_MAX];
|
|
/// Task id requested disconnection
|
|
ke_task_id_t disc_requester;
|
|
|
|
|
|
/* Connection parameters to keep */
|
|
|
|
/// Security Management Protocol environment variables
|
|
struct smpc_env smpc;
|
|
|
|
/// connection handle
|
|
uint16_t conhdl;
|
|
|
|
/// Configuration fields (@see enum gapc_fields)
|
|
uint8_t fields;
|
|
|
|
// BD Address used for the link that should be kept
|
|
struct gap_bdaddr src[SMPC_INFO_MAX];
|
|
|
|
/// Relevant information of peer LE features 8-byte array
|
|
uint8_t features;
|
|
};
|
|
|
|
|
|
|
|
/*
|
|
* MACROS
|
|
****************************************************************************************
|
|
*/
|
|
|
|
/*
|
|
* FUNCTION DECLARATIONS
|
|
****************************************************************************************
|
|
*/
|
|
|
|
/**
|
|
****************************************************************************************
|
|
* @brief Retrieve connection index from connection handle.
|
|
*
|
|
* @param[in] conhdl Connection handle
|
|
*
|
|
* @return Return found connection index, GAP_INVALID_CONIDX if not found.
|
|
****************************************************************************************
|
|
*/
|
|
uint8_t gapc_get_conidx(uint16_t conhdl);
|
|
|
|
/**
|
|
****************************************************************************************
|
|
* @brief Retrieve connection handle from connection index.
|
|
*
|
|
* @param[in] conidx Connection index
|
|
*
|
|
* @return Return found connection handle, GAP_INVALID_CONHDL if not found.
|
|
****************************************************************************************
|
|
*/
|
|
uint16_t gapc_get_conhdl(uint8_t conidx);
|
|
|
|
/**
|
|
****************************************************************************************
|
|
* @brief Retrieve connection role from connection index.
|
|
*
|
|
* @param[in] conidx Connection index
|
|
*
|
|
* @return Return found connection role
|
|
****************************************************************************************
|
|
*/
|
|
uint8_t gapc_get_role(uint8_t conidx);
|
|
|
|
/**
|
|
****************************************************************************************
|
|
* @brief Retrieve connection address information on current link.
|
|
*
|
|
* @param[in] conidx Connection index
|
|
* @param[in] src Connection information source
|
|
*
|
|
* @return Return found connection address
|
|
****************************************************************************************
|
|
*/
|
|
struct gap_bdaddr* gapc_get_bdaddr(uint8_t conidx, uint8_t src);
|
|
|
|
|
|
/**
|
|
****************************************************************************************
|
|
* @brief Check if current link support security requirements.
|
|
*
|
|
* @param[in] conidx Connection index
|
|
* @param[in] sec_req Link security requirement to test
|
|
*
|
|
* @return True if link requirement is supported, False else.
|
|
****************************************************************************************
|
|
*/
|
|
bool gapc_is_sec_set(uint8_t conidx, uint8_t sec_req);
|
|
|
|
/**
|
|
****************************************************************************************
|
|
* @brief Retrieve Link Security level
|
|
*
|
|
* @param[in] conidx Connection index
|
|
*
|
|
* @return Link Security level.
|
|
****************************************************************************************
|
|
*/
|
|
uint8_t gapc_lk_sec_lvl_get(uint8_t conidx);
|
|
|
|
/**
|
|
****************************************************************************************
|
|
* @brief Retrieve the encryption key size of the connection
|
|
*
|
|
* @param[in] conidx Connection index
|
|
*
|
|
* @return encryption key size (size is 7 - 16 byte range)
|
|
*
|
|
****************************************************************************************
|
|
*/
|
|
uint8_t gapc_enc_keysize_get(uint8_t conidx);
|
|
|
|
/**
|
|
****************************************************************************************
|
|
* @brief Get Service Change Client Configuration
|
|
*
|
|
* @param[in] conidx Connection index
|
|
*
|
|
* @return Service Change Client Configuration
|
|
****************************************************************************************
|
|
*/
|
|
bool gapc_svc_chg_ccc_get(uint8_t conidx);
|
|
|
|
/**
|
|
****************************************************************************************
|
|
* @brief Set Service Change Client Configuration
|
|
*
|
|
* @param[in] conidx Connection index
|
|
* @param[in] enable True if CCC is enabled, False else
|
|
*
|
|
****************************************************************************************
|
|
*/
|
|
void gapc_svc_chg_ccc_set(uint8_t conidx, bool enable);
|
|
|
|
/**
|
|
****************************************************************************************
|
|
* Retrieve if current connection index is used for a discovery purpose such as
|
|
* Name discovery
|
|
*
|
|
* @param conidx Index of the specific connection
|
|
*
|
|
* @return true if connection has a discovery purpose, False else
|
|
****************************************************************************************
|
|
*/
|
|
bool gapc_is_disc_connection(uint8_t conidx);
|
|
|
|
bool gapc_get_remote_dev_feature(uint8_t conidx, uint8_t* ptrFeature);
|
|
|
|
#ifdef __GATT_OVER_BR_EDR__
|
|
uint8_t gapc_create_btgatt(uint16_t conhdl);
|
|
void gapc_clean_btgatt(uint8_t conidx);
|
|
#endif
|
|
|
|
#endif // (BLE_GAPC)
|
|
/// @} GAPC
|
|
|
|
#endif /* _GAPC_H_ */
|