]> oss.titaniummirror.com Git - tinyos-2.x.git/blobdiff - tos/lib/byte_radio/LinkLayerP.nc
RC4 fixes for Epic support
[tinyos-2.x.git] / tos / lib / byte_radio / LinkLayerP.nc
index 2bce43e8994d7d644eefed7c915dd3ff0be791ee..abb016369626e87bb9918a77e824185398b54189 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) {
@@ -172,14 +172,13 @@ implementation
       return call Packet.maxPayloadLength();
     }
 
-    command void* Send.getPayload(message_t* msg) {
-      return call Packet.getPayload(msg, (uint8_t*) (call Packet.payloadLength(msg)) );
+    command void* Send.getPayload(message_t* msg, uint8_t len) {
+      return call Packet.getPayload(msg, len);
     }
     
     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();
@@ -197,7 +196,7 @@ implementation
       message_t* tmpMsgPtr;
       atomic {
         len = call Packet.payloadLength(rxBufPtr);
-        payload = call Packet.getPayload(rxBufPtr, &len);
+        payload = call Packet.getPayload(rxBufPtr, len);
         tmpMsgPtr = rxBufPtr;
       }
       tmpMsgPtr = signal Receive.receive(tmpMsgPtr, payload , len);
@@ -212,7 +211,8 @@ implementation
       atomic {
         if (rxBusy) {
           msgPtr = msg;
-        } else {
+        }
+        else {
           rxBusy = TRUE;
           msgPtr = rxBufPtr;
           rxBufPtr = msg;
@@ -221,14 +221,7 @@ implementation
       } 
       return msgPtr;
     }
-    
-    command void* Receive.getPayload(message_t* msg, uint8_t* len) {
-      return call Packet.getPayload(msg, len);
-    }
 
-    command uint8_t Receive.payloadLength(message_t* msg) {
-      return call Packet.payloadLength(msg);
-    }
 
     /*************** default events ***********/
 
@@ -244,15 +237,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;
     }
 }