Beispiel #1
0
void BT_Gatt_HandleDisconnected(BtRemoteDevice *link)
{
    BtGattConn *conn;
    conn = BT_Gatt_GetConCtx(link);
    GATT_HandleOperationLinkDisconnected(link);
    conn->state = GATT_CONN_STATE_IDLE;
    conn->link = 0;
	InitializeListHead(&conn->gattRequestOpList);
	InitializeListHead(&conn->gattNotificationOpList);
	InitializeListHead(&conn->gattIndicationOpList);
    EVM_ResetTimer(&conn->disconnectTimer);

}
Beispiel #2
0
void GATT_Init()
{
    U8 i,j=0;

    Report(("GATT init"));
    InitializeListHead(&(GATTC(regList)));
    for(i=0; i< MAX_GATT_CON_NO; i++)
    {
        GATTC(conn)[i].state = GATT_CONN_STATE_IDLE;
        GATTC(conn)[i].link = 0;
        InitializeListHead(&GATTC(conn)[i].gattRequestOpList);
        InitializeListHead(&GATTC(conn)[i].gattNotificationOpList);
        InitializeListHead(&GATTC(conn)[i].gattIndicationOpList);
        GATTC(conn)[i].disconnectTimerValue = MAX_GATT_DISCONNECT_TIMEOUT_VALUE;
        EVM_ResetTimer(&GATTC(conn)[i].disconnectTimer);
    }
    BT_ATT_GattRegisterHandler(BT_Gatt_Att_Callback);
}
Beispiel #3
0
void btadp_jsr82_session_disconnect(BT_ADP_JSR82_SESSION *session)
{
	SESSION_RESULT	sret = SR_NOERROR;

	ASSERT(session);

	OS_Report("[JSR82]btadp_jsr82_session_disconnect");

	if (session->conn_state != BT_ADP_JSR82_STATE_CONNECTED )
	{
		OS_Report("[JSR82]SR_E_INVALID_PARAM");	
		sret = SR_E_INVALID_PARAM;
		goto exit;
	}
	session->attach_state == BT_JSR82_SESSION_STATE_DETACHED;

	if (BT_ADP_JSR82_STATE_DISCONNECTING == session->conn_state)
	{
		OS_Report("[JSR82]channel has already been being disconnecting");
		goto exit;
	}

	//TODO: these code should be remove to btcore layer
	if (TRUE == jsr82_session_DataRemainInBuff(session->ps_type, 
													session->index,
													session->l2cap_id))
	{
		EVM_ResetTimer(&(session->timer));
		session->timer.func = btadp_jsr82_session_disconnect_timeout;
		session->timer.context = session;
		EVM_StartTimer(&(session->timer), 1000);
	}
	else
	{
		session->timer.context = session;
		btadp_jsr82_session_disconnect_timeout(&(session->timer));
	}
exit:
	bt_session_destroy(session->sessionid);

}
Beispiel #4
0
/*****************************************************************************
 * FUNCTION
 *  HciDeleteConnection
 * DESCRIPTION
 *  Delete an entry to the connection table.
 * PARAMETERS
 *  hciHandle       [IN]        
 * RETURNS
 *  
 *****************************************************************************/
BtStatus HciDeleteConnection(HciHandle hciHandle)
{
    HciCallbackParms cbParms;
    U16 i;
#ifdef __ENABLE_NUM_COMPLETED_PKT_EVENT_TIMER__    
    BtRemoteDevice* link = NULL;
#endif
    i = HciGetTableEntry(hciHandle);

    if (i != INVALID_HCI_HANDLE)
    {

        if (HCC(con)[i].conFlags & HCI_DATA_TYPE_ACL)
        {
            /* ACL data */

        #if L2CAP_NUM_GROUPS > 0
            if (!(HCC(con)[i].hciHandle & (PICONET_BROADCAST | ACTIVE_BROADCAST)))
            {
                /* Not a broadcast handle */
        #endif /* L2CAP_NUM_GROUPS > 0 */

                HCC(activeAclCons)--;

            #if L2CAP_NUM_GROUPS > 0
            }
            #endif /* L2CAP_NUM_GROUPS > 0 */
            HCC(aclTxPacketsLeft) += HCC(con)[i].packetsSent;
        }

    #if NUM_SCO_CONNS != 0
        else if (HCC(con)[i].conFlags & HCI_DATA_TYPE_SCO)
        {
            /* SCO data */
            HCC(scoTxPacketsLeft) += HCC(con)[i].packetsSent;
        }
    #endif /* NUM_SCO_CONNS != 0 */

        else
        {
            Assert(0);
        }

        /* Complete any packets that have not been completely sent */
        while (!IsListEmpty(&(HCC(con)[i].btPacketList)))
        {
            cbParms.hciHandle = HCC(con)[i].hciHandle;
            cbParms.status = BT_STATUS_NO_CONNECTION;
            cbParms.ptr.packet = (BtPacket*) RemoveHeadList(&(HCC(con)[i].btPacketList));
            if (HCC(metaMode))
            {
                Hci_MetaDataCallback(HCI_PACKET_HANDLED, &cbParms);
            }
            else
            {
                ME_Callback(HCI_PACKET_HANDLED, &cbParms);
            }
        }

    #if HCI_HOST_FLOW_CONTROL == XA_ENABLED

        if (HCC(con)[i].conFlags & HCI_DATA_TYPE_ACL)
        {
            HCC(aclRxPacketsLeft) += HCC(con)[i].packetsComplete;
        }
    #if HCI_SCO_ENABLED && (HCI_SCO_FLOW_CONTROL == XA_ENABLED)
        else if (HCC(con)[i].conFlags & HCI_DATA_TYPE_SCO)
        {
            HCC(scoRxPacketsLeft) += HCC(con)[i].packetsComplete;
            Assert(HCC(scoRxPacketsLeft) <= HCI_NUM_SCO_BUFFERS);
        }
    #endif /* HCI_SCO_ENABLED && (HCI_SCO_FLOW_CONTROL == XA_ENABLED) */

        HCC(con)[i].packetsComplete = 0;

    #endif /* HCI_HOST_FLOW_CONTROL == XA_ENABLED */

        /* Reset the connection state */
        HCC(con)[i].conFlags = 0;
        HCC(con)[i].packetsSent = 0;
        HCC(con)[i].btPacket = 0;
        HCC(con)[i].buffPtr = 0;
        HCC(con)[i].remaining = 0;
    
 #ifdef __ENABLE_NUM_COMPLETED_PKT_EVENT_TIMER__   
        /* MAUI_01482962 */
        link = MeMapHciToRemoteDevice((HciHandle)(hciHandle & 0x0FFF));
        if (link != NULL)
        {
            /* All Pkts are turned in this function, it can stop this monitor timer */
            /* bt_trace(TRACE_GROUP_1, BTLOG_STOP_MONITOR_NUM_COMPLETED_PKTS_TIMER,2,(hciHandle & 0x0FFF)); */
            EVM_ResetTimer(&link->monitorNumCompletedPktEventTimer);
        }
 #endif /* __ENABLE_NUM_COMPLETED_PKT_EVENT_TIMER__ */       

    }
    else
    {
        return BT_STATUS_FAILED;
    }
    return BT_STATUS_SUCCESS;
}