X-Git-Url: https://oss.titaniummirror.com/gitweb/?a=blobdiff_plain;f=tos%2Flib%2Fpower%2FDeferredPowerManagerP.nc;h=209b5ffcbad38767825644d862454b77ac431a87;hb=e9bfab607e051bae6afb47b44892ce37541d1b44;hp=1009e2c58875136d8a0b77788869151b28d86682;hpb=1a329382c4f4556fd52d85f4e3f4a67e54911682;p=tinyos-2.x.git diff --git a/tos/lib/power/DeferredPowerManagerP.nc b/tos/lib/power/DeferredPowerManagerP.nc index 1009e2c5..209b5ffc 100644 --- a/tos/lib/power/DeferredPowerManagerP.nc +++ b/tos/lib/power/DeferredPowerManagerP.nc @@ -55,7 +55,7 @@ generic module DeferredPowerManagerP(uint32_t delay) { interface SplitControl; interface PowerDownCleanup; - interface ResourceController; + interface ResourceDefaultOwner; interface ArbiterInfo; interface Timer as TimerMilli; } @@ -70,22 +70,23 @@ implementation { call TimerMilli.stop(); stopTimer = FALSE; call StdControl.start(); - call SplitControl.start(); + if (call SplitControl.start()==EALREADY) + call ResourceDefaultOwner.release(); } task void timerTask() { call TimerMilli.startOneShot(delay); } - async event void ResourceController.requested() { + async event void ResourceDefaultOwner.requested() { if(stopping == FALSE) { stopTimer = TRUE; post startTask(); } - else atomic requested = TRUE; + else requested = TRUE; } - async event void ResourceController.immediateRequested() { + async event void ResourceDefaultOwner.immediateRequested() { } default command error_t StdControl.start() { @@ -97,19 +98,22 @@ implementation { } event void SplitControl.startDone(error_t error) { - call ResourceController.release(); + call ResourceDefaultOwner.release(); } - async event void ResourceController.granted() { + async event void ResourceDefaultOwner.granted() { post timerTask(); } event void TimerMilli.fired() { - if(stopTimer == FALSE) { - stopping = TRUE; - call PowerDownCleanup.cleanup(); - call StdControl.stop(); - call SplitControl.stop(); + atomic { + if(stopTimer == FALSE) { + stopping = TRUE; + call PowerDownCleanup.cleanup(); + call StdControl.stop(); + if (call SplitControl.stop()==EALREADY) + signal SplitControl.stopDone(SUCCESS); + } } }