Lines Matching refs:tcb

60 uint32_t gatt_sr_enqueue_cmd(tGATT_TCB& tcb, uint16_t cid, uint8_t op_code,  in gatt_sr_enqueue_cmd()  argument
64 if (cid == tcb.att_lcid) { in gatt_sr_enqueue_cmd()
65 p_cmd = &tcb.sr_cmd; in gatt_sr_enqueue_cmd()
68 EattExtension::GetInstance()->FindEattChannelByCid(tcb.peer_bda, cid); in gatt_sr_enqueue_cmd()
70 log::warn("{}, cid 0x{:02x} already disconnected", tcb.peer_bda, cid); in gatt_sr_enqueue_cmd()
86 trans_id = ++tcb.trans_id; in gatt_sr_enqueue_cmd()
88 p_cmd->trans_id = ++tcb.trans_id; in gatt_sr_enqueue_cmd()
92 tcb.trans_id %= GATT_TRANS_ID_MAX; in gatt_sr_enqueue_cmd()
109 bool gatt_sr_cmd_empty(tGATT_TCB& tcb, uint16_t cid) { in gatt_sr_cmd_empty() argument
110 if (cid == tcb.att_lcid) return (tcb.sr_cmd.op_code == 0); in gatt_sr_cmd_empty()
113 EattExtension::GetInstance()->FindEattChannelByCid(tcb.peer_bda, cid); in gatt_sr_cmd_empty()
115 log::warn("{}, cid 0x{:02x} already disconnected", tcb.peer_bda, cid); in gatt_sr_cmd_empty()
131 void gatt_dequeue_sr_cmd(tGATT_TCB& tcb, uint16_t cid) { in gatt_dequeue_sr_cmd() argument
134 if (cid == tcb.att_lcid) { in gatt_dequeue_sr_cmd()
135 p_cmd = &tcb.sr_cmd; in gatt_dequeue_sr_cmd()
138 EattExtension::GetInstance()->FindEattChannelByCid(tcb.peer_bda, cid); in gatt_dequeue_sr_cmd()
140 log::warn("{}, cid 0x{:02x} already disconnected", tcb.peer_bda, cid); in gatt_dequeue_sr_cmd()
305 tGATT_STATUS gatt_sr_process_app_rsp(tGATT_TCB& tcb, tGATT_IF gatt_if, in gatt_sr_process_app_rsp() argument
310 uint16_t payload_size = gatt_tcb_get_payload_size(tcb, sr_res_p->cid); in gatt_sr_process_app_rsp()
314 gatt_sr_update_cback_cnt(tcb, sr_res_p->cid, gatt_if, false, false); in gatt_sr_process_app_rsp()
323 gatt_sr_update_prep_cnt(tcb, gatt_if, true, false); in gatt_sr_process_app_rsp()
326 gatt_sr_reset_cback_cnt(tcb, sr_res_p->cid); in gatt_sr_process_app_rsp()
330 if (gatt_sr_is_cback_cnt_zero(tcb) && status == GATT_SUCCESS) { in gatt_sr_process_app_rsp()
333 tcb, (uint8_t)(op_code + 1), (tGATT_SR_MSG*)p_msg, payload_size); in gatt_sr_process_app_rsp()
339 if (gatt_sr_is_cback_cnt_zero(tcb)) { in gatt_sr_process_app_rsp()
341 ret_code = attp_send_sr_msg(tcb, sr_res_p->cid, sr_res_p->p_rsp_msg); in gatt_sr_process_app_rsp()
344 ret_code = gatt_send_error_rsp(tcb, sr_res_p->cid, status, op_code, in gatt_sr_process_app_rsp()
348 gatt_dequeue_sr_cmd(tcb, sr_res_p->cid); in gatt_sr_process_app_rsp()
366 void gatt_process_exec_write_req(tGATT_TCB& tcb, uint16_t cid, uint8_t op_code, in gatt_process_exec_write_req() argument
379 gatt_send_error_rsp(tcb, cid, gatt_cb.err_status, gatt_cb.req_op_code, in gatt_process_exec_write_req()
388 gatt_send_error_rsp(tcb, cid, GATT_INVALID_PDU, GATT_REQ_EXEC_WRITE, 0, in gatt_process_exec_write_req()
399 if (!gatt_sr_is_prep_cnt_zero(tcb)) { in gatt_process_exec_write_req()
400 trans_id = gatt_sr_enqueue_cmd(tcb, cid, op_code, 0); in gatt_process_exec_write_req()
401 gatt_sr_copy_prep_cnt_to_cback_cnt(tcb); in gatt_process_exec_write_req()
404 if (tcb.prep_cnt[i]) { in gatt_process_exec_write_req()
406 conn_id = GATT_CREATE_CONN_ID(tcb.tcb_idx, gatt_if); in gatt_process_exec_write_req()
411 tcb.prep_cnt[i] = 0; in gatt_process_exec_write_req()
417 gatt_send_error_rsp(tcb, cid, GATT_ERROR, GATT_REQ_EXEC_WRITE, 0, false); in gatt_process_exec_write_req()
431 void gatt_process_read_multi_req(tGATT_TCB& tcb, uint16_t cid, uint8_t op_code, in gatt_process_read_multi_req() argument
442 tGATT_READ_MULTI* multi_req = gatt_sr_get_read_multi(tcb, cid); in gatt_process_read_multi_req()
444 log::error("Could not proceed request. {}, 0x{:02x}", tcb.peer_bda, cid); in gatt_process_read_multi_req()
449 gatt_sr_get_sec_info(tcb.peer_bda, tcb.transport, &sec_flag, &key_size); in gatt_process_read_multi_req()
459 gatt_send_error_rsp(tcb, cid, gatt_cb.err_status, gatt_cb.req_op_code, in gatt_process_read_multi_req()
495 trans_id = gatt_sr_enqueue_cmd(tcb, cid, op_code, multi_req->handles[0]); in gatt_process_read_multi_req()
497 tGATT_SR_CMD* sr_cmd_p = gatt_sr_get_cmd_by_cid(tcb, cid); in gatt_process_read_multi_req()
501 tcb.peer_bda, cid); in gatt_process_read_multi_req()
504 gatt_sr_reset_cback_cnt(tcb, in gatt_process_read_multi_req()
514 tcb, cid, it->p_db, op_code, handle, 0, p_msg->attr_value.value, in gatt_process_read_multi_req()
519 gatt_sr_process_app_rsp(tcb, it->gatt_if, trans_id, op_code, in gatt_process_read_multi_req()
532 gatt_send_error_rsp(tcb, cid, err, op_code, handle, false); in gatt_process_read_multi_req()
546 BT_HDR* p_msg, tGATT_TCB& tcb, uint16_t cid, uint8_t op_code, in gatt_build_primary_service_rsp() argument
553 uint16_t payload_size = gatt_tcb_get_payload_size(tcb, cid); in gatt_build_primary_service_rsp()
711 void gatts_process_primary_service_req(tGATT_TCB& tcb, uint16_t cid, in gatts_process_primary_service_req() argument
720 gatt_send_error_rsp(tcb, cid, reason, op_code, s_hdl, false); in gatts_process_primary_service_req()
726 gatt_send_error_rsp(tcb, cid, GATT_UNSUPPORT_GRP_TYPE, op_code, s_hdl, in gatts_process_primary_service_req()
733 gatt_send_error_rsp(tcb, cid, GATT_NOT_FOUND, op_code, s_hdl, false); in gatts_process_primary_service_req()
742 gatt_send_error_rsp(tcb, cid, GATT_INVALID_PDU, op_code, s_hdl, false); in gatts_process_primary_service_req()
746 uint16_t payload_size = gatt_tcb_get_payload_size(tcb, cid); in gatts_process_primary_service_req()
751 reason = gatt_build_primary_service_rsp(p_msg, tcb, cid, op_code, s_hdl, in gatts_process_primary_service_req()
755 gatt_send_error_rsp(tcb, cid, reason, op_code, s_hdl, false); in gatts_process_primary_service_req()
759 attp_send_sr_msg(tcb, cid, p_msg); in gatts_process_primary_service_req()
772 static void gatts_process_find_info(tGATT_TCB& tcb, uint16_t cid, in gatts_process_find_info() argument
778 gatt_send_error_rsp(tcb, cid, reason, op_code, s_hdl, false); in gatts_process_find_info()
782 uint16_t payload_size = gatt_tcb_get_payload_size(tcb, cid); in gatts_process_find_info()
811 gatt_send_error_rsp(tcb, cid, reason, op_code, s_hdl, false); in gatts_process_find_info()
813 attp_send_sr_msg(tcb, cid, p_msg); in gatts_process_find_info()
826 static void gatts_process_mtu_req(tGATT_TCB& tcb, uint16_t cid, uint16_t len, in gatts_process_mtu_req() argument
830 gatt_send_error_rsp(tcb, cid, GATT_REQ_NOT_SUPPORTED, GATT_REQ_MTU, 0, in gatts_process_mtu_req()
837 gatt_send_error_rsp(tcb, cid, GATT_INVALID_PDU, GATT_REQ_MTU, 0, false); in gatts_process_mtu_req()
848 tcb.payload_size = GATT_DEF_BLE_MTU_SIZE; in gatts_process_mtu_req()
850 tcb.payload_size = std::min(mtu, (uint16_t)(gatt_get_local_mtu())); in gatts_process_mtu_req()
857 tcb.peer_bda, tcb.payload_size); in gatts_process_mtu_req()
859 BTM_SetBleDataLength(tcb.peer_bda, tcb.payload_size + L2CAP_PKT_OVERHEAD); in gatts_process_mtu_req()
862 attp_build_sr_msg(tcb, GATT_RSP_MTU, &gatt_sr_msg, GATT_DEF_BLE_MTU_SIZE); in gatts_process_mtu_req()
863 attp_send_sr_msg(tcb, cid, p_buf); in gatts_process_mtu_req()
865 bluetooth::shim::arbiter::GetArbiter().OnIncomingMtuReq(tcb.tcb_idx, in gatts_process_mtu_req()
866 tcb.payload_size); in gatts_process_mtu_req()
869 gatts_data.mtu = tcb.payload_size; in gatts_process_mtu_req()
875 GATT_CREATE_CONN_ID(tcb.tcb_idx, gatt_cb.cl_rcb[i].gatt_if); in gatts_process_mtu_req()
896 static void gatts_process_read_by_type_req(tGATT_TCB& tcb, uint16_t cid, in gatts_process_read_by_type_req() argument
910 gatt_send_error_rsp(tcb, cid, gatt_cb.err_status, gatt_cb.req_op_code, in gatts_process_read_by_type_req()
918 gatt_send_error_rsp(tcb, cid, reason, op_code, s_hdl, false); in gatts_process_read_by_type_req()
922 uint16_t payload_size = gatt_tcb_get_payload_size(tcb, cid); in gatts_process_read_by_type_req()
938 gatt_sr_get_sec_info(tcb.peer_bda, tcb.transport, &sec_flag, &key_size); in gatts_process_read_by_type_req()
941 tcb, cid, el.p_db, op_code, p_msg, s_hdl, e_hdl, uuid, &buf_len, in gatts_process_read_by_type_req()
963 gatt_send_error_rsp(tcb, cid, reason, op_code, s_hdl, false); in gatts_process_read_by_type_req()
968 attp_send_sr_msg(tcb, cid, p_msg); in gatts_process_read_by_type_req()
974 static void gatts_process_write_req(tGATT_TCB& tcb, uint16_t cid, in gatts_process_write_req() argument
994 gatt_send_error_rsp(tcb, cid, GATT_INVALID_PDU, op_code, handle, false); in gatts_process_write_req()
1020 gatt_sr_get_sec_info(tcb.peer_bda, tcb.transport, &sec_flag, &key_size); in gatts_process_write_req()
1027 trans_id = gatt_sr_enqueue_cmd(tcb, cid, op_code, handle); in gatts_process_write_req()
1029 conn_id = GATT_CREATE_CONN_ID(tcb.tcb_idx, el.gatt_if); in gatts_process_write_req()
1057 gatt_send_error_rsp(tcb, cid, status, op_code, handle, false); in gatts_process_write_req()
1065 static void gatts_process_read_req(tGATT_TCB& tcb, uint16_t cid, in gatts_process_read_req() argument
1069 uint16_t payload_size = gatt_tcb_get_payload_size(tcb, cid); in gatts_process_read_req()
1077 gatt_send_error_rsp(tcb, cid, GATT_INVALID_PDU, op_code, 0, false); in gatts_process_read_req()
1092 gatt_sr_get_sec_info(tcb.peer_bda, tcb.transport, &sec_flag, &key_size); in gatts_process_read_req()
1096 tcb, cid, el.p_db, op_code, handle, offset, p, &value_len, in gatts_process_read_req()
1106 gatt_send_error_rsp(tcb, cid, reason, op_code, handle, false); in gatts_process_read_req()
1111 attp_send_sr_msg(tcb, cid, p_msg); in gatts_process_read_req()
1124 void gatts_process_attribute_req(tGATT_TCB& tcb, uint16_t cid, uint8_t op_code, in gatts_process_attribute_req() argument
1144 gatt_send_error_rsp(tcb, cid, gatt_cb.err_status, cid, gatt_cb.req_op_code, in gatts_process_attribute_req()
1159 gatts_process_read_req(tcb, cid, el, op_code, handle, len, p); in gatts_process_attribute_req()
1166 gatts_process_write_req(tcb, cid, el, handle, op_code, len, p, in gatts_process_attribute_req()
1183 gatt_send_error_rsp(tcb, cid, status, op_code, handle, false); in gatts_process_attribute_req()
1195 void gatts_proc_srv_chg_ind_ack(tGATT_TCB tcb) { in gatts_proc_srv_chg_ind_ack() argument
1201 p_buf = gatt_is_bda_in_the_srv_chg_clt_list(tcb.peer_bda); in gatts_proc_srv_chg_ind_ack()
1222 static void gatts_chk_pending_ind(tGATT_TCB& tcb) { in gatts_chk_pending_ind() argument
1226 (tGATT_VALUE*)fixed_queue_try_peek_first(tcb.pending_ind_q); in gatts_chk_pending_ind()
1233 osi_free(fixed_queue_try_remove_from_queue(tcb.pending_ind_q, p_buf)); in gatts_chk_pending_ind()
1247 static bool gatts_proc_ind_ack(tGATT_TCB& tcb, uint16_t ack_handle) { in gatts_proc_ind_ack() argument
1253 gatts_proc_srv_chg_ind_ack(tcb); in gatts_proc_ind_ack()
1259 gatt_sr_update_cl_status(tcb, /* chg_aware= */ true); in gatts_proc_ind_ack()
1262 gatts_chk_pending_ind(tcb); in gatts_proc_ind_ack()
1276 void gatts_process_value_conf(tGATT_TCB& tcb, uint16_t cid, uint8_t op_code) { in gatts_process_value_conf() argument
1279 if (!gatt_tcb_find_indicate_handle(tcb, cid, &handle)) { in gatts_process_value_conf()
1284 gatt_stop_conf_timer(tcb, cid); in gatts_process_value_conf()
1286 bool continue_processing = gatts_proc_ind_ack(tcb, handle); in gatts_process_value_conf()
1293 uint32_t trans_id = gatt_sr_enqueue_cmd(tcb, cid, op_code, handle); in gatts_process_value_conf()
1294 uint16_t conn_id = GATT_CREATE_CONN_ID(tcb.tcb_idx, el.gatt_if); in gatts_process_value_conf()
1302 static bool gatts_process_db_out_of_sync(tGATT_TCB& tcb, uint16_t cid, in gatts_process_db_out_of_sync() argument
1305 if (gatt_sr_is_cl_change_aware(tcb)) return false; in gatts_process_db_out_of_sync()
1364 gatt_send_error_rsp(tcb, cid, GATT_DATABASE_OUT_OF_SYNC, op_code, 0x0000, in gatts_process_db_out_of_sync()
1368 tcb.peer_bda, (uint16_t)op_code, should_rsp); in gatts_process_db_out_of_sync()
1369 gatt_sr_update_cl_status(tcb, /* chg_aware= */ should_rsp); in gatts_process_db_out_of_sync()
1376 void gatt_server_handle_client_req(tGATT_TCB& tcb, uint16_t cid, in gatt_server_handle_client_req() argument
1380 if (!gatt_sr_cmd_empty(tcb, cid) && op_code != GATT_HANDLE_VALUE_CONF) return; in gatt_server_handle_client_req()
1386 uint16_t payload_size = gatt_tcb_get_payload_size(tcb, cid); in gatt_server_handle_client_req()
1393 gatt_send_error_rsp(tcb, cid, GATT_INVALID_PDU, op_code, 0, false); in gatt_server_handle_client_req()
1398 if (gatts_process_db_out_of_sync(tcb, cid, op_code, len, p_data)) return; in gatt_server_handle_client_req()
1403 gatts_process_primary_service_req(tcb, cid, op_code, len, p_data); in gatt_server_handle_client_req()
1407 gatts_process_find_info(tcb, cid, op_code, len, p_data); in gatt_server_handle_client_req()
1413 gatts_process_read_by_type_req(tcb, cid, op_code, len, p_data); in gatt_server_handle_client_req()
1422 gatts_process_attribute_req(tcb, cid, op_code, len, p_data); in gatt_server_handle_client_req()
1426 gatts_process_value_conf(tcb, cid, op_code); in gatt_server_handle_client_req()
1430 gatts_process_mtu_req(tcb, cid, len, p_data); in gatt_server_handle_client_req()
1434 gatt_process_exec_write_req(tcb, cid, op_code, len, p_data); in gatt_server_handle_client_req()
1439 gatt_process_read_multi_req(tcb, cid, op_code, len, p_data); in gatt_server_handle_client_req()