/********************************************************************* * @fn SNP_updateConnectionParams * * @brief Update the parameters of an existing connection. * * @param pReq - pointer to SNP request message * * @return uint8_t - SNP_SUCCESS */ uint8_t SNP_updateConnectionParams(snpUpdateConnParamReq_t *pReq) { // Prepare Command _npiFrame_t *pPkt; // Allocated an empty data NPI packet. pPkt = SNP_buildNPIPacket(SNP_NPI_ASYNC_CMD_TYPE, SNP_UPDATE_CONN_PARAM_REQ, sizeof(snpUpdateConnParamReq_t)); // Copy non-pointer members of request struct pPkt->pData[0] = LO_UINT16(pReq->connHandle); pPkt->pData[1] = HI_UINT16(pReq->connHandle); pPkt->pData[2] = LO_UINT16(pReq->intervalMin); pPkt->pData[3] = HI_UINT16(pReq->intervalMin); pPkt->pData[4] = LO_UINT16(pReq->intervalMax); pPkt->pData[5] = HI_UINT16(pReq->intervalMax); pPkt->pData[6] = LO_UINT16(pReq->slaveLatency); pPkt->pData[7] = HI_UINT16(pReq->slaveLatency); pPkt->pData[8] = LO_UINT16(pReq->supervisionTimeout); pPkt->pData[9] = HI_UINT16(pReq->supervisionTimeout); // Send Command SNP_sendAsyncCmd(pPkt); // Return Status return SNP_SUCCESS; }
/********************************************************************* * @fn SNP_startAdvertising * * @brief Start advertising. Advertising data must be set with * SNP_updateAdvData first. Command sets the following: * * - Advertising type: connectable, non-connectable discoverable * or non-connectable non-discoverable (broadcasting) * - Timeout: advertising will cease after the timeout (in ms) expires. * - Interval: the delta (in ms) between two consecutive advertisements. * - Behavior after a connection occurs: if FALSE stop advertising after * connection. Else continue advertising. * * @param pReq - pointer to SNP request message * * @return uint8_t - SNP_SUCCESS, SNP_ADV_DATA_NOT_READY, * or SNP_ADV_NOT_AVAILABLE */ uint8_t SNP_startAdvertising(snpStartAdvReq_t *pReq) { _npiFrame_t *pPkt; // Allocated an empty data NPI packet. pPkt = SNP_buildNPIPacket(SNP_NPI_ASYNC_CMD_TYPE, SNP_START_ADV_REQ, sizeof(snpStartAdvReq_t)); // Copy members of request struct into packet pPkt->pData[0] = pReq->type; pPkt->pData[1] = LO_UINT16(pReq->timeout); pPkt->pData[2] = HI_UINT16(pReq->timeout); pPkt->pData[3] = LO_UINT16(pReq->interval); pPkt->pData[4] = HI_UINT16(pReq->interval); pPkt->pData[5] = pReq->filterPolicy; pPkt->pData[6] = pReq->initiatorAddrType; memcpy(&pPkt->pData[7],pReq->inittiotaAddess,sizeof(pReq->inittiotaAddess)); pPkt->pData[13] = pReq->behavior; // Send Command SNP_sendAsyncCmd(pPkt); // Return Status return SNP_SUCCESS; }
/********************************************************************* * @fn SNP_RPC_terminateConnection * * @brief Terminate the existing connection. * * @param pReq - pointer to SNP request message * * @return uint8_t - SNP_SUCCESS */ uint8_t SNP_RPC_terminateConnection(snpTermConnReq_t *pReq) { // Prepare Command _npiFrame_t *pPkt; uint8_t status = SNP_OUT_OF_RESOURCES; // Allocated an empty data NPI packet. pPkt = SNP_buildNPIPacket(SNP_NPI_ASYNC_CMD_TYPE, SNP_TERMINATE_CONN_REQ, sizeof(snpTermConnReq_t)); if ( pPkt ) { status = SNP_SUCCESS; // Copy non-pointer members of request struct pPkt->pData[0] = LO_UINT16(pReq->connHandle); pPkt->pData[1] = HI_UINT16(pReq->connHandle); pPkt->pData[2] = pReq->option; // Send Command SNP_sendAsyncCmd(pPkt); } // Return Status return status; }
/********************************************************************* * @fn SNP_RPC_setAdvertisementData * * @brief Configure Advertising or Scan Response Data. * * @param pReq - pointer to SNP request message * @param dataLen - length of data field of SNP request * * @return uint8_t - SNP_SUCCESS */ uint8_t SNP_RPC_setAdvertisementData(snpSetAdvDataReq_t *pReq, uint8_t datalen) { // Prepare Command _npiFrame_t *pPkt; uint8_t status = SNP_OUT_OF_RESOURCES; uint16_t reqSize = sizeof(snpSetAdvDataReq_t) - sizeof(pReq->pData); // Allocated an empty data NPI packet. pPkt = SNP_buildNPIPacket(SNP_NPI_ASYNC_CMD_TYPE, SNP_SET_ADV_DATA_REQ, reqSize + datalen); if ( pPkt ) { status = SNP_SUCCESS; // Copy non-pointer members of request struct pPkt->pData[0] = pReq->type; // Copy pointer members memcpy(&pPkt->pData[reqSize], pReq->pData, datalen); // Send Command SNP_sendAsyncCmd(pPkt); } // Return Status return status; }
/********************************************************************* * @fn SNP_RPC_sendHCICommand * * @brief Send an HCI command over SNP message * * @param pReq - pointer to SNP request message * @param paramLen - length of data field of SNP request * * @return uint8_t - SNP_SUCCESS */ uint8_t SNP_RPC_sendHCICommand(snpHciCmdReq_t *pReq, uint8_t paramLen) { _npiFrame_t *pPkt; uint16_t reqSize = sizeof(snpHciCmdReq_t) - sizeof(pReq->pData); uint8_t status = SNP_OUT_OF_RESOURCES; // Allocated an empty data NPI packet. pPkt = SNP_buildNPIPacket(SNP_NPI_ASYNC_CMD_TYPE, SNP_HCI_CMD_REQ, paramLen + reqSize); if ( pPkt ) { status = SNP_SUCCESS; // Copy non-pointer members of request struct pPkt->pData[0] = LO_UINT16(pReq->opcode); pPkt->pData[1] = HI_UINT16(pReq->opcode); // Copy pointer members memcpy(&pPkt->pData[reqSize], pReq->pData, paramLen); // Send param SNP_sendAsyncCmd(pPkt); } // Return Status return status; }
/********************************************************************* * @fn SNP_stopAdvertising * * @brief Stop advertising * * @param none * * @return uint8_t - SNP_SUCCESS, SNP_NOT_ADVERTISING */ uint8_t SNP_stopAdvertising(void) { _npiFrame_t *pPkt; // Prepare Command pPkt = SNP_buildNPIPacket(SNP_NPI_ASYNC_CMD_TYPE, SNP_STOP_ADV_REQ, 0); // Send command SNP_sendAsyncCmd(pPkt); // Return Status return SNP_SUCCESS; }
/********************************************************************* * @fn SNP_testCommand * * @brief Get SNP memory statistics * * @return uint8_t - SNP_SUCCESS */ uint8_t SNP_testCommand(void) { _npiFrame_t *pPkt; // Allocated an empty data NPI packet. pPkt = SNP_buildNPIPacket(SNP_NPI_ASYNC_CMD_TYPE, SNP_TEST_REQ, 0); // Send param SNP_sendAsyncCmd(pPkt); // Return Status return SNP_SUCCESS; }
/********************************************************************* * @fn SNP_RPC_stopAdvertising * * @brief Stop advertising * * @param none * * @return uint8_t - SNP_SUCCESS, SNP_NOT_ADVERTISING */ uint8_t SNP_RPC_stopAdvertising(void) { _npiFrame_t *pPkt; uint8_t status = SNP_OUT_OF_RESOURCES; // Prepare Command pPkt = SNP_buildNPIPacket(SNP_NPI_ASYNC_CMD_TYPE, SNP_STOP_ADV_REQ, 0); if ( pPkt ) { status = SNP_SUCCESS; // Send command0 SNP_sendAsyncCmd(pPkt); } // Return Status return status; }
/********************************************************************* * @fn SNP_RPC_testCommand * * @brief Get SNP memory statistics * * @return uint8_t - SNP_SUCCESS */ uint8_t SNP_RPC_testCommand(void) { _npiFrame_t *pPkt; uint8_t status = SNP_OUT_OF_RESOURCES; // Allocated an empty data NPI packet. pPkt = SNP_buildNPIPacket(SNP_NPI_ASYNC_CMD_TYPE, SNP_TEST_REQ, 0); if ( pPkt ) { status = SNP_SUCCESS; // Send param SNP_sendAsyncCmd(pPkt); } // Return Status return status; }
/********************************************************************* * @fn SNP_RPC_sendSecurityRequest * * @brief Set the Security Requirements for SNP. * * @param none * * @return uint8_t - SNP_SUCCESS */ uint8_t SNP_RPC_sendSecurityRequest(void) { _npiFrame_t *pPkt; uint8_t status = SNP_OUT_OF_RESOURCES; // Allocated an empty data NPI packet. pPkt = SNP_buildNPIPacket(SNP_NPI_ASYNC_CMD_TYPE, SNP_SEND_SECURITY_REQUEST_REQ, 0); if ( pPkt ) { status = SNP_SUCCESS; // Send Command. SNP_sendAsyncCmd(pPkt); } // Return Status return status; }