mirror of
https://github.com/bluekitchen/btstack.git
synced 2025-04-23 11:43:24 +00:00
hci: query remote features only once
This commit is contained in:
parent
1a96727d73
commit
461a2bc4b0
@ -2082,6 +2082,7 @@ static void hci_handle_remote_features_page_2(hci_connection_t * conn, const uin
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void hci_handle_remote_features_received(hci_connection_t * conn){
|
static void hci_handle_remote_features_received(hci_connection_t * conn){
|
||||||
|
conn->bonding_flags &= ~BONDING_REMOTE_FEATURES_QUERY_ACTIVE;
|
||||||
conn->bonding_flags |= BONDING_RECEIVED_REMOTE_FEATURES;
|
conn->bonding_flags |= BONDING_RECEIVED_REMOTE_FEATURES;
|
||||||
log_info("Remote features %02x, bonding flags %x", conn->remote_supported_features[0], conn->bonding_flags);
|
log_info("Remote features %02x, bonding flags %x", conn->remote_supported_features[0], conn->bonding_flags);
|
||||||
if (conn->bonding_flags & BONDING_DEDICATED){
|
if (conn->bonding_flags & BONDING_DEDICATED){
|
||||||
@ -5611,8 +5612,8 @@ bool hci_remote_features_available(hci_con_handle_t handle){
|
|||||||
void hci_remote_features_query(hci_con_handle_t con_handle){
|
void hci_remote_features_query(hci_con_handle_t con_handle){
|
||||||
hci_connection_t * connection = hci_connection_for_handle(con_handle);
|
hci_connection_t * connection = hci_connection_for_handle(con_handle);
|
||||||
if (!connection) return;
|
if (!connection) return;
|
||||||
if ((connection->bonding_flags & BONDING_RECEIVED_REMOTE_FEATURES) != 0) return;
|
if ((connection->bonding_flags & (BONDING_REMOTE_FEATURES_QUERY_ACTIVE | BONDING_RECEIVED_REMOTE_FEATURES)) != 0) return;
|
||||||
connection->bonding_flags |= BONDING_REQUEST_REMOTE_FEATURES_PAGE_0;
|
connection->bonding_flags |= BONDING_REMOTE_FEATURES_QUERY_ACTIVE | BONDING_REQUEST_REMOTE_FEATURES_PAGE_0;
|
||||||
hci_run();
|
hci_run();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
37
src/hci.h
37
src/hci.h
@ -246,22 +246,25 @@ typedef enum {
|
|||||||
|
|
||||||
// bonding flags
|
// bonding flags
|
||||||
enum {
|
enum {
|
||||||
BONDING_REQUEST_REMOTE_FEATURES_PAGE_0 = 0x0001,
|
// remote features
|
||||||
BONDING_REQUEST_REMOTE_FEATURES_PAGE_1 = 0x0002,
|
BONDING_REMOTE_FEATURES_QUERY_ACTIVE = 0x0001,
|
||||||
BONDING_REQUEST_REMOTE_FEATURES_PAGE_2 = 0x0004,
|
BONDING_REQUEST_REMOTE_FEATURES_PAGE_0 = 0x0002,
|
||||||
BONDING_RECEIVED_REMOTE_FEATURES = 0x0008,
|
BONDING_REQUEST_REMOTE_FEATURES_PAGE_1 = 0x0004,
|
||||||
BONDING_REMOTE_SUPPORTS_SSP_CONTROLLER = 0x0010,
|
BONDING_REQUEST_REMOTE_FEATURES_PAGE_2 = 0x0008,
|
||||||
BONDING_REMOTE_SUPPORTS_SSP_HOST = 0x0020,
|
BONDING_RECEIVED_REMOTE_FEATURES = 0x0010,
|
||||||
BONDING_REMOTE_SUPPORTS_SC_CONTROLLER = 0x0040,
|
BONDING_REMOTE_SUPPORTS_SSP_CONTROLLER = 0x0020,
|
||||||
BONDING_REMOTE_SUPPORTS_SC_HOST = 0x0080,
|
BONDING_REMOTE_SUPPORTS_SSP_HOST = 0x0040,
|
||||||
BONDING_DISCONNECT_SECURITY_BLOCK = 0x0100,
|
BONDING_REMOTE_SUPPORTS_SC_CONTROLLER = 0x0080,
|
||||||
BONDING_DISCONNECT_DEDICATED_DONE = 0x0200,
|
BONDING_REMOTE_SUPPORTS_SC_HOST = 0x0100,
|
||||||
BONDING_SEND_AUTHENTICATE_REQUEST = 0x0400,
|
// other
|
||||||
BONDING_SEND_ENCRYPTION_REQUEST = 0x0800,
|
BONDING_DISCONNECT_SECURITY_BLOCK = 0x0200,
|
||||||
BONDING_SEND_READ_ENCRYPTION_KEY_SIZE = 0x1000,
|
BONDING_DISCONNECT_DEDICATED_DONE = 0x0400,
|
||||||
BONDING_DEDICATED = 0x2000,
|
BONDING_SEND_AUTHENTICATE_REQUEST = 0x0800,
|
||||||
BONDING_EMIT_COMPLETE_ON_DISCONNECT = 0x4000,
|
BONDING_SENT_AUTHENTICATE_REQUEST = 0x1000,
|
||||||
BONDING_SENT_AUTHENTICATE_REQUEST = 0x8000
|
BONDING_SEND_ENCRYPTION_REQUEST = 0x2000,
|
||||||
|
BONDING_SEND_READ_ENCRYPTION_KEY_SIZE = 0x4000,
|
||||||
|
BONDING_DEDICATED = 0x8000,
|
||||||
|
BONDING_EMIT_COMPLETE_ON_DISCONNECT = 0x10000,
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
@ -529,7 +532,7 @@ typedef struct {
|
|||||||
CONNECTION_STATE state;
|
CONNECTION_STATE state;
|
||||||
|
|
||||||
// bonding
|
// bonding
|
||||||
uint16_t bonding_flags;
|
uint32_t bonding_flags;
|
||||||
uint8_t bonding_status;
|
uint8_t bonding_status;
|
||||||
|
|
||||||
// encryption key size (in octets)
|
// encryption key size (in octets)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user