]> oss.titaniummirror.com Git - tinyos-2.x.git/blobdiff - tos/lib/mac/tkn154/dummies/NoDeviceCfpP.nc
- moved promiscuous mode into separate component
[tinyos-2.x.git] / tos / lib / mac / tkn154 / dummies / NoDeviceCfpP.nc
index 4cbc46899c272456afc97e91abd322c6f15983d6..0d672ce6bc0ac8c5b63f6e847811c70073e41297 100644 (file)
@@ -54,7 +54,9 @@ module NoDeviceCfpP
     interface Resource as Token;
     interface ResourceTransferred as TokenTransferred;
     interface ResourceRequested as TokenRequested;
+    interface ResourceTransfer as TokenToBeaconSync;
     interface GetNow<ieee154_reftime_t*> as CapStartRefTime; 
+    interface GetNow<bool> as IsSendingBeacons; 
     interface GetNow<uint32_t> as CfpEnd; 
     interface GetNow<uint8_t*> as GtsField; 
     interface GetNow<uint32_t> as SfSlotDuration; 
@@ -88,23 +90,23 @@ implementation
     return IEEE154_INVALID_HANDLE; 
   } 
 
-  event void TokenTransferred.transferred()
+  async event void TokenTransferred.transferred()
   { 
-    // the CFP has started, this component now owns the token -  
+    // the CFP has started, this component now owns the token. 
     // because GTS is not implemented we release the token
-    // immediately; the general rule is: as long as a component
-    // owns the token it has exclusive access to the radio
-    call Token.release();
+    // (or pass it back to BeaconSynchronizeP if 
+    // we are not transmitting beacons)
+    if (call IsSendingBeacons.getNow())
+      call Token.release();  
+    else
+      call TokenToBeaconSync.transfer();
   }
 
-  async event void CfpEndAlarm.fired() { }
+  async event void CfpEndAlarm.fired() {}
 
   async event void CfpSlotAlarm.fired() {}
 
-  async event void RadioOff.offDone()
-  {
-    call Token.release();
-  }
+  async event void RadioOff.offDone() {}
 
   async event void RadioTx.loadDone(){}
   async event void RadioTx.transmitDone(ieee154_txframe_t *frame,