]> oss.titaniummirror.com Git - tinyos-2.x.git/blobdiff - tos/system/AMQueueImplP.nc
Added default command so that the entire parameterized AMSend interface doesnt have...
[tinyos-2.x.git] / tos / system / AMQueueImplP.nc
index 8ea5c7aa1c5444dbfe7b142204d95bb3e7dfa8ce..0a9e4e08654cd707497e15f54184b2d63120befa 100644 (file)
@@ -179,24 +179,35 @@ implementation {
     }
   
     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;
+    }
 }