}
/** 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);
}
/** 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;
}
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;
}
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,
}
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 << ")";
}
/** 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 */
}
/** 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,
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;
}
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) {
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,
}
/** 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;
}
/** 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) {
}
/** 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;
}
/** 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);
* 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 =
/** 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;
/** 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);
}
/** 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;
}
/** 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;
}
/** 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;
}
/** 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 =
}
/** 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,
/** 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;
/** 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;
/** 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);
/** 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;
}
/** 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;
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 */
}
/** 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);
/** 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;
}
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
/** 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
/* 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;
}
/* 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;
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
****************************************************************************/
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);
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,
};
/* 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[] = {
*
******************************************************************************/
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;
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;
}
* 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;
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);
+}