gap: ENABLE_EXPLICIT_LINK_KEY_REPLY allows for asynchronous link key lookup by application

This commit is contained in:
Matthias Ringwald 2021-09-27 14:46:52 +02:00
parent 63c0b2fd6d
commit 308eeaffaa
4 changed files with 30 additions and 2 deletions

View File

@ -12,6 +12,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
- HCI Dump: Support BTSnoop format in hci_dump_posix_fs.c for format = HCI_DUMP_BTSNOOP
- HCI Dump RTT STDOUT: drop messages if RTT buffer is full and RTT is configured for non-blocking
- hci_cmd: support variable length fields and arrayed parameters
- GAP: ENABLE_EXPLICIT_LINK_KEY_REPLY allows for asynchronous link key lookup by application
- POSIX: btstack_signal allows to register for callback on signal, e.g. ctrl-c
- Windows: btstack_stdin_window_register_ctrl_c_callback allows to register for ctrl-c
- A2DP: allow to register media codec validator for sink and source with:

View File

@ -110,6 +110,7 @@ ENABLE_CONTROLLER_WARM_BOOT | Enable stack startup without power cycle (if
ENABLE_SEGGER_RTT | Use SEGGER RTT for console output and packet log, see [additional options](#sec:rttConfiguration)
ENABLE_EXPLICIT_CONNECTABLE_MODE_CONTROL | Disable calls to control Connectable Mode by L2CAP
ENABLE_EXPLICIT_IO_CAPABILITIES_REPLY | Let application trigger sending IO Capabilities (Negative) Reply
ENABLE_EXPLICIT_LINK_KEY_REPLY | Let application trigger sending Link Key (Negative) Response, allows for asynchronous link key lookup
ENABLE_CLASSIC_OOB_PAIRING | Enable support for classic Out-of-Band (OOB) pairing
ENABLE_A2DP_SOURCE_EXPLICIT_CONFIG | Let application configure stream endpoint (skip auto-config of SBC endpoint)
ENABLE_AVDTP_ACCEPTOR_EXPLICIT_START_STREAM_CONFIRMATION | allow accept or reject of stream start on A2DP_SUBEVENT_START_STREAM_REQUESTED

View File

@ -844,6 +844,16 @@ uint8_t gap_ssp_io_capabilities_response(const bd_addr_t addr);
*/
uint8_t gap_ssp_io_capabilities_negative(const bd_addr_t addr);
/**
* Send Link Key Reponse
* @note Link Key (Negative) Reply is sent automaticallyu unless ENABLE_EXPLICIT_LINK_KEY_RESPONSE
* @param addr
* @param link_key
* @param type or INVALID_LINK_KEY if link key not available
* @return 0 if ok
*/
uint8_t gap_send_link_key_response(const bd_addr_t addr, link_key_t link_key, link_key_type_t type);
/**
* @brief Enter Sniff mode
* @param con_handle

View File

@ -2827,6 +2827,7 @@ static void event_handler(uint8_t *packet, uint16_t size){
break;
case HCI_EVENT_LINK_KEY_REQUEST:
#ifndef ENABLE_EXPLICIT_LINK_KEY_REPLY
hci_event_link_key_request_get_bd_addr(packet, addr);
conn = hci_connection_for_bd_addr_and_type(addr, BD_ADDR_TYPE_ACL);
if (!conn) break;
@ -6533,8 +6534,7 @@ int gap_ssp_confirmation_negative(const bd_addr_t addr){
return gap_pairing_set_state_and_run(addr, GAP_PAIRING_STATE_SEND_CONFIRMATION_NEGATIVE);
}
#ifdef ENABLE_EXPLICIT_IO_CAPABILITIES_REPLY
#if defined(ENABLE_EXPLICIT_IO_CAPABILITIES_REPLY) || defined(ENABLE_EXPLICIT_LINK_KEY_REPLY)
static uint8_t gap_set_auth_flag_and_run(const bd_addr_t addr, hci_authentication_flags_t flag){
hci_connection_t * conn = hci_connection_for_bd_addr_and_type(addr, BD_ADDR_TYPE_ACL);
if (!conn) return ERROR_CODE_UNKNOWN_CONNECTION_IDENTIFIER;
@ -6542,7 +6542,9 @@ static uint8_t gap_set_auth_flag_and_run(const bd_addr_t addr, hci_authenticatio
hci_run();
return ERROR_CODE_SUCCESS;
}
#endif
#ifdef ENABLE_EXPLICIT_IO_CAPABILITIES_REPLY
uint8_t gap_ssp_io_capabilities_response(const bd_addr_t addr){
return gap_set_auth_flag_and_run(addr, AUTH_FLAG_SEND_IO_CAPABILITIES_REPLY);
}
@ -6588,6 +6590,20 @@ void gap_ssp_generate_oob_data(void){
#endif
#ifdef ENABLE_EXPLICIT_LINK_KEY_REPLY
uint8_t gap_send_link_key_response(const bd_addr_t addr, link_key_t link_key, link_key_type_t type){
hci_connection_t * connection = hci_connection_for_bd_addr_and_type(addr, BD_ADDR_TYPE_ACL);
if (connection == NULL) {
return ERROR_CODE_UNKNOWN_CONNECTION_IDENTIFIER;
}
memcpy(connection->link_key, link_key, sizeof(link_key_t));
connection->link_key_type = type;
return gap_set_auth_flag_and_run(addr, AUTH_FLAG_HANDLE_LINK_KEY_REQUEST);
}
#endif // ENABLE_EXPLICIT_LINK_KEY_REPLY
/**
* @brief Set inquiry mode: standard, with RSSI, with RSSI + Extended Inquiry Results. Has to be called before power on.
* @param inquiry_mode see bluetooth_defines.h