/******************************************************************************* ** ** Function gatt_l2cif_disconnect_ind_cback ** ** Description This is the L2CAP disconnect indication callback function. ** ** ** Returns void ** *******************************************************************************/ void gatt_l2cif_disconnect_ind_cback(UINT16 lcid, BOOLEAN ack_needed) { tGATT_TCB *p_tcb; UINT16 reason; /* look up clcb for this channel */ if ((p_tcb = gatt_find_tcb_by_cid(lcid)) != NULL) { if (ack_needed) { /* send L2CAP disconnect response */ L2CA_DisconnectRsp(lcid); } if (gatt_is_bda_in_the_srv_chg_clt_list(p_tcb->peer_bda) == NULL) { if (btm_sec_is_a_bonded_dev(p_tcb->peer_bda)) gatt_add_a_bonded_dev_for_srv_chg(p_tcb->peer_bda); } /* if ACL link is still up, no reason is logged, l2cap is disconnect from peer */ if ((reason = L2CA_GetDisconnectReason(p_tcb->peer_bda, p_tcb->transport)) == 0) reason = GATT_CONN_TERMINATE_PEER_USER; /* send disconnect callback */ gatt_cleanup_upon_disc(p_tcb->peer_bda, reason, GATT_TRANSPORT_BR_EDR); } }
/******************************************************************************* ** ** Function gatt_l2cif_disconnect_cfm_cback ** ** Description This is the L2CAP disconnect confirm callback function. ** ** ** Returns void ** *******************************************************************************/ void gatt_l2cif_disconnect_cfm_cback(UINT16 lcid, UINT16 result) { tGATT_TCB *p_tcb; UINT16 reason; /* look up clcb for this channel */ if ((p_tcb = gatt_find_tcb_by_cid(lcid)) != NULL) { if (btm_sec_is_a_bonded_dev(p_tcb->peer_bda)) gatt_add_a_bonded_dev_for_srv_chg(p_tcb->peer_bda); /* send disconnect callback */ /* if ACL link is still up, no reason is logged, l2cap is disconnect from peer */ if ((reason = L2CA_GetDisconnectReason(p_tcb->peer_bda)) == 0) reason = GATT_CONN_TERMINATE_LOCAL_HOST; gatt_cleanup_upon_disc(p_tcb->peer_bda, reason); } }
/******************************************************************************* ** ** Function gatt_l2cif_disconnect_cfm_cback ** ** Description This is the L2CAP disconnect confirm callback function. ** ** ** Returns void ** *******************************************************************************/ static void gatt_l2cif_disconnect_cfm_cback(UINT16 lcid, UINT16 result) { tGATT_TCB *p_tcb; UINT16 reason; UNUSED(result); /* look up clcb for this channel */ if ((p_tcb = gatt_find_tcb_by_cid(lcid)) != NULL) { /* If the device is not in the service changed client list, add it... */ if (gatt_is_bda_in_the_srv_chg_clt_list(p_tcb->peer_bda) == NULL) { if (btm_sec_is_a_bonded_dev(p_tcb->peer_bda)) gatt_add_a_bonded_dev_for_srv_chg(p_tcb->peer_bda); } /* send disconnect callback */ /* if ACL link is still up, no reason is logged, l2cap is disconnect from peer */ if ((reason = L2CA_GetDisconnectReason(p_tcb->peer_bda, p_tcb->transport)) == 0) reason = GATT_CONN_TERMINATE_LOCAL_HOST; gatt_cleanup_upon_disc(p_tcb->peer_bda, reason, GATT_TRANSPORT_BR_EDR); } }