X-Git-Url: https://oss.titaniummirror.com/gitweb/?a=blobdiff_plain;f=tos%2Fchips%2Fcc2420%2FCC2420ActiveMessageP.nc;h=7a111f53603fe9e54d70a37c8750f82ad030d8db;hb=fdb0ac0c318844a25bb5c15ba5c20968dde24b03;hp=0f93440446d7611663f45547d5c9500d215fee88;hpb=e72a6756a30fecdd80f4f1b1ee799749f1ab02a7;p=tinyos-2.x.git diff --git a/tos/chips/cc2420/CC2420ActiveMessageP.nc b/tos/chips/cc2420/CC2420ActiveMessageP.nc index 0f934404..7a111f53 100644 --- a/tos/chips/cc2420/CC2420ActiveMessageP.nc +++ b/tos/chips/cc2420/CC2420ActiveMessageP.nc @@ -41,7 +41,9 @@ module CC2420ActiveMessageP { interface Receive as Snoop[am_id_t id]; interface AMPacket; interface Packet; + interface SendNotifier[am_id_t id]; } + uses { interface Send as SubSend; interface Receive as SubReceive; @@ -66,6 +68,8 @@ implementation { header->dest = addr; header->destpan = call CC2420Config.getPanAddr(); + signal SendNotifier.aboutToSend[id](addr, msg); + return call SubSend.send( msg, len + CC2420_SIZE ); } @@ -77,28 +81,10 @@ implementation { return call Packet.maxPayloadLength(); } - command void* AMSend.getPayload[am_id_t id](message_t* m) { - return call Packet.getPayload(m, NULL); - } - - /***************** Receive Commands ****************/ - command void* Receive.getPayload[am_id_t id](message_t* m, uint8_t* len) { - return call Packet.getPayload(m, len); - } - - command uint8_t Receive.payloadLength[am_id_t id](message_t* m) { - return call Packet.payloadLength(m); - } - - /***************** Snoop Commands ****************/ - command void* Snoop.getPayload[am_id_t id](message_t* m, uint8_t* len) { + command void* AMSend.getPayload[am_id_t id](message_t* m, uint8_t len) { return call Packet.getPayload(m, len); } - command uint8_t Snoop.payloadLength[am_id_t id](message_t* m) { - return call Packet.payloadLength(m); - } - /***************** AMPacket Commands ****************/ command am_addr_t AMPacket.address() { return call ActiveMessageAddress.amAddress(); @@ -155,6 +141,8 @@ implementation { /***************** 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) { @@ -169,11 +157,8 @@ implementation { return TOSH_DATA_LENGTH; } - command void* Packet.getPayload(message_t* msg, uint8_t* len) { - if (len != NULL) { - *len = call Packet.payloadLength(msg); - } - return msg->data; + command void* Packet.getPayload(message_t* msg, uint8_t len) { + return call SubSend.getPayload(msg, len); } @@ -185,6 +170,11 @@ implementation { /***************** 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); } @@ -212,7 +202,9 @@ implementation { } default event void AMSend.sendDone[uint8_t id](message_t* msg, error_t err) { - return; } + default event void SendNotifier.aboutToSend[am_id_t amId](am_addr_t addr, message_t *msg) { + } + }