OSDN Git Service

Const-ify bta/gatt/:: Api data param
authorChris Manton <cmanton@google.com>
Tue, 4 May 2021 22:24:20 +0000 (15:24 -0700)
committerChris Manton <cmanton@google.com>
Wed, 12 May 2021 17:02:34 +0000 (17:02 +0000)
Towards immutable code

Bug: 187830698
Test: gd/cert/run
Tag: #refactor

Change-Id: I72f919a9e19e3f7ca05ad36f4a0ca267e8bd5dfc

bta/gatt/bta_gattc_act.cc
bta/gatt/bta_gattc_cache.cc
bta/gatt/bta_gattc_int.h
bta/gatt/bta_gattc_main.cc
bta/gatt/bta_gattc_utils.cc
bta/test/bta_gatt_test.cc

index 5dfa5cd..e2b95ff 100644 (file)
@@ -244,7 +244,7 @@ void bta_gattc_deregister(tBTA_GATTC_RCB* p_clreg) {
 }
 
 /** process connect API request */
-void bta_gattc_process_api_open(tBTA_GATTC_DATA* p_msg) {
+void bta_gattc_process_api_open(const tBTA_GATTC_DATA* p_msg) {
   uint16_t event = ((BT_HDR_RIGID*)p_msg)->event;
 
   tBTA_GATTC_RCB* p_clreg = bta_gattc_cl_get_regcb(p_msg->api_conn.client_if);
@@ -274,7 +274,7 @@ void bta_gattc_process_api_open(tBTA_GATTC_DATA* p_msg) {
 }
 
 /** process connect API request */
-void bta_gattc_process_api_open_cancel(tBTA_GATTC_DATA* p_msg) {
+void bta_gattc_process_api_open_cancel(const tBTA_GATTC_DATA* p_msg) {
   CHECK(p_msg != nullptr);
 
   uint16_t event = ((BT_HDR_RIGID*)p_msg)->event;
@@ -322,7 +322,7 @@ void bta_gattc_process_enc_cmpl(tGATT_IF client_if, const RawAddress& bda) {
 }
 
 void bta_gattc_cancel_open_error(tBTA_GATTC_CLCB* p_clcb,
-                                 UNUSED_ATTR tBTA_GATTC_DATA* p_data) {
+                                 UNUSED_ATTR const tBTA_GATTC_DATA* p_data) {
   tBTA_GATTC cb_data;
 
   cb_data.status = GATT_ERROR;
@@ -332,7 +332,7 @@ void bta_gattc_cancel_open_error(tBTA_GATTC_CLCB* p_clcb,
 }
 
 void bta_gattc_open_error(tBTA_GATTC_CLCB* p_clcb,
-                          UNUSED_ATTR tBTA_GATTC_DATA* p_data) {
+                          UNUSED_ATTR const tBTA_GATTC_DATA* p_data) {
   LOG(ERROR) << "Connection already opened. wrong state";
 
   bta_gattc_send_open_cback(p_clcb->p_rcb, GATT_SUCCESS, p_clcb->bda,
@@ -340,7 +340,7 @@ void bta_gattc_open_error(tBTA_GATTC_CLCB* p_clcb,
 }
 
 void bta_gattc_open_fail(tBTA_GATTC_CLCB* p_clcb,
-                         UNUSED_ATTR tBTA_GATTC_DATA* p_data) {
+                         UNUSED_ATTR const tBTA_GATTC_DATA* p_data) {
   LOG(WARNING) << __func__ << ": Cannot establish Connection. conn_id="
                << loghex(p_clcb->bta_conn_id) << ". Return GATT_ERROR("
                << +GATT_ERROR << ")";
@@ -352,7 +352,7 @@ void bta_gattc_open_fail(tBTA_GATTC_CLCB* p_clcb,
 }
 
 /** Process API connection function */
-void bta_gattc_open(tBTA_GATTC_CLCB* p_clcb, tBTA_GATTC_DATA* p_data) {
+void bta_gattc_open(tBTA_GATTC_CLCB* p_clcb, const tBTA_GATTC_DATA* p_data) {
   tBTA_GATTC_DATA gattc_data;
 
   /* open/hold a connection */
@@ -377,7 +377,7 @@ void bta_gattc_open(tBTA_GATTC_CLCB* p_clcb, tBTA_GATTC_DATA* p_data) {
 }
 
 /** Process API Open for a background connection */
-void bta_gattc_init_bk_conn(tBTA_GATTC_API_OPEN* p_data,
+void bta_gattc_init_bk_conn(const tBTA_GATTC_API_OPEN* p_data,
                             tBTA_GATTC_RCB* p_clreg) {
   if (!bta_gattc_mark_bg_conn(p_data->client_if, p_data->remote_bda, true)) {
     bta_gattc_send_open_cback(p_clreg, GATT_NO_RESOURCES, p_data->remote_bda,
@@ -410,11 +410,12 @@ void bta_gattc_init_bk_conn(tBTA_GATTC_API_OPEN* p_data,
   gattc_data.hdr.layer_specific = p_clcb->bta_conn_id = conn_id;
 
   /* open connection */
-  bta_gattc_sm_execute(p_clcb, BTA_GATTC_INT_CONN_EVT, &gattc_data);
+  bta_gattc_sm_execute(p_clcb, BTA_GATTC_INT_CONN_EVT,
+                       static_cast<const tBTA_GATTC_DATA*>(&gattc_data));
 }
 
 /** Process API Cancel Open for a background connection */
-void bta_gattc_cancel_bk_conn(tBTA_GATTC_API_CANCEL_OPEN* p_data) {
+void bta_gattc_cancel_bk_conn(const tBTA_GATTC_API_CANCEL_OPEN* p_data) {
   tBTA_GATTC_RCB* p_clreg;
   tBTA_GATTC cb_data;
   cb_data.status = GATT_ERROR;
@@ -435,7 +436,7 @@ void bta_gattc_cancel_bk_conn(tBTA_GATTC_API_CANCEL_OPEN* p_data) {
 }
 
 void bta_gattc_cancel_open_ok(tBTA_GATTC_CLCB* p_clcb,
-                              UNUSED_ATTR tBTA_GATTC_DATA* p_data) {
+                              UNUSED_ATTR const tBTA_GATTC_DATA* p_data) {
   tBTA_GATTC cb_data;
 
   if (p_clcb->p_rcb->p_cback) {
@@ -446,7 +447,8 @@ void bta_gattc_cancel_open_ok(tBTA_GATTC_CLCB* p_clcb,
   bta_gattc_clcb_dealloc(p_clcb);
 }
 
-void bta_gattc_cancel_open(tBTA_GATTC_CLCB* p_clcb, tBTA_GATTC_DATA* p_data) {
+void bta_gattc_cancel_open(tBTA_GATTC_CLCB* p_clcb,
+                           const tBTA_GATTC_DATA* p_data) {
   tBTA_GATTC cb_data;
 
   if (GATT_CancelConnect(p_clcb->p_rcb->client_if,
@@ -461,7 +463,7 @@ void bta_gattc_cancel_open(tBTA_GATTC_CLCB* p_clcb, tBTA_GATTC_DATA* p_data) {
 }
 
 /** receive connection callback from stack */
-void bta_gattc_conn(tBTA_GATTC_CLCB* p_clcb, tBTA_GATTC_DATA* p_data) {
+void bta_gattc_conn(tBTA_GATTC_CLCB* p_clcb, const tBTA_GATTC_DATA* p_data) {
   tGATT_IF gatt_if;
   VLOG(1) << __func__ << ": server cache state=" << +p_clcb->p_srcb->state;
 
@@ -521,7 +523,8 @@ void bta_gattc_conn(tBTA_GATTC_CLCB* p_clcb, tBTA_GATTC_DATA* p_data) {
 }
 
 /** close a  connection */
-void bta_gattc_close_fail(tBTA_GATTC_CLCB* p_clcb, tBTA_GATTC_DATA* p_data) {
+void bta_gattc_close_fail(tBTA_GATTC_CLCB* p_clcb,
+                          const tBTA_GATTC_DATA* p_data) {
   tBTA_GATTC cb_data;
 
   if (p_clcb->p_rcb->p_cback) {
@@ -539,7 +542,7 @@ void bta_gattc_close_fail(tBTA_GATTC_CLCB* p_clcb, tBTA_GATTC_DATA* p_data) {
 }
 
 /** close a GATTC connection */
-void bta_gattc_close(tBTA_GATTC_CLCB* p_clcb, tBTA_GATTC_DATA* p_data) {
+void bta_gattc_close(tBTA_GATTC_CLCB* p_clcb, const tBTA_GATTC_DATA* p_data) {
   tBTA_GATTC_CBACK* p_cback = p_clcb->p_rcb->p_cback;
   tBTA_GATTC_RCB* p_clreg = p_clcb->p_rcb;
   tBTA_GATTC cb_data;
@@ -590,7 +593,8 @@ void bta_gattc_reset_discover_st(tBTA_GATTC_SERV* p_srcb, tGATT_STATUS status) {
 }
 
 /** close a GATTC connection while in discovery state */
-void bta_gattc_disc_close(tBTA_GATTC_CLCB* p_clcb, tBTA_GATTC_DATA* p_data) {
+void bta_gattc_disc_close(tBTA_GATTC_CLCB* p_clcb,
+                          const tBTA_GATTC_DATA* p_data) {
   VLOG(1) << __func__
           << ": Discovery cancel conn_id=" << loghex(p_clcb->bta_conn_id);
 
@@ -626,13 +630,13 @@ void bta_gattc_set_discover_st(tBTA_GATTC_SERV* p_srcb) {
  * set status to be discovery cancel for current discovery.
  */
 void bta_gattc_restart_discover(tBTA_GATTC_CLCB* p_clcb,
-                                UNUSED_ATTR tBTA_GATTC_DATA* p_data) {
+                                UNUSED_ATTR const tBTA_GATTC_DATA* p_data) {
   p_clcb->status = GATT_CANCEL;
   p_clcb->auto_update = BTA_GATTC_DISC_WAITING;
 }
 
 /** Configure MTU size on the GATT connection */
-void bta_gattc_cfg_mtu(tBTA_GATTC_CLCB* p_clcb, tBTA_GATTC_DATA* p_data) {
+void bta_gattc_cfg_mtu(tBTA_GATTC_CLCB* p_clcb, const tBTA_GATTC_DATA* p_data) {
   if (!bta_gattc_enqueue(p_clcb, p_data)) return;
 
   tGATT_STATUS status =
@@ -664,7 +668,7 @@ void bta_gattc_start_discover_internal(tBTA_GATTC_CLCB* p_clcb) {
 
 /** Start a discovery on server */
 void bta_gattc_start_discover(tBTA_GATTC_CLCB* p_clcb,
-                              UNUSED_ATTR tBTA_GATTC_DATA* p_data) {
+                              UNUSED_ATTR const tBTA_GATTC_DATA* p_data) {
   VLOG(1) << __func__ << ": conn_id:" << loghex(p_clcb->bta_conn_id)
           << " p_clcb->p_srcb->state:" << +p_clcb->p_srcb->state;
 
@@ -710,8 +714,8 @@ void bta_gattc_start_discover(tBTA_GATTC_CLCB* p_clcb,
 
 /** discovery on server is finished */
 void bta_gattc_disc_cmpl(tBTA_GATTC_CLCB* p_clcb,
-                         UNUSED_ATTR tBTA_GATTC_DATA* p_data) {
-  tBTA_GATTC_DATA* p_q_cmd = p_clcb->p_q_cmd;
+                         UNUSED_ATTR const tBTA_GATTC_DATA* p_data) {
+  const tBTA_GATTC_DATA* p_q_cmd = p_clcb->p_q_cmd;
 
   VLOG(1) << __func__ << ": conn_id=" << loghex(p_clcb->bta_conn_id);
 
@@ -761,7 +765,7 @@ void bta_gattc_disc_cmpl(tBTA_GATTC_CLCB* p_clcb,
 }
 
 /** Read an attribute */
-void bta_gattc_read(tBTA_GATTC_CLCB* p_clcb, tBTA_GATTC_DATA* p_data) {
+void bta_gattc_read(tBTA_GATTC_CLCB* p_clcb, const tBTA_GATTC_DATA* p_data) {
   if (!bta_gattc_enqueue(p_clcb, p_data)) return;
 
   tGATT_STATUS status;
@@ -793,7 +797,8 @@ void bta_gattc_read(tBTA_GATTC_CLCB* p_clcb, tBTA_GATTC_DATA* p_data) {
 }
 
 /** read multiple */
-void bta_gattc_read_multi(tBTA_GATTC_CLCB* p_clcb, tBTA_GATTC_DATA* p_data) {
+void bta_gattc_read_multi(tBTA_GATTC_CLCB* p_clcb,
+                          const tBTA_GATTC_DATA* p_data) {
   if (!bta_gattc_enqueue(p_clcb, p_data)) return;
 
   tGATT_READ_PARAM read_param;
@@ -817,7 +822,7 @@ void bta_gattc_read_multi(tBTA_GATTC_CLCB* p_clcb, tBTA_GATTC_DATA* p_data) {
 }
 
 /** Write an attribute */
-void bta_gattc_write(tBTA_GATTC_CLCB* p_clcb, tBTA_GATTC_DATA* p_data) {
+void bta_gattc_write(tBTA_GATTC_CLCB* p_clcb, const tBTA_GATTC_DATA* p_data) {
   if (!bta_gattc_enqueue(p_clcb, p_data)) return;
 
   tGATT_STATUS status = GATT_SUCCESS;
@@ -846,7 +851,7 @@ void bta_gattc_write(tBTA_GATTC_CLCB* p_clcb, tBTA_GATTC_DATA* p_data) {
 }
 
 /** send execute write */
-void bta_gattc_execute(tBTA_GATTC_CLCB* p_clcb, tBTA_GATTC_DATA* p_data) {
+void bta_gattc_execute(tBTA_GATTC_CLCB* p_clcb, const tBTA_GATTC_DATA* p_data) {
   if (!bta_gattc_enqueue(p_clcb, p_data)) return;
 
   tGATT_STATUS status =
@@ -861,7 +866,7 @@ void bta_gattc_execute(tBTA_GATTC_CLCB* p_clcb, tBTA_GATTC_DATA* p_data) {
 }
 
 /** send handle value confirmation */
-void bta_gattc_confirm(tBTA_GATTC_CLCB* p_clcb, tBTA_GATTC_DATA* p_data) {
+void bta_gattc_confirm(tBTA_GATTC_CLCB* p_clcb, const tBTA_GATTC_DATA* p_data) {
   uint16_t cid = p_data->api_confirm.cid;
 
   if (GATTC_SendHandleValueConfirm(p_data->api_confirm.hdr.layer_specific,
@@ -878,7 +883,7 @@ void bta_gattc_confirm(tBTA_GATTC_CLCB* p_clcb, tBTA_GATTC_DATA* p_data) {
 
 /** read complete */
 static void bta_gattc_read_cmpl(tBTA_GATTC_CLCB* p_clcb,
-                                tBTA_GATTC_OP_CMPL* p_data) {
+                                const tBTA_GATTC_OP_CMPL* p_data) {
   GATT_READ_OP_CB cb = p_clcb->p_q_cmd->api_read.read_cb;
   void* my_cb_data = p_clcb->p_q_cmd->api_read.read_cb_data;
 
@@ -899,7 +904,7 @@ static void bta_gattc_read_cmpl(tBTA_GATTC_CLCB* p_clcb,
 
 /** write complete */
 static void bta_gattc_write_cmpl(tBTA_GATTC_CLCB* p_clcb,
-                                 tBTA_GATTC_OP_CMPL* p_data) {
+                                 const tBTA_GATTC_OP_CMPL* p_data) {
   GATT_WRITE_OP_CB cb = p_clcb->p_q_cmd->api_write.write_cb;
   void* my_cb_data = p_clcb->p_q_cmd->api_write.write_cb_data;
 
@@ -913,7 +918,7 @@ static void bta_gattc_write_cmpl(tBTA_GATTC_CLCB* p_clcb,
 
 /** execute write complete */
 static void bta_gattc_exec_cmpl(tBTA_GATTC_CLCB* p_clcb,
-                                tBTA_GATTC_OP_CMPL* p_data) {
+                                const tBTA_GATTC_OP_CMPL* p_data) {
   tBTA_GATTC cb_data;
 
   osi_free_and_reset((void**)&p_clcb->p_q_cmd);
@@ -928,7 +933,7 @@ static void bta_gattc_exec_cmpl(tBTA_GATTC_CLCB* p_clcb,
 
 /** configure MTU operation complete */
 static void bta_gattc_cfg_mtu_cmpl(tBTA_GATTC_CLCB* p_clcb,
-                                   tBTA_GATTC_OP_CMPL* p_data) {
+                                   const tBTA_GATTC_OP_CMPL* p_data) {
   GATT_CONFIGURE_MTU_OP_CB cb = p_clcb->p_q_cmd->api_mtu.mtu_cb;
   void* my_cb_data = p_clcb->p_q_cmd->api_mtu.mtu_cb_data;
   tBTA_GATTC cb_data;
@@ -952,7 +957,7 @@ static void bta_gattc_cfg_mtu_cmpl(tBTA_GATTC_CLCB* p_clcb,
 }
 
 /** operation completed */
-void bta_gattc_op_cmpl(tBTA_GATTC_CLCB* p_clcb, tBTA_GATTC_DATA* p_data) {
+void bta_gattc_op_cmpl(tBTA_GATTC_CLCB* p_clcb, const tBTA_GATTC_DATA* p_data) {
   uint8_t op = (uint8_t)p_data->op_cmpl.op_code;
   uint8_t mapped_op = 0;
 
@@ -990,7 +995,8 @@ void bta_gattc_op_cmpl(tBTA_GATTC_CLCB* p_clcb, tBTA_GATTC_DATA* p_data) {
       p_clcb->p_srcb->srvc_hdl_chg && op != GATTC_OPTYPE_CONFIG) {
     VLOG(1) << "Discard all responses when service change indication is "
                "received.";
-    p_data->op_cmpl.status = GATT_ERROR;
+    // TODO Fix constness
+    const_cast<tBTA_GATTC_DATA*>(p_data)->op_cmpl.status = GATT_ERROR;
   }
 
   /* service handle change void the response, discard it */
@@ -1031,7 +1037,7 @@ void bta_gattc_op_cmpl(tBTA_GATTC_CLCB* p_clcb, tBTA_GATTC_DATA* p_data) {
 }
 
 /** start a search in the local server cache */
-void bta_gattc_search(tBTA_GATTC_CLCB* p_clcb, tBTA_GATTC_DATA* p_data) {
+void bta_gattc_search(tBTA_GATTC_CLCB* p_clcb, const tBTA_GATTC_DATA* p_data) {
   tGATT_STATUS status = GATT_INTERNAL_ERROR;
   tBTA_GATTC cb_data;
   VLOG(1) << __func__ << ": conn_id=" << loghex(p_clcb->bta_conn_id);
@@ -1049,13 +1055,13 @@ void bta_gattc_search(tBTA_GATTC_CLCB* p_clcb, tBTA_GATTC_DATA* p_data) {
 
 /** enqueue a command into control block, usually because discovery operation is
  * busy */
-void bta_gattc_q_cmd(tBTA_GATTC_CLCB* p_clcb, tBTA_GATTC_DATA* p_data) {
+void bta_gattc_q_cmd(tBTA_GATTC_CLCB* p_clcb, const tBTA_GATTC_DATA* p_data) {
   bta_gattc_enqueue(p_clcb, p_data);
 }
 
 /** report API call failure back to apps */
 void bta_gattc_fail(tBTA_GATTC_CLCB* p_clcb,
-                    UNUSED_ATTR tBTA_GATTC_DATA* p_data) {
+                    UNUSED_ATTR const tBTA_GATTC_DATA* p_data) {
   if (p_clcb->status == GATT_SUCCESS) {
     LOG(ERROR) << "operation not supported at current state " << +p_clcb->state;
   }
index e85d6de..9e4d443 100644 (file)
@@ -61,10 +61,10 @@ static void bta_gattc_explore_srvc_finished(uint16_t conn_id,
                                             tBTA_GATTC_SERV* p_srvc_cb);
 
 static void bta_gattc_read_db_hash_cmpl(tBTA_GATTC_CLCB* p_clcb,
-                                        tBTA_GATTC_OP_CMPL* p_data);
+                                        const tBTA_GATTC_OP_CMPL* p_data);
 
 static void bta_gattc_read_ext_prop_desc_cmpl(tBTA_GATTC_CLCB* p_clcb,
-                                              tBTA_GATTC_OP_CMPL* p_data);
+                                              const tBTA_GATTC_OP_CMPL* p_data);
 
 // define the max retry count for DATABASE_OUT_OF_SYNC
 #define BTA_GATTC_DISCOVER_RETRY_COUNT 2
@@ -367,7 +367,7 @@ static tGATT_STATUS bta_gattc_sdp_service_disc(uint16_t conn_id,
 
 /** operation completed */
 void bta_gattc_op_cmpl_during_discovery(tBTA_GATTC_CLCB* p_clcb,
-                                        tBTA_GATTC_DATA* p_data) {
+                                        const tBTA_GATTC_DATA* p_data) {
   // Currently, there are two cases needed to be handled.
   // 1. Read ext prop descriptor value after service discovery
   // 2. Read db hash before starting service discovery
@@ -643,7 +643,7 @@ bool bta_gattc_read_db_hash(tBTA_GATTC_CLCB* p_clcb) {
 
 /* handle response of reading database hash */
 static void bta_gattc_read_db_hash_cmpl(tBTA_GATTC_CLCB* p_clcb,
-                                        tBTA_GATTC_OP_CMPL* p_data) {
+                                        const tBTA_GATTC_OP_CMPL* p_data) {
   uint8_t op = (uint8_t)p_data->op_code;
   if (op != GATTC_OPTYPE_READ) {
     VLOG(1) << __func__ << ": op = " << +p_data->hdr.layer_specific;
@@ -680,8 +680,8 @@ static void bta_gattc_read_db_hash_cmpl(tBTA_GATTC_CLCB* p_clcb,
 }
 
 /* handle response of reading extended properties descriptor */
-static void bta_gattc_read_ext_prop_desc_cmpl(tBTA_GATTC_CLCB* p_clcb,
-                                              tBTA_GATTC_OP_CMPL* p_data) {
+static void bta_gattc_read_ext_prop_desc_cmpl(
+    tBTA_GATTC_CLCB* p_clcb, const tBTA_GATTC_OP_CMPL* p_data) {
   uint8_t op = (uint8_t)p_data->op_code;
   if (op != GATTC_OPTYPE_READ) {
     VLOG(1) << __func__ << ": op = " << +p_data->hdr.layer_specific;
index de76722..108b0e8 100644 (file)
@@ -250,7 +250,7 @@ typedef struct {
   tBT_TRANSPORT transport;  /* channel transport */
   tBTA_GATTC_RCB* p_rcb;    /* pointer to the registration CB */
   tBTA_GATTC_SERV* p_srcb;  /* server cache CB */
-  tBTA_GATTC_DATA* p_q_cmd; /* command in queue waiting for execution */
+  const tBTA_GATTC_DATA* p_q_cmd; /* command in queue waiting for execution */
 
 // request during discover state
 #define BTA_GATTC_DISCOVER_REQ_NONE 0
@@ -321,71 +321,84 @@ extern tBTA_GATTC_CB bta_gattc_cb;
  ****************************************************************************/
 extern bool bta_gattc_hdl_event(BT_HDR_RIGID* p_msg);
 extern bool bta_gattc_sm_execute(tBTA_GATTC_CLCB* p_clcb, uint16_t event,
-                                 tBTA_GATTC_DATA* p_data);
+                                 const tBTA_GATTC_DATA* p_data);
 
 /* function processed outside SM */
 extern void bta_gattc_disable();
 extern void bta_gattc_register(const bluetooth::Uuid& app_uuid,
                                tBTA_GATTC_CBACK* p_data,
                                BtaAppRegisterCallback cb, bool eatt_support);
-extern void bta_gattc_process_api_open(tBTA_GATTC_DATA* p_msg);
-extern void bta_gattc_process_api_open_cancel(tBTA_GATTC_DATA* p_msg);
+extern void bta_gattc_process_api_open(const tBTA_GATTC_DATA* p_msg);
+extern void bta_gattc_process_api_open_cancel(const tBTA_GATTC_DATA* p_msg);
 extern void bta_gattc_deregister(tBTA_GATTC_RCB* p_clreg);
 
 /* function within state machine */
-extern void bta_gattc_open(tBTA_GATTC_CLCB* p_clcb, tBTA_GATTC_DATA* p_data);
+extern void bta_gattc_open(tBTA_GATTC_CLCB* p_clcb,
+                           const tBTA_GATTC_DATA* p_data);
 extern void bta_gattc_open_fail(tBTA_GATTC_CLCB* p_clcb,
-                                tBTA_GATTC_DATA* p_data);
+                                const tBTA_GATTC_DATA* p_data);
 extern void bta_gattc_open_error(tBTA_GATTC_CLCB* p_clcb,
-                                 tBTA_GATTC_DATA* p_data);
+                                 const tBTA_GATTC_DATA* p_data);
 
 extern void bta_gattc_cancel_open(tBTA_GATTC_CLCB* p_clcb,
-                                  tBTA_GATTC_DATA* p_data);
+                                  const tBTA_GATTC_DATA* p_data);
 extern void bta_gattc_cancel_open_ok(tBTA_GATTC_CLCB* p_clcb,
-                                     tBTA_GATTC_DATA* p_data);
+                                     const tBTA_GATTC_DATA* p_data);
 extern void bta_gattc_cancel_open_error(tBTA_GATTC_CLCB* p_clcb,
-                                        tBTA_GATTC_DATA* p_data);
+                                        const tBTA_GATTC_DATA* p_data);
 
-extern void bta_gattc_conn(tBTA_GATTC_CLCB* p_clcb, tBTA_GATTC_DATA* p_data);
+extern void bta_gattc_conn(tBTA_GATTC_CLCB* p_clcb,
+                           const tBTA_GATTC_DATA* p_data);
 
-extern void bta_gattc_close(tBTA_GATTC_CLCB* p_clcb, tBTA_GATTC_DATA* p_data);
+extern void bta_gattc_close(tBTA_GATTC_CLCB* p_clcb,
+                            const tBTA_GATTC_DATA* p_data);
 extern void bta_gattc_close_fail(tBTA_GATTC_CLCB* p_clcb,
-                                 tBTA_GATTC_DATA* p_data);
+                                 const tBTA_GATTC_DATA* p_data);
 extern void bta_gattc_disc_close(tBTA_GATTC_CLCB* p_clcb,
-                                 tBTA_GATTC_DATA* p_data);
+                                 const tBTA_GATTC_DATA* p_data);
 
 extern void bta_gattc_start_discover(tBTA_GATTC_CLCB* p_clcb,
-                                     tBTA_GATTC_DATA* p_data);
+                                     const tBTA_GATTC_DATA* p_data);
 extern void bta_gattc_start_discover_internal(tBTA_GATTC_CLCB* p_clcb);
 extern void bta_gattc_disc_cmpl(tBTA_GATTC_CLCB* p_clcb,
-                                tBTA_GATTC_DATA* p_data);
-extern void bta_gattc_read(tBTA_GATTC_CLCB* p_clcb, tBTA_GATTC_DATA* p_data);
-extern void bta_gattc_write(tBTA_GATTC_CLCB* p_clcb, tBTA_GATTC_DATA* p_data);
-extern void bta_gattc_op_cmpl(tBTA_GATTC_CLCB* p_clcb, tBTA_GATTC_DATA* p_data);
-extern void bta_gattc_q_cmd(tBTA_GATTC_CLCB* p_clcb, tBTA_GATTC_DATA* p_data);
-extern void bta_gattc_search(tBTA_GATTC_CLCB* p_clcb, tBTA_GATTC_DATA* p_data);
-extern void bta_gattc_fail(tBTA_GATTC_CLCB* p_clcb, tBTA_GATTC_DATA* p_data);
-extern void bta_gattc_confirm(tBTA_GATTC_CLCB* p_clcb, tBTA_GATTC_DATA* p_data);
-extern void bta_gattc_execute(tBTA_GATTC_CLCB* p_clcb, tBTA_GATTC_DATA* p_data);
+                                const tBTA_GATTC_DATA* p_data);
+extern void bta_gattc_read(tBTA_GATTC_CLCB* p_clcb,
+                           const tBTA_GATTC_DATA* p_data);
+extern void bta_gattc_write(tBTA_GATTC_CLCB* p_clcb,
+                            const tBTA_GATTC_DATA* p_data);
+extern void bta_gattc_op_cmpl(tBTA_GATTC_CLCB* p_clcb,
+                              const tBTA_GATTC_DATA* p_data);
+extern void bta_gattc_q_cmd(tBTA_GATTC_CLCB* p_clcb,
+                            const tBTA_GATTC_DATA* p_data);
+extern void bta_gattc_search(tBTA_GATTC_CLCB* p_clcb,
+                             const tBTA_GATTC_DATA* p_data);
+extern void bta_gattc_fail(tBTA_GATTC_CLCB* p_clcb,
+                           const tBTA_GATTC_DATA* p_data);
+extern void bta_gattc_confirm(tBTA_GATTC_CLCB* p_clcb,
+                              const tBTA_GATTC_DATA* p_data);
+extern void bta_gattc_execute(tBTA_GATTC_CLCB* p_clcb,
+                              const tBTA_GATTC_DATA* p_data);
 extern void bta_gattc_read_multi(tBTA_GATTC_CLCB* p_clcb,
-                                 tBTA_GATTC_DATA* p_data);
-extern void bta_gattc_ci_open(tBTA_GATTC_CLCB* p_clcb, tBTA_GATTC_DATA* p_data);
+                                 const tBTA_GATTC_DATA* p_data);
+extern void bta_gattc_ci_open(tBTA_GATTC_CLCB* p_clcb,
+                              const tBTA_GATTC_DATA* p_data);
 extern void bta_gattc_ci_close(tBTA_GATTC_CLCB* p_clcb,
-                               tBTA_GATTC_DATA* p_data);
+                               const tBTA_GATTC_DATA* p_data);
 extern void bta_gattc_op_cmpl_during_discovery(tBTA_GATTC_CLCB* p_clcb,
-                                               tBTA_GATTC_DATA* p_data);
+                                               const tBTA_GATTC_DATA* p_data);
 extern void bta_gattc_restart_discover(tBTA_GATTC_CLCB* p_clcb,
-                                       tBTA_GATTC_DATA* p_msg);
-extern void bta_gattc_init_bk_conn(tBTA_GATTC_API_OPEN* p_data,
+                                       const tBTA_GATTC_DATA* p_msg);
+extern void bta_gattc_init_bk_conn(const tBTA_GATTC_API_OPEN* p_data,
                                    tBTA_GATTC_RCB* p_clreg);
-extern void bta_gattc_cancel_bk_conn(tBTA_GATTC_API_CANCEL_OPEN* p_data);
+extern void bta_gattc_cancel_bk_conn(const tBTA_GATTC_API_CANCEL_OPEN* p_data);
 extern void bta_gattc_send_open_cback(tBTA_GATTC_RCB* p_clreg,
                                       tGATT_STATUS status,
                                       const RawAddress& remote_bda,
                                       uint16_t conn_id, tBT_TRANSPORT transport,
                                       uint16_t mtu);
 extern void bta_gattc_process_api_refresh(const RawAddress& remote_bda);
-extern void bta_gattc_cfg_mtu(tBTA_GATTC_CLCB* p_clcb, tBTA_GATTC_DATA* p_data);
+extern void bta_gattc_cfg_mtu(tBTA_GATTC_CLCB* p_clcb,
+                              const tBTA_GATTC_DATA* p_data);
 extern void bta_gattc_listen(tBTA_GATTC_DATA* p_msg);
 extern void bta_gattc_broadcast(tBTA_GATTC_DATA* p_msg);
 
@@ -408,7 +421,8 @@ extern tBTA_GATTC_SERV* bta_gattc_find_scb_by_cid(uint16_t conn_id);
 extern tBTA_GATTC_CLCB* bta_gattc_find_int_conn_clcb(tBTA_GATTC_DATA* p_msg);
 extern tBTA_GATTC_CLCB* bta_gattc_find_int_disconn_clcb(tBTA_GATTC_DATA* p_msg);
 
-extern bool bta_gattc_enqueue(tBTA_GATTC_CLCB* p_clcb, tBTA_GATTC_DATA* p_data);
+extern bool bta_gattc_enqueue(tBTA_GATTC_CLCB* p_clcb,
+                              const tBTA_GATTC_DATA* p_data);
 
 extern bool bta_gattc_check_notif_registry(tBTA_GATTC_RCB* p_clreg,
                                            tBTA_GATTC_SERV* p_srcb,
index 0227ce3..b93881e 100644 (file)
@@ -65,7 +65,7 @@ enum {
 };
 /* type for action functions */
 typedef void (*tBTA_GATTC_ACTION)(tBTA_GATTC_CLCB* p_clcb,
-                                  tBTA_GATTC_DATA* p_data);
+                                  const tBTA_GATTC_DATA* p_data);
 
 /* action function list */
 const tBTA_GATTC_ACTION bta_gattc_action[] = {
@@ -296,7 +296,7 @@ static const char* gattc_state_code(tBTA_GATTC_STATE state_code);
  *
  ******************************************************************************/
 bool bta_gattc_sm_execute(tBTA_GATTC_CLCB* p_clcb, uint16_t event,
-                          tBTA_GATTC_DATA* p_data) {
+                          const tBTA_GATTC_DATA* p_data) {
   tBTA_GATTC_ST_TBL state_table;
   uint8_t action;
   int i;
@@ -386,8 +386,8 @@ bool bta_gattc_hdl_event(BT_HDR_RIGID* p_msg) {
         p_clcb = bta_gattc_find_clcb_by_conn_id(p_msg->layer_specific);
 
       if (p_clcb != NULL) {
-        rt =
-            bta_gattc_sm_execute(p_clcb, p_msg->event, (tBTA_GATTC_DATA*)p_msg);
+        rt = bta_gattc_sm_execute(p_clcb, p_msg->event,
+                                  (const tBTA_GATTC_DATA*)p_msg);
       } else {
         VLOG(1) << "Ignore unknown conn ID: " << +p_msg->layer_specific;
       }
index a291143..2da0739 100644 (file)
@@ -322,7 +322,7 @@ tBTA_GATTC_SERV* bta_gattc_srcb_alloc(const RawAddress& bda) {
  * Returns          success or failure.
  *
  ******************************************************************************/
-bool bta_gattc_enqueue(tBTA_GATTC_CLCB* p_clcb, tBTA_GATTC_DATA* p_data) {
+bool bta_gattc_enqueue(tBTA_GATTC_CLCB* p_clcb, const tBTA_GATTC_DATA* p_data) {
   if (p_clcb->p_q_cmd == NULL) {
     p_clcb->p_q_cmd = p_data;
     return true;
index 8e0552a..a95ae46 100644 (file)
@@ -260,3 +260,36 @@ TEST_F(BtaGattTest, bta_gattc_op_cmpl_execute) {
   ASSERT_EQ(BTA_GATTC_EXEC_EVT, param::bta_gattc_event_complete_callback.event);
   ASSERT_EQ(1, mock_function_count_map["osi_free_and_reset"]);
 }
+
+TEST_F(BtaGattTest, bta_gattc_op_cmpl_read_interrupted) {
+  command_queue = {
+      .api_read =  // tBTA_GATTC_API_READ
+      {
+          .hdr =
+              {
+                  .event = BTA_GATTC_API_READ_EVT,
+              },
+          .handle = 123,
+          .read_cb = bta_gatt_read_complete_callback,
+          .read_cb_data = static_cast<void*>(this),
+      },
+  };
+
+  client_channel_control_block.p_q_cmd = &command_queue;
+
+  // Create interrupt condition
+  client_channel_control_block.auto_update = BTA_GATTC_DISC_WAITING;
+  client_channel_control_block.p_srcb->srvc_hdl_chg = 1;
+
+  tBTA_GATTC_DATA data = {
+      .op_cmpl =
+          {
+              .op_code = GATTC_OPTYPE_READ,
+              .status = GATT_OUT_OF_RANGE,
+              .p_cmpl = &gatt_cl_complete,
+          },
+  };
+
+  bta_gattc_op_cmpl(&client_channel_control_block, &data);
+  ASSERT_EQ(GATT_ERROR, param::bta_gatt_read_complete_callback.status);
+}