X-Git-Url: https://oss.titaniummirror.com/gitweb/?a=blobdiff_plain;f=tos%2Fchips%2Fcc2420%2Flpl%2FDefaultLplP.nc;h=3ada9db65353e9e75ee182fecf2c558124f87ac0;hb=aa7578fd1472c62c1d22d0801fe0f55b36093bdf;hp=689199528c025dde61f3c0e69a52519c0e943980;hpb=e72a6756a30fecdd80f4f1b1ee799749f1ab02a7;p=tinyos-2.x.git diff --git a/tos/chips/cc2420/lpl/DefaultLplP.nc b/tos/chips/cc2420/lpl/DefaultLplP.nc index 68919952..3ada9db6 100644 --- a/tos/chips/cc2420/lpl/DefaultLplP.nc +++ b/tos/chips/cc2420/lpl/DefaultLplP.nc @@ -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(); }