Пример #1
0
/********************************************************************************************************
 * @fn      ZMacScanReq
 *
 * @brief   This function is called to perform a network scan.
 *
 * @param   param - structure with info need send it.
 *
 * @return  status
 ********************************************************************************************************/
uint8 ZMacScanReq( ZMacScanReq_t *pData )
{
  _ScanChannels = pData->ScanChannels;

  /* scan in progress */
  if (ZMac_ScanBuf != NULL)
  {
    return MAC_SCAN_IN_PROGRESS;
  }

  if (pData->ScanType != ZMAC_ORPHAN_SCAN)
  {
    /* Allocate memory depends on the scan type */
    if (pData->ScanType == ZMAC_ED_SCAN)
    {
      if ((ZMac_ScanBuf = osal_mem_alloc(ZMAC_ED_SCAN_MAXCHANNELS)) == NULL)
      {
        return MAC_NO_RESOURCES;
      }
      osal_memset(ZMac_ScanBuf, 0, ZMAC_ED_SCAN_MAXCHANNELS);
      pData->Result.pEnergyDetect = ((uint8*)ZMac_ScanBuf) + MAC_CHAN_11;
    }
    else if (pData->MaxResults > 0)
    {
      if ((ZMac_ScanBuf = pData->Result.pPanDescriptor =
           osal_mem_alloc( sizeof( ZMacPanDesc_t ) * pData->MaxResults )) == NULL)
      {
        return MAC_NO_RESOURCES;
      }
    }
  }

  /* Right now, set security to zero */
  pData->Sec.SecurityLevel = false;

  /* Channel Page */
  pData->ChannelPage = 0x00;

  MAC_MlmeScanReq ((macMlmeScanReq_t *)pData);

  return ZMacSuccess;
}
Пример #2
0
/**************************************************************************************************
 * @brief   Performs active scan on specified channel
 * @param   None
 * @return  None
 **************************************************************************************************/
void NWK_ScanReq(uint8 scanType, uint8 scanDuration)
{
  macMlmeScanReq_t scanReq;

  /* Fill in information for scan request structure */
  scanReq.scanChannels  = NWK_SCAN_CHANNELS;
  scanReq.scanType      = scanType;
  scanReq.scanDuration  = scanDuration;
  scanReq.maxResults    = NWK_MAC_MAX_RESULTS;
  scanReq.permitJoining = NWK_EBR_PERMITJOINING;
  scanReq.linkQuality   = NWK_EBR_LINKQUALITY;
  scanReq.percentFilter = NWK_EBR_PERCENTFILTER;
  if (scanType != MAC_SCAN_ED){
    scanReq.result.pPanDescriptor = (macPanDesc_t*) &scanResult;
  }
  else{
    scanReq.result.pEnergyDetect = (uint8*) &scanResult;
  }
  osal_memset(&scanReq.sec, 0, sizeof(macSec_t));
  /* Call scan request */
  MAC_MlmeScanReq(&scanReq);
}