/** **************************************************************************************** * * @file gapc_api.h * * @brief Generic Access Profile Controller API functions. * **************************************************************************************** */ #ifndef GAPC_API_H_ #define GAPC_API_H_ /* * INCLUDE FILES **************************************************************************************** */ #include #include "gapc.h" /* * FUNCTION DECLARATIONS **************************************************************************************** */ /** **************************************************************************************** * @brief Response GAPC_CONNECTION_REQ_IND with specific link data configuration. * * @param[in] conidx Connection index * @param[in] auth Authentication(@see gap_auth) **************************************************************************************** */ void gapc_connect_rsp(uint8_t conidx, uint8_t auth); /** **************************************************************************************** * @brief Response GAPC_PARAM_UPDATE_REQ_IND(Master confirm or not). * * @param[in] conidx Connection index * @param[in] accept True or False to accept slave connection parameters * @param[in] ce_min Minimum Connection Event Duration * @param[in] ce_max Maximum Connection Event Duration **************************************************************************************** */ void gapc_param_update_rsp(uint8_t conidx, bool accept, uint16_t ce_min, uint16_t ce_max); /** **************************************************************************************** * @brief Set the PHY configuration for current active link. * * @param[in] conidx Connection index * @param[in] tx_phy PHY for data transmission(@see enum gap_phy) * @param[in] rx_phy PHY for data reception(@see enum gap_phy) * @param[in] phy_opt PHY options(@see enum gapc_phy_option) * *@return Message GAPC_LE_PHY_IND **************************************************************************************** */ void gapc_update_phy(uint8_t conidx, uint8_t tx_phy, uint8_t rx_phy, uint8_t phy_opt); /** **************************************************************************************** * @brief Set the BLE Data Length Extension for current active link. * * @param[in] conidx Connection index * @param[in] tx_octets Length of data transmission(@see LE_MAX_OCTETS) * @param[in] tx_time Time of data transmission(@see LE_MAX_TIME) * *@return Message GAPC_LE_PKT_SIZE_IND **************************************************************************************** */ void gapc_update_dle(uint8_t conidx, uint16_t tx_octets, uint16_t tx_time); /** **************************************************************************************** * @brief Perform update of connection parameters command. * * @param[in] conidx Connection index * @param[in] param Connection parameters * *@return Message GAPC_PARAM_UPDATED_IND **************************************************************************************** */ void gapc_update_param(uint8_t conidx, struct gapc_conn_param const* param); /** **************************************************************************************** * @brief Request disconnection of current link command. * * @param[in] conidx Connection index * @param[in] reason Reason of disconnection * *@return Message GAPC_DISCONNECT_IND **************************************************************************************** */ void gapc_disconnect(uint8_t conidx); /** **************************************************************************************** * @brief Send gapc_get_info_cmd, Retrieve Connection information * * @param[in] conidx Connection index * @param[in] info Connection information (@see gapc_operation) **************************************************************************************** */ void gapc_get_info(uint8_t conidx, uint8_t info); /** **************************************************************************************** * @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 link authentication level * * @param[in] conidx Connection index * @return Link authentication level **************************************************************************************** */ uint8_t gapc_auth_get(uint8_t conidx); /** **************************************************************************************** * @brief Set resolvable address used for connection establishment as local address. * * @brief conidx Connection index * @brief p_addr Pointer to the resolvable address used by either advertising activity or * resolvable activity. **************************************************************************************** */ void gapc_set_local_addr(uint8_t conidx, uint8_t *p_addr); /** **************************************************************************************** * @brief Retrieve connection address information on current link. * * @param[in] conidx Connection index * @param[in] src information source(@see gapc_smp_addr_src) * * @return Return found connection address **************************************************************************************** */ struct gap_bdaddr* gapc_get_bdaddr(uint8_t conidx, uint8_t src); /** **************************************************************************************** * @brief Get destination task id for asynchronous event, meaning events that are not * linked to an operation. * Note the provided connection index shall be valid (gapc_env[conidx] is not NULL) * * @param[in] conidx Connection Index * * @return ID of the destination task. **************************************************************************************** */ task_id_t gapc_get_dest_task(uint8_t conidx); /** **************************************************************************************** * @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); /** **************************************************************************************** * @brief Send bond request(Master Role). * * @param[in] conidx Connection index * @param[in] feat Pairing Feature(@see gapc_pairing) **************************************************************************************** */ void gapc_smp_bond_req(uint8_t conidx, struct gapc_pairing const* feat); /** **************************************************************************************** * @brief Send encrypt request(Master Role). * * @param[in] conidx Connection index * @param[in] ltk Long term key(@see gapc_ltk) **************************************************************************************** */ void gapc_smp_encrypt_req(uint8_t conidx, struct gapc_ltk const* ltk); /** **************************************************************************************** * @brief Send security request. * * @param[in] conidx Connection index * @param[in] auth Authentication req(@see gap_auth) **************************************************************************************** */ void gapc_smp_security_req(uint8_t conidx, uint8_t auth); /** **************************************************************************************** * @brief Send Keypress Notification. * * @param[in] conidx Connection index * @param[in] keyntf Keypress type req(@see gapc_key_ntf_type) **************************************************************************************** */ void gapc_key_press_notify(uint8_t conidx, uint8_t keyntf); /** **************************************************************************************** * @brief Respond to peer pairing information request(GAPC_PAIRING_REQ) * * @param[in] conidx Connection Index * @param[in] feat Pairing feature information, NULL means pairing rejected * * @return status of pairing **************************************************************************************** */ uint8_t gapc_smp_pairing_rsp(uint8_t conidx, struct gapc_pairing *feat); /** **************************************************************************************** * @brief Handles LTK exchange part of pairing(GAPC_BOND_REQ_IND) * * @param[in] conidx Connection Index * @param[in] ltk The Long Term Key transmitted by application * * @return status of pairing **************************************************************************************** */ uint8_t gapc_smp_pairing_ltk_exch(uint8_t conidx, struct gapc_ltk* ltk); /** **************************************************************************************** * @brief Handles IRK exchange part of pairing(GAPC_BOND_REQ_IND) * * @param[in] conidx Connection Index * @param[in] irk The Identity Resolving Key transmitted by application * @param[in] identity Device identity address * * @return status of pairing **************************************************************************************** */ uint8_t gapc_smp_pairing_irk_exch(uint8_t conidx, struct gap_sec_key* irk, struct gap_bdaddr *identity); /** **************************************************************************************** * @brief Handles CSRK exchange part of pairing(GAPC_BOND_REQ_IND) * * @param[in] conidx Connection Index * @param[in] csrk The Connection signature resolving key transmitted by application * * @return status of pairing **************************************************************************************** */ uint8_t gapc_smp_pairing_csrk_exch(uint8_t conidx, struct gap_sec_key *csrk); /** **************************************************************************************** * @brief Handles TK exchange part of pairing(GAPC_BOND_REQ_IND) * * @param[in] conidx Connection Index * @param[in] accept True if pairing is accepted, False else * @param[in] tk The Temporary Key transmitted by application * * @return status of pairing **************************************************************************************** */ uint8_t gapc_smp_pairing_tk_exch(uint8_t conidx, bool accept, struct gap_sec_key *tk); #if (SEC_CON_ENB) /** **************************************************************************************** * @brief Handles OOB exchange part of pairing(GAPC_BOND_REQ_IND) * * @param[in] conidx Connection Index * @param[in] accept Accept or Reject the OOB (reject if OOB reception not available on the device) * @param[in] csrk The OOB Confirm and OOB Rand from the peer * * @return status of pairing **************************************************************************************** */ uint8_t gapc_smp_pairing_oob_exch(uint8_t conidx, bool accept, struct gapc_oob *oob); /** **************************************************************************************** * @brief Handles Numeric Value Acceptance as part of pairing(GAPC_BOND_REQ_IND) * * @param[in] conidx Connection Index * @param[in] accept Accept or Reject the numeric comparison * * @return status of pairing **************************************************************************************** */ uint8_t gapc_smp_pairing_nc_exch(uint8_t conidx, uint8_t accept); #endif //(SEC_CON_ENB) /** **************************************************************************************** * @brief Slave respond to peer device encryption request(GAPC_ENCRYPT_REQ_IND) * * @param[in] conidx Connection Index * @param[in] key_size Encryption key size(7~16) * @param[in] ltk 16-bytes LTK(Accept) or NULL(Reject) to start encryption **************************************************************************************** */ uint8_t gapc_smp_encrypt_cfm(uint8_t conidx, uint8_t key_size, struct gap_sec_key *ltk); #endif // GAPC_API_H_