]> oss.titaniummirror.com Git - tinyos-2.x.git/blobdiff - tos/lib/byte_radio/LinkLayerP.nc
switch to metric MHz for SMCLK, adjust constants, include SmclkManager
[tinyos-2.x.git] / tos / lib / byte_radio / LinkLayerP.nc
index 2bce43e8994d7d644eefed7c915dd3ff0be791ee..84361ec9d8b80f72aeda620e78b8a57f4d1a6193 100644 (file)
@@ -30,6 +30,7 @@
 
 #include "radiopacketfunctions.h"
 #include "message.h"
+#include "PacketAck.h"
 
 /**
  * This is the implementation of a really simple link layer. 
@@ -59,9 +60,6 @@ implementation
   message_t* rxBufPtr;
   message_t  rxBuf;
 
-  /* packet vars */
-  uint8_t seqNo;              // for later use ...
-    
   /* state vars */
   error_t splitStateError;    // state of SplitControl interfaces
   bool rxBusy;                // blocks an incoming packet if the rxBuffer is in use
@@ -83,7 +81,6 @@ implementation
         atomic {
           rxBufPtr = &rxBuf;
           txBufPtr = 0;
-          seqNo = 0;
           splitStateError = EOFF;
           rxBusy = FALSE;
         }
@@ -160,8 +157,11 @@ implementation
     }
     
     command error_t Send.send(message_t *msg, uint8_t len) {
-      ++seqNo;  // where to put?
-      return call SendDown.send(msg, len);
+        if(getMetadata(msg)->ack != NO_ACK_REQUESTED) {
+            // ensure reasonable value
+            getMetadata(msg)->ack = ACK_REQUESTED;
+        }
+        return call SendDown.send(msg, len);
     }
 
     command error_t Send.cancel(message_t* msg) {
@@ -179,7 +179,6 @@ implementation
     async event void SendDown.sendDone(message_t* msg, error_t error) { 
         atomic {
           txBufPtr = msg;
-          getMetadata(msg)->ack = 1; // this is rather stupid
         }
         if (error == SUCCESS) {
           post SendDoneSuccessTask();
@@ -212,7 +211,8 @@ implementation
       atomic {
         if (rxBusy) {
           msgPtr = msg;
-        } else {
+        }
+        else {
           rxBusy = TRUE;
           msgPtr = rxBufPtr;
           rxBufPtr = msg;
@@ -221,7 +221,7 @@ implementation
       } 
       return msgPtr;
     }
-    
+
     command void* Receive.getPayload(message_t* msg, uint8_t* len) {
       return call Packet.getPayload(msg, len);
     }
@@ -244,15 +244,19 @@ implementation
     /* PacketAcknowledgements interface */
 
     async command error_t PacketAcknowledgements.requestAck(message_t* msg) {
-      return FAIL;
+        getMetadata(msg)->ack = ACK_REQUESTED;
+        return SUCCESS;
     }
 
     async command error_t PacketAcknowledgements.noAck(message_t* msg) {
-      return SUCCESS;
+        getMetadata(msg)->ack = NO_ACK_REQUESTED;
+        return SUCCESS;
     }
 
     async command bool PacketAcknowledgements.wasAcked(message_t* msg) {
-      return FALSE;
+        bool rVal = FALSE;
+        if(getMetadata(msg)->ack == WAS_ACKED) rVal = TRUE;
+        return rVal;
     }
 }