]> oss.titaniummirror.com Git - tinyos-2.x.git/blobdiff - tos/chips/cc2420/packet/CC2420PacketP.nc
Merge TinyOS 2.1.1 into master.
[tinyos-2.x.git] / tos / chips / cc2420 / packet / CC2420PacketP.nc
index 9bca8ae494773663209a225723ed2b9b9282401e..50b138fcf19280a03a228bb5e6d5718cf3663a77 100644 (file)
@@ -38,6 +38,7 @@
 #include "IEEE802154.h"
 #include "message.h"
 #include "CC2420.h"
+#include "CC2420TimeSyncMessage.h"
 
 module CC2420PacketP @safe() {
 
@@ -94,6 +95,21 @@ implementation {
     return (call CC2420PacketBody.getMetadata( p_msg ))->lqi;
   }
 
+  async command uint8_t CC2420Packet.getNetwork( message_t* p_msg ) {
+#if defined(TFRAMES_ENABLED)
+    return TINYOS_6LOWPAN_NETWORK_ID;
+#else
+    return (call CC2420PacketBody.getHeader( p_msg ))->network;
+#endif
+  }
+
+  async command void CC2420Packet.setNetwork( message_t* p_msg , uint8_t networkId ) {
+#if ! defined(TFRAMES_ENABLED)
+    (call CC2420PacketBody.getHeader( p_msg ))->network = networkId;
+#endif
+  }    
+
+
   /***************** CC2420PacketBody Commands ****************/
   async command cc2420_header_t * ONE CC2420PacketBody.getHeader( message_t* ONE msg ) {
     return TCAST(cc2420_header_t* ONE, (uint8_t *)msg + offsetof(message_t, data) - sizeof( cc2420_header_t ));
@@ -137,10 +153,13 @@ implementation {
     return call PacketTimeStamp32khz.isValid(msg);
   }
 
+  //timestmap is always represented in 32khz
+  //28.1 is coefficient difference between T32khz and TMilli on MicaZ
   async command uint32_t PacketTimeStampMilli.timestamp(message_t* msg)
   {
-    int32_t offset = call PacketTimeStamp32khz.timestamp(msg) - call LocalTime32khz.get();
-    return (offset >> 5) + call LocalTimeMilli.get();
+    int32_t offset = (call LocalTime32khz.get()-call PacketTimeStamp32khz.timestamp(msg));
+    offset/=28.1;
+    return call LocalTimeMilli.get() - offset;
   }
 
   async command void PacketTimeStampMilli.clear(message_t* msg)
@@ -159,12 +178,18 @@ implementation {
     return ((call CC2420PacketBody.getMetadata( msg ))->timesync);
   }
 
+  //returns offset of timestamp from the beginning of cc2420 header which is
+  //          sizeof(cc2420_header_t)+datalen-sizeof(timesync_radio_t)
+  //uses packet length of the message which is
+  //          MAC_HEADER_SIZE+MAC_FOOTER_SIZE+datalen
   async command uint8_t PacketTimeSyncOffset.get(message_t* msg)
   {
-    // minus 1 because one less byte is transmitted
-    return (call CC2420PacketBody.getHeader(msg))->length - 1 - sizeof(uint32_t);
+    return (call CC2420PacketBody.getHeader(msg))->length
+            + (sizeof(cc2420_header_t) - MAC_HEADER_SIZE)
+            - MAC_FOOTER_SIZE
+            - sizeof(timesync_radio_t);
   }
-
+  
   async command void PacketTimeSyncOffset.set(message_t* msg)
   {
     (call CC2420PacketBody.getMetadata( msg ))->timesync = TRUE;