示例#1
0
/*********************************************************************
 * @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;
}
示例#2
0
/*********************************************************************
 * @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;
}
示例#6
0
/*********************************************************************
 * @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;
}
示例#7
0
/*********************************************************************
 * @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;
}