Home | History | Annotate | Download | only in gatt

Lines Matching refs:p_tcb

60 static void gatt_send_conn_cback (tGATT_TCB *p_tcb);
172 BOOLEAN gatt_connect (BD_ADDR rem_bda, tGATT_TCB *p_tcb, tBT_TRANSPORT transport)
176 if (gatt_get_ch_state(p_tcb) != GATT_CH_OPEN)
177 gatt_set_ch_state(p_tcb, GATT_CH_CONN);
181 p_tcb->att_lcid = L2CAP_ATT_CID;
186 if ((p_tcb->att_lcid = L2CA_ConnectReq(BT_PSM_ATT, rem_bda)) != 0)
199 ** Parameter p_tcb: pointer to the TCB to disconnect.
205 BOOLEAN gatt_disconnect (tGATT_TCB *p_tcb)
211 if (p_tcb != NULL)
214 if ( (ch_state = gatt_get_ch_state(p_tcb)) != GATT_CH_CLOSING )
216 if (p_tcb->att_lcid == L2CAP_ATT_CID)
221 ret = L2CA_RemoveFixedChnl (L2CAP_ATT_CID, p_tcb->peer_bda);
225 gatt_set_ch_state(p_tcb, GATT_CH_CLOSING);
226 ret = L2CA_CancelBleConnectReq (p_tcb->peer_bda);
231 ret = L2CA_DisconnectReq(p_tcb->att_lcid);
252 void gatt_update_app_hold_link_status (tGATT_IF gatt_if, tGATT_TCB *p_tcb, BOOLEAN is_add)
257 if (p_tcb == NULL)
259 GATT_TRACE_ERROR("gatt_update_app_hold_link_status p_tcb=NULL");
266 if (p_tcb->app_hold_link[i] == gatt_if)
271 p_tcb->app_hold_link[i] = 0;
281 if (p_tcb->app_hold_link[i] == 0)
283 p_tcb->app_hold_link[i] = gatt_if;
304 void gatt_update_app_use_link_flag (tGATT_IF gatt_if, tGATT_TCB *p_tcb, BOOLEAN is_add, BOOLEAN check_acl_link)
309 gatt_update_app_hold_link_status(gatt_if, p_tcb, is_add);
312 p_tcb &&
313 p_tcb->att_lcid == L2CAP_ATT_CID && /* only update link idle timer for fixed channel */
314 (BTM_GetHCIConnHandle(p_tcb->peer_bda, p_tcb->transport) != GATT_INVALID_ACL_HANDLE))
320 GATT_SetIdleTimeout(p_tcb->peer_bda, GATT_LINK_NO_IDLE_TIMEOUT, p_tcb->transport);
324 if (!gatt_num_apps_hold_link(p_tcb))
329 GATT_SetIdleTimeout(p_tcb->peer_bda, GATT_LINK_IDLE_TIMEOUT_WHEN_NO_APP, p_tcb->transport);
348 tGATT_TCB *p_tcb;
351 if ((p_tcb = gatt_find_tcb_by_addr(bd_addr, transport)) != NULL)
354 st = gatt_get_ch_state(p_tcb);
357 if(st == GATT_CH_OPEN && gatt_num_apps_hold_link(p_tcb) == 0 &&
360 if (!gatt_connect(bd_addr, p_tcb, transport))
371 if ((p_tcb = gatt_allocate_tcb_by_bdaddr(bd_addr, transport)) != NULL)
373 if (!gatt_connect(bd_addr, p_tcb, transport))
376 memset(p_tcb, 0, sizeof(tGATT_TCB));
390 gatt_update_app_use_link_flag(p_reg->gatt_if, p_tcb, TRUE, FALSE);
409 tGATT_TCB *p_tcb = gatt_find_tcb_by_addr(bd_addr, transport);
434 if (p_tcb)
437 if ( gatt_get_ch_state(p_tcb) == GATT_CH_CONN)
440 gatt_set_ch_state(p_tcb, GATT_CH_OPEN);
441 p_tcb->payload_size = GATT_DEF_BLE_MTU_SIZE;
443 gatt_send_conn_cback(p_tcb);
452 if ((p_tcb = gatt_allocate_tcb_by_bdaddr(bd_addr, BT_TRANSPORT_LE)) != NULL)
454 p_tcb->att_lcid = L2CAP_ATT_CID;
456 gatt_set_ch_state(p_tcb, GATT_CH_OPEN);
458 p_tcb->payload_size = GATT_DEF_BLE_MTU_SIZE;
460 gatt_send_conn_cback (p_tcb);
489 static void gatt_channel_congestion(tGATT_TCB *p_tcb, BOOLEAN congested)
496 if (p_tcb != NULL && congested == FALSE)
498 gatt_cl_send_next_cmd_inq(p_tcb);
507 conn_id = GATT_CREATE_CONN_ID(p_tcb->tcb_idx, p_reg->gatt_if);
526 tGATT_TCB *p_tcb = gatt_find_tcb_by_addr(remote_bda, BT_TRANSPORT_LE);
529 if (p_tcb != NULL)
531 gatt_channel_congestion(p_tcb, congested);
552 tGATT_TCB *p_tcb;
555 if ((p_tcb = gatt_find_tcb_by_addr (bd_addr, BT_TRANSPORT_LE)) != NULL &&
556 gatt_get_ch_state(p_tcb) >= GATT_CH_OPEN)
558 gatt_data_process(p_tcb, p_buf);
564 if (p_tcb != NULL)
567 gatt_get_ch_state(p_tcb));
588 tGATT_TCB *p_tcb = gatt_find_tcb_by_addr(bd_addr, BT_TRANSPORT_BR_EDR);
593 if (p_tcb == NULL)
596 if ((p_tcb = gatt_allocate_tcb_by_bdaddr(bd_addr, BT_TRANSPORT_BR_EDR)) == NULL)
602 p_tcb->att_lcid = lcid;
617 gatt_set_ch_state(p_tcb, GATT_CH_CFG);
640 tGATT_TCB *p_tcb;
644 if ((p_tcb = gatt_find_tcb_by_cid(lcid)) != NULL)
646 GATT_TRACE_DEBUG("gatt_l2c_connect_cfm_cback result: %d ch_state: %d, lcid:0x%x", result, gatt_get_ch_state(p_tcb), p_tcb->att_lcid);
649 if (gatt_get_ch_state(p_tcb) == GATT_CH_CONN)
655 gatt_set_ch_state(p_tcb, GATT_CH_CFG);
666 gatt_cleanup_upon_disc(p_tcb->peer_bda, result, GATT_TRANSPORT_BR_EDR);
692 tGATT_TCB *p_tcb;
696 if ((p_tcb = gatt_find_tcb_by_cid(lcid)) != NULL)
699 if ( gatt_get_ch_state(p_tcb) == GATT_CH_CFG)
705 p_tcb->ch_flags |= GATT_L2C_CFG_CFM_DONE;
708 if (p_tcb->ch_flags & GATT_L2C_CFG_IND_DONE)
710 gatt_set_ch_state(p_tcb, GATT_CH_OPEN);
712 if ((p_srv_chg_clt = gatt_is_bda_in_the_srv_chg_clt_list(p_tcb->peer_bda)) != NULL)
718 if (btm_sec_is_a_bonded_dev(p_tcb->peer_bda))
719 gatt_add_a_bonded_dev_for_srv_chg(p_tcb->peer_bda);
723 gatt_send_conn_cback(p_tcb);
748 tGATT_TCB *p_tcb;
751 if ((p_tcb = gatt_find_tcb_by_cid(lcid)) != NULL)
756 p_tcb->payload_size = p_cfg->mtu;
758 p_tcb->payload_size = L2CAP_DEFAULT_MTU;
766 if ((p_tcb->ch_flags & GATT_L2C_CFG_IND_DONE) == 0)
769 p_tcb->ch_flags |= GATT_L2C_CFG_IND_DONE;
772 if (p_tcb->ch_flags & GATT_L2C_CFG_CFM_DONE)
774 gatt_set_ch_state(p_tcb, GATT_CH_OPEN);
775 if ((p_srv_chg_clt = gatt_is_bda_in_the_srv_chg_clt_list(p_tcb->peer_bda)) != NULL)
781 if (btm_sec_is_a_bonded_dev(p_tcb->peer_bda))
782 gatt_add_a_bonded_dev_for_srv_chg(p_tcb->peer_bda);
786 gatt_send_conn_cback(p_tcb);
804 tGATT_TCB *p_tcb;
808 if ((p_tcb = gatt_find_tcb_by_cid(lcid)) != NULL)
815 if (gatt_is_bda_in_the_srv_chg_clt_list(p_tcb->peer_bda) == NULL)
817 if (btm_sec_is_a_bonded_dev(p_tcb->peer_bda))
818 gatt_add_a_bonded_dev_for_srv_chg(p_tcb->peer_bda);
821 if ((reason = L2CA_GetDisconnectReason(p_tcb->peer_bda, p_tcb->transport)) == 0)
825 gatt_cleanup_upon_disc(p_tcb->peer_bda, reason, GATT_TRANSPORT_BR_EDR);
841 tGATT_TCB *p_tcb;
846 if ((p_tcb = gatt_find_tcb_by_cid(lcid)) != NULL)
849 if (gatt_is_bda_in_the_srv_chg_clt_list(p_tcb->peer_bda) == NULL)
851 if (btm_sec_is_a_bonded_dev(p_tcb->peer_bda))
852 gatt_add_a_bonded_dev_for_srv_chg(p_tcb->peer_bda);
857 if ((reason = L2CA_GetDisconnectReason(p_tcb->peer_bda, p_tcb->transport)) == 0)
860 gatt_cleanup_upon_disc(p_tcb->peer_bda, reason, GATT_TRANSPORT_BR_EDR);
876 tGATT_TCB *p_tcb;
879 if ((p_tcb = gatt_find_tcb_by_cid(lcid)) != NULL &&
880 gatt_get_ch_state(p_tcb) == GATT_CH_OPEN)
883 gatt_data_process(p_tcb, p_buf);
900 tGATT_TCB *p_tcb = gatt_find_tcb_by_cid(lcid);
902 if (p_tcb != NULL)
904 gatt_channel_congestion(p_tcb, congested);
918 static void gatt_send_conn_cback(tGATT_TCB *p_tcb)
925 p_bg_dev = gatt_find_bg_dev(p_tcb->peer_bda);
933 gatt_update_app_use_link_flag(p_reg->gatt_if, p_tcb, TRUE, TRUE);
937 conn_id = GATT_CREATE_CONN_ID(p_tcb->tcb_idx, p_reg->gatt_if);
938 (*p_reg->app_cb.p_conn_cb)(p_reg->gatt_if, p_tcb->peer_bda, conn_id,
939 TRUE, 0, p_tcb->transport);
945 if (gatt_num_apps_hold_link(p_tcb) && p_tcb->att_lcid == L2CAP_ATT_CID )
948 GATT_SetIdleTimeout(p_tcb->peer_bda, GATT_LINK_NO_IDLE_TIMEOUT, p_tcb->transport);
967 void gatt_data_process (tGATT_TCB *p_tcb, BT_HDR *p_buf)
986 gatt_verify_signature(p_tcb, p_buf);
992 gatt_server_handle_client_req (p_tcb, op_code, msg_len, p);
994 gatt_client_handle_server_rsp (p_tcb, op_code, msg_len, p);
1157 tGATT_TCB *p_tcb;
1168 p_tcb = &gatt_cb.tcb[found_idx];;
1169 srv_chg_ind_pending = gatt_is_srv_chg_ind_pending(p_tcb);
1193 void gatt_set_ch_state(tGATT_TCB *p_tcb, tGATT_CH_STATE ch_state)
1195 if (p_tcb)
1197 GATT_TRACE_DEBUG ("gatt_set_ch_state: old=%d new=%d", p_tcb->ch_state, ch_state);
1198 p_tcb->ch_state = ch_state;
1211 tGATT_CH_STATE gatt_get_ch_state(tGATT_TCB *p_tcb)
1214 if (p_tcb)
1216 GATT_TRACE_DEBUG ("gatt_get_ch_state: ch_state=%d", p_tcb->ch_state);
1217 ch_state = p_tcb->ch_state;