X-Git-Url: https://oss.titaniummirror.com/gitweb/?a=blobdiff_plain;f=tos%2Fchips%2Frf2xx%2Frf212%2FRF212ActiveMessageP.nc;h=27dff12c1d8bf0965a4a1d9a0351b8119a46eec9;hb=97e9cb5f12a8fcdd7537ddd0eec19ffe364af663;hp=f304b53c4e4077d6dc3cf5fb14fc4ffaff413034;hpb=51b365b6cb1df293dac98e285ae4856c2dccba2b;p=tinyos-2.x.git diff --git a/tos/chips/rf2xx/rf212/RF212ActiveMessageP.nc b/tos/chips/rf2xx/rf212/RF212ActiveMessageP.nc index f304b53c..27dff12c 100644 --- a/tos/chips/rf2xx/rf212/RF212ActiveMessageP.nc +++ b/tos/chips/rf2xx/rf212/RF212ActiveMessageP.nc @@ -37,21 +37,10 @@ module RF212ActiveMessageP interface RandomCollisionConfig; interface SlottedCollisionConfig; interface ActiveMessageConfig; - interface LowpanNetworkConfig; - interface IEEE154MessageConfig; interface DummyConfig; - interface Packet; - - interface PacketData as PacketFlagsMetadata; - interface PacketData as PacketRF212Metadata; - interface PacketData as PacketTimeStampMetadata; - #ifdef LOW_POWER_LISTENING interface LowPowerListeningConfig; -#endif -#ifdef PACKET_LINK - interface PacketData as PacketLinkMetadata; #endif } @@ -59,6 +48,8 @@ module RF212ActiveMessageP { interface IEEE154MessageLayer; interface RadioAlarm; + interface RadioPacket as ActiveMessagePacket; + interface RadioPacket as RF212Packet; interface PacketTimeStamp; } @@ -66,45 +57,30 @@ module RF212ActiveMessageP 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); @@ -176,18 +152,9 @@ implementation /*----------------- 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) @@ -249,7 +216,7 @@ implementation * 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; } @@ -346,29 +313,10 @@ implementation { } -/*----------------- 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); @@ -376,73 +324,4 @@ implementation #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; - } }