+
+ /***************** Packet Commands ****************/
+ command void Packet.clear(message_t* msg) {
+ memset(call CC2420PacketBody.getHeader(msg), sizeof(cc2420_header_t), 0);
+ memset(call CC2420PacketBody.getMetadata(msg), sizeof(cc2420_metadata_t), 0);
+ }
+
+ 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 TOSH_DATA_LENGTH;
+ }
+
+ 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) {
+ 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 CC2420PacketBody.getMetadata(msg))->crc) {
+ return msg;
+ }
+
+ if (call AMPacket.isForMe(msg)) {
+ return signal Receive.receive[call AMPacket.type(msg)](msg, payload, len - CC2420_SIZE);
+ }
+ else {
+ return signal Snoop.receive[call AMPacket.type(msg)](msg, payload, len - CC2420_SIZE);
+ }
+ }
+
+
+ /***************** ActiveMessageAddress Events ****************/
+ async event void ActiveMessageAddress.changed() {
+ }
+
+ /***************** CC2420Config Events ****************/
+ event void CC2420Config.syncDone( error_t error ) {
+ }
+
+ /***************** Defaults ****************/