]> oss.titaniummirror.com Git - tinyos-2.x.git/blobdiff - tos/chips/cc2420/lpl/DefaultLplP.nc
Upstream commits to tos/chips/cc2420, Aug 7 2008 thru Jul 16 2009, except one.
[tinyos-2.x.git] / tos / chips / cc2420 / lpl / DefaultLplP.nc
index 689199528c025dde61f3c0e69a52519c0e943980..3ada9db65353e9e75ee182fecf2c558124f87ac0 100644 (file)
@@ -54,7 +54,7 @@ module DefaultLplP {
   uses {
     interface Send as SubSend;
     interface CC2420Transmit as Resend;
-    interface RadioBackoff[am_id_t amId];
+    interface RadioBackoff;
     interface Receive as SubReceive;
     interface AMPacket;
     interface SplitControl as SubControl;
@@ -83,11 +83,13 @@ implementation {
   bool dutyCycling;
 
   /**
-   * Radio State
+   * Radio Power State
    */
   enum {
-    S_OFF,
+    S_OFF, // off by default
+    S_TURNING_ON,
     S_ON,
+    S_TURNING_OFF,
   };
   
   /**
@@ -228,7 +230,7 @@ implementation {
       return 0;
     }
     
-    return (DUTY_ON_TIME * (10000 - dutyCycle)) / dutyCycle;
+    return ((uint32_t)DUTY_ON_TIME * (10000 - dutyCycle)) / dutyCycle;
   }
   
   /**
@@ -243,7 +245,7 @@ implementation {
       return 10000;
     }
     
-    return getActualDutyCycle((DUTY_ON_TIME * 10000) 
+    return getActualDutyCycle(((uint32_t)DUTY_ON_TIME * 10000) 
         / (sleepInterval + DUTY_ON_TIME));
   }
 
@@ -281,7 +283,7 @@ implementation {
       return SUCCESS;
     }
     
-    return FAIL;
+    return EBUSY;
   }
 
   command error_t Send.cancel(message_t *msg) {
@@ -300,40 +302,31 @@ implementation {
     return call SubSend.maxPayloadLength();
   }
 
-  command void *Send.getPayload(message_t* msg) {
-    return call SubSend.getPayload(msg);
+  command void *Send.getPayload(message_t* msg, uint8_t len) {
+    return call SubSend.getPayload(msg, len);
   }
   
   
   /***************** RadioBackoff Events ****************/
-  async event void RadioBackoff.requestInitialBackoff[am_id_t amId](message_t *msg) {
+  async event void RadioBackoff.requestInitialBackoff(message_t *msg) {
     if((call CC2420PacketBody.getMetadata(msg))->rxInterval 
         > ONE_MESSAGE) {
-      call RadioBackoff.setInitialBackoff[amId]( call Random.rand16() 
+      call RadioBackoff.setInitialBackoff( call Random.rand16() 
           % (0x4 * CC2420_BACKOFF_PERIOD) + CC2420_MIN_BACKOFF);
     }
   }
   
-  async event void RadioBackoff.requestCongestionBackoff[am_id_t amId](message_t *msg) {
+  async event void RadioBackoff.requestCongestionBackoff(message_t *msg) {
     if((call CC2420PacketBody.getMetadata(msg))->rxInterval 
         > ONE_MESSAGE) {
-      call RadioBackoff.setCongestionBackoff[amId]( call Random.rand16() 
+      call RadioBackoff.setCongestionBackoff( call Random.rand16() 
           % (0x3 * CC2420_BACKOFF_PERIOD) + CC2420_MIN_BACKOFF);
     }
   }
   
-  async event void RadioBackoff.requestCca[am_id_t amId](message_t *msg) {
+  async event void RadioBackoff.requestCca(message_t *msg) {
   }
   
-  /***************** Receive Commands ***************/
-  command void *Receive.getPayload(message_t* msg, uint8_t* len) {
-    return call SubReceive.getPayload(msg, len);
-  }
-
-  command uint8_t Receive.payloadLength(message_t* msg) {
-    return call SubReceive.payloadLength(msg);
-  }
-
 
   /***************** DutyCycle Events ***************/
   /**
@@ -347,9 +340,7 @@ implementation {
     // just a little longer in case there is more than one lpl transmitter on
     // the channel.
     
-    if(call SendState.isIdle()) {
-      startOffTimer();
-    }
+    startOffTimer();
   }
   
   
@@ -425,14 +416,14 @@ implementation {
   }
   
   /***************** Timer Events ****************/
-  event void OffTimer.fired() {
+  event void OffTimer.fired() {    
     /*
      * Only stop the radio if the radio is supposed to be off permanently
      * or if the duty cycle is on and our sleep interval is not 0
      */
     if(call SplitControlState.getState() == S_OFF
         || (call PowerCycle.getSleepInterval() > 0
-            && call SplitControlState.getState() == S_ON
+            && call SplitControlState.getState() != S_OFF
                 && call SendState.getState() == S_LPL_NOT_SENDING)) { 
       post stopRadio();
     }