#ifndef _GAPM_H_ #define _GAPM_H_ /** **************************************************************************************** * @addtogroup GAPM Generic Access Profile Manager * @ingroup GAP * @brief Generic Access Profile Manager. * * The GAP Manager module is responsible for providing an API to the application in order * to manage all non connected stuff such as configuring device to go in desired mode * (discoverable, connectable, etc.) and perform required actions (scanning, connection, * etc.). GAP Manager is also responsible of managing GAP Controller state according to * corresponding BLE connection states. * * @{ **************************************************************************************** */ /* * INCLUDE FILES **************************************************************************************** */ #include "rwip_config.h" #include "ke_task.h" #include "gap.h" /* * DEFINES **************************************************************************************** */ /// Bit checking #define GAPM_ISBITSET(flag, mask) (((flag)&(mask)) == mask) /* * FUNCTION DECLARATIONS **************************************************************************************** */ /** **************************************************************************************** * @brief Initialize Generic Access Profile Manager Module. * * @param[in] reset true if it's requested by a reset; false if it's boot initialization * **************************************************************************************** */ void gapm_init(bool reset); /** **************************************************************************************** * @brief Retrieve Task Identifier from Task number * (automatically update index of task in returned task id) * * @param task Task number * @return Task Identifier **************************************************************************************** */ ke_task_id_t gapm_get_id_from_task(ke_msg_id_t task); /** **************************************************************************************** * @brief Retrieve Task Number from Task Identifier * (automatically update index of task in returned task id) * * @param id Task Identifier * @return Task Number **************************************************************************************** */ ke_task_id_t gapm_get_task_from_id(ke_msg_id_t id); #if (BLE_GAPC) /** **************************************************************************************** * @brief Created link connection parameters (from bond data) has been set, connection * ready to be used. * * @param[in] conidx Connection Index * **************************************************************************************** */ void gapm_con_enable(uint8_t conidx); /** **************************************************************************************** * @brief A link has been disconnected, clean-up host stack for this connection. * * @param[in] conidx Connection Index * @param[in] conhdl Connection Handle * @param[in] reason Reason of the disconnection * **************************************************************************************** */ void gapm_con_cleanup(uint8_t conidx, uint16_t conhdl, uint8_t reason); #endif // (BLE_GAPC) /** **************************************************************************************** * @brief Retrieve device identity key. * * @return Device Identity Key **************************************************************************************** */ struct gap_sec_key* gapm_get_irk(void); /** **************************************************************************************** * @brief update the device identity key saved in @gapm_env. * * @return Device Identity Key to update **************************************************************************************** */ void gapm_update_irk(uint8_t *irk); /** **************************************************************************************** * @brief Retrieve local public address. * * @return Return local public address **************************************************************************************** */ bd_addr_t* gapm_get_bdaddr(void); bd_addr_t* gapm_get_connected_bdaddr(uint8_t conidx); #ifdef BLE_AUDIO_AM0_TASK /** **************************************************************************************** * @brief Return if LE Audio Mode 0 is supported or not * * @return True if supported, False else **************************************************************************************** */ bool gapm_is_audio_am0_sup(void); #endif // BLE_AUDIO_AM0_TASK #if(BLE_EMB_PRESENT && HCI_TL_SUPPORT) /** **************************************************************************************** * @brief Retrieve if host is embedded or not * * @return True if embedded host is enabled, false else. **************************************************************************************** */ bool gapm_is_embedded_host(void); /** **************************************************************************************** * @brief Set if host is embedded or not * * @param[in] enable True to enable embedded host, false else. **************************************************************************************** */ void gapm_set_embedded_host(bool enable); #endif // (BLE_EMB_PRESENT && HCI_TL_SUPPORT) /** **************************************************************************************** * @brief Retrieve the device address type (@see enum gapm_addr_type) * * @return address type **************************************************************************************** */ uint8_t gapm_get_address_type(void); #if (BLE_ATTS) /** **************************************************************************************** * @brief Get if preferred connection parameters present in GAP ATT database * * @return True if referred connection parameters present in GAP ATT database, False else **************************************************************************************** */ bool gapm_is_pref_con_param_pres(void); /** **************************************************************************************** * @brief retrieve gap attribute handle from attribute index. * * @param[in] att_idx Attribute index * * @return Attribute handle **************************************************************************************** */ uint16_t gapm_get_att_handle(uint8_t att_idx); #endif // (BLE_ATTS) #if (SECURE_CONNECTIONS) /** **************************************************************************************** * @brief Returns the local Public Key * * @return pointer to the local Public Key **************************************************************************************** */ public_key_t* gapm_get_local_public_key(void); private_key_t * gapm_get_local_private_key(void); #endif // (SECURE_CONNECTIONS) /** **************************************************************************************** * @brief Retrieve if Legacy pairing is supported on local device * * @return True if legacy pairing is supported **************************************************************************************** */ bool gapm_is_legacy_pairing_supp(void); /** **************************************************************************************** * @brief Retrieve if Secure Connection pairing is supported on local device * * @return True if Secure Connection pairing is supported **************************************************************************************** */ bool gapm_is_sec_con_pairing_supp(void); #if (BLE_LECB) /** **************************************************************************************** * @brief Check if LECB connection can be registered (established) * * @param[in] le_psm LE Protocol/Service Multiplexer * @param[in] conidx Connection index for app_task computation * @param[out] app_task Destination application/profile task * @param[out] sec_lvl Security level requirements * * * @return GAP_ERR_NOT_FOUND if LE_PSM not register, GAP_ERR_NO_ERROR else **************************************************************************************** */ uint8_t gapm_le_psm_get_info(uint16_t le_psm, uint8_t conidx, ke_task_id_t *app_task, uint8_t *sec_lvl); /** **************************************************************************************** * @brief Check if LECB connection can be registered (established) * * @param[in] le_psm LE Protocol/Service Multiplexer * @param[in] peer_con_init Info to know if connection is initiated by peer device * * @return L2C_ERR_NO_RES_AVAIL if all LECB link are established, GAP_ERR_NO_ERROR else **************************************************************************************** */ uint8_t gapm_lecb_register(uint16_t le_psm, bool peer_con_init); /** **************************************************************************************** * @brief Unregister an existing LECB connection * * @param[in] le_psm LE Protocol/Service Multiplexer * @param[in] peer_con_init Info to know if connection is initiated by peer device * * @return GAP_ERR_NO_ERROR **************************************************************************************** */ uint8_t gapm_lecb_unregister(uint16_t le_psm, bool peer_con_init); #endif // (BLE_LECB) /** **************************************************************************************** * @brief Return the maximal MTU value * * @param[out] Maximal MTU value **************************************************************************************** */ uint16_t gapm_get_max_mtu(void); /** **************************************************************************************** * @brief Return the maximal MPS value * * @param[out] Maximal MPS value **************************************************************************************** */ uint16_t gapm_get_max_mps(void); /** **************************************************************************************** * @brief Check If Service changed feature is enabled or not * * @return true if enabled, false else. * **************************************************************************************** */ bool gapm_svc_chg_en(void); #if (RW_DEBUG) /** **************************************************************************************** * @brief Check If Debug mode feature is enabled or not * * @return true if enabled, false else. * **************************************************************************************** */ bool gapm_dbg_mode_en(void); /** **************************************************************************************** * @brief Force the GAP service start handle **************************************************************************************** */ void gapm_set_svc_start_hdl(uint16_t start_hdl); #endif // (RW_DEBUG) /** **************************************************************************************** * 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 gapm_is_disc_connection(uint8_t conidx); /// @} GAPM #endif /* _GAPM_H_ */