From da585280348729a63976b7a2fb22b301158f9fc1 Mon Sep 17 00:00:00 2001 From: mmaroti Date: Tue, 17 Jun 2008 09:29:59 +0000 Subject: [PATCH] Make I-frames the default in IEE154 6LOWPAN support --- tos/chips/rf230/IEEE154NetworkLayerC.nc | 53 +++++++++++++++ tos/chips/rf230/IEEE154NetworkLayerP.nc | 87 +++++++++++++++++++++++++ tos/chips/rf230/IEEE154Packet.h | 2 +- tos/chips/rf230/IEEE154Packet.nc | 2 +- tos/chips/rf230/IEEE154PacketP.nc | 2 +- tos/chips/rf230/RF230ActiveMessageC.nc | 7 ++ tos/chips/rf230/RF230PacketP.nc | 8 +-- 7 files changed, 151 insertions(+), 10 deletions(-) create mode 100644 tos/chips/rf230/IEEE154NetworkLayerC.nc create mode 100644 tos/chips/rf230/IEEE154NetworkLayerP.nc diff --git a/tos/chips/rf230/IEEE154NetworkLayerC.nc b/tos/chips/rf230/IEEE154NetworkLayerC.nc new file mode 100644 index 00000000..2cfd690e --- /dev/null +++ b/tos/chips/rf230/IEEE154NetworkLayerC.nc @@ -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 index 00000000..f4abf636 --- /dev/null +++ b/tos/chips/rf230/IEEE154NetworkLayerP.nc @@ -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; + } +} diff --git a/tos/chips/rf230/IEEE154Packet.h b/tos/chips/rf230/IEEE154Packet.h index 796a4fa1..62fe16b0 100644 --- a/tos/chips/rf230/IEEE154Packet.h +++ b/tos/chips/rf230/IEEE154Packet.h @@ -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 diff --git a/tos/chips/rf230/IEEE154Packet.nc b/tos/chips/rf230/IEEE154Packet.nc index 2c5664c2..fd171743 100644 --- a/tos/chips/rf230/IEEE154Packet.nc +++ b/tos/chips/rf230/IEEE154Packet.nc @@ -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. diff --git a/tos/chips/rf230/IEEE154PacketP.nc b/tos/chips/rf230/IEEE154PacketP.nc index 73395da1..cb898244 100644 --- a/tos/chips/rf230/IEEE154PacketP.nc +++ b/tos/chips/rf230/IEEE154PacketP.nc @@ -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) { diff --git a/tos/chips/rf230/RF230ActiveMessageC.nc b/tos/chips/rf230/RF230ActiveMessageC.nc index d06a4301..34315e91 100644 --- a/tos/chips/rf230/RF230ActiveMessageC.nc +++ b/tos/chips/rf230/RF230ActiveMessageC.nc @@ -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; diff --git a/tos/chips/rf230/RF230PacketP.nc b/tos/chips/rf230/RF230PacketP.nc index 646cf122..09b49777 100644 --- a/tos/chips/rf230/RF230PacketP.nc +++ b/tos/chips/rf230/RF230PacketP.nc @@ -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; -- 2.39.2