]> oss.titaniummirror.com Git - tinyos-2.x.git/blobdiff - tos/chips/rf2xx/layers/MetadataFlagsLayerC.nc
reorganized packet header handling, added RF212Ieee154MessageC for BLIP
[tinyos-2.x.git] / tos / chips / rf2xx / layers / MetadataFlagsLayerC.nc
index dffafb0b056592cc346e8705d02221f6b7e6f42f..39b0beee8be7cca88b450a32be41919871433756 100644 (file)
@@ -29,33 +29,41 @@ module MetadataFlagsLayerC
        provides 
        {
                interface PacketFlag[uint8_t bit];
+               interface RadioPacket;
        }
 
        uses
        {
-               interface PacketData<flags_metadata_t> as PacketFlagsMetadata;
+               interface RadioPacket as SubPacket;
        }
 }
 
 implementation
 {
+       flags_metadata_t* getMeta(message_t* msg)
+       {
+               return ((void*)msg) + sizeof(message_t) - call RadioPacket.metadataLength(msg);
+       }
+
+/*----------------- RadioPacket -----------------*/
+
        async command bool PacketFlag.get[uint8_t bit](message_t* msg)
        {
-               return (call PacketFlagsMetadata.get(msg))->flags & (1<<bit);
+               return getMeta(msg)->flags & (1<<bit);
        }
 
        async command void PacketFlag.set[uint8_t bit](message_t* msg)
        {
                ASSERT( bit  < 8 );
 
-               (call PacketFlagsMetadata.get(msg))->flags |= (1<<bit);
+               getMeta(msg)->flags |= (1<<bit);
        }
 
        async command void PacketFlag.clear[uint8_t bit](message_t* msg)
        {
                ASSERT( bit  < 8 );
 
-               (call PacketFlagsMetadata.get(msg))->flags &= ~(1<<bit);
+               getMeta(msg)->flags &= ~(1<<bit);
        }
 
        async command void PacketFlag.setValue[uint8_t bit](message_t* msg, bool value)
@@ -66,8 +74,36 @@ implementation
                        call PacketFlag.clear[bit](msg);
        }
 
-       async event void PacketFlagsMetadata.clear(message_t* msg)
+/*----------------- RadioPacket -----------------*/
+       
+       async command uint8_t RadioPacket.headerLength(message_t* msg)
+       {
+               return call SubPacket.headerLength(msg);
+       }
+
+       async command uint8_t RadioPacket.payloadLength(message_t* msg)
+       {
+               return call SubPacket.payloadLength(msg);
+       }
+
+       async command void RadioPacket.setPayloadLength(message_t* msg, uint8_t length)
+       {
+               call SubPacket.setPayloadLength(msg, length);
+       }
+
+       async command uint8_t RadioPacket.maxPayloadLength()
+       {
+               return call SubPacket.maxPayloadLength();
+       }
+
+       async command uint8_t RadioPacket.metadataLength(message_t* msg)
+       {
+               return call SubPacket.metadataLength(msg) + sizeof(flags_metadata_t);
+       }
+
+       async command void RadioPacket.clear(message_t* msg)
        {
-               (call PacketFlagsMetadata.get(msg))->flags = 0;
+               getMeta(msg)->flags = 0;
+               call SubPacket.clear(msg);
        }
 }