OSDN Git Service

GATT: Put L2cap disconnect logic together
authorHansong Zhang <hsz@google.com>
Wed, 23 Sep 2020 04:54:33 +0000 (21:54 -0700)
committerHansong Zhang <hsz@google.com>
Wed, 23 Sep 2020 16:58:41 +0000 (09:58 -0700)
Bug: 159815595
Tag: #refactor
Test: compile & verify basic functions working
Change-Id: Ida76c6223bdcb61153aa0a422e8f47468a58c368

stack/avct/avct_l2c_br.cc
stack/gap/gap_conn.cc
stack/gatt/gatt_main.cc

index 65bd3dd..9a2e9ac 100644 (file)
@@ -86,7 +86,7 @@ const tL2CAP_APPL_INFO avct_l2c_br_appl = {avct_l2c_br_connect_ind_cback,
                                            avct_l2c_br_config_ind_cback,
                                            avct_l2c_br_config_cfm_cback,
                                            avct_l2c_br_disconnect_ind_cback,
-                                           avct_l2c_br_disconnect_cfm_cback,
+                                           NULL,
                                            avct_l2c_br_data_ind_cback,
                                            avct_l2c_br_congestion_ind_cback,
                                            NULL,
index 4844412..6394c50 100644 (file)
@@ -114,7 +114,6 @@ void gap_conn_init(void) {
   conn.reg_info.pL2CA_ConfigInd_Cb = gap_config_ind;
   conn.reg_info.pL2CA_ConfigCfm_Cb = gap_config_cfm;
   conn.reg_info.pL2CA_DisconnectInd_Cb = gap_disconnect_ind;
-  conn.reg_info.pL2CA_DisconnectCfm_Cb = NULL;
   conn.reg_info.pL2CA_DataInd_Cb = gap_data_ind;
   conn.reg_info.pL2CA_CongestionStatus_Cb = gap_congestion_ind;
   conn.reg_info.pL2CA_TxComplete_Cb = gap_tx_complete_ind;
index 4f663bb..269008f 100644 (file)
@@ -67,8 +67,7 @@ static void gatt_l2cif_config_cfm_cback(uint16_t l2cap_cid,
                                         tL2CAP_CFG_INFO* p_cfg);
 static void gatt_l2cif_disconnect_ind_cback(uint16_t l2cap_cid,
                                             bool ack_needed);
-static void gatt_l2cif_disconnect_cfm_cback(uint16_t l2cap_cid,
-                                            uint16_t result);
+static void gatt_l2cif_disconnect(uint16_t l2cap_cid);
 static void gatt_l2cif_data_ind_cback(uint16_t l2cap_cid, BT_HDR* p_msg);
 static void gatt_send_conn_cback(tGATT_TCB* p_tcb);
 static void gatt_l2cif_congest_cback(uint16_t cid, bool congested);
@@ -78,7 +77,7 @@ static const tL2CAP_APPL_INFO dyn_info = {gatt_l2cif_connect_ind_cback,
                                           gatt_l2cif_config_ind_cback,
                                           gatt_l2cif_config_cfm_cback,
                                           gatt_l2cif_disconnect_ind_cback,
-                                          gatt_l2cif_disconnect_cfm_cback,
+                                          NULL,
                                           gatt_l2cif_data_ind_cback,
                                           gatt_l2cif_congest_cback,
                                           NULL};
@@ -237,10 +236,12 @@ bool gatt_disconnect(tGATT_TCB* p_tcb) {
     }
     gatt_set_ch_state(p_tcb, GATT_CH_CLOSING);
   } else {
-    if ((ch_state == GATT_CH_OPEN) || (ch_state == GATT_CH_CFG))
-      ret = L2CA_DisconnectReq(p_tcb->att_lcid);
-    else
+    if ((ch_state == GATT_CH_OPEN) || (ch_state == GATT_CH_CFG)) {
+      gatt_l2cif_disconnect(p_tcb->att_lcid);
+      return true;
+    } else {
       VLOG(1) << __func__ << " gatt_disconnect channel not opened";
+    }
   }
 
   return ret;
@@ -634,7 +635,7 @@ static void gatt_l2cif_connect_cfm_cback(uint16_t lcid, uint16_t result) {
     if (result == L2CAP_CONN_OK) {
       /* just in case the peer also accepts our connection - Send L2CAP
        * disconnect req */
-      L2CA_DisconnectReq(lcid);
+      gatt_l2cif_disconnect(lcid);
     }
   }
 }
@@ -652,7 +653,7 @@ void gatt_l2cif_config_cfm_cback(uint16_t lcid, tL2CAP_CFG_INFO* p_cfg) {
   /* if result not successful */
   if (p_cfg->result != L2CAP_CFG_OK) {
     /* Send L2CAP disconnect req */
-    L2CA_DisconnectReq(lcid);
+    gatt_l2cif_disconnect(lcid);
     return;
   }
 
@@ -738,9 +739,8 @@ void gatt_l2cif_disconnect_ind_cback(uint16_t lcid, bool ack_needed) {
   gatt_cleanup_upon_disc(p_tcb->peer_bda, reason, BT_TRANSPORT_BR_EDR);
 }
 
-/** This is the L2CAP disconnect confirm callback function */
-static void gatt_l2cif_disconnect_cfm_cback(uint16_t lcid,
-                                            UNUSED_ATTR uint16_t result) {
+static void gatt_l2cif_disconnect(uint16_t lcid) {
+  L2CA_DisconnectReq(lcid);
 
   /* look up clcb for this channel */
   tGATT_TCB* p_tcb = gatt_find_tcb_by_cid(lcid);