--- /dev/null
+/*
+ * 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;
+}
--- /dev/null
+/*
+ * 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;
+ }
+}
nxle_uint16_t src;
// I-Frame 6LowPAN interoperability byte
-#ifdef IEEE154_6LOWPAN
+#ifndef TFRAMES_ENABLED
nxle_uint8_t network;
#endif
*/
async command void setSrcAddr(message_t* msg, uint16_t addr);
-#ifdef IEEE154_6LOWPAN
+#ifndef TFRAMES_ENABLED
/**
* Returns the value of the 6LowPan network field.
getHeader(msg)->src = addr;
}
-#ifdef IEEE154_6LOWPAN
+#ifndef TFRAMES_ENABLED
inline async command uint8_t IEEE154Packet.get6LowPan(message_t* msg)
{
#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;
{
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)
{
call IEEE154Packet.createDataFrame(msg);
-#ifdef IEEE154_6LOWPAN
- call IEEE154Packet.set6LowPan(msg, TINYOS_6LOWPAN_NETWORK_ID);
-#endif
-
getMeta(msg)->flags = RF230PACKET_CLEAR_METADATA;
}
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;