]> oss.titaniummirror.com Git - tinyos-2.x.git/commitdiff
keep sfd time
authorandreaskoepke <andreaskoepke>
Thu, 10 Jul 2008 12:40:01 +0000 (12:40 +0000)
committerandreaskoepke <andreaskoepke>
Thu, 10 Jul 2008 12:40:01 +0000 (12:40 +0000)
tos/chips/tda5250/Tda5250ActiveMessageP.nc
tos/chips/tda5250/mac/CsmaMacP.nc
tos/chips/tda5250/mac/RedMac.h
tos/chips/tda5250/mac/RedMacP.nc
tos/chips/tda5250/mac/SpeckMacDP.nc
tos/chips/tda5250/tda5250_message.h

index 5c1a41b6680f86ab1e779e2d8aa8988123c12a13..30a251928330ac8f558111906c5293a66f82c405 100644 (file)
@@ -157,7 +157,7 @@ implementation {
       return getMetadata(msg)->strength;
   }
   
- default event message_t* Receive.receive[am_id_t id](message_t* msg, void* payload, uint8_t len) {
 default event message_t* Receive.receive[am_id_t id](message_t* msg, void* payload, uint8_t len) {
     return msg;
   }
 
index 2a236528e5b090301e2a242f2342d126118f2071..2b8b57fecd8f93836c518f94b939edaccd3a8996 100644 (file)
@@ -303,7 +303,7 @@ implementation
     task void postponeReRx() {
         call ReRxTimer.startOneShot(5000);
     }
-    
+
     uint16_t backoff(uint8_t counter) {
         uint16_t mask = BACKOFF_MASK >> (MAX_LONG_RETRY - counter);
         return (call Random.rand16() & mask);
@@ -962,7 +962,11 @@ implementation
         }
     }
     
-    async event void RadioTimeStamping.transmittedSFD( uint16_t time, message_t* p_msg ) {}
+    async event void RadioTimeStamping.transmittedSFD( uint16_t time, message_t* p_msg ) {
+        if((macState == TX) && (p_msg == txBufPtr)) {
+            // to do
+        }
+    }
 
     /***** Rssi Resource events ******************/
     event void RssiAdcResource.granted() {
index 84497b48f2e0f84d604f7d4e848389d323c9afbe..9a614439f4e1cc81fc9f130a80700a1eaafd464a 100644 (file)
 #ifndef RED_MAC_H
 #define RED_MAC_H
 
-/*
- * highest bit of token set: this message is ACK and not intended for the
- * upper layers. Token is used for alternating bit like duplicate detection,
- * and set by the sender in [0,127] intervall. The receiver reflects the
- * token in the Ack, with the highest bit set. 
- */
-
 typedef nx_struct red_mac_header_t {
     nx_uint8_t    repetitionCounter;
     nx_uint32_t   time; // processing delay of message
index 6d07f267c2275fd476221c13e3efc02a9945b414..d734b492e17f9b7be6b634c810aa7005dcd91193 100644 (file)
@@ -147,10 +147,10 @@ implementation
         SUB_HEADER_TIME=PHY_HEADER_TIME + sizeof(message_header_t)*BYTE_TIME,
         SUB_FOOTER_TIME=2*BYTE_TIME, // 2 bytes crc 
         // DEFAULT_SLEEP_TIME=1625,
-        // DEFAULT_SLEEP_TIME=2048,
+        DEFAULT_SLEEP_TIME=2048,
         // DEFAULT_SLEEP_TIME=4096,
         // DEFAULT_SLEEP_TIME=8192,
-        DEFAULT_SLEEP_TIME=16384,
+        // DEFAULT_SLEEP_TIME=16384,
         // DEFAULT_SLEEP_TIME=32768U,
         // DEFAULT_SLEEP_TIME=65535U,
         DATA_DETECT_TIME=17,
@@ -875,6 +875,7 @@ implementation
 #ifdef DELTATIMEDEBUG
                             dTrace.sender = getHeader(msg)->src;
 #endif
+                            getMetadata(msg)->sfdtime = rxTime;
                             getMetadata(msg)->time = calcGeneratedTime((red_mac_header_t*) payload);
                             getMetadata(msg)->ack = WAS_NOT_ACKED;
                             m = signal MacReceive.receiveDone(msg);
@@ -1066,9 +1067,12 @@ implementation
             dTrace.delta = call TimeDiff32.computeDelta(dTrace.now, dTrace.msgTime);
             txMacHdr->time = dTrace.delta;
             call DeltaTrace.traceTx(&dTrace);
+            getMetadata(p_msg)->sfdtime = dTrace.now;
 #else
+            getMetadata(p_msg)->sfdtime = call LocalTime32kHz.get();
             txMacHdr->time =
-                call TimeDiff32.computeDelta(call LocalTime32kHz.get(), getMetadata(p_msg)->time);
+                call TimeDiff32.computeDelta(getMetadata(p_msg)->sfdtime,
+                                             getMetadata(p_msg)->time);
 #endif
         }
     }
index 5988ed47ef6772cabde438cad89f83543d88a65a..bc904ebf6711929686dba886f7a1e8330a74933b 100644 (file)
@@ -788,6 +788,7 @@ implementation
                             rxStat.duplicate = PERF_NEW_MSG;
 #endif
                             storeStrength(msg);
+                            getMetadata(msg)->sfdtime = rxTime;
                             getMetadata(msg)->time = calcGeneratedTime((red_mac_header_t*) payload);
                             getMetadata(msg)->ack = WAS_NOT_ACKED;
                             m = signal MacReceive.receiveDone(msg);
@@ -949,8 +950,10 @@ implementation
     
     async event void RadioTimeStamping.transmittedSFD(uint16_t time, message_t* p_msg ) {
         if((macState == TX) && (p_msg == txBufPtr)) {
+            getMetadata(msg)->sfdtime = call LocalTime32kHz.get();
             txMacHdr->time =
-                call TimeDiff32.computeDelta(call LocalTime32kHz.get(), getMetadata(p_msg)->time);
+                call TimeDiff32.computeDelta(getMetadata(msg)->sfdtime,
+                                             getMetadata(p_msg)->time);
         }
     }
     
index 1f377841096bcfc190709115a0159c1bb8ecf8e3..b6053fde2ae954621a90b641d73a337c861a5b8b 100644 (file)
@@ -4,12 +4,19 @@
 #include "AM.h"
 #include "PacketAck.h"
 
+/*
+ * highest bit of token set: this message is ACK and not intended for the
+ * upper layers. Token is used for alternating bit like duplicate detection,
+ * and set by the sender in [0,127] intervall. The receiver reflects the
+ * token in the Ack, with the highest bit set. 
+ */
+
 typedef nx_struct tda5250_header_t {
-  nx_uint8_t   length;
-  nx_am_addr_t src;
-  nx_am_addr_t dest;
-  nx_am_id_t   type;
-  nx_uint8_t   token;
+  nx_uint8_t    length;
+  nx_am_addr_t  src;
+  nx_am_addr_t  dest;
+  nx_am_id_t    type;
+  nx_uint8_t    token;
 } tda5250_header_t;
 
 typedef nx_struct tda5250_footer_t {
@@ -21,6 +28,8 @@ typedef nx_struct tda5250_metadata_t {
   nx_uint8_t ack;
   /* local time when message was generated */
   nx_uint32_t time;
+  /* time of sfd generation */
+  nx_uint32_t sfdtime;
   nx_uint8_t sendSecurityMode;
   nx_uint8_t receiveSecurityMode;
   /* some meta information that allows to compute a density */