From d27af388490dbe194035ad779096f98aef92d1a5 Mon Sep 17 00:00:00 2001 From: Subramanian Srinivasan Date: Wed, 28 Oct 2015 17:05:22 -0700 Subject: [PATCH] Use correct transport type for GATT client and server connections Use correct transport type for GATT client and server connect API calls. This change uses the transport used while calling the connect frameworks API instead of relying on the NVRAM to find the transport on which the connect call needs to be sent to the BT stack. Change-Id: Idf5817b8980e848c6ebebf1e9a79dbce61d8cfc8 --- btif/src/btif_gatt_client.c | 36 +++++++++++++++++++++--------------- btif/src/btif_gatt_server.c | 40 +++++++++++++++++++++++----------------- 2 files changed, 44 insertions(+), 32 deletions(-) diff --git a/btif/src/btif_gatt_client.c b/btif/src/btif_gatt_client.c index 4e183462a..31bc4804c 100644 --- a/btif/src/btif_gatt_client.c +++ b/btif/src/btif_gatt_client.c @@ -1189,27 +1189,33 @@ static void btgattc_handle_event(uint16_t event, char* p_param) BTA_DmBleSetBgConnType(BTM_BLE_CONN_AUTO, NULL); } - switch(device_type) + // Determine transport + if (p_cb->transport != GATT_TRANSPORT_AUTO) { - case BT_DEVICE_TYPE_BREDR: - transport = BTA_GATT_TRANSPORT_BR_EDR; - break; - - case BT_DEVICE_TYPE_BLE: - transport = BTA_GATT_TRANSPORT_LE; - break; + transport = p_cb->transport; + } else { + switch(device_type) + { + case BT_DEVICE_TYPE_BREDR: + transport = BTA_GATT_TRANSPORT_BR_EDR; + break; - case BT_DEVICE_TYPE_DUMO: - if (p_cb->transport == GATT_TRANSPORT_LE) + case BT_DEVICE_TYPE_BLE: transport = BTA_GATT_TRANSPORT_LE; - else - transport = BTA_GATT_TRANSPORT_BR_EDR; - break; + break; + + case BT_DEVICE_TYPE_DUMO: + if (p_cb->transport == GATT_TRANSPORT_LE) + transport = BTA_GATT_TRANSPORT_LE; + else + transport = BTA_GATT_TRANSPORT_BR_EDR; + break; + } } // Connect! - BTIF_TRACE_DEBUG ("BTA_GATTC_Open Transport = %d, dev type = %d", - transport, device_type); + BTIF_TRACE_DEBUG ("%s Transport=%d, device type=%d", + __func__, transport, device_type); BTA_GATTC_Open(p_cb->client_if, p_cb->bd_addr.address, p_cb->is_direct, transport); break; } diff --git a/btif/src/btif_gatt_server.c b/btif/src/btif_gatt_server.c index f56db03f6..5dc31fb31 100644 --- a/btif/src/btif_gatt_server.c +++ b/btif/src/btif_gatt_server.c @@ -395,26 +395,32 @@ static void btgatts_handle_event(uint16_t event, char* p_param) if (!p_cb->is_direct) BTA_DmBleSetBgConnType(BTM_BLE_CONN_AUTO, NULL); - switch(device_type) + // Determine transport + if (p_cb->transport != GATT_TRANSPORT_AUTO) { - case BT_DEVICE_TYPE_BREDR: - transport = BTA_GATT_TRANSPORT_BR_EDR; - break; - - case BT_DEVICE_TYPE_BLE: - transport = BTA_GATT_TRANSPORT_LE; - break; - - case BT_DEVICE_TYPE_DUMO: - if (p_cb->transport == GATT_TRANSPORT_LE) - transport = BTA_GATT_TRANSPORT_LE; - else + transport = p_cb->transport; + } else { + switch(device_type) + { + case BT_DEVICE_TYPE_BREDR: transport = BTA_GATT_TRANSPORT_BR_EDR; - break; + break; - default: - BTIF_TRACE_ERROR (" GATT Open :Invalid device type %d",device_type); - return; + case BT_DEVICE_TYPE_BLE: + transport = BTA_GATT_TRANSPORT_LE; + break; + + case BT_DEVICE_TYPE_DUMO: + if (p_cb->transport == GATT_TRANSPORT_LE) + transport = BTA_GATT_TRANSPORT_LE; + else + transport = BTA_GATT_TRANSPORT_BR_EDR; + break; + + default: + BTIF_TRACE_ERROR ("%s: Invalid device type %d", __func__, device_type); + return; + } } // Connect! -- 2.11.0