]> oss.titaniummirror.com Git - tinyos-2.x.git/blobdiff - tos/lib/tossim/TossimActiveMessageP.nc
Fix off by one error
[tinyos-2.x.git] / tos / lib / tossim / TossimActiveMessageP.nc
index c618bda706e1187799da34004e99509bd15142c1..d55e7ced9d0a411556436f549b078c4df3394659 100644 (file)
@@ -60,11 +60,15 @@ implementation {
   command error_t AMSend.send[am_id_t id](am_addr_t addr,
                                          message_t* amsg,
                                          uint8_t len) {
+    error_t err;
     tossim_header_t* header = getHeader(amsg);
+    dbg("AM", "AM: Sending packet (id=%hhu, len=%hhu) to %hu\n", id, len, addr);
     header->type = id;
-    header->addr = addr;
+    header->dest = addr;
+    header->src = call AMPacket.address();
     header->length = len;
-    return call Model.send((int)addr, amsg, len + sizeof(tossim_header_t));
+    err = call Model.send((int)addr, amsg, len + sizeof(tossim_header_t));
+    return err;
   }
 
   command error_t AMSend.cancel[am_id_t id](message_t* msg) {
@@ -104,7 +108,7 @@ implementation {
   event void Model.receive(message_t* msg) {
     uint8_t len;
     void* payload;
-    
+
     memcpy(bufferPointer, msg, sizeof(message_t));
     payload = call Packet.getPayload(bufferPointer, &len);
 
@@ -120,8 +124,8 @@ implementation {
 
   event bool Model.shouldAck(message_t* msg) {
     tossim_header_t* header = getHeader(msg);
-    if (header->addr == call amAddress()) {
-      dbg("Acks", "addressed to me so ack it,");
+    if (header->dest == call amAddress()) {
+      dbg("Acks", "Received packet addressed to me so ack it\n");
       return TRUE;
     }
     return FALSE;
@@ -133,14 +137,24 @@ implementation {
  
   command am_addr_t AMPacket.destination(message_t* amsg) {
     tossim_header_t* header = getHeader(amsg);
-    return header->addr;
+    return header->dest;
   }
 
   command void AMPacket.setDestination(message_t* amsg, am_addr_t addr) {
     tossim_header_t* header = getHeader(amsg);
-    header->addr = addr;
+    header->dest = addr;
+  }
+
+  command am_addr_t AMPacket.source(message_t* amsg) {
+    tossim_header_t* header = getHeader(amsg);
+    return header->src;
   }
 
+  command void AMPacket.setSource(message_t* amsg, am_addr_t addr) {
+    tossim_header_t* header = getHeader(amsg);
+    header->src = addr;
+  }
+  
   command bool AMPacket.isForMe(message_t* amsg) {
     return (call AMPacket.destination(amsg) == call AMPacket.address() ||
            call AMPacket.destination(amsg) == AM_BROADCAST_ADDR);
@@ -177,10 +191,20 @@ implementation {
     return msg->data;
   }
 
-  //command am_group_t AMPacket.group(message_t* amsg) {
-  //  return amsg->header.group;
-  //}
+  command am_group_t AMPacket.group(message_t* amsg) {
+    tossim_header_t* header = getHeader(amsg);
+    return header->group;
+  }
   
+  command void AMPacket.setGroup(message_t* msg, am_group_t group) {
+    tossim_header_t* header = getHeader(msg);
+    header->group = group;
+  }
+
+  command am_group_t AMPacket.localGroup() {
+    return TOS_AM_GROUP;
+  }
+
  default event message_t* Receive.receive[am_id_t id](message_t* msg, void* payload, uint8_t len) {
     return msg;
   }