]> oss.titaniummirror.com Git - tinyos-2.x.git/commitdiff
randomizing timer to support better sync between far away neighbors
authorkusy <kusy>
Mon, 30 Nov 2009 21:20:22 +0000 (21:20 +0000)
committerkusy <kusy>
Mon, 30 Nov 2009 21:20:22 +0000 (21:20 +0000)
tos/lib/ftsp/TimeSyncC.nc
tos/lib/ftsp/TimeSyncMsg.h
tos/lib/ftsp/TimeSyncP.nc

index 8022d8a9f6a354fcb06023aa9c1c191ff30a0e65..61cbcd93578f991aaf25de8fe0b5b6c2dac731e3 100644 (file)
@@ -52,8 +52,8 @@ implementation
 
   components TimeSyncMessageC as ActiveMessageC;
   TimeSyncP.RadioControl    ->  ActiveMessageC;
-  TimeSyncP.Send            ->  ActiveMessageC.TimeSyncAMSendMilli[AM_TIMESYNCMSG];
-  TimeSyncP.Receive         ->  ActiveMessageC.Receive[AM_TIMESYNCMSG];
+  TimeSyncP.Send            ->  ActiveMessageC.TimeSyncAMSendMilli[TIMESYNC_AM_FTSP];
+  TimeSyncP.Receive         ->  ActiveMessageC.Receive[TIMESYNC_AM_FTSP];
   TimeSyncP.TimeSyncPacket  ->  ActiveMessageC;
 
   components HilTimerMilliC;
@@ -62,6 +62,9 @@ implementation
   components new TimerMilliC() as TimerC;
   TimeSyncP.Timer ->  TimerC;
 
+  components RandomC;
+  TimeSyncP.Random -> RandomC;
+
 #if defined(TIMESYNC_LEDS)
   components LedsC;
 #else
index f45c2b346f68aa5da56be9b38f2d833f1b5fb66c..74a90197ae601cb5e77a9f15c91c38406ab74902 100644 (file)
@@ -49,7 +49,7 @@ typedef nx_struct TimeSyncMsg
 } TimeSyncMsg;
 
 enum {
-    AM_TIMESYNCMSG = 0x3E,
+    TIMESYNC_AM_FTSP = 0x3E,
     TIMESYNCMSG_LEN = sizeof(TimeSyncMsg) - sizeof(nx_uint32_t),
     TS_TIMER_MODE = 0,      // see TimeSyncMode interface
     TS_USER_MODE = 1,       // see TimeSyncMode interface
index db59408b5054f625187cd4ea1515b55f48dc0abc..177c1dff6920e4a70ce53ef239ba29373626f5be 100644 (file)
@@ -43,6 +43,7 @@ generic module TimeSyncP(typedef precision_tag)
         interface TimeSyncAMSend<precision_tag,uint32_t> as Send;
         interface Receive;
         interface Timer<TMilli>;
+        interface Random;
         interface Leds;
         interface TimeSyncPacket<precision_tag,uint32_t>;
         interface LocalTime<precision_tag> as LocalTime;
@@ -316,6 +317,7 @@ implementation
         if( diff < -16 || diff > 16 )
             return msg;
 #endif
+
         if( (state & STATE_PROCESSING) == 0
             && call TimeSyncPacket.isValid(msg)) {
             message_t* old = processedMsg;
@@ -358,7 +360,6 @@ implementation
         }
 
         outgoingMsg->globalTime = globalTime;
-
 #ifdef LOW_POWER_LISTENING
         call LowPowerListening.setRemoteWakeupInterval(&outgoingMsgBuffer, LPL_INTERVAL);
 #endif
@@ -414,11 +415,8 @@ implementation
     }
 
     command error_t TimeSyncMode.setMode(uint8_t mode_){
-        if (mode == mode_)
-            return SUCCESS;
-
         if (mode_ == TS_TIMER_MODE){
-            call Timer.startPeriodic((uint32_t)1000 * BEACON_RATE);
+            call Timer.startPeriodic((uint32_t)(896U+(call Random.rand16()&0xFF)) * BEACON_RATE);
         }
         else
             call Timer.stop();
@@ -466,10 +464,9 @@ implementation
 
     command error_t StdControl.start()
     {
-        mode = TS_TIMER_MODE;
         heartBeats = 0;
         outgoingMsg->nodeID = TOS_NODE_ID;
-        call Timer.startPeriodic((uint32_t)1000 * BEACON_RATE);
+        call TimeSyncMode.setMode(TS_TIMER_MODE);
 
         return SUCCESS;
     }