Пример #1
0
/****************************************************************************
NAME	
	connectionHandleSdpOpenSearchCfm

DESCRIPTION
	Handle the response to the open SDP session request

RETURNS
	void	
*/
void connectionHandleSdpOpenSearchCfm(connectionSdpState *state, const SDC_OPEN_SEARCH_CFM_T *cfm)
{
	if(state->sdpLock == connectionGetCmTask())
	{
		/* Request was internal, start SDP Ping */
		uint8* sdp_ptr = (uint8 *) SdpPingServiceRequest;
		if (cfm->result == SDC_OPEN_SEARCH_OK)
			ConnectionSdpServiceSearchRequest(connectionGetCmTask(), &state->sdpServerAddr, 1, sizeof(SdpPingServiceRequest), sdp_ptr);
	}
	else if(state->sdpLock)
	{
		/* Send a response message up to the client */
        MAKE_CL_MESSAGE(CL_SDP_OPEN_SEARCH_CFM);
        message->status = connectionConvertSdpOpenStatus(cfm->result);
        MessageSend(state->sdpLock, CL_SDP_OPEN_SEARCH_CFM, message);
	}

	/* Check if the open search succeeded */
	if (cfm->result != SDC_OPEN_SEARCH_OK)
	{
		/* Reset the resource lock */
		state->sdpLock = 0;
		
		/* Reset the stored address */
		BdaddrSetZero(&state->sdpServerAddr);
	}
}
/****************************************************************************
NAME	
    inquirySendResult

DESCRIPTION
    Send a CL_DM_INQUIRE_RESULT message to the client

RETURNS
    void
*/
static void inquirySendResult(Task theAppTask, inquiry_status status, const bdaddr *addr, uint32 dev_class, uint16 clock_offset, page_scan_rep_mode_t ps_rep_mode, page_scan_mode_t ps_mode, int16 rssi, uint8 size_eir_data, uint8* eir_data)
{
    if (theAppTask)
    {	
        /* Create an inquiry result message and populate it with the supplied args */
        MAKE_CL_MESSAGE_WITH_LEN(CL_DM_INQUIRE_RESULT,size_eir_data);
        message->status = status;
        
        /* Check the address has been set */
        if (addr)
            message->bd_addr = *addr;
        else
            BdaddrSetZero(&message->bd_addr);
        
        message->dev_class = dev_class;
        message->clock_offset = clock_offset;
        message->page_scan_rep_mode = connectionConvertPageScanRepMode_t(ps_rep_mode);
        message->page_scan_mode = connectionConvertPageScanMode_t(ps_mode);
        message->rssi = rssi;
		message->size_eir_data = size_eir_data;
		if(size_eir_data)
		{
            memmove(message->eir_data, eir_data, size_eir_data);
		}
		else
		{
			message->eir_data[0] = 0;
		}
        MessageSend(theAppTask, CL_DM_INQUIRE_RESULT, message);
    }
}
Пример #3
0
/****************************************************************************
NAME
	connectionSdpInit

DESCRIPTION
	This Function is called to initialise Sdp

RETURNS

*/
void connectionSdpInit(connectionSdpState *state)
{
	/* Set the address to all zeroes */
	BdaddrSetZero(&state->sdpServerAddr);

     /* Confirm object has been initialised */
    connectionSendInternalInitCfm(connectionInitSdp);
}
Пример #4
0
/****************************************************************************
NAME	
	connectionHandleSdpCloseSearchInd

DESCRIPTION
	Indication from BlueStack informing us that an SDP search session has 
	been closed.

RETURNS
	void	
*/
void connectionHandleSdpCloseSearchInd(connectionSdpState *state, const SDC_CLOSE_SEARCH_IND_T *ind)
{
	/* Inform the client that the SDP search session has been closed */
	sendSdpCloseSearchCfm(state->sdpLock, (sdp_close_status) ind->result);

	/* Reset the resource lock */
	state->sdpLock = 0;
		
	/* Reset the stored address */
	BdaddrSetZero(&state->sdpServerAddr);
}
conn_id connectionGetId(const bdaddr* bd_addr, uint8 channel, mux_id_t mux_id)
{
    conn_id     id;
    bdaddr   addr;

    if(!bd_addr)
        BdaddrSetZero(&addr);
    else
        addr = *bd_addr;
     
    id.rfcomm_id.bd_addr = addr; 
    id.rfcomm_id.server_channel = channel; 
    id.rfcomm_id.mux_id = mux_id;

    return id;
}
/****************************************************************************
NAME    
    remoteNameComplete

DESCRIPTION
    Send a CL_DM_REMOTE_NAME_COMPLETE message to the client

RETURNS
    void
*/
static void remoteNameComplete(Task theAppTask, const bdaddr *addr, hci_status status, char* name, uint16 length)
{
    if (theAppTask)
    {
        MAKE_CL_MESSAGE_WITH_LEN(CL_DM_REMOTE_NAME_COMPLETE, length);
        message->status = status;
        
        /* Check the address has been set */
        if (addr)
        {
            message->bd_addr = *addr;
        }
        else
        {
            BdaddrSetZero(&message->bd_addr);
        }
        
        message->size_remote_name = length;
        
        /* Populate remote name fields */
        if (length)
        {
            memmove(message->remote_name, name, length);
        }    
        else
        {
            message->remote_name[0] = 0;    
        }
        
        free(name);
        
        /* Send onto Client */
        MessageSend(theAppTask, CL_DM_REMOTE_NAME_COMPLETE, message);
    }
    else
    {
        if (length)
            free(name);
    }
}