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