+ command uint8_t Packet.payloadLength(message_t* msg) {
+ return (call CC2420PacketBody.getHeader(msg))->length - CC2420_SIZE;
+ }
+
+ command void Packet.setPayloadLength(message_t* msg, uint8_t len) {
+ (call CC2420PacketBody.getHeader(msg))->length = len + CC2420_SIZE;
+ }
+
+ command uint8_t Packet.maxPayloadLength() {
+ return call SubSend.maxPayloadLength();
+ }
+
+ command void* Packet.getPayload(message_t* msg, uint8_t len) {
+ return call SubSend.getPayload(msg, len);
+ }
+
+
+ /***************** SubSend Events ****************/
+ event void SubSend.sendDone(message_t* msg, error_t result) {
+ call RadioResource.release();
+ signal AMSend.sendDone[call AMPacket.type(msg)](msg, result);
+ }
+
+
+ /***************** SubReceive Events ****************/
+ event message_t* SubReceive.receive(message_t* msg, void* payload, uint8_t len) {
+
+ if (call AMPacket.isForMe(msg)) {
+ return signal Receive.receive[call AMPacket.type(msg)](msg, payload, len);
+ }
+ else {
+ return signal Snoop.receive[call AMPacket.type(msg)](msg, payload, len);
+ }