]> oss.titaniummirror.com Git - tinyos-2.x.git/commitdiff
Comply with semantics described in TEP, use HilTimerMilli as base for LocalTime in...
authorandreaskoepke <andreaskoepke>
Thu, 10 Jul 2008 12:47:44 +0000 (12:47 +0000)
committerandreaskoepke <andreaskoepke>
Thu, 10 Jul 2008 12:47:44 +0000 (12:47 +0000)
TestFtsp works, however FTSP relies on the assumption that
message_t.data = call Send.getPayload (just like BaseStation)
but this is not true for RedMac/SpeckMacD on an eyesIFX node.

After suitable modification of TimeSyncP (replace
TimeSyncMsg* msg = (TimeSyncMsg*)(processedMsg->data);
with
TimeSyncMsg* msg = (TimeSyncMsg*)(call Send.getPayload(processedMsg, sizeof(TimeSyncMsg)));
it works.

tos/platforms/eyesIFX/LocalTimeC.nc
tos/platforms/eyesIFX/LocalTimeP.nc
tos/platforms/eyesIFX/PacketStampC.nc
tos/platforms/eyesIFX/PacketStampP.nc
tos/platforms/eyesIFX/TimeSyncMessageC.nc
tos/platforms/eyesIFX/TimeSyncMessageP.nc

index 5ad9f1e0b1e863fe235fb287232f3ca6afd691ac..3812f4167fa5fc9c805f9e955ba15b8d35693b11 100644 (file)
 configuration LocalTimeC {
     provides {  
         interface LocalTime<T32khz> as LocalTimeT32khz;
-        interface LocalTime<TMilli> as LocalTimeTMilli;
         interface WideLocalTime<T32khz> as WideLocalTime;
     }
 }
 implementation  {
     components LocalTimeP, Counter32khz16C as Counter;
     LocalTimeT32khz = LocalTimeP;
-    LocalTimeTMilli = LocalTimeP;
     WideLocalTime = LocalTimeP;
     LocalTimeP.Counter32khz16 -> Counter;
 }
index 2136381a1baa5f223a4880c6af932389a07e568f..afebf830fa9cfcd7f9afa35fb138338abac2982f 100644 (file)
@@ -30,7 +30,6 @@
 module LocalTimeP {
     provides {  
         interface LocalTime<T32khz> as LocalTime32kHz;
-        interface LocalTime<TMilli> as LocalTimeTMilli;
         interface WideLocalTime<T32khz> as WideLocalTime;
     }
     uses {
@@ -91,10 +90,6 @@ implementation  {
         ++counter2sec;
         if(counter2sec == 0) ++dayCounter;
         if(dayCounter < 0) dayCounter = 0;
-    }
-    
-    async command uint32_t LocalTimeTMilli.get() {
-        return (call WideLocalTime.get() / 32);
-    }
+    }    
 }
 
index 88f1a0a1987ac75e66f4430838bf3f6c9f0543af..276914fd197d25bc52cdf9fa574b46ae5332a887 100644 (file)
  */
 
 configuration PacketStampC {
-    provides {  
+    provides {
+        interface TimeSyncPacket<T32khz, uint32_t> as TimeSyncPacket32khz;
         interface PacketTimeStamp<T32khz, uint32_t> as PacketTimeStamp32khz;
+        
+        interface TimeSyncPacket<TMilli, uint32_t> as TimeSyncPacketMilli;
         interface PacketTimeStamp<TMilli, uint32_t> as PacketTimeStampMilli;
     }
 }
 implementation  {
     components PacketStampP as PS;
     components LocalTimeC as LT;
-    
+    components HilTimerMilliC as HilMilli;    
+
     PacketTimeStamp32khz = PS;
+    TimeSyncPacket32khz = PS;
+    
     PacketTimeStampMilli = PS;
-    PS.LocalTimeMilli -> LT;  
+    TimeSyncPacketMilli = PS;
+    
+    PS.LocalTime32khz -> LT;
+    PS.LocalTimeMilli -> HilMilli;
 }
 
index e92f3c273acc7dc265d3047252e2d274899369f4..29214129ac698817e8d57c2c992bbfe10ad10176 100644 (file)
 module PacketStampP {
     provides {  
         interface PacketTimeStamp<T32khz, uint32_t> as PacketTimeStamp32khz;
+        interface TimeSyncPacket<T32khz, uint32_t> as TimeSyncPacket32khz;
+        
         interface PacketTimeStamp<TMilli, uint32_t> as PacketTimeStampMilli;
+        interface TimeSyncPacket<TMilli, uint32_t> as TimeSyncPacketMilli;
     }
     uses {
         interface LocalTime<TMilli> as LocalTimeMilli;
+        interface LocalTime<T32khz> as LocalTime32khz;
     }
 }
 implementation  {
-    async command bool PacketTimeStamp32khz.isValid(message_t* msg) {
-        return TRUE;
+    // 32 kHz interface
+    // get the time when SFD event was generated
+    async command uint32_t PacketTimeStamp32khz.timestamp(message_t* msg) {
+        return getMetadata(msg)->sfdtime;
     }
-    async command void PacketTimeStamp32khz.clear(message_t* msg) {
+    // set the time when SFD event was generated?
+    async command void PacketTimeStamp32khz.set(message_t* msg, uint32_t value) {
+        getMetadata(msg)->sfdtime = value;
     }
-    async command uint32_t PacketTimeStamp32khz.timestamp(message_t* msg) {
+    // return time when event was generated at the source
+    command uint32_t TimeSyncPacket32khz.eventTime(message_t* msg) {
         return getMetadata(msg)->time;
+    };
+    
+    // Milli interface
+    // get the time when SFD was send/received
+    async command uint32_t PacketTimeStampMilli.timestamp(message_t* msg) {
+        return call LocalTimeMilli.get() -
+            (call LocalTime32khz.get() - getMetadata(msg)->sfdtime)/32;
     }
-    async command void PacketTimeStamp32khz.set(message_t* msg, uint32_t value) {
-        getMetadata(msg)->time = value;
+    // set the time when SFD was send/received?
+    async command void PacketTimeStampMilli.set(message_t* msg, uint32_t value) {
+        getMetadata(msg)->sfdtime =
+            call LocalTime32khz.get() - (call LocalTimeMilli.get() - value)*32;
     }
-    async command bool PacketTimeStampMilli.isValid(message_t* msg) {
+    // return time when event was generated
+    command uint32_t TimeSyncPacketMilli.eventTime(message_t* msg) {
+        return call LocalTimeMilli.get() -
+            (call LocalTime32khz.get() - getMetadata(msg)->time)/32;        
+    };
+
+    // not really supported functions, valid section
+    command bool TimeSyncPacket32khz.isValid(message_t* msg) {
         return TRUE;
     }
-    async command void PacketTimeStampMilli.clear(message_t* msg) {
+    command bool TimeSyncPacketMilli.isValid(message_t* msg) {
+        return TRUE;
     }
-    async command uint32_t PacketTimeStampMilli.timestamp(message_t* msg) {
-        uint32_t now = call LocalTimeMilli.get();
-        uint32_t delay = (now * 32) - (getMetadata(msg)->time);
-        return now - (delay / 32);
+    async command bool PacketTimeStamp32khz.isValid(message_t* msg) {
+        return TRUE;
     }
-    async command void PacketTimeStampMilli.set(message_t* msg, uint32_t value) {
-        getMetadata(msg)->time = value * 32;
+    async command bool PacketTimeStampMilli.isValid(message_t* msg) {
+        return TRUE;
+    }
+    
+    // not really supported functions, clear section
+    async command void PacketTimeStamp32khz.clear(message_t* msg) {
+    }
+    async command void PacketTimeStampMilli.clear(message_t* msg) {
     }
 }
 
index 03ace249c84c09ea3bb48287da6d2575ac82f9fc..cfc4f7263f033a68235a9d0b9a1bfa13462cae13 100644 (file)
@@ -38,9 +38,6 @@ configuration TimeSyncMessageC {
     interface Packet;
     interface AMPacket;
 
-    interface PacketTimeStamp<T32khz, uint32_t> as PacketTimeStamp32khz;
-    interface PacketTimeStamp<TMilli, uint32_t> as PacketTimeStampMilli;
-
     interface TimeSyncAMSend<T32khz, uint32_t> as TimeSyncAMSend32khz[am_id_t id];
     interface TimeSyncPacket<T32khz, uint32_t> as TimeSyncPacket32khz;
 
@@ -51,7 +48,7 @@ configuration TimeSyncMessageC {
 implementation {
     components TimeSyncMessageP as TS;
     components ActiveMessageC as AM;
-    components LocalTimeC as LT;
+    components PacketStampC as PS;
     
     SplitControl = AM;
 
@@ -60,13 +57,12 @@ implementation {
     Packet       = AM;
     AMPacket     = AM;
     
-    PacketTimeStamp32khz = AM;
-    PacketTimeStampMilli = AM;
-
     TS.SubSend -> AM.AMSend;
     TS.AMPacket -> AM.AMPacket;
-    TS.LocalTimeMilli -> LT;
 
+    TS.PacketTimeStamp32khz -> PS;
+    TS.PacketTimeStampMilli -> PS;
+    
     TimeSyncAMSend32khz       = TS;
     TimeSyncAMSendMilli       = TS;
     TimeSyncPacket32khz       = TS;
index 9eceba8bad2615326a7ad6e8e7011a43e56c8682..32b96f26641c1eebee3cd495cc7ff7b38bb17dfe 100644 (file)
@@ -30,7 +30,6 @@
 /**
  * Expose the time sync capabilities of the eyesIFX platform 
  */
-#include "radiopacketfunctions.h"
 
 module TimeSyncMessageP {
     provides {
@@ -43,7 +42,8 @@ module TimeSyncMessageP {
     uses {
         interface AMSend as SubSend[am_id_t id];
         interface AMPacket;
-        interface LocalTime<TMilli> as LocalTimeMilli;
+        interface PacketTimeStamp<T32khz, uint32_t> as PacketTimeStamp32khz;
+        interface PacketTimeStamp<TMilli, uint32_t> as PacketTimeStampMilli;
     }
 }
 implementation {
@@ -60,7 +60,7 @@ implementation {
                                                          message_t* msg,
                                                          uint8_t len,
                                                          uint32_t event_time) {
-        getMetadata(msg)->time = event_time;
+        call PacketTimeStamp32khz.set(msg, event_time);
         resolution = RES_32_K;
         return call SubSend.send[id](addr, msg, len);
     }
@@ -79,18 +79,19 @@ implementation {
 
 
     command bool TimeSyncPacket32khz.isValid(message_t* msg) {
-        return TRUE;
+        return call PacketTimeStamp32khz.isValid(msg);
     }
     
     command uint32_t TimeSyncPacket32khz.eventTime(message_t* msg) {
-        return getMetadata(msg)->time;
+        return call PacketTimeStamp32khz.timestamp(msg);
     };
     
     command error_t TimeSyncAMSendMilli.send[am_id_t id](am_addr_t addr,
                                                          message_t* msg,
                                                          uint8_t len,
                                                          uint32_t event_time) {
-        getMetadata(msg)->time = (event_time * 32);
+
+        call PacketTimeStampMilli.set(msg, event_time);
         resolution = RES_1_K;
         return call SubSend.send[id](addr, msg, len);
     }
@@ -108,13 +109,11 @@ implementation {
     }
 
     command bool TimeSyncPacketMilli.isValid(message_t* msg) {
-        return TRUE;
+        return call PacketTimeStamp32khz.isValid(msg);
     }
     
     command uint32_t TimeSyncPacketMilli.eventTime(message_t* msg) {
-        uint32_t now = call LocalTimeMilli.get();
-        uint32_t delay = (now * 32) - (getMetadata(msg)->time);
-        return now - (delay / 32);
+        return call PacketTimeStampMilli.timestamp(msg);        
     };
 
     event void SubSend.sendDone[uint8_t id](message_t* msg, error_t result) {