From: andreaskoepke Date: Wed, 9 Jul 2008 10:00:21 +0000 (+0000) Subject: started support for FTSP X-Git-Tag: release_tinyos_2_1_0_0~99 X-Git-Url: https://oss.titaniummirror.com/gitweb/?p=tinyos-2.x.git;a=commitdiff_plain;h=f98e262821fa1e4db0ff3ad238b51f9cca4a25f3 started support for FTSP --- diff --git a/tos/platforms/eyesIFX/ActiveMessageC.nc b/tos/platforms/eyesIFX/ActiveMessageC.nc index 4aac3c68..0b5b1d5e 100644 --- a/tos/platforms/eyesIFX/ActiveMessageC.nc +++ b/tos/platforms/eyesIFX/ActiveMessageC.nc @@ -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 as PacketTimeStamp32khz; + interface PacketTimeStamp 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; } diff --git a/tos/platforms/eyesIFX/LocalTimeC.nc b/tos/platforms/eyesIFX/LocalTimeC.nc index 23bc816a..5ad9f1e0 100644 --- a/tos/platforms/eyesIFX/LocalTimeC.nc +++ b/tos/platforms/eyesIFX/LocalTimeC.nc @@ -29,13 +29,15 @@ configuration LocalTimeC { provides { - interface LocalTime as LocalTime; + interface LocalTime as LocalTimeT32khz; + interface LocalTime as LocalTimeTMilli; interface WideLocalTime as WideLocalTime; } } implementation { components LocalTimeP, Counter32khz16C as Counter; - LocalTime = LocalTimeP; + LocalTimeT32khz = LocalTimeP; + LocalTimeTMilli = LocalTimeP; WideLocalTime = LocalTimeP; LocalTimeP.Counter32khz16 -> Counter; } diff --git a/tos/platforms/eyesIFX/LocalTimeP.nc b/tos/platforms/eyesIFX/LocalTimeP.nc index ac27c6c1..f637469d 100644 --- a/tos/platforms/eyesIFX/LocalTimeP.nc +++ b/tos/platforms/eyesIFX/LocalTimeP.nc @@ -30,6 +30,7 @@ module LocalTimeP { provides { interface LocalTime as LocalTime32kHz; + interface LocalTime as LocalTimeTMilli; interface WideLocalTime 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 index 00000000..a28d9946 --- /dev/null +++ b/tos/platforms/eyesIFX/PacketStampC.nc @@ -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 as PacketTimeStamp32khz; + interface PacketTimeStamp 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 index 00000000..5893a1b8 --- /dev/null +++ b/tos/platforms/eyesIFX/PacketStampP.nc @@ -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 as PacketTimeStamp32khz; + interface PacketTimeStamp 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 index 00000000..963fafff --- /dev/null +++ b/tos/platforms/eyesIFX/TimeSyncMessageC.nc @@ -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 as PacketTimeStamp32khz; + interface PacketTimeStamp as PacketTimeStampMilli; + + interface TimeSyncAMSend as TimeSyncAMSend32khz[am_id_t id]; + interface TimeSyncPacket as TimeSyncPacket32khz; + + interface TimeSyncAMSend as TimeSyncAMSendMilli[am_id_t id]; + interface TimeSyncPacket 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 index 00000000..6748e144 --- /dev/null +++ b/tos/platforms/eyesIFX/TimeSyncMessageP.nc @@ -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 as TimeSyncAMSend32khz[am_id_t id]; + interface TimeSyncPacket as TimeSyncPacket32khz; + + interface TimeSyncAMSend as TimeSyncAMSendMilli[am_id_t id]; + interface TimeSyncPacket 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; + } +} +