]> oss.titaniummirror.com Git - tinyos-2.x.git/blobdiff - tos/chips/rf2xx/rf230/RF230ActiveMessageP.nc
Use BareSend/BareReceive instead of Send/Receive to avoid duplication of payload...
[tinyos-2.x.git] / tos / chips / rf2xx / rf230 / RF230ActiveMessageP.nc
index 0842b5af1ae456795ebf0a75aa9c39d4cb87ff31..7758d865d2de36310e97c196703b153f132cece8 100644 (file)
@@ -39,24 +39,17 @@ module RF230ActiveMessageP
                interface ActiveMessageConfig;
                interface DummyConfig;
 
-               interface Packet;
-
-               interface PacketData<flags_metadata_t> as PacketFlagsMetadata;
-               interface PacketData<rf230_metadata_t> as PacketRF230Metadata;
-               interface PacketData<timestamp_metadata_t> as PacketTimeStampMetadata;
-
 #ifdef LOW_POWER_LISTENING
-               interface PacketData<lpl_metadata_t> as PacketLplMetadata;
-#endif
-#ifdef PACKET_LINK
-               interface PacketData<link_metadata_t> as PacketLinkMetadata;
+               interface LowPowerListeningConfig;
 #endif
        }
 
        uses
        {
-               interface IEEE154PacketLayer;
+               interface IEEE154MessageLayer;
                interface RadioAlarm;
+               interface RadioPacket as ActiveMessagePacket;
+               interface RadioPacket as RF230Packet;
 
                interface PacketTimeStamp<TRadio, uint32_t>;
        }
@@ -64,70 +57,65 @@ module RF230ActiveMessageP
 
 implementation
 {
+
 /*----------------- RF230DriverConfig -----------------*/
 
-       async command uint8_t RF230DriverConfig.getLength(message_t* msg)
+       async command uint8_t RF230DriverConfig.headerLength(message_t* msg)
        {
-               return call IEEE154PacketLayer.getLength(msg);
+               return offsetof(message_t, data) - sizeof(rf230packet_header_t);
        }
 
-       async command void RF230DriverConfig.setLength(message_t* msg, uint8_t len)
+       async command uint8_t RF230DriverConfig.maxPayloadLength()
        {
-               call IEEE154PacketLayer.setLength(msg, len);
+               return sizeof(rf230packet_header_t) + TOSH_DATA_LENGTH;
        }
 
-       async command uint8_t* RF230DriverConfig.getPayload(message_t* msg)
+       async command uint8_t RF230DriverConfig.metadataLength(message_t* msg)
        {
-               return ((uint8_t*)(call IEEE154PacketLayer.getHeader(msg))) + 1;
+               return 0;
        }
 
-       async command uint8_t RF230DriverConfig.getHeaderLength()
+       async command uint8_t RF230DriverConfig.headerPreloadLength()
        {
                // we need the fcf, dsn, destpan and dest
                return 7;
        }
 
-       async command uint8_t RF230DriverConfig.getMaxLength()
-       {
-               // note, that the ieee154_footer_t is not stored, but we should include it here
-               return sizeof(rf230packet_header_t) - 1 + TOSH_DATA_LENGTH + sizeof(ieee154_footer_t);
-       }
-
        async command bool RF230DriverConfig.requiresRssiCca(message_t* msg)
        {
-               return call IEEE154PacketLayer.isDataFrame(msg);
+               return call IEEE154MessageLayer.isDataFrame(msg);
        }
 
 /*----------------- SoftwareAckConfig -----------------*/
 
        async command bool SoftwareAckConfig.requiresAckWait(message_t* msg)
        {
-               return call IEEE154PacketLayer.requiresAckWait(msg);
+               return call IEEE154MessageLayer.requiresAckWait(msg);
        }
 
        async command bool SoftwareAckConfig.isAckPacket(message_t* msg)
        {
-               return call IEEE154PacketLayer.isAckFrame(msg);
+               return call IEEE154MessageLayer.isAckFrame(msg);
        }
 
        async command bool SoftwareAckConfig.verifyAckPacket(message_t* data, message_t* ack)
        {
-               return call IEEE154PacketLayer.verifyAckReply(data, ack);
+               return call IEEE154MessageLayer.verifyAckReply(data, ack);
        }
 
        async command void SoftwareAckConfig.setAckRequired(message_t* msg, bool ack)
        {
-               call IEEE154PacketLayer.setAckRequired(msg, ack);
+               call IEEE154MessageLayer.setAckRequired(msg, ack);
        }
 
        async command bool SoftwareAckConfig.requiresAckReply(message_t* msg)
        {
-               return call IEEE154PacketLayer.requiresAckReply(msg);
+               return call IEEE154MessageLayer.requiresAckReply(msg);
        }
 
        async command void SoftwareAckConfig.createAckPacket(message_t* data, message_t* ack)
        {
-               call IEEE154PacketLayer.createAckReply(data, ack);
+               call IEEE154MessageLayer.createAckReply(data, ack);
        }
 
        async command uint16_t SoftwareAckConfig.getAckTimeout()
@@ -144,17 +132,17 @@ implementation
 
        async command uint8_t UniqueConfig.getSequenceNumber(message_t* msg)
        {
-               return call IEEE154PacketLayer.getDSN(msg);
+               return call IEEE154MessageLayer.getDSN(msg);
        }
 
        async command void UniqueConfig.setSequenceNumber(message_t* msg, uint8_t dsn)
        {
-               call IEEE154PacketLayer.setDSN(msg, dsn);
+               call IEEE154MessageLayer.setDSN(msg, dsn);
        }
 
        async command am_addr_t UniqueConfig.getSender(message_t* msg)
        {
-               return call IEEE154PacketLayer.getSrcAddr(msg);
+               return call IEEE154MessageLayer.getSrcAddr(msg);
        }
 
        tasklet_async command void UniqueConfig.reportChannelError()
@@ -164,20 +152,41 @@ implementation
 
 /*----------------- ActiveMessageConfig -----------------*/
 
-       command error_t ActiveMessageConfig.checkPacket(message_t* msg)
+       command am_addr_t ActiveMessageConfig.destination(message_t* msg)
+       {
+               return call IEEE154MessageLayer.getDestAddr(msg);
+       }
+
+       command void ActiveMessageConfig.setDestination(message_t* msg, am_addr_t addr)
+       {
+               call IEEE154MessageLayer.setDestAddr(msg, addr);
+       }
+
+       command am_addr_t ActiveMessageConfig.source(message_t* msg)
+       {
+               return call IEEE154MessageLayer.getSrcAddr(msg);
+       }
+
+       command void ActiveMessageConfig.setSource(message_t* msg, am_addr_t addr)
+       {
+               call IEEE154MessageLayer.setSrcAddr(msg, addr);
+       }
+
+       command am_group_t ActiveMessageConfig.group(message_t* msg)
        {
-               // the user forgot to call clear, we should return EINVAL
-               if( ! call IEEE154PacketLayer.isDataFrame(msg) )
-                       call Packet.clear(msg);
+               return call IEEE154MessageLayer.getDestPan(msg);
+       }
 
-               return SUCCESS;
+       command void ActiveMessageConfig.setGroup(message_t* msg, am_group_t grp)
+       {
+               call IEEE154MessageLayer.setDestPan(msg, grp);
        }
 
 /*----------------- CsmaConfig -----------------*/
 
        async command bool CsmaConfig.requiresSoftwareCCA(message_t* msg)
        {
-               return call IEEE154PacketLayer.isDataFrame(msg);
+               return call IEEE154MessageLayer.isDataFrame(msg);
        }
 
 /*----------------- TrafficMonitorConfig -----------------*/
@@ -202,13 +211,13 @@ implementation
                 * ack required: 8-16 byte separation, 11 bytes airtime, 5-10 bytes separation
                 */
 
-               uint8_t len = call IEEE154PacketLayer.getLength(msg);
-               return call IEEE154PacketLayer.getAckRequired(msg) ? len + 6 + 16 + 11 + 10 : len + 6 + 10;
+               uint8_t len = call RF230Packet.payloadLength(msg);
+               return call IEEE154MessageLayer.getAckRequired(msg) ? len + 6 + 16 + 11 + 10 : len + 6 + 10;
        }
 
        async command am_addr_t TrafficMonitorConfig.getSender(message_t* msg)
        {
-               return call IEEE154PacketLayer.getSrcAddr(msg);
+               return call IEEE154MessageLayer.getSrcAddr(msg);
        }
 
        tasklet_async command void TrafficMonitorConfig.timerTick()
@@ -250,7 +259,7 @@ implementation
                time = call RadioAlarm.getNow();
 
                // estimated response time (download the message, etc) is 5-8 bytes
-               if( call IEEE154PacketLayer.requiresAckReply(msg) )
+               if( call IEEE154MessageLayer.requiresAckReply(msg) )
                        time += (uint16_t)(32 * (-5 + 16 + 11 + 5) * RADIO_ALARM_MICROSEC);
                else
                        time += (uint16_t)(32 * (-5 + 5) * RADIO_ALARM_MICROSEC);
@@ -258,7 +267,9 @@ implementation
                return time;
        }
 
-       tasklet_async event void RadioAlarm.fired()     { }
+       tasklet_async event void RadioAlarm.fired()
+       {
+       }
 
 /*----------------- SlottedCollisionConfig -----------------*/
 
@@ -297,85 +308,15 @@ implementation
        {
        }
 
-/*----------------- Metadata -----------------*/
-
-       inline rf230packet_metadata_t* getMeta(message_t* msg)
-       {
-               return (rf230packet_metadata_t*)(msg->metadata);
-       }
-
-       async command flags_metadata_t* PacketFlagsMetadata.get(message_t* msg)
-       {
-               return &(getMeta(msg)->flags);
-       }
-
-       async command rf230_metadata_t* PacketRF230Metadata.get(message_t* msg)
-       {
-               return &(getMeta(msg)->rf230);
-       }
-
-       async command timestamp_metadata_t* PacketTimeStampMetadata.get(message_t* msg)
-       {
-               return &(getMeta(msg)->timestamp);
-       }
+/*----------------- LowPowerListening -----------------*/
 
 #ifdef LOW_POWER_LISTENING
-       async command lpl_metadata_t* PacketLplMetadata.get(message_t* msg)
-       {
-               return &(getMeta(msg)->lpl);
-       }
-#endif
 
-#ifdef PACKET_LINK
-       async command link_metadata_t* PacketLinkMetadata.get(message_t* msg)
+       async command bool LowPowerListeningConfig.getAckRequired(message_t* msg)
        {
-               return &(getMeta(msg)->link);
+               return call IEEE154MessageLayer.getAckRequired(msg);
        }
-#endif
-
-/*----------------- Packet -----------------*/
 
-       enum
-       {
-               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
-       };
-
-       command void Packet.clear(message_t* msg)
-       {
-               signal PacketFlagsMetadata.clear(msg);
-               signal PacketRF230Metadata.clear(msg);
-               signal PacketTimeStampMetadata.clear(msg);
-#ifdef LOW_POWER_LISTENING
-               signal PacketLplMetadata.clear(msg);
-#endif
-#ifdef PACKET_LINK
-               signal PacketLinkMetadata.clear(msg);
 #endif
-               call IEEE154PacketLayer.createDataFrame(msg);
-       }
-
-       inline command void Packet.setPayloadLength(message_t* msg, uint8_t len)
-       {
-               call IEEE154PacketLayer.setLength(msg, len + PACKET_LENGTH_INCREASE);
-       }
 
-       inline command uint8_t Packet.payloadLength(message_t* msg)
-       {
-               return call IEEE154PacketLayer.getLength(msg) - PACKET_LENGTH_INCREASE;
-       }
-
-       inline command uint8_t Packet.maxPayloadLength()
-       {
-               return TOSH_DATA_LENGTH;
-       }
-
-       command void* Packet.getPayload(message_t* msg, uint8_t len)
-       {
-               if( len > TOSH_DATA_LENGTH )
-                       return NULL;
-
-               return msg->data;
-       }
 }