]> oss.titaniummirror.com Git - tinyos-2.x.git/blobdiff - tos/chips/cc2420/CC2420ActiveMessageP.nc
Implement clear() properly.
[tinyos-2.x.git] / tos / chips / cc2420 / CC2420ActiveMessageP.nc
index 2cd35c88ef38e5f1e77f21d5f826b26bca7ce746..7a111f53603fe9e54d70a37c8750f82ad030d8db 100644 (file)
@@ -41,7 +41,9 @@ module CC2420ActiveMessageP {
     interface Receive as Snoop[am_id_t id];
     interface AMPacket;
     interface Packet;
+    interface SendNotifier[am_id_t id];
   }
+  
   uses {
     interface Send as SubSend;
     interface Receive as SubReceive;
@@ -66,6 +68,8 @@ implementation {
     header->dest = addr;
     header->destpan = call CC2420Config.getPanAddr();
     
+    signal SendNotifier.aboutToSend[id](addr, msg);
+    
     return call SubSend.send( msg, len + CC2420_SIZE );
   }
 
@@ -137,6 +141,8 @@ implementation {
 
   /***************** Packet Commands ****************/
   command void Packet.clear(message_t* msg) {
+    memset(call CC2420PacketBody.getHeader(msg), sizeof(cc2420_header_t), 0);
+    memset(call CC2420PacketBody.getMetadata(msg), sizeof(cc2420_metadata_t), 0);
   }
   
   command uint8_t Packet.payloadLength(message_t* msg) {
@@ -164,6 +170,11 @@ implementation {
   
   /***************** SubReceive Events ****************/
   event message_t* SubReceive.receive(message_t* msg, void* payload, uint8_t len) {
+    
+    if(!(call CC2420PacketBody.getMetadata(msg))->crc) {
+      return msg;
+    }
+    
     if (call AMPacket.isForMe(msg)) {
       return signal Receive.receive[call AMPacket.type(msg)](msg, payload, len - CC2420_SIZE);
     }
@@ -191,7 +202,9 @@ implementation {
   }
 
   default event void AMSend.sendDone[uint8_t id](message_t* msg, error_t err) {
-    return;
   }
 
+  default event void SendNotifier.aboutToSend[am_id_t amId](am_addr_t addr, message_t *msg) {
+  }
+  
 }