]> oss.titaniummirror.com Git - tinyos-2.x.git/commitdiff
started support for FTSP
authorandreaskoepke <andreaskoepke>
Wed, 9 Jul 2008 10:00:21 +0000 (10:00 +0000)
committerandreaskoepke <andreaskoepke>
Wed, 9 Jul 2008 10:00:21 +0000 (10:00 +0000)
tos/platforms/eyesIFX/ActiveMessageC.nc
tos/platforms/eyesIFX/LocalTimeC.nc
tos/platforms/eyesIFX/LocalTimeP.nc
tos/platforms/eyesIFX/PacketStampC.nc [new file with mode: 0644]
tos/platforms/eyesIFX/PacketStampP.nc [new file with mode: 0644]
tos/platforms/eyesIFX/TimeSyncMessageC.nc [new file with mode: 0644]
tos/platforms/eyesIFX/TimeSyncMessageP.nc [new file with mode: 0644]

index 4aac3c6815348f58b9e2ae99bdec7f279803e95c..0b5b1d5e54bf9fa348cf12402a211f75ce0fa69c 100644 (file)
@@ -45,6 +45,8 @@
  * @date July 20 2005
  */
 
+#include "Timer.h"
+
 configuration ActiveMessageC {
   provides {
     interface SplitControl;
@@ -57,11 +59,15 @@ configuration ActiveMessageC {
     interface AMPacket;
 
     interface PacketAcknowledgements;
+
+    interface PacketTimeStamp<T32khz, uint32_t> as PacketTimeStamp32khz;
+    interface PacketTimeStamp<TMilli, uint32_t> as PacketTimeStampMilli;
   }
 }
 implementation {
   components ActiveMessageFilterC as Filter;
   components Tda5250ActiveMessageC as AM;
+  components PacketStampC as PacketStamp;
 
   AMSend       = Filter;
   Receive      = Filter.Receive;
@@ -77,4 +83,7 @@ implementation {
   AMPacket     = AM;
 
   PacketAcknowledgements = AM;
+
+  PacketTimeStamp32khz = PacketStamp;
+  PacketTimeStampMilli = PacketStamp;
 }
index 23bc816af6fe3ebf2d4fc8d94c98287358330786..5ad9f1e0b1e863fe235fb287232f3ca6afd691ac 100644 (file)
 
 configuration LocalTimeC {
     provides {  
-        interface LocalTime<T32khz> as LocalTime;
+        interface LocalTime<T32khz> as LocalTimeT32khz;
+        interface LocalTime<TMilli> as LocalTimeTMilli;
         interface WideLocalTime<T32khz> as WideLocalTime;
     }
 }
 implementation  {
     components LocalTimeP, Counter32khz16C as Counter;
-    LocalTime = LocalTimeP;
+    LocalTimeT32khz = LocalTimeP;
+    LocalTimeTMilli = LocalTimeP;
     WideLocalTime = LocalTimeP;
     LocalTimeP.Counter32khz16 -> Counter;
 }
index ac27c6c134dae791258aeb8fb8bef8f1878957e0..f637469d774ad7eb4b579e07eb0baf55c354cc1c 100644 (file)
@@ -30,6 +30,7 @@
 module LocalTimeP {
     provides {  
         interface LocalTime<T32khz> as LocalTime32kHz;
+        interface LocalTime<TMilli> as LocalTimeTMilli;
         interface WideLocalTime<T32khz> as WideLocalTime;
     }
     uses {
@@ -91,5 +92,9 @@ implementation  {
         if(counter2sec == 0) ++dayCounter;
         if(dayCounter < 0) dayCounter = 0;
     }
+    
+    async command uint32_t LocalTimeTMilli.get() {
+        return (call LocalTime32kHz.get() / 32);
+    }
 }
 
diff --git a/tos/platforms/eyesIFX/PacketStampC.nc b/tos/platforms/eyesIFX/PacketStampC.nc
new file mode 100644 (file)
index 0000000..a28d994
--- /dev/null
@@ -0,0 +1,41 @@
+/* -*- mode:c++; indent-tabs-mode:nil -*- 
+ * Copyright (c) 2008, Technische Universitaet Berlin
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without 
+ * modification, are permitted provided that the following conditions 
+ * are met:
+ * - Redistributions of source code must retain the above copyright notice,
+ *   this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright 
+ *   notice, this list of conditions and the following disclaimer in the 
+ *   documentation and/or other materials provided with the distribution.
+ * - Neither the name of the Technische Universitaet Berlin nor the names 
+ *   of its contributors may be used to endorse or promote products derived
+ *   from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED 
+ * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, 
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE 
+ * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+configuration PacketStampC {
+    provides {  
+        interface PacketTimeStamp<T32khz, uint32_t> as PacketTimeStamp32khz;
+        interface PacketTimeStamp<TMilli, uint32_t> as PacketTimeStampMilli;
+    }
+}
+implementation  {
+    components PacketStampP as PS;
+    PacketTimeStamp32khz = PS;
+    PacketTimeStampMilli = PS;
+}
+
diff --git a/tos/platforms/eyesIFX/PacketStampP.nc b/tos/platforms/eyesIFX/PacketStampP.nc
new file mode 100644 (file)
index 0000000..5893a1b
--- /dev/null
@@ -0,0 +1,63 @@
+/* -*- mode:c++; indent-tabs-mode:nil -*- 
+ * Copyright (c) 2008, Technische Universitaet Berlin
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without 
+ * modification, are permitted provided that the following conditions 
+ * are met:
+ * - Redistributions of source code must retain the above copyright notice,
+ *   this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright 
+ *   notice, this list of conditions and the following disclaimer in the 
+ *   documentation and/or other materials provided with the distribution.
+ * - Neither the name of the Technische Universitaet Berlin nor the names 
+ *   of its contributors may be used to endorse or promote products derived
+ *   from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED 
+ * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, 
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE 
+ * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "radiopacketfunctions.h"
+
+module PacketStampP {
+    provides {  
+        interface PacketTimeStamp<T32khz, uint32_t> as PacketTimeStamp32khz;
+        interface PacketTimeStamp<TMilli, uint32_t> as PacketTimeStampMilli;
+    }
+}
+implementation  {
+    async command bool PacketTimeStamp32khz.isValid(message_t* msg) {
+        return TRUE;
+    }
+    async command void PacketTimeStamp32khz.clear(message_t* msg) {
+    }
+    async command uint32_t PacketTimeStamp32khz.timestamp(message_t* msg) {
+        return getMetadata(msg)->time;
+    }
+    async command void PacketTimeStamp32khz.set(message_t* msg, uint32_t value) {
+        getMetadata(msg)->time = value;
+    }
+    
+    async command bool PacketTimeStampMilli.isValid(message_t* msg) {
+        return TRUE;
+    }
+    async command void PacketTimeStampMilli.clear(message_t* msg) {
+    }
+    async command uint32_t PacketTimeStampMilli.timestamp(message_t* msg) {
+        return (getMetadata(msg)->time / 32);
+    }
+    async command void PacketTimeStampMilli.set(message_t* msg, uint32_t value) {
+        getMetadata(msg)->time = value * 32;
+    }
+}
+
diff --git a/tos/platforms/eyesIFX/TimeSyncMessageC.nc b/tos/platforms/eyesIFX/TimeSyncMessageC.nc
new file mode 100644 (file)
index 0000000..963faff
--- /dev/null
@@ -0,0 +1,72 @@
+/* -*- mode:c++; indent-tabs-mode:nil -*- 
+ * Copyright (c) 2008, Technische Universitaet Berlin
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without 
+ * modification, are permitted provided that the following conditions 
+ * are met:
+ * - Redistributions of source code must retain the above copyright notice,
+ *   this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright 
+ *   notice, this list of conditions and the following disclaimer in the 
+ *   documentation and/or other materials provided with the distribution.
+ * - Neither the name of the Technische Universitaet Berlin nor the names 
+ *   of its contributors may be used to endorse or promote products derived
+ *   from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED 
+ * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, 
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE 
+ * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/**
+ * Expose the time sync capabilities of the eyesIFX platform 
+ */
+configuration TimeSyncMessageC {
+  provides {
+    interface SplitControl;
+    interface Receive[am_id_t id];
+    interface Receive as Snoop[am_id_t id];
+    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;
+
+    interface TimeSyncAMSend<TMilli, uint32_t> as TimeSyncAMSendMilli[am_id_t id];
+    interface TimeSyncPacket<TMilli, uint32_t> as TimeSyncPacketMilli;
+  }
+}
+implementation {
+    components TimeSyncMessageP as TS;
+    components ActiveMessageC as AM;
+
+    SplitControl = AM;
+
+    Receive      = AM.Receive;
+    Snoop        = AM.Snoop;
+    Packet       = AM;
+    AMPacket     = AM;
+    
+    PacketTimeStamp32khz = AM;
+    PacketTimeStampMilli = AM;
+
+    TS.SubSend -> AM.AMSend;
+    TS.AMPacket -> AM.AMPacket;
+
+    TimeSyncAMSend32khz       = TS;
+    TimeSyncAMSendMilli       = TS;
+    TimeSyncPacket32khz       = TS;
+    TimeSyncPacketMilli       = TS;
+}
diff --git a/tos/platforms/eyesIFX/TimeSyncMessageP.nc b/tos/platforms/eyesIFX/TimeSyncMessageP.nc
new file mode 100644 (file)
index 0000000..6748e14
--- /dev/null
@@ -0,0 +1,133 @@
+/* -*- mode:c++; indent-tabs-mode:nil -*- 
+ * Copyright (c) 2008, Technische Universitaet Berlin
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without 
+ * modification, are permitted provided that the following conditions 
+ * are met:
+ * - Redistributions of source code must retain the above copyright notice,
+ *   this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright 
+ *   notice, this list of conditions and the following disclaimer in the 
+ *   documentation and/or other materials provided with the distribution.
+ * - Neither the name of the Technische Universitaet Berlin nor the names 
+ *   of its contributors may be used to endorse or promote products derived
+ *   from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED 
+ * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, 
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE 
+ * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/**
+ * Expose the time sync capabilities of the eyesIFX platform 
+ */
+#include "radiopacketfunctions.h"
+
+module TimeSyncMessageP {
+    provides {
+        interface TimeSyncAMSend<T32khz, uint32_t> as TimeSyncAMSend32khz[am_id_t id];
+        interface TimeSyncPacket<T32khz, uint32_t> as TimeSyncPacket32khz;
+
+        interface TimeSyncAMSend<TMilli, uint32_t> as TimeSyncAMSendMilli[am_id_t id];
+        interface TimeSyncPacket<TMilli, uint32_t> as TimeSyncPacketMilli;
+    }
+    uses {
+        interface AMSend as SubSend[am_id_t id];
+        interface AMPacket;
+    }
+}
+implementation {
+    typedef enum 
+    {
+        NONE,
+        RES_32_K,
+        RES_1_K
+    } resolution_t;
+
+    resolution_t resolution = NONE;
+    
+    command error_t TimeSyncAMSend32khz.send[am_id_t id](am_addr_t addr,
+                                                         message_t* msg,
+                                                         uint8_t len,
+                                                         uint32_t event_time) {
+        getMetadata(msg)->time = event_time;
+        resolution = RES_32_K;
+        return call SubSend.send[id](addr, msg, len);
+    }
+    
+    command error_t TimeSyncAMSend32khz.cancel[am_id_t id](message_t* msg) {
+        return call SubSend.cancel[id](msg);
+    }
+    
+    command uint8_t TimeSyncAMSend32khz.maxPayloadLength[am_id_t id]() {
+        return call SubSend.maxPayloadLength[id]();
+    }
+    
+    command void* TimeSyncAMSend32khz.getPayload[am_id_t id](message_t* m, uint8_t len) {
+        return call SubSend.getPayload[id](m, len);
+    }
+
+
+    command bool TimeSyncPacket32khz.isValid(message_t* msg) {
+        return TRUE;
+    }
+    
+    command uint32_t TimeSyncPacket32khz.eventTime(message_t* msg) {
+        return getMetadata(msg)->time;
+    };
+    
+    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);
+        resolution = RES_1_K;
+        return call SubSend.send[id](addr, msg, len);
+    }
+    
+    command error_t TimeSyncAMSendMilli.cancel[am_id_t id](message_t* msg) {
+        return call SubSend.cancel[id](msg);
+    }
+    
+    command uint8_t TimeSyncAMSendMilli.maxPayloadLength[am_id_t id]() {
+        return call SubSend.maxPayloadLength[id]();
+    }
+    
+    command void* TimeSyncAMSendMilli.getPayload[am_id_t id](message_t* m, uint8_t len) {
+        return call SubSend.getPayload[id](m, len);
+    }
+
+    command bool TimeSyncPacketMilli.isValid(message_t* msg) {
+        return TRUE;
+    }
+    
+    command uint32_t TimeSyncPacketMilli.eventTime(message_t* msg) {
+        return (getMetadata(msg)->time / 32);
+    };
+
+    event void SubSend.sendDone[uint8_t id](message_t* msg, error_t result) {
+        if(resolution == RES_32_K) {
+            signal TimeSyncAMSend32khz.sendDone[id](msg, result);
+        }
+        else {
+            signal TimeSyncAMSendMilli.sendDone[id](msg, result);
+        }
+    }
+
+    default event void TimeSyncAMSend32khz.sendDone[uint8_t id](message_t* msg, error_t err) {
+        return;
+    }
+    default event void TimeSyncAMSendMilli.sendDone[uint8_t id](message_t* msg, error_t err) {
+        return;
+    }
+}
+