mac802_16timer.cc
上传用户:hzie11
上传日期:2013-10-07
资源大小:1487k
文件大小:6k
源码类别:

网络

开发平台:

C/C++

  1. /* This software was developed at the National Institute of Standards and
  2.  * Technology by employees of the Federal Government in the course of
  3.  * their official duties. Pursuant to title 17 Section 105 of the United
  4.  * States Code this software is not subject to copyright protection and
  5.  * is in the public domain.
  6.  * NIST assumes no responsibility whatsoever for its use by other parties,
  7.  * and makes no guarantees, expressed or implied, about its quality,
  8.  * reliability, or any other characteristic.
  9.  * <BR>
  10.  * We would appreciate acknowledgement if the software is used.
  11.  * <BR>
  12.  * NIST ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" CONDITION AND
  13.  * DISCLAIM ANY LIABILITY OF ANY KIND FOR ANY DAMAGES WHATSOEVER RESULTING
  14.  * FROM THE USE OF THIS SOFTWARE.
  15.  * </PRE></P>
  16.  * @author  rouil
  17.  */
  18. #include "mac802_16timer.h"
  19. #include "mac802_16.h"
  20. #include "scheduling/wimaxscheduler.h"
  21. /* 
  22.  * Starts a timer for the given duration
  23.  * @param time The timer duration
  24.  */
  25. void WimaxTimer::start(double time)
  26. {
  27.   Scheduler &s = Scheduler::instance();
  28.   assert(busy_ == 0);
  29.   busy_ = 1;
  30.   paused_ = 0;
  31.   stime = s.clock();
  32.   rtime = time;
  33.   assert(rtime >= 0.0);
  34.   s.schedule(this, &intr, rtime); //schedule the event
  35. }
  36. /*
  37.  * Stop the timer
  38.  */
  39. void WimaxTimer::stop(void)
  40. {
  41.   Scheduler &s = Scheduler::instance();
  42.   
  43.   assert(busy_);
  44.   
  45.   if(paused_ == 0)
  46.     s.cancel(&intr); //cancel the event
  47.   
  48.   busy_ = 0;
  49.   paused_ = 0;
  50.   stime = 0.0;
  51.   rtime = 0.0;
  52. }
  53. void WimaxTimer::pause(void)
  54. {
  55. Scheduler &s = Scheduler::instance();
  56. assert(busy_ && ! paused_);
  57. paused_ = 1;
  58. rtime -= s.clock()-stime;
  59. assert(rtime >= 0.0);
  60. s.cancel(&intr);
  61. }
  62. void WimaxTimer::resume(void)
  63. {
  64. Scheduler &s = Scheduler::instance();
  65. assert(busy_ && paused_);
  66. paused_ = 0;
  67. stime = s.clock();
  68. assert(rtime >= 0.0);
  69.         s.schedule(this, &intr, rtime );
  70. }
  71. /*
  72.  * Handling function for WimaxFrameTimer
  73.  * @param e The event that occured
  74.  */
  75. void WimaxRxTimer::handle(Event *e)
  76. {
  77.   busy_ = 0;
  78.   paused_ = 0;
  79.   stime = 0.0;
  80.   rtime = 0.0;
  81.   mac->receive ();
  82. }
  83. /*
  84.  * Handling function for WimaxFrameTimer
  85.  * @param e The event that occured
  86.  */
  87. void WimaxT1Timer::handle(Event *e)
  88. {
  89.   busy_ = 0;
  90.   paused_ = 0;
  91.   stime = 0.0;
  92.   rtime = 0.0;
  93.   mac->getScheduler()->expire(WimaxT1TimerID);
  94. }
  95. /*
  96.  * Handling function for WimaxFrameTimer
  97.  * @param e The event that occured
  98.  */
  99. void WimaxT2Timer::handle(Event *e)
  100. {
  101.   busy_ = 0;
  102.   paused_ = 0;
  103.   stime = 0.0;
  104.   rtime = 0.0;
  105.   mac->getScheduler()->expire(WimaxT2TimerID);
  106. }
  107. /*
  108.  * Handling function for WimaxT3Timer
  109.  * @param e The event that occured
  110.  */
  111. void WimaxT3Timer::handle(Event *e)
  112. {
  113.   busy_ = 0;
  114.   paused_ = 0;
  115.   stime = 0.0;
  116.   rtime = 0.0;
  117.   mac->getScheduler()->expire(WimaxT3TimerID);
  118. }
  119. /*
  120.  * Handling function for WimaxT6Timer
  121.  * @param e The event that occured
  122.  */
  123. void WimaxT6Timer::handle(Event *e)
  124. {
  125.   busy_ = 0;
  126.   paused_ = 0;
  127.   stime = 0.0;
  128.   rtime = 0.0;
  129.   mac->getScheduler()->expire(WimaxT6TimerID);
  130. }
  131. /*
  132.  * Handling function for WimaxT12Timer
  133.  * @param e The event that occured
  134.  */
  135. void WimaxT12Timer::handle(Event *e)
  136. {
  137.   busy_ = 0;
  138.   paused_ = 0;
  139.   stime = 0.0;
  140.   rtime = 0.0;
  141.   mac->getScheduler()->expire(WimaxT12TimerID);
  142. }
  143. /*
  144.  * Handling function for WimaxT17Timer
  145.  * @param e The event that occured
  146.  */
  147. void WimaxT17Timer::handle(Event *e)
  148. {
  149.   busy_ = 0;
  150.   paused_ = 0;
  151.   stime = 0.0;
  152.   rtime = 0.0;
  153.   /** The node did not send a registration: release and
  154.    *  age out Basic and Primary CIDs
  155.    */
  156.   PeerNode * peer = mac->getPeerNode (peerIndex_);
  157.   mac->debug ("At %f in Mac %d did not register on time...release CIDsn", NOW, mac->addr(),peerIndex_);
  158.   mac->removePeerNode (peer);
  159. }
  160. /*
  161.  * Handling function for WimaxT21Timer
  162.  * @param e The event that occured
  163.  */
  164. void WimaxT21Timer::handle(Event *e)
  165. {
  166.   busy_ = 0;
  167.   paused_ = 0;
  168.   stime = 0.0;
  169.   rtime = 0.0;
  170.   mac->getScheduler()->expire(WimaxT21TimerID);
  171. }
  172. /*
  173.  * Handling function for WimaxFrameTimer
  174.  * @param e The event that occured
  175.  */
  176. void WimaxLostDLMAPTimer::handle(Event *e)
  177. {
  178.   busy_ = 0;
  179.   paused_ = 0;
  180.   stime = 0.0;
  181.   rtime = 0.0;
  182.   mac->getScheduler()->expire(WimaxLostDLMAPTimerID);
  183. }
  184. /*
  185.  * Handling function for WimaxFrameTimer
  186.  * @param e The event that occured
  187.  */
  188. void WimaxLostULMAPTimer::handle(Event *e)
  189. {
  190.   busy_ = 0;
  191.   paused_ = 0;
  192.   stime = 0.0;
  193.   rtime = 0.0;
  194.   mac->getScheduler()->expire(WimaxLostULMAPTimerID);
  195. }
  196. /*
  197.  * Handling function for WimaxDCDTimer
  198.  * @param e The event that occured
  199.  */
  200. void WimaxDCDTimer::handle(Event *e)
  201. {
  202.   busy_ = 0;
  203.   paused_ = 0;
  204.   stime = 0.0;
  205.   rtime = 0.0;
  206.   mac->getScheduler()->expire(WimaxDCDTimerID);
  207. }
  208. /*
  209.  * Handling function for WimaxUCDTimer
  210.  * @param e The event that occured
  211.  */
  212. void WimaxUCDTimer::handle(Event *e)
  213. {
  214.   busy_ = 0;
  215.   paused_ = 0;
  216.   stime = 0.0;
  217.   rtime = 0.0;
  218.   mac->getScheduler()->expire(WimaxUCDTimerID);
  219. }
  220. /*
  221.  * Handling function for WimaxScanIntervalTimer
  222.  * @param e The event that occured
  223.  */
  224. void WimaxScanIntervalTimer::handle(Event *e)
  225. {
  226.   busy_ = 0;
  227.   paused_ = 0;
  228.   stime = 0.0;
  229.   rtime = 0.0;
  230.   mac->getScheduler()->expire(WimaxScanIntervalTimerID);
  231. }
  232. /*
  233.  * Handling function for WimaxT44Timer
  234.  * @param e The event that occured
  235.  */
  236. void WimaxT44Timer::handle(Event *e)
  237. {
  238.   busy_ = 0;
  239.   paused_ = 0;
  240.   stime = 0.0;
  241.   rtime = 0.0;
  242.   mac->getScheduler()->expire(WimaxT44TimerID);
  243. }
  244. /*
  245.  * Handling function for WimaxMobNbrAdvTimer
  246.  * @param e The event that occured
  247.  */
  248. void WimaxMobNbrAdvTimer::handle(Event *e)
  249. {
  250.   busy_ = 0;
  251.   paused_ = 0;
  252.   stime = 0.0;
  253.   rtime = 0.0;
  254.   mac->getScheduler()->expire(WimaxMobNbrAdvTimerID);
  255. }
  256. /*
  257.  * Handling function for WimaxRdvTimer
  258.  * @param e The event that occured
  259.  */
  260. void WimaxRdvTimer::handle(Event *e)
  261. {
  262.   busy_ = 0;
  263.   paused_ = 0;
  264.   stime = 0.0;
  265.   rtime = 0.0;
  266.   mac->getScheduler()->expire(WimaxRdvTimerID);
  267.   printf ("Rdv timeout going to channel %dn", channel_);
  268.   mac->setChannel (channel_);
  269. }