interface RandomCollisionConfig;
interface SlottedCollisionConfig;
interface ActiveMessageConfig;
- interface LowpanNetworkConfig;
- interface IEEE154MessageConfig;
interface DummyConfig;
- interface Packet;
-
- interface PacketData<flags_metadata_t> as PacketFlagsMetadata;
- interface PacketData<rf212_metadata_t> as PacketRF212Metadata;
- interface PacketData<timestamp_metadata_t> as PacketTimeStampMetadata;
-
#ifdef LOW_POWER_LISTENING
interface LowPowerListeningConfig;
-#endif
-#ifdef PACKET_LINK
- interface PacketData<link_metadata_t> as PacketLinkMetadata;
#endif
}
{
interface IEEE154MessageLayer;
interface RadioAlarm;
+ interface RadioPacket as ActiveMessagePacket;
+ interface RadioPacket as RF212Packet;
interface PacketTimeStamp<TRadio, uint32_t>;
}
implementation
{
- rf212packet_header_t* getHeader(message_t* msg)
- {
- return (rf212packet_header_t*)(msg->data - sizeof(rf212packet_header_t));
- }
-
- rf212packet_metadata_t* getMeta(message_t* msg)
- {
- return (rf212packet_metadata_t*)(msg->metadata);
- }
/*----------------- RF212DriverConfig -----------------*/
- async command uint8_t RF212DriverConfig.getLength(message_t* msg)
+ async command uint8_t RF212DriverConfig.headerLength(message_t* msg)
{
- return call IEEE154MessageLayer.getLength(msg);
+ return offsetof(message_t, data) - sizeof(rf212packet_header_t);
}
- async command void RF212DriverConfig.setLength(message_t* msg, uint8_t len)
+ async command uint8_t RF212DriverConfig.maxPayloadLength()
{
- call IEEE154MessageLayer.setLength(msg, len);
+ return sizeof(rf212packet_header_t) + TOSH_DATA_LENGTH;
}
- async command uint8_t* RF212DriverConfig.getPayload(message_t* msg)
+ async command uint8_t RF212DriverConfig.metadataLength(message_t* msg)
{
- return ((uint8_t*)(call IEEE154MessageConfig.getHeader(msg))) + 1;
+ return 0;
}
- async command uint8_t RF212DriverConfig.getHeaderLength()
+ async command uint8_t RF212DriverConfig.headerPreloadLength()
{
// we need the fcf, dsn, destpan and dest
return 7;
}
- async command uint8_t RF212DriverConfig.getMaxLength()
- {
- // note, that the ieee154_footer_t is not stored, but we should include it here
- return sizeof(rf212packet_header_t) - 1 + TOSH_DATA_LENGTH + sizeof(ieee154_footer_t);
- }
-
async command bool RF212DriverConfig.requiresRssiCca(message_t* msg)
{
return call IEEE154MessageLayer.isDataFrame(msg);
/*----------------- ActiveMessageConfig -----------------*/
- command error_t ActiveMessageConfig.checkPacket(message_t* msg)
- {
- // the user forgot to call clear, we should return EINVAL
- if( ! call IEEE154MessageLayer.isDataFrame(msg) )
- call Packet.clear(msg);
-
- return SUCCESS;
- }
-
- command activemessage_header_t* ActiveMessageConfig.getHeader(message_t* msg)
+ command bool ActiveMessageConfig.forgotToClear(message_t* msg)
{
- return &(getHeader(msg)->am);
+ return ! call IEEE154MessageLayer.isDataFrame(msg);
}
command am_addr_t ActiveMessageConfig.destination(message_t* msg)
* ack required: 8-16 byte separation, 11 bytes airtime, 5-10 bytes separation
*/
- uint8_t len = call IEEE154MessageLayer.getLength(msg);
+ uint8_t len = call RF212Packet.payloadLength(msg);
return call IEEE154MessageLayer.getAckRequired(msg) ? len + 6 + 16 + 11 + 10 : len + 6 + 10;
}
{
}
-/*----------------- LowpanNetwork -----------------*/
-
- command lowpan_header_t* LowpanNetworkConfig.getHeader(message_t* msg)
- {
- return &(getHeader(msg)->lowpan);
- }
-
-/*----------------- IEEE154Message -----------------*/
-
- async command ieee154_header_t* IEEE154MessageConfig.getHeader(message_t* msg)
- {
- return &(getHeader(msg)->ieee154);
- }
-
/*----------------- LowPowerListening -----------------*/
#ifdef LOW_POWER_LISTENING
- async command lpl_metadata_t* LowPowerListeningConfig.metadata(message_t* msg)
- {
- return &(getMeta(msg)->lpl);
- }
-
async command bool LowPowerListeningConfig.getAckRequired(message_t* msg)
{
return call IEEE154MessageLayer.getAckRequired(msg);
#endif
-/*----------------- Headers and Metadata -----------------*/
-
- async command flags_metadata_t* PacketFlagsMetadata.get(message_t* msg)
- {
- return &(getMeta(msg)->flags);
- }
-
- async command rf212_metadata_t* PacketRF212Metadata.get(message_t* msg)
- {
- return &(getMeta(msg)->rf212);
- }
-
- async command timestamp_metadata_t* PacketTimeStampMetadata.get(message_t* msg)
- {
- return &(getMeta(msg)->timestamp);
- }
-
-#ifdef PACKET_LINK
- async command link_metadata_t* PacketLinkMetadata.get(message_t* msg)
- {
- return &(getMeta(msg)->link);
- }
-#endif
-
-/*----------------- Packet -----------------*/
-
- enum
- {
- PACKET_LENGTH_INCREASE =
- sizeof(rf212packet_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 PacketRF212Metadata.clear(msg);
- signal PacketTimeStampMetadata.clear(msg);
-#ifdef LOW_POWER_LISTENING
- signal LowPowerListeningConfig.clear(msg);
-#endif
-#ifdef PACKET_LINK
- signal PacketLinkMetadata.clear(msg);
-#endif
- call IEEE154MessageLayer.createDataFrame(msg);
- }
-
- command void Packet.setPayloadLength(message_t* msg, uint8_t len)
- {
- call IEEE154MessageLayer.setLength(msg, len + PACKET_LENGTH_INCREASE);
- }
-
- command uint8_t Packet.payloadLength(message_t* msg)
- {
- return call IEEE154MessageLayer.getLength(msg) - PACKET_LENGTH_INCREASE;
- }
-
- 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;
- }
}