]> oss.titaniummirror.com Git - tinyos-2.x.git/commitdiff
Make I-frames the default in IEE154 6LOWPAN support
authormmaroti <mmaroti>
Tue, 17 Jun 2008 09:29:59 +0000 (09:29 +0000)
committermmaroti <mmaroti>
Tue, 17 Jun 2008 09:29:59 +0000 (09:29 +0000)
tos/chips/rf230/IEEE154NetworkLayerC.nc [new file with mode: 0644]
tos/chips/rf230/IEEE154NetworkLayerP.nc [new file with mode: 0644]
tos/chips/rf230/IEEE154Packet.h
tos/chips/rf230/IEEE154Packet.nc
tos/chips/rf230/IEEE154PacketP.nc
tos/chips/rf230/RF230ActiveMessageC.nc
tos/chips/rf230/RF230PacketP.nc

diff --git a/tos/chips/rf230/IEEE154NetworkLayerC.nc b/tos/chips/rf230/IEEE154NetworkLayerC.nc
new file mode 100644 (file)
index 0000000..2cfd690
--- /dev/null
@@ -0,0 +1,53 @@
+/*
+ * Copyright (c) 2007, Vanderbilt University
+ * All rights reserved.
+ *
+ * Permission to use, copy, modify, and distribute this software and its
+ * documentation for any purpose, without fee, and without written agreement is
+ * hereby granted, provided that the above copyright notice, the following
+ * two paragraphs and the author appear in all copies of this software.
+ * 
+ * IN NO EVENT SHALL THE VANDERBILT UNIVERSITY BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT
+ * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE VANDERBILT
+ * UNIVERSITY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ * 
+ * THE VANDERBILT UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
+ * AND FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE VANDERBILT UNIVERSITY HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ * Author: Miklos Maroti
+ */
+
+configuration IEEE154NetworkLayerC
+{
+       provides
+       {
+               interface SplitControl;
+               interface Send;
+               interface Receive;
+       }
+       uses
+       {
+               interface SplitControl as SubControl;
+               interface Send as SubSend;
+               interface Receive as SubReceive;
+       }
+}
+
+implementation
+{
+       components IEEE154NetworkLayerP, IEEE154PacketC;
+
+       SplitControl = SubControl;
+
+       Send = IEEE154NetworkLayerP;
+       Receive = IEEE154NetworkLayerP;
+
+       SubSend = IEEE154NetworkLayerP;
+       SubReceive = IEEE154NetworkLayerP;
+
+       IEEE154NetworkLayerP.IEEE154Packet -> IEEE154PacketC;
+}
diff --git a/tos/chips/rf230/IEEE154NetworkLayerP.nc b/tos/chips/rf230/IEEE154NetworkLayerP.nc
new file mode 100644 (file)
index 0000000..f4abf63
--- /dev/null
@@ -0,0 +1,87 @@
+/*
+ * Copyright (c) 2007, Vanderbilt University
+ * All rights reserved.
+ *
+ * Permission to use, copy, modify, and distribute this software and its
+ * documentation for any purpose, without fee, and without written agreement is
+ * hereby granted, provided that the above copyright notice, the following
+ * two paragraphs and the author appear in all copies of this software.
+ * 
+ * IN NO EVENT SHALL THE VANDERBILT UNIVERSITY BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT
+ * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE VANDERBILT
+ * UNIVERSITY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ * 
+ * THE VANDERBILT UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
+ * AND FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE VANDERBILT UNIVERSITY HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ * Author: Miklos Maroti
+ */
+
+module IEEE154NetworkLayerP
+{
+       provides
+       {
+               interface Send;
+               interface Receive;
+               interface Receive as NonTinyosReceive[uint8_t network];
+       }
+
+       uses
+       {
+               interface Send as SubSend;
+               interface Receive as SubReceive;
+
+               interface IEEE154Packet;
+       }
+}
+
+implementation
+{
+#ifndef TINYOS_6LOWPAN_NETWORK_ID
+#define TINYOS_6LOWPAN_NETWORK_ID 0x3f
+#endif
+
+       command error_t Send.send(message_t* msg, uint8_t len)
+       {
+               call IEEE154Packet.set6LowPan(msg, TINYOS_6LOWPAN_NETWORK_ID);
+               return call SubSend.send(msg, len);
+       }
+
+       command error_t Send.cancel(message_t* msg)
+       {
+               return call SubSend.cancel(msg);
+       }
+
+       command uint8_t Send.maxPayloadLength()
+       {
+               return call SubSend.maxPayloadLength();
+       }
+
+       command void* Send.getPayload(message_t* msg, uint8_t len)
+       {
+               return call SubSend.getPayload(msg, len);
+       }
+  
+       event void SubSend.sendDone(message_t* msg, error_t error)
+       {
+               signal Send.sendDone(msg, error);
+       }
+  
+       event message_t *SubReceive.receive(message_t *msg, void *payload, uint8_t len)
+       {
+               uint8_t network = call IEEE154Packet.get6LowPan(msg);
+               if( network == TINYOS_6LOWPAN_NETWORK_ID )
+                       return signal Receive.receive(msg, payload, len);
+               else
+                       return signal NonTinyosReceive.receive[network](msg, payload, len);
+       }
+
+       default event message_t *NonTinyosReceive.receive[uint8_t network](message_t *msg, void *payload, uint8_t len)
+       {
+               return msg;
+       }
+}
index 796a4fa10e1f9c71233d9c4e3a6006a670b74c92..62fe16b0e2749fb6f95d1dc17c11908ec44bc957 100644 (file)
@@ -34,7 +34,7 @@ typedef nx_struct ieee154_header_t
        nxle_uint16_t src;
 
 // I-Frame 6LowPAN interoperability byte
-#ifdef IEEE154_6LOWPAN 
+#ifndef TFRAMES_ENABLED        
        nxle_uint8_t network;
 #endif
 
index 2c5664c2e7a4788e88f60e5784d13bc6778f99d4..fd171743ca252900721d73be24c169886fb3b8af 100644 (file)
@@ -159,7 +159,7 @@ interface IEEE154Packet
         */
        async command void setSrcAddr(message_t* msg, uint16_t addr);
 
-#ifdef IEEE154_6LOWPAN
+#ifndef TFRAMES_ENABLED
 
        /**
         * Returns the value of the 6LowPan network field.
index 73395da14c296e712c4811bd6687bfab746e1290..cb898244f4432cb7354bdcc7b3246d512ac1c26b 100644 (file)
@@ -191,7 +191,7 @@ implementation
                getHeader(msg)->src = addr;
        }
 
-#ifdef IEEE154_6LOWPAN
+#ifndef TFRAMES_ENABLED
 
        inline async command uint8_t IEEE154Packet.get6LowPan(message_t* msg)
        {
index d06a430134f03374ea86c2320aafa14a71090f5e..34315e912955e4833998899386b52e93ad4d923b 100644 (file)
@@ -75,6 +75,13 @@ implementation
 #else  
        components new DummyLayerC() as LowPowerListeningLayerC;
 #endif
+
+#ifdef TFRAMES_ENABLED
+       components new DummyLayerC() as IEEE154NetworkLayerC;
+#else
+       components IEEE154NetworkLayerC;
+#endif
+
        components MessageBufferLayerC;
        components UniqueLayerC;
        components TrafficMonitorLayerC;
index 646cf122c779dc6c293800d38dd62473a3319a8d..09b4977742ddd71ab9ac07418c0113af2ae52ba6 100644 (file)
@@ -55,7 +55,7 @@ implementation
        {
                PACKET_LENGTH_INCREASE = 
                        sizeof(rf230packet_header_t) - 1        // the 8-bit length field is not counted
-                       + sizeof(ieee154_footer_t),                     // the CRC is not stored in memory
+                       + sizeof(ieee154_footer_t),             // the CRC is not stored in memory
        };
 
        inline rf230packet_metadata_t* getMeta(message_t* msg)
@@ -69,10 +69,6 @@ implementation
        {
                call IEEE154Packet.createDataFrame(msg);
 
-#ifdef IEEE154_6LOWPAN
-               call IEEE154Packet.set6LowPan(msg, TINYOS_6LOWPAN_NETWORK_ID);
-#endif
-
                getMeta(msg)->flags = RF230PACKET_CLEAR_METADATA;
        }
 
@@ -81,13 +77,11 @@ implementation
                call IEEE154Packet.setLength(msg, len + PACKET_LENGTH_INCREASE);
        }
 
-       // TODO: make Packet.payloadLength async
        inline command uint8_t Packet.payloadLength(message_t* msg) 
        {
                return call IEEE154Packet.getLength(msg) - PACKET_LENGTH_INCREASE;
        }
 
-       // TODO: make Packet.maxPayloadLength async
        inline command uint8_t Packet.maxPayloadLength()
        {
                return TOSH_DATA_LENGTH;