OSDN Git Service

Use correct transport type for GATT client and server connections
authorSubramanian Srinivasan <subrsrin@codeaurora.org>
Thu, 29 Oct 2015 00:05:22 +0000 (17:05 -0700)
committerAndre Eisenbach <eisenbach@google.com>
Fri, 4 Mar 2016 07:42:26 +0000 (23:42 -0800)
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
btif/src/btif_gatt_server.c

index 4e18346..31bc480 100644 (file)
@@ -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;
         }
index f56db03..5dc31fb 100644 (file)
@@ -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!