]> oss.titaniummirror.com Git - tinyos-2.x.git/blobdiff - tos/lib/mac/tkn154/ScanP.nc
Energy detection scan was not properly checking the radio state. Now fixed.
[tinyos-2.x.git] / tos / lib / mac / tkn154 / ScanP.nc
index 21cdfb9e8fc7757085c703cef9135f26b1806141..366ccb7a92c0f2b63fdbc7d83f5c775ac88b3cc5 100644 (file)
@@ -134,10 +134,11 @@ implementation
     } if ((ScanType > 3) || (ScanType < 3 && ScanDuration > 14) || 
           (ChannelPage != IEEE154_SUPPORTED_CHANNELPAGE) ||
           !(supportedChannels & ScanChannels) ||
-          (EnergyDetectListNumEntries && PANDescriptorListNumEntries) ||
+          ((ScanType != ORPHAN_SCAN) &&
+          ((EnergyDetectListNumEntries && PANDescriptorListNumEntries) ||
           (EnergyDetectList != NULL && PANDescriptorList != NULL) ||
           (EnergyDetectListNumEntries && EnergyDetectList == NULL) ||
-          (PANDescriptorListNumEntries && PANDescriptorList == NULL)) {
+          (PANDescriptorListNumEntries && PANDescriptorList == NULL)))) {
       status = IEEE154_INVALID_PARAMETER;
     } else if (ScanType != ENERGY_DETECTION_SCAN &&
         !(m_txFrame = call TxFramePool.get())) { 
@@ -323,7 +324,8 @@ implementation
       ((uint8_t*) m_resultList)[m_resultIndex++] = EnergyLevel;
     if (m_resultIndex == m_resultListNumEntries)
       m_terminateScan = TRUE; // done
-    call RadioOff.off();
+    if (call RadioOff.off() == EALREADY)
+      signal RadioOff.offDone();
   }
 
   /* ----------------------- Active/Orphan scan ----------------------- */