]> oss.titaniummirror.com Git - tinyos-2.x.git/blobdiff - tos/chips/rf2xx/layers/LowpanNetworkLayerC.nc
reorganized packet header handling, added RF212Ieee154MessageC for BLIP
[tinyos-2.x.git] / tos / chips / rf2xx / layers / LowpanNetworkLayerC.nc
index f52c4d898e3a2d0a2e62320dfebaca7fa45b9a8b..4f9a22e220ae224a5ca9dbc82d1823eb69045c41 100644 (file)
  * Author: Miklos Maroti
  */
 
+#include <LowpanNetworkLayer.h>
+
 module LowpanNetworkLayerC
 {
        provides
        {
                interface Send;
                interface Receive;
+               interface RadioPacket;
 
                interface Receive as NonTinyosReceive[uint8_t network];
        }
@@ -35,7 +38,7 @@ module LowpanNetworkLayerC
        {
                interface Send as SubSend;
                interface Receive as SubReceive;
-               interface LowpanNetworkConfig as Config;
+               interface RadioPacket as SubPacket;
        }
 }
 
@@ -45,9 +48,14 @@ implementation
 #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)
        {
-               (call Config.getHeader(msg))->network = TINYOS_6LOWPAN_NETWORK_ID;
+               getHeader(msg)->network = TINYOS_6LOWPAN_NETWORK_ID;
                return call SubSend.send(msg, len);
        }
 
@@ -73,7 +81,7 @@ implementation
   
        event message_t *SubReceive.receive(message_t *msg, void *payload, uint8_t len)
        {
-               uint8_t network = (call Config.getHeader(msg))->network;
+               uint8_t network = getHeader(msg)->network;
                if( network == TINYOS_6LOWPAN_NETWORK_ID )
                        return signal Receive.receive(msg, payload, len);
                else
@@ -84,4 +92,36 @@ implementation
        {
                return msg;
        }
+
+/*----------------- RadioPacket -----------------*/
+
+       async command uint8_t RadioPacket.headerLength(message_t* msg)
+       {
+               return call SubPacket.headerLength(msg) + sizeof(lowpan_header_t);
+       }
+
+       async command uint8_t RadioPacket.payloadLength(message_t* msg)
+       {
+               return call SubPacket.payloadLength(msg) - sizeof(lowpan_header_t);
+       }
+
+       async command void RadioPacket.setPayloadLength(message_t* msg, uint8_t length)
+       {
+               call SubPacket.setPayloadLength(msg, length + sizeof(lowpan_header_t));
+       }
+
+       async command uint8_t RadioPacket.maxPayloadLength()
+       {
+               return call SubPacket.maxPayloadLength() - sizeof(lowpan_header_t);
+       }
+
+       async command uint8_t RadioPacket.metadataLength(message_t* msg)
+       {
+               return call SubPacket.metadataLength(msg);
+       }
+
+       async command void RadioPacket.clear(message_t* msg)
+       {
+               call SubPacket.clear(msg);
+       }
 }