/**************************************************************************** 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); } }
/**************************************************************************** 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); }
/**************************************************************************** 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); } }