]> oss.titaniummirror.com Git - tinyos-2.x.git/commitdiff
Use BareSend/BareReceive instead of Send/Receive to avoid duplication of payload...
authormmaroti <mmaroti>
Thu, 9 Apr 2009 20:48:02 +0000 (20:48 +0000)
committermmaroti <mmaroti>
Thu, 9 Apr 2009 20:48:02 +0000 (20:48 +0000)
22 files changed:
tos/chips/rf2xx/layers/ActiveMessageConfig.nc
tos/chips/rf2xx/layers/ActiveMessageLayerC.nc
tos/chips/rf2xx/layers/ActiveMessageLayerP.nc
tos/chips/rf2xx/layers/DummyLayerC.nc
tos/chips/rf2xx/layers/IEEE154MessageLayerC.nc
tos/chips/rf2xx/layers/IEEE154MessageLayerP.nc
tos/chips/rf2xx/layers/LowPowerListeningDummyC.nc
tos/chips/rf2xx/layers/LowPowerListeningLayerC.nc
tos/chips/rf2xx/layers/LowPowerListeningLayerP.nc
tos/chips/rf2xx/layers/LowpanNetworkLayerC.nc
tos/chips/rf2xx/layers/MessageBufferLayerC.nc
tos/chips/rf2xx/layers/MessageBufferLayerP.nc
tos/chips/rf2xx/layers/PacketLinkLayerC.nc
tos/chips/rf2xx/layers/PacketLinkLayerP.nc
tos/chips/rf2xx/layers/UniqueLayerC.nc
tos/chips/rf2xx/layers/UniqueLayerP.nc
tos/chips/rf2xx/rf212/RF212ActiveMessageC.nc
tos/chips/rf2xx/rf212/RF212ActiveMessageP.nc
tos/chips/rf2xx/rf230/RF230ActiveMessageC.nc
tos/chips/rf2xx/rf230/RF230ActiveMessageP.nc
tos/chips/rf2xx/util/BareReceive.nc [new file with mode: 0644]
tos/chips/rf2xx/util/BareSend.nc [new file with mode: 0644]

index d9665af2e717250de415cbf84eb502edddddd90b..1de4576bd668c07d83f0275b01241be20f431c29 100755 (executable)
 
 interface ActiveMessageConfig
 {
-       /**
-        * This command is called when the message first enters the radio stack
-        * via the Send.send command. This command should return TRUE if the
-        * packet is deffinitely not cleared, FALSE otherwise.
-        */
-       command bool forgotToClear(message_t* msg);
-
        /** Same as AMPacket.destination */
        command am_addr_t destination(message_t* msg);
 
index 29c6d944da4b70beba60246e3a478e60add7b5bf..5404beca6ee5e26045276ce9373e0e4147c16b4a 100755 (executable)
@@ -37,8 +37,8 @@ configuration ActiveMessageLayerC
        uses
        {
                interface RadioPacket as SubPacket;
-               interface Send as SubSend;
-               interface Receive as SubReceive;
+               interface BareSend as SubSend;
+               interface BareReceive as SubReceive;
                interface ActiveMessageConfig as Config;
        }
 }
index e80357173b43a29b8c986db6b04aa2a56b529553..1f9cb5ec06bdfe63990f2d8e63c684f30763236d 100644 (file)
@@ -39,8 +39,8 @@ module ActiveMessageLayerP
        uses
        {
                interface RadioPacket as SubPacket;
-               interface Send as SubSend;
-               interface Receive as SubReceive;
+               interface BareSend as SubSend;
+               interface BareReceive as SubReceive;
                interface ActiveMessageConfig as Config;
                interface ActiveMessageAddress;
        }
@@ -48,22 +48,24 @@ module ActiveMessageLayerP
 
 implementation
 {
-
        activemessage_header_t* getHeader(message_t* msg)
        {
                return ((void*)msg) + call SubPacket.headerLength(msg);
        }
 
+       void* getPayload(message_t* msg)
+       {
+               return ((void*)msg) + call RadioPacket.headerLength(msg);
+       }
+
 /*----------------- Send -----------------*/
 
        command error_t AMSend.send[am_id_t id](am_addr_t addr, message_t* msg, uint8_t len)
        {
-               if( call Config.forgotToClear(msg) )
-               {
-                       // return FAIL;
-                       call Packet.clear(msg);
-               }
+               if( len > call Packet.maxPayloadLength() )
+                       return EINVAL;
 
+               call Packet.setPayloadLength(msg, len);
                call AMPacket.setSource(msg, call AMPacket.address());
                call AMPacket.setGroup(msg, call AMPacket.localGroup());
                call AMPacket.setType(msg, id);
@@ -71,7 +73,7 @@ implementation
 
                signal SendNotifier.aboutToSend[id](addr, msg);
 
-               return call SubSend.send(msg, len);
+               return call SubSend.send(msg);
        }
 
        inline event void SubSend.sendDone(message_t* msg, error_t error)
@@ -90,12 +92,12 @@ implementation
 
        inline command uint8_t AMSend.maxPayloadLength[am_id_t id]()
        {
-               return call SubSend.maxPayloadLength();
+               return call Packet.maxPayloadLength();
        }
 
        inline command void* AMSend.getPayload[am_id_t id](message_t* msg, uint8_t len)
        {
-               return call SubSend.getPayload(msg, len);
+               return call Packet.getPayload(msg, len);
        }
 
        default event void SendNotifier.aboutToSend[am_id_t id](am_addr_t addr, message_t* msg)
@@ -104,13 +106,15 @@ implementation
 
 /*----------------- Receive -----------------*/
 
-       event message_t* SubReceive.receive(message_t* msg, void* payload, uint8_t len)
+       event message_t* SubReceive.receive(message_t* msg)
        {
-               am_id_t type = call AMPacket.type(msg);
+               am_id_t id = call AMPacket.type(msg);
+               void* payload = getPayload(msg);
+               uint8_t len = call Packet.payloadLength(msg);
 
                msg = call AMPacket.isForMe(msg) 
-                       ? signal Receive.receive[type](msg, payload, len)
-                       : signal Snoop.receive[type](msg, payload, len);
+                       ? signal Receive.receive[id](msg, payload, len)
+                       : signal Snoop.receive[id](msg, payload, len);
 
                return msg;
        }
@@ -219,34 +223,33 @@ implementation
                call SubPacket.clear(msg);
        }
 
-
 /*----------------- Packet -----------------*/
 
        command void Packet.clear(message_t* msg)
        {
-               call RadioPacket.clear(msg);
+               call SubPacket.clear(msg);
        }
 
        command uint8_t Packet.payloadLength(message_t* msg)
        {
-               return call RadioPacket.payloadLength(msg);
+               return call SubPacket.payloadLength(msg);
        }
 
        command void Packet.setPayloadLength(message_t* msg, uint8_t len)
        {
-               call RadioPacket.setPayloadLength(msg, len);
+               call SubPacket.setPayloadLength(msg, len);
        }
 
        command uint8_t Packet.maxPayloadLength()
        {
-               return call RadioPacket.maxPayloadLength();
+               return call SubPacket.maxPayloadLength();
        }
 
        command void* Packet.getPayload(message_t* msg, uint8_t len)
        {
-               if( len > call RadioPacket.maxPayloadLength() )
+               if( len > call SubPacket.maxPayloadLength() )
                        return NULL;
 
-               return ((void*)msg) + call RadioPacket.headerLength(msg);
+               return ((void*)msg) + call SubPacket.headerLength(msg);
        }
 }
index a595974bae878bfda7ae7f3c95e7b0651d3b9cdd..1c71a9aa6c5749345f8f7c5f4930c7a8d33cd494 100644 (file)
@@ -26,8 +26,8 @@ generic configuration DummyLayerC()
        provides
        {
                interface SplitControl;
-               interface Send;
-               interface Receive;
+               interface BareSend as Send;
+               interface BareReceive as Receive;
 
                interface RadioState;
                interface RadioSend;
@@ -41,8 +41,8 @@ generic configuration DummyLayerC()
        uses 
        {
                interface SplitControl as SubControl;
-               interface Send as SubSend;
-               interface Receive as SubReceive;
+               interface BareSend as SubSend;
+               interface BareReceive as SubReceive;
 
                interface RadioState as SubState;
                interface RadioSend as SubRadioSend;
index ff23c69cc7685dbf99e70017d95461125823a388..8c93f42945e8dea3776d5e8469a5c5c656fd920a 100644 (file)
@@ -27,16 +27,25 @@ configuration IEEE154MessageLayerC
        {
                interface IEEE154MessageLayer;
                interface RadioPacket;
+
+               // for passthrough wiring
+               interface BareSend as Send;
+
+               // for gateway wiring
                interface Ieee154Packet;
                interface Packet;
                interface Ieee154Send;
+               interface Receive as Ieee154Receive;
                interface SendNotifier;
        }
 
        uses
        {
                interface RadioPacket as SubPacket;
-               interface Send as SubSend;
+               interface BareSend as SubSend;
+
+               // for gateway wiring
+               interface BareReceive as SubReceive;
        }
 }
 
@@ -48,9 +57,15 @@ implementation
        IEEE154MessageLayer = IEEE154MessageLayerP;
        RadioPacket = IEEE154MessageLayerP;
        SubPacket = IEEE154MessageLayerP;
+
+       // for passthrough
+       Send = IEEE154MessageLayerP;
+       SubSend = IEEE154MessageLayerP;
+
        Ieee154Packet = IEEE154MessageLayerP;
        Packet = IEEE154MessageLayerP;
        Ieee154Send = IEEE154MessageLayerP;
-       SubSend = IEEE154MessageLayerP;
+       Ieee154Receive = IEEE154MessageLayerP;
+       SubReceive = IEEE154MessageLayerP;
        SendNotifier = IEEE154MessageLayerP;
 }
index 5d4f566cc784834edceec417ab170de9d5abc10a..56379e3b2d331edf97963be8a3e65270357baa89 100644 (file)
@@ -32,6 +32,8 @@ module IEEE154MessageLayerP
                interface Ieee154Packet;
                interface Packet;
                interface Ieee154Send;
+               interface BareSend as Send;
+               interface Receive as Ieee154Receive;
                interface SendNotifier;
        }
 
@@ -39,7 +41,8 @@ module IEEE154MessageLayerP
        {
                interface ActiveMessageAddress;
                interface RadioPacket as SubPacket;
-               interface Send as SubSend;
+               interface BareSend as SubSend;
+               interface BareReceive as SubReceive;
        }
 }
 
@@ -69,6 +72,11 @@ implementation
                return ((void*)msg) + call SubPacket.headerLength(msg);
        }
 
+       void* getPayload(message_t* msg)
+       {
+               return ((void*)msg) + call RadioPacket.headerLength(msg);
+       }
+
        async command uint16_t IEEE154MessageLayer.getFCF(message_t* msg)
        {
                return getHeader(msg)->fcf;
@@ -179,7 +187,7 @@ implementation
        }
 
        async command void IEEE154MessageLayer.setSrcAddr(message_t* msg, uint16_t addr)
-       {
+       {       
                getHeader(msg)->src = addr;
        }
 
@@ -279,7 +287,6 @@ implementation
        async command void RadioPacket.clear(message_t* msg)
        {
                call SubPacket.clear(msg);
-               call IEEE154MessageLayer.createDataFrame(msg);
        }
 
 /*----------------- Packet -----------------*/
@@ -309,7 +316,7 @@ implementation
                if( len > call RadioPacket.maxPayloadLength() )
                        return NULL;
 
-               return ((void*)msg) + call RadioPacket.headerLength(msg);
+               return getPayload(msg);
        }
 
 /*----------------- Ieee154Send -----------------*/
@@ -331,27 +338,59 @@ implementation
 
        command error_t Ieee154Send.send(ieee154_saddr_t addr, message_t* msg, uint8_t len)
        {
-               ieee154_header_t* header = getHeader(msg);
+               if( len > call Packet.maxPayloadLength() )
+                       return EINVAL;
 
-               header->dest = addr;
-               header->destpan = call Ieee154Packet.localPan();
-               header->src = call Ieee154Packet.address();
+               call IEEE154MessageLayer.createDataFrame(msg);
+               call Packet.setPayloadLength(msg, len);
+               call Ieee154Packet.setSource(msg, call Ieee154Packet.address());
+               call Ieee154Packet.setDestination(msg, addr);
+               call Ieee154Packet.setPan(msg, call Ieee154Packet.localPan());
                
                signal SendNotifier.aboutToSend(addr, msg);
        
-               return call SubSend.send(msg, len);
+               return call SubSend.send(msg);
+       }
+
+       default event void Ieee154Send.sendDone(message_t* msg, error_t error)
+       {
+       }
+
+       default event void SendNotifier.aboutToSend(am_addr_t addr, message_t* msg)
+       {
+       }
+
+/*----------------- Send -----------------*/
+
+       command error_t Send.send(message_t* msg)
+       {
+               // lower leveles can send other frames
+               call IEEE154MessageLayer.createDataFrame(msg);
+
+               return call SubSend.send(msg);
+       }
+
+       command error_t Send.cancel(message_t* msg)
+       {
+               return call SubSend.cancel(msg);
        }
 
        event void SubSend.sendDone(message_t* msg, error_t error)
        {
+               // we signal  both, only one of them should be connected
                signal Ieee154Send.sendDone(msg, error);
+               signal Send.sendDone(msg, error);
        }
 
-       default event void Ieee154Send.sendDone(message_t* msg, error_t error)
+       default event void Send.sendDone(message_t* msg, error_t error)
        {
        }
 
-       default event void SendNotifier.aboutToSend(am_addr_t addr, message_t* msg)
+/*----------------- Receive -----------------*/
+
+       event message_t* SubReceive.receive(message_t* msg)
        {
+               return signal Ieee154Receive.receive(msg,
+                       getPayload(msg), call Packet.payloadLength(msg));
        }
 }
index 816710ec8627c91f4e0472d1d7de079c6eaf96c7..163dc8a100554c261943102ab503f5b8c181b0dd 100644 (file)
@@ -26,8 +26,8 @@ configuration LowPowerListeningDummyC
        provides
        {
                interface SplitControl;
-               interface Send;
-               interface Receive;
+               interface BareSend as Send;
+               interface BareReceive as Receive;
                interface RadioPacket;
 
                interface LowPowerListening;
@@ -35,8 +35,8 @@ configuration LowPowerListeningDummyC
        uses
        {
                interface SplitControl as SubControl;
-               interface Send as SubSend;
-               interface Receive as SubReceive;
+               interface BareSend as SubSend;
+               interface BareReceive as SubReceive;
                interface RadioPacket as SubPacket;
        }
 }
index f616167874aa8fd4369f55ec0c540b2e5cc04ba1..76f0a9a2477d0e135f81369a0365cfdddadb64ef 100644 (file)
  * Author: Miklos Maroti
  */
 
-#warning "*** USING LOW POWER LISTENING LAYER"
-
 configuration LowPowerListeningLayerC
 {
        provides
        {
                interface SplitControl;
-               interface Send;
-               interface Receive;
+               interface BareSend as Send;
+               interface BareReceive as Receive;
                interface RadioPacket;
 
                interface LowPowerListening;
@@ -37,8 +35,8 @@ configuration LowPowerListeningLayerC
        uses
        {
                interface SplitControl as SubControl;
-               interface Send as SubSend;
-               interface Receive as SubReceive;
+               interface BareSend as SubSend;
+               interface BareReceive as SubReceive;
                interface RadioPacket as SubPacket;
 
                interface LowPowerListeningConfig as Config;
index eae77f1b9baf3baa16a6a40630a12faa880e2fe1..0b1720408ad79d49dbedfcec973b7fee28e9afdd 100644 (file)
@@ -29,8 +29,8 @@ module LowPowerListeningLayerP
        provides
        {
                interface SplitControl;
-               interface Send;
-               interface Receive;
+               interface BareSend as Send;
+               interface BareReceive as Receive;
                interface RadioPacket;
 
                interface LowPowerListening;
@@ -39,8 +39,8 @@ module LowPowerListeningLayerP
        uses
        {
                interface SplitControl as SubControl;
-               interface Send as SubSend;
-               interface Receive as SubReceive;
+               interface BareSend as SubSend;
+               interface BareReceive as SubReceive;
                interface RadioPacket as SubPacket;
 
                interface PacketAcknowledgements;
@@ -70,7 +70,6 @@ implementation
        uint16_t sleepInterval;
 
        message_t* txMsg;
-       uint8_t txLen;
        error_t txError;
 
 /*----------------- state machine -----------------*/
@@ -172,7 +171,7 @@ implementation
                }
                else if( state == SEND_SUBSEND)
                {
-                       txError = call SubSend.send(txMsg, txLen);
+                       txError = call SubSend.send(txMsg);
 
                        if( txError == SUCCESS )
                                state = SEND_SUBSEND_DONE;
@@ -269,7 +268,7 @@ implementation
                post transition();
        }
 
-       event message_t* SubReceive.receive(message_t* msg, void* payload, uint8_t len)
+       event message_t* SubReceive.receive(message_t* msg)
        {
                if( state == SLEEP_SUBSTOP )
                        state = LISTEN;
@@ -277,10 +276,10 @@ implementation
                if( state == LISTEN && sleepInterval > 0 )
                        call Timer.startOneShot(AFTER_RECEIVE);
 
-               return signal Receive.receive(msg, payload, len);
+               return signal Receive.receive(msg);
        }
 
-       command error_t Send.send(message_t* msg, uint8_t len)
+       command error_t Send.send(message_t* msg)
        {
                if( state == LISTEN || state == SLEEP )
                {
@@ -298,7 +297,6 @@ implementation
                        return EBUSY;
 
                txMsg = msg;
-               txLen = len;
                txError = FAIL;
 
                return SUCCESS;
@@ -348,16 +346,6 @@ implementation
                post transition();
        }
 
-       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);
-       }
-
 /*----------------- LowPowerListening -----------------*/
 
        lpl_metadata_t* getMeta(message_t* msg)
index 4f9a22e220ae224a5ca9dbc82d1823eb69045c41..027ce10dfa46f42715f35fa3ddd713d6fc70e054 100644 (file)
@@ -27,8 +27,8 @@ module LowpanNetworkLayerC
 {
        provides
        {
-               interface Send;
-               interface Receive;
+               interface BareSend as Send;
+               interface BareReceive as Receive;
                interface RadioPacket;
 
                interface Receive as NonTinyosReceive[uint8_t network];
@@ -36,56 +36,52 @@ module LowpanNetworkLayerC
 
        uses
        {
-               interface Send as SubSend;
-               interface Receive as SubReceive;
+               interface BareSend as SubSend;
+               interface BareReceive as SubReceive;
                interface RadioPacket as SubPacket;
        }
 }
 
 implementation
 {
-#ifndef TINYOS_6LOWPAN_NETWORK_ID
-#define TINYOS_6LOWPAN_NETWORK_ID 0x3f
-#endif
-
        lowpan_header_t* getHeader(message_t* msg)
        {
                return ((void*)msg) + call SubPacket.headerLength(msg);
        }
 
-       command error_t Send.send(message_t* msg, uint8_t len)
+       void* getPayload(message_t* msg)
        {
-               getHeader(msg)->network = TINYOS_6LOWPAN_NETWORK_ID;
-               return call SubSend.send(msg, len);
+               return ((void*)msg) + call RadioPacket.headerLength(msg);
        }
 
-       command error_t Send.cancel(message_t* msg)
-       {
-               return call SubSend.cancel(msg);
-       }
+#ifndef TINYOS_6LOWPAN_NETWORK_ID
+#define TINYOS_6LOWPAN_NETWORK_ID 0x3f
+#endif
 
-       command uint8_t Send.maxPayloadLength()
+       command error_t Send.send(message_t* msg)
        {
-               return call SubSend.maxPayloadLength();
+               getHeader(msg)->network = TINYOS_6LOWPAN_NETWORK_ID;
+               return call SubSend.send(msg);
        }
 
-       command void* Send.getPayload(message_t* msg, uint8_t len)
+       command error_t Send.cancel(message_t* msg)
        {
-               return call SubSend.getPayload(msg, len);
+               return call SubSend.cancel(msg);
        }
-  
+
        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)
+       event message_t *SubReceive.receive(message_t *msg)
        {
                uint8_t network = getHeader(msg)->network;
                if( network == TINYOS_6LOWPAN_NETWORK_ID )
-                       return signal Receive.receive(msg, payload, len);
+                       return signal Receive.receive(msg);
                else
-                       return signal NonTinyosReceive.receive[network](msg, payload, len);
+                       return signal NonTinyosReceive.receive[network](msg, 
+                               getPayload(msg), call RadioPacket.payloadLength(msg));
        }
 
        default event message_t *NonTinyosReceive.receive[uint8_t network](message_t *msg, void *payload, uint8_t len)
index 90402c35bed9d12d2e776ab6907f1e12d46c3417..5ef764478bc309c0d3e6a5534cd1b8fb6c164ce4 100644 (file)
@@ -26,8 +26,8 @@ configuration MessageBufferLayerC
        provides
        {
                interface SplitControl;
-               interface Send;
-               interface Receive;
+               interface BareSend as Send;
+               interface BareReceive as Receive;
                interface RadioChannel;
        }
        uses
@@ -35,8 +35,6 @@ configuration MessageBufferLayerC
                interface RadioState;
                interface RadioSend;
                interface RadioReceive;
-
-               interface Packet;
        }
 }
 
@@ -55,6 +53,4 @@ implementation
        MessageBufferLayerP.Tasklet -> TaskletC;
        RadioSend = MessageBufferLayerP;
        RadioReceive = MessageBufferLayerP;
-
-       Packet = MessageBufferLayerP;
 }
index 374edaadbeaee492d79c197ef8045a13c36498e2..224d2e249b6cd0b93483702c240f6a27d3e17cec 100644 (file)
@@ -31,8 +31,8 @@ module MessageBufferLayerP
                interface SplitControl;
                interface Init as SoftwareInit;
 
-               interface Send;
-               interface Receive;
+               interface BareSend as Send;
+               interface BareReceive as Receive;
                interface RadioChannel;
        }
        uses
@@ -41,8 +41,6 @@ module MessageBufferLayerP
                interface Tasklet;
                interface RadioSend;
                interface RadioReceive;
-
-               interface Packet;
        }
 }
 
@@ -208,15 +206,11 @@ implementation
                post sendTask();
        }
 
-       command error_t Send.send(message_t* msg, uint8_t len)
+       command error_t Send.send(message_t* msg)
        {
-               if( len > call Packet.maxPayloadLength() )
-                       return EINVAL;
-               else if( state != STATE_READY )
+               if( state != STATE_READY )
                        return EBUSY;
 
-               call Packet.setPayloadLength(msg, len);
-
                txMsg = msg;
                state = STATE_TX_PENDING;
                retries = 0;
@@ -250,20 +244,6 @@ implementation
                        return FAIL;
        }
 
-       default event void Send.sendDone(message_t* msg, error_t error)
-       {
-       }
-
-       inline command uint8_t Send.maxPayloadLength()
-       {
-               return call Packet.maxPayloadLength();
-       }
-
-       inline command void* Send.getPayload(message_t* msg, uint8_t len)
-       {
-               return call Packet.getPayload(msg, len);
-       }
-
 /*----------------- Receive -----------------*/
 
        enum
@@ -312,9 +292,7 @@ implementation
                                msg = receiveQueue[receiveQueueHead];
                        }
 
-                       msg = signal Receive.receive(msg, 
-                               call Packet.getPayload(msg, call Packet.maxPayloadLength()), 
-                               call Packet.payloadLength(msg));
+                       msg = signal Receive.receive(msg);
 
                        atomic
                        {
@@ -353,8 +331,4 @@ implementation
                return m;
        }
 
-       default event message_t* Receive.receive(message_t* msg, void* payload, uint8_t len)
-       {
-               return msg;
-       }
 }
index fb65fe60e743a89ac47cff21858f9f8c2c2ceef5..efd5a0c5460f013b55ff46c2a26f2bfbacb6e7bf 100644 (file)
 
 #include <PacketLinkLayer.h>
 
-#warning "*** USING PACKET LINK LAYER"
-
 configuration PacketLinkLayerC {
   provides {
-    interface Send;
+    interface BareSend as Send;
     interface PacketLink;
     interface RadioPacket;
   }
   
   uses {
-    interface Send as SubSend;
+    interface BareSend as SubSend;
     interface RadioPacket as SubPacket;
     interface PacketAcknowledgements;
   }
index 1bf501f245bd53874b0607b00474fc0481581695..b8f284e6795e08bd8c68be20277848e463d338f2 100644 (file)
 
 module PacketLinkLayerP {
   provides {
-    interface Send;
+    interface BareSend as Send;
     interface PacketLink;
     interface RadioPacket;
   }
 
   uses {
-    interface Send as SubSend;
+    interface BareSend as SubSend;
     interface PacketAcknowledgements;
     interface Timer<TMilli> as DelayTimer;
     interface RadioPacket as SubPacket;
@@ -79,9 +79,6 @@ implementation {
   /** The message currently being sent */
   message_t *currentSendMsg;
 
-  /** Length of the current send message */
-  uint8_t currentSendLen;
-
   /** The length of the current send message */
   uint16_t totalRetries;
 
@@ -146,7 +143,7 @@ implementation {
    * a broadcast address message, the receiving end does not
    * signal receive() more than once for that message.
    */
-  command error_t Send.send(message_t *msg, uint8_t len) {
+  command error_t Send.send(message_t *msg) {
     error_t error = EBUSY;
     if(currentSendMsg == NULL) {
 
@@ -154,9 +151,8 @@ implementation {
         call PacketAcknowledgements.requestAck(msg);
       }
 
-      if((error = call SubSend.send(msg, len)) == SUCCESS) {
+      if((error = call SubSend.send(msg)) == SUCCESS) {
         currentSendMsg = msg;
-        currentSendLen = len;
         totalRetries = 0;
       }
     }
@@ -172,15 +168,6 @@ implementation {
     return FAIL;
   }
 
-
-  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);
-  }
-
   /***************** SubSend Events ***************/
   event void SubSend.sendDone(message_t* msg, error_t error) {
     totalRetries++;
@@ -222,7 +209,7 @@ implementation {
       call PacketAcknowledgements.requestAck(currentSendMsg);
     }
 
-    if(call SubSend.send(currentSendMsg, currentSendLen) != SUCCESS) {
+    if(call SubSend.send(currentSendMsg) != SUCCESS) {
       post send();
     }
   }
index 5d2e5f234cf41c823e723b4a2ae09743bd04a02e..e5333893e0e1d9797615caa9f2fa00ef4ad2e2be 100755 (executable)
@@ -26,12 +26,12 @@ configuration UniqueLayerC
        provides
        {
                // NOTE, this is a combined layer, should be hooked up at two places
-               interface Send;
+               interface BareSend as Send;
                interface RadioReceive;
        }
        uses
        {
-               interface Send as SubSend;
+               interface BareSend as SubSend;
                interface RadioReceive as SubReceive;
 
                interface UniqueConfig as Config;
index d341942e0313140e8565d820b43293da542c4f61..121139db04688c4f6634829eaf3f4a2411ae7caf 100755 (executable)
@@ -28,7 +28,7 @@ module UniqueLayerP
 {
        provides
        {
-               interface Send;
+               interface BareSend as Send;
                interface RadioReceive;
 
                interface Init;
@@ -36,7 +36,7 @@ module UniqueLayerP
 
        uses
        {
-               interface Send as SubSend;
+               interface BareSend as SubSend;
                interface RadioReceive as SubReceive;
 
                interface UniqueConfig;
@@ -55,10 +55,10 @@ implementation
                return SUCCESS;
        }
 
-       command error_t Send.send(message_t* msg, uint8_t len)
+       command error_t Send.send(message_t* msg)
        {
                call UniqueConfig.setSequenceNumber(msg, ++sequenceNumber);
-               return call SubSend.send(msg, len);
+               return call SubSend.send(msg);
        }
 
        command error_t Send.cancel(message_t* msg)
@@ -71,16 +71,6 @@ implementation
                signal Send.sendDone(msg, error);
        }
 
-       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);
-       }
-
        tasklet_async event bool SubReceive.header(message_t* msg)
        {
                // we could scan here, but better be lazy
index e75824e5c3981fb237a65f7603f9c024c8d9daf4..46ef3b44c7f38f92dbb34828ef17f6d2129d4e84 100644 (file)
@@ -90,7 +90,7 @@ implementation
 #else
        components LowpanNetworkLayerC;
 #endif
-       LowpanNetworkLayerC.SubSend -> UniqueLayerC;
+       LowpanNetworkLayerC.SubSend -> IEEE154MessageLayerC;
        LowpanNetworkLayerC.SubReceive -> LowPowerListeningLayerC;
        LowpanNetworkLayerC.SubPacket -> IEEE154MessageLayerC;
 
@@ -98,6 +98,7 @@ implementation
 
        components IEEE154MessageLayerC;
        IEEE154MessageLayerC.SubPacket -> LowPowerListeningLayerC;
+       IEEE154MessageLayerC.SubSend -> UniqueLayerC;
 
 // -------- UniqueLayer Send part (wired twice)
 
@@ -108,6 +109,7 @@ implementation
 // -------- Low Power Listening 
 
 #ifdef LOW_POWER_LISTENING
+       #warning "*** USING LOW POWER LISTENING LAYER"
        components LowPowerListeningLayerC;
        LowPowerListeningLayerC.Config -> RF212ActiveMessageP;
        LowPowerListeningLayerC.PacketAcknowledgements -> SoftwareAckLayerC;
@@ -124,6 +126,7 @@ implementation
 // -------- Packet Link
 
 #ifdef PACKET_LINK
+       #warning "*** USING PACKET LINK LAYER"
        components PacketLinkLayerC;
        PacketLink = PacketLinkLayerC;
        PacketLinkLayerC.PacketAcknowledgements -> SoftwareAckLayerC;
@@ -136,7 +139,6 @@ implementation
 // -------- MessageBuffer
 
        components MessageBufferLayerC;
-       MessageBufferLayerC.Packet -> ActiveMessageLayerC;
        MessageBufferLayerC.RadioSend -> TrafficMonitorLayerC;
        MessageBufferLayerC.RadioReceive -> UniqueLayerC;
        MessageBufferLayerC.RadioState -> TrafficMonitorLayerC;
index 27dff12c1d8bf0965a4a1d9a0351b8119a46eec9..86e74556f32ed5c6fdfe508b63dbc9e2215d1593 100644 (file)
@@ -152,11 +152,6 @@ implementation
 
 /*----------------- ActiveMessageConfig -----------------*/
 
-       command bool ActiveMessageConfig.forgotToClear(message_t* msg)
-       {
-               return ! call IEEE154MessageLayer.isDataFrame(msg);
-       }
-
        command am_addr_t ActiveMessageConfig.destination(message_t* msg)
        {
                return call IEEE154MessageLayer.getDestAddr(msg);
index 4c9ab95d1ae200bc4ee9870487691c5bf16d36d4..deb5412be333991420203e67ba98db8efe0224d8 100644 (file)
@@ -90,7 +90,7 @@ implementation
 #else
        components LowpanNetworkLayerC;
 #endif
-       LowpanNetworkLayerC.SubSend -> UniqueLayerC;
+       LowpanNetworkLayerC.SubSend -> IEEE154MessageLayerC;
        LowpanNetworkLayerC.SubReceive -> LowPowerListeningLayerC;
        LowpanNetworkLayerC.SubPacket -> IEEE154MessageLayerC;
 
@@ -98,6 +98,7 @@ implementation
 
        components IEEE154MessageLayerC;
        IEEE154MessageLayerC.SubPacket -> LowPowerListeningLayerC;
+       IEEE154MessageLayerC.SubSend -> UniqueLayerC;
 
 // -------- UniqueLayer Send part (wired twice)
 
@@ -108,6 +109,7 @@ implementation
 // -------- Low Power Listening 
 
 #ifdef LOW_POWER_LISTENING
+       #warning "*** USING LOW POWER LISTENING LAYER"
        components LowPowerListeningLayerC;
        LowPowerListeningLayerC.Config -> RF230ActiveMessageP;
        LowPowerListeningLayerC.PacketAcknowledgements -> SoftwareAckLayerC;
@@ -124,6 +126,7 @@ implementation
 // -------- Packet Link
 
 #ifdef PACKET_LINK
+       #warning "*** USING PACKET LINK LAYER"
        components PacketLinkLayerC;
        PacketLink = PacketLinkLayerC;
        PacketLinkLayerC.PacketAcknowledgements -> SoftwareAckLayerC;
@@ -136,7 +139,6 @@ implementation
 // -------- MessageBuffer
 
        components MessageBufferLayerC;
-       MessageBufferLayerC.Packet -> ActiveMessageLayerC;
        MessageBufferLayerC.RadioSend -> TrafficMonitorLayerC;
        MessageBufferLayerC.RadioReceive -> UniqueLayerC;
        MessageBufferLayerC.RadioState -> TrafficMonitorLayerC;
index 57fa1c22acf2f91c1679c35fb3db242581fd60f5..7758d865d2de36310e97c196703b153f132cece8 100644 (file)
@@ -152,11 +152,6 @@ implementation
 
 /*----------------- ActiveMessageConfig -----------------*/
 
-       command bool ActiveMessageConfig.forgotToClear(message_t* msg)
-       {
-               return ! call IEEE154MessageLayer.isDataFrame(msg);
-       }
-
        command am_addr_t ActiveMessageConfig.destination(message_t* msg)
        {
                return call IEEE154MessageLayer.getDestAddr(msg);
diff --git a/tos/chips/rf2xx/util/BareReceive.nc b/tos/chips/rf2xx/util/BareReceive.nc
new file mode 100644 (file)
index 0000000..5a6efc7
--- /dev/null
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2009, 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
+ */
+
+interface BareReceive
+{
+       /**
+        * Signals the reception of a message, but only for those messages for
+        * which SUCCESS was returned in the header event. The usual owner rules 
+        * apply to the message pointers.
+        */
+       event message_t* receive(message_t* msg);
+}
diff --git a/tos/chips/rf2xx/util/BareSend.nc b/tos/chips/rf2xx/util/BareSend.nc
new file mode 100644 (file)
index 0000000..29a398d
--- /dev/null
@@ -0,0 +1,54 @@
+/*
+ * Copyright (c) 2009, 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
+ */
+
+interface BareSend
+{
+       /**
+        * Starts the transmission of the given message. This command must not
+        * be called while another send is in progress (so one must wait for the
+        * sendDone event). Returns EBUSY if a reception is in progress or for
+        * some other reason the request cannot be temporarily satisfied (e.g.
+        * the SPI bus access could not be acquired). In this case the send 
+        * command could be retried from a task. Returns SUCCESS if the 
+        * transmission could be started. In this case sendDone will be fired.
+        */
+       command error_t send(message_t* msg);
+       
+       /**
+        * Signals the completion of the send command, exactly once for each 
+        * successfull send command. If the returned error code is SUCCESS, then 
+        * the message was sent (may not have been acknowledged), otherwise 
+        * the message was not transmitted over the air.
+        */
+       event void sendDone(message_t* msg, error_t error);
+
+       /**
+        * Cancel a requested transmission. Returns SUCCESS if the 
+        * transmission was cancelled properly (not sent in its
+        * entirety). Note that the component may not know
+        * if the send was successfully cancelled, if the radio is
+        * handling much of the logic; in this case, a component
+        * should be conservative and return an appropriate error code.
+        */
+       command error_t cancel(message_t* msg);
+}