]> oss.titaniummirror.com Git - tinyos-2.x.git/blobdiff - tos/chips/cc2420/receive/CC2420ReceiveP.nc
* Removed hardware address recognition to monitor its affect on unit tests, low power...
[tinyos-2.x.git] / tos / chips / cc2420 / receive / CC2420ReceiveP.nc
index a85b62e8a2fbaa441216f1d37d363e5c498be059..4a5d1ad717a47d6bd37c66a4926b10713e26c8ec 100644 (file)
@@ -37,6 +37,8 @@
  */
 
 #include "IEEE802154.h"
+#include "message.h"
+#include "AM.h"
 
 module CC2420ReceiveP {
 
@@ -107,6 +109,7 @@ implementation {
   void receive();
   void waitForNextPacket();
   void flush();
+  bool passesAddressCheck(message_t *msg);
   
   task void receiveDone_task();
   
@@ -326,9 +329,12 @@ implementation {
     metadata->crc = buf[ rxFrameLength ] >> 7;
     metadata->lqi = buf[ rxFrameLength ] & 0x7f;
     metadata->rssi = buf[ rxFrameLength - 1 ];
-    m_p_rx_buf = signal Receive.receive( m_p_rx_buf, m_p_rx_buf->data, 
-                                         rxFrameLength );
-
+    
+    if(passesAddressCheck(m_p_rx_buf)) {
+      m_p_rx_buf = signal Receive.receive( m_p_rx_buf, m_p_rx_buf->data, 
+          rxFrameLength );
+    }
+    
     atomic receivingPacket = FALSE;
     waitForNextPacket();
   }
@@ -432,4 +438,16 @@ implementation {
     m_missed_packets = 0;
   }
 
+  /**
+   * @return TRUE if the given message passes address recognition
+   */
+  bool passesAddressCheck(message_t *msg) {
+    cc2420_header_t *header = call CC2420PacketBody.getHeader( msg );
+    
+    if(!(call CC2420Config.isAddressRecognitionEnabled())) {
+      return TRUE;
+    } 
+    
+    return (header->dest == call CC2420Config.getShortAddr());
+  }
 }