]> oss.titaniummirror.com Git - tinyos-2.x.git/blobdiff - tos/lib/power/DeferredPowerManagerP.nc
Merge TinyOS 2.1.1 into master.
[tinyos-2.x.git] / tos / lib / power / DeferredPowerManagerP.nc
index 1009e2c58875136d8a0b77788869151b28d86682..209b5ffcbad38767825644d862454b77ac431a87 100644 (file)
@@ -55,7 +55,7 @@ generic module DeferredPowerManagerP(uint32_t delay) {
     interface SplitControl;
 
     interface PowerDownCleanup;
-    interface ResourceController;
+    interface ResourceDefaultOwner;
     interface ArbiterInfo;
     interface Timer<TMilli> 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);
+      }
     }
   }