}
event void AMSend.sendDone[am_id_t id](message_t* msg, error_t err) {
- if(queue[current].msg == msg) {
- sendDone(current, msg, err);
- }
- else {
- dbg("PointerBug", "%s received send done for %p, signaling for %p.\n",
- __FUNCTION__, msg, queue[current].msg);
- }
+ // Bug fix from John Regehr: if the underlying radio mixes things
+ // up, we don't want to read memory incorrectly. This can occur
+ // on the mica2.
+ // Note that since all AM packets go through this queue, this
+ // means that the radio has a problem. -pal
+ if (current >= numClients) {
+ return;
+ }
+ if(queue[current].msg == msg) {
+ sendDone(current, msg, err);
+ }
+ else {
+ dbg("PointerBug", "%s received send done for %p, signaling for %p.\n",
+ __FUNCTION__, msg, queue[current].msg);
+ }
}
command uint8_t Send.maxPayloadLength[uint8_t id]() {
return call AMSend.maxPayloadLength[0]();
}
- command void* Send.getPayload[uint8_t id](message_t* m) {
- return call AMSend.getPayload[0](m);
+ command void* Send.getPayload[uint8_t id](message_t* m, uint8_t len) {
+ return call AMSend.getPayload[0](m, len);
}
default event void Send.sendDone[uint8_t id](message_t* msg, error_t err) {
// Do nothing
}
+ default command error_t AMSend.send[uint8_t id](am_addr_t am_id, message_t* msg, uint8_t len) {
+ return FAIL;
+ }
}