Lines Matching refs:p_tcb

70 static void gatt_send_conn_cback(tGATT_TCB* p_tcb);
194 bool gatt_connect(const RawAddress& rem_bda, tGATT_TCB* p_tcb, in gatt_connect() argument
198 if (gatt_get_ch_state(p_tcb) != GATT_CH_OPEN) in gatt_connect()
199 gatt_set_ch_state(p_tcb, GATT_CH_CONN); in gatt_connect()
202 p_tcb->att_lcid = L2CAP_ATT_CID; in gatt_connect()
205 p_tcb->att_lcid = L2CA_ConnectReq(BT_PSM_ATT, rem_bda); in gatt_connect()
206 if (p_tcb->att_lcid != 0) gatt_ret = true; in gatt_connect()
224 bool gatt_disconnect(tGATT_TCB* p_tcb) { in gatt_disconnect() argument
230 if (p_tcb != NULL) { in gatt_disconnect()
232 ch_state = gatt_get_ch_state(p_tcb); in gatt_disconnect()
234 if (p_tcb->att_lcid == L2CAP_ATT_CID) { in gatt_disconnect()
237 ret = L2CA_RemoveFixedChnl(L2CAP_ATT_CID, p_tcb->peer_bda); in gatt_disconnect()
239 ret = L2CA_CancelBleConnectReq(p_tcb->peer_bda); in gatt_disconnect()
240 if (!ret) gatt_set_ch_state(p_tcb, GATT_CH_CLOSE); in gatt_disconnect()
242 gatt_set_ch_state(p_tcb, GATT_CH_CLOSING); in gatt_disconnect()
245 ret = L2CA_DisconnectReq(p_tcb->att_lcid); in gatt_disconnect()
267 bool gatt_update_app_hold_link_status(tGATT_IF gatt_if, tGATT_TCB* p_tcb, in gatt_update_app_hold_link_status() argument
269 auto& holders = p_tcb->app_hold_link; in gatt_update_app_hold_link_status()
303 void gatt_update_app_use_link_flag(tGATT_IF gatt_if, tGATT_TCB* p_tcb, in gatt_update_app_use_link_flag() argument
308 if (!p_tcb) return; in gatt_update_app_use_link_flag()
312 if (!gatt_update_app_hold_link_status(gatt_if, p_tcb, is_add)) return; in gatt_update_app_use_link_flag()
315 p_tcb->att_lcid != in gatt_update_app_use_link_flag()
317 (BTM_GetHCIConnHandle(p_tcb->peer_bda, p_tcb->transport) == in gatt_update_app_use_link_flag()
325 GATT_SetIdleTimeout(p_tcb->peer_bda, GATT_LINK_NO_IDLE_TIMEOUT, in gatt_update_app_use_link_flag()
326 p_tcb->transport); in gatt_update_app_use_link_flag()
328 if (p_tcb->app_hold_link.empty()) { in gatt_update_app_use_link_flag()
334 GATT_SetIdleTimeout(p_tcb->peer_bda, GATT_LINK_IDLE_TIMEOUT_WHEN_NO_APP, in gatt_update_app_use_link_flag()
335 p_tcb->transport); in gatt_update_app_use_link_flag()
353 tGATT_TCB* p_tcb; in gatt_act_connect() local
356 p_tcb = gatt_find_tcb_by_addr(bd_addr, transport); in gatt_act_connect()
357 if (p_tcb != NULL) { in gatt_act_connect()
359 st = gatt_get_ch_state(p_tcb); in gatt_act_connect()
362 if (st == GATT_CH_OPEN && p_tcb->app_hold_link.empty() && in gatt_act_connect()
364 if (!gatt_connect(bd_addr, p_tcb, transport, initiating_phys)) in gatt_act_connect()
371 p_tcb = gatt_allocate_tcb_by_bdaddr(bd_addr, transport); in gatt_act_connect()
372 if (p_tcb != NULL) { in gatt_act_connect()
373 if (!gatt_connect(bd_addr, p_tcb, transport, initiating_phys)) { in gatt_act_connect()
375 fixed_queue_free(p_tcb->pending_ind_q, NULL); in gatt_act_connect()
376 *p_tcb = tGATT_TCB(); in gatt_act_connect()
387 gatt_update_app_use_link_flag(p_reg->gatt_if, p_tcb, true, false); in gatt_act_connect()
408 tGATT_TCB* p_tcb = gatt_find_tcb_by_addr(bd_addr, transport); in gatt_le_connect_cback() local
428 if (p_tcb) { in gatt_le_connect_cback()
430 if (gatt_get_ch_state(p_tcb) == GATT_CH_CONN) { in gatt_le_connect_cback()
432 gatt_set_ch_state(p_tcb, GATT_CH_OPEN); in gatt_le_connect_cback()
433 p_tcb->payload_size = GATT_DEF_BLE_MTU_SIZE; in gatt_le_connect_cback()
435 gatt_send_conn_cback(p_tcb); in gatt_le_connect_cback()
442 p_tcb = gatt_allocate_tcb_by_bdaddr(bd_addr, BT_TRANSPORT_LE); in gatt_le_connect_cback()
443 if (p_tcb != NULL) { in gatt_le_connect_cback()
444 p_tcb->att_lcid = L2CAP_ATT_CID; in gatt_le_connect_cback()
446 gatt_set_ch_state(p_tcb, GATT_CH_OPEN); in gatt_le_connect_cback()
448 p_tcb->payload_size = GATT_DEF_BLE_MTU_SIZE; in gatt_le_connect_cback()
450 gatt_send_conn_cback(p_tcb); in gatt_le_connect_cback()
474 static void gatt_channel_congestion(tGATT_TCB* p_tcb, bool congested) { in gatt_channel_congestion() argument
480 if (p_tcb != NULL && !congested) { in gatt_channel_congestion()
481 gatt_cl_send_next_cmd_inq(*p_tcb); in gatt_channel_congestion()
487 conn_id = GATT_CREATE_CONN_ID(p_tcb->tcb_idx, p_reg->gatt_if); in gatt_channel_congestion()
502 tGATT_TCB* p_tcb = in gatt_notify_phy_updated() local
504 if (p_tcb == NULL) return; in gatt_notify_phy_updated()
509 uint16_t conn_id = GATT_CREATE_CONN_ID(p_tcb->tcb_idx, p_reg->gatt_if); in gatt_notify_phy_updated()
524 tGATT_TCB* p_tcb = in gatt_notify_conn_update() local
526 if (p_tcb == NULL) return; in gatt_notify_conn_update()
531 uint16_t conn_id = GATT_CREATE_CONN_ID(p_tcb->tcb_idx, p_reg->gatt_if); in gatt_notify_conn_update()
549 tGATT_TCB* p_tcb = gatt_find_tcb_by_addr(remote_bda, BT_TRANSPORT_LE); in gatt_le_cong_cback() local
552 if (p_tcb != NULL) { in gatt_le_cong_cback()
553 gatt_channel_congestion(p_tcb, congested); in gatt_le_cong_cback()
575 tGATT_TCB* p_tcb; in gatt_le_data_ind() local
578 if ((p_tcb = gatt_find_tcb_by_addr(bd_addr, BT_TRANSPORT_LE)) != NULL) { in gatt_le_data_ind()
579 if (gatt_get_ch_state(p_tcb) < GATT_CH_OPEN) { in gatt_le_data_ind()
581 << +gatt_get_ch_state(p_tcb); in gatt_le_data_ind()
583 gatt_data_process(*p_tcb, p_buf); in gatt_le_data_ind()
606 tGATT_TCB* p_tcb = gatt_find_tcb_by_addr(bd_addr, BT_TRANSPORT_BR_EDR); in gatt_l2cif_connect_ind_cback() local
610 if (p_tcb == NULL) { in gatt_l2cif_connect_ind_cback()
612 p_tcb = gatt_allocate_tcb_by_bdaddr(bd_addr, BT_TRANSPORT_BR_EDR); in gatt_l2cif_connect_ind_cback()
613 if (p_tcb == NULL) { in gatt_l2cif_connect_ind_cback()
617 p_tcb->att_lcid = lcid; in gatt_l2cif_connect_ind_cback()
630 gatt_set_ch_state(p_tcb, GATT_CH_CFG); in gatt_l2cif_connect_ind_cback()
652 tGATT_TCB* p_tcb; in gatt_l2cif_connect_cfm_cback() local
656 p_tcb = gatt_find_tcb_by_cid(lcid); in gatt_l2cif_connect_cfm_cback()
657 if (p_tcb != NULL) { in gatt_l2cif_connect_cfm_cback()
660 gatt_get_ch_state(p_tcb), p_tcb->att_lcid); in gatt_l2cif_connect_cfm_cback()
663 if (gatt_get_ch_state(p_tcb) == GATT_CH_CONN) { in gatt_l2cif_connect_cfm_cback()
667 gatt_set_ch_state(p_tcb, GATT_CH_CFG); in gatt_l2cif_connect_cfm_cback()
677 gatt_cleanup_upon_disc(p_tcb->peer_bda, result, GATT_TRANSPORT_BR_EDR); in gatt_l2cif_connect_cfm_cback()
701 tGATT_TCB* p_tcb; in gatt_l2cif_config_cfm_cback() local
705 p_tcb = gatt_find_tcb_by_cid(lcid); in gatt_l2cif_config_cfm_cback()
706 if (p_tcb != NULL) { in gatt_l2cif_config_cfm_cback()
708 if (gatt_get_ch_state(p_tcb) == GATT_CH_CFG) { in gatt_l2cif_config_cfm_cback()
712 p_tcb->ch_flags |= GATT_L2C_CFG_CFM_DONE; in gatt_l2cif_config_cfm_cback()
715 if (p_tcb->ch_flags & GATT_L2C_CFG_IND_DONE) { in gatt_l2cif_config_cfm_cback()
716 gatt_set_ch_state(p_tcb, GATT_CH_OPEN); in gatt_l2cif_config_cfm_cback()
718 p_srv_chg_clt = gatt_is_bda_in_the_srv_chg_clt_list(p_tcb->peer_bda); in gatt_l2cif_config_cfm_cback()
722 if (btm_sec_is_a_bonded_dev(p_tcb->peer_bda)) in gatt_l2cif_config_cfm_cback()
723 gatt_add_a_bonded_dev_for_srv_chg(p_tcb->peer_bda); in gatt_l2cif_config_cfm_cback()
727 gatt_send_conn_cback(p_tcb); in gatt_l2cif_config_cfm_cback()
750 tGATT_TCB* p_tcb; in gatt_l2cif_config_ind_cback() local
753 p_tcb = gatt_find_tcb_by_cid(lcid); in gatt_l2cif_config_ind_cback()
754 if (p_tcb != NULL) { in gatt_l2cif_config_ind_cback()
758 p_tcb->payload_size = p_cfg->mtu; in gatt_l2cif_config_ind_cback()
760 p_tcb->payload_size = L2CAP_DEFAULT_MTU; in gatt_l2cif_config_ind_cback()
768 if ((p_tcb->ch_flags & GATT_L2C_CFG_IND_DONE) == 0) { in gatt_l2cif_config_ind_cback()
770 p_tcb->ch_flags |= GATT_L2C_CFG_IND_DONE; in gatt_l2cif_config_ind_cback()
773 if (p_tcb->ch_flags & GATT_L2C_CFG_CFM_DONE) { in gatt_l2cif_config_ind_cback()
774 gatt_set_ch_state(p_tcb, GATT_CH_OPEN); in gatt_l2cif_config_ind_cback()
775 p_srv_chg_clt = gatt_is_bda_in_the_srv_chg_clt_list(p_tcb->peer_bda); in gatt_l2cif_config_ind_cback()
779 if (btm_sec_is_a_bonded_dev(p_tcb->peer_bda)) in gatt_l2cif_config_ind_cback()
780 gatt_add_a_bonded_dev_for_srv_chg(p_tcb->peer_bda); in gatt_l2cif_config_ind_cback()
784 gatt_send_conn_cback(p_tcb); in gatt_l2cif_config_ind_cback()
801 tGATT_TCB* p_tcb; in gatt_l2cif_disconnect_ind_cback() local
805 p_tcb = gatt_find_tcb_by_cid(lcid); in gatt_l2cif_disconnect_ind_cback()
806 if (p_tcb != NULL) { in gatt_l2cif_disconnect_ind_cback()
811 if (gatt_is_bda_in_the_srv_chg_clt_list(p_tcb->peer_bda) == NULL) { in gatt_l2cif_disconnect_ind_cback()
812 if (btm_sec_is_a_bonded_dev(p_tcb->peer_bda)) in gatt_l2cif_disconnect_ind_cback()
813 gatt_add_a_bonded_dev_for_srv_chg(p_tcb->peer_bda); in gatt_l2cif_disconnect_ind_cback()
817 reason = L2CA_GetDisconnectReason(p_tcb->peer_bda, p_tcb->transport); in gatt_l2cif_disconnect_ind_cback()
821 gatt_cleanup_upon_disc(p_tcb->peer_bda, reason, GATT_TRANSPORT_BR_EDR); in gatt_l2cif_disconnect_ind_cback()
837 tGATT_TCB* p_tcb; in gatt_l2cif_disconnect_cfm_cback() local
841 p_tcb = gatt_find_tcb_by_cid(lcid); in gatt_l2cif_disconnect_cfm_cback()
842 if (p_tcb != NULL) { in gatt_l2cif_disconnect_cfm_cback()
844 if (gatt_is_bda_in_the_srv_chg_clt_list(p_tcb->peer_bda) == NULL) { in gatt_l2cif_disconnect_cfm_cback()
845 if (btm_sec_is_a_bonded_dev(p_tcb->peer_bda)) in gatt_l2cif_disconnect_cfm_cback()
846 gatt_add_a_bonded_dev_for_srv_chg(p_tcb->peer_bda); in gatt_l2cif_disconnect_cfm_cback()
852 reason = L2CA_GetDisconnectReason(p_tcb->peer_bda, p_tcb->transport); in gatt_l2cif_disconnect_cfm_cback()
855 gatt_cleanup_upon_disc(p_tcb->peer_bda, reason, GATT_TRANSPORT_BR_EDR); in gatt_l2cif_disconnect_cfm_cback()
870 tGATT_TCB* p_tcb; in gatt_l2cif_data_ind_cback() local
873 if ((p_tcb = gatt_find_tcb_by_cid(lcid)) != NULL && in gatt_l2cif_data_ind_cback()
874 gatt_get_ch_state(p_tcb) == GATT_CH_OPEN) { in gatt_l2cif_data_ind_cback()
876 gatt_data_process(*p_tcb, p_buf); in gatt_l2cif_data_ind_cback()
892 tGATT_TCB* p_tcb = gatt_find_tcb_by_cid(lcid); in gatt_l2cif_congest_cback() local
894 if (p_tcb != NULL) { in gatt_l2cif_congest_cback()
895 gatt_channel_congestion(p_tcb, congested); in gatt_l2cif_congest_cback()
909 static void gatt_send_conn_cback(tGATT_TCB* p_tcb) { in gatt_send_conn_cback() argument
914 tGATT_BG_CONN_DEV* p_bg_dev = gatt_find_bg_dev(p_tcb->peer_bda); in gatt_send_conn_cback()
920 gatt_update_app_use_link_flag(p_reg->gatt_if, p_tcb, true, true); in gatt_send_conn_cback()
923 conn_id = GATT_CREATE_CONN_ID(p_tcb->tcb_idx, p_reg->gatt_if); in gatt_send_conn_cback()
924 (*p_reg->app_cb.p_conn_cb)(p_reg->gatt_if, p_tcb->peer_bda, conn_id, in gatt_send_conn_cback()
925 true, 0, p_tcb->transport); in gatt_send_conn_cback()
930 if (!p_tcb->app_hold_link.empty() && p_tcb->att_lcid == L2CAP_ATT_CID) { in gatt_send_conn_cback()
933 GATT_SetIdleTimeout(p_tcb->peer_bda, GATT_LINK_NO_IDLE_TIMEOUT, in gatt_send_conn_cback()
934 p_tcb->transport); in gatt_send_conn_cback()
1119 tGATT_TCB* p_tcb; in gatt_proc_srv_chg() local
1129 p_tcb = &gatt_cb.tcb[found_idx]; in gatt_proc_srv_chg()
1133 if (gatt_is_srv_chg_ind_pending(p_tcb)) { in gatt_proc_srv_chg()
1165 void gatt_set_ch_state(tGATT_TCB* p_tcb, tGATT_CH_STATE ch_state) { in gatt_set_ch_state() argument
1166 if (p_tcb) { in gatt_set_ch_state()
1167 VLOG(1) << __func__ << ": old=" << +p_tcb->ch_state << " new=" << ch_state; in gatt_set_ch_state()
1168 p_tcb->ch_state = ch_state; in gatt_set_ch_state()
1181 tGATT_CH_STATE gatt_get_ch_state(tGATT_TCB* p_tcb) { in gatt_get_ch_state() argument
1183 if (p_tcb) { in gatt_get_ch_state()
1184 VLOG(1) << "gatt_get_ch_state: ch_state=" << +p_tcb->ch_state; in gatt_get_ch_state()
1185 ch_state = p_tcb->ch_state; in gatt_get_ch_state()