mac802_16timer.h
上传用户: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. #ifndef MAC802_16TIMER_H
  19. #define MAC802_16TIMER_H
  20. #include "scheduler.h"
  21. /** Define the ID for each timer **/
  22. enum timer_id {
  23.   WimaxFrameTimerID,
  24.   WimaxRxTimerID,
  25.   WimaxDCDTimerID,
  26.   WimaxUCDTimerID,
  27.   WimaxRngIntTimerID,
  28.   WimaxLostDLMAPTimerID,
  29.   WimaxLostULMAPTimerID,
  30.   WimaxT1TimerID,
  31.   WimaxT2TimerID,
  32.   WimaxT3TimerID,
  33.   WimaxT6TimerID,
  34.   WimaxT9TimerID,
  35.   WimaxT12TimerID,
  36.   WimaxT16TimerID,
  37.   WimaxT17TimerID,
  38.   WimaxT21TimerID,
  39.   WimaxT44TimerID,
  40.   //mobility extension
  41.   WimaxMobNbrAdvTimerID,
  42.   WimaxScanIntervalTimerID,
  43.   WimaxRdvTimerID
  44. };
  45. class Mac802_16;
  46. /**
  47.  * Super class for timers used in wimax 
  48.  */
  49. class WimaxTimer : public Handler {
  50. public:
  51. WimaxTimer(Mac802_16* m) : mac(m) {
  52. busy_ = paused_ = 0; stime = rtime = 0.0;
  53. }
  54. virtual void handle(Event *e) = 0;
  55. virtual void start(double time);
  56. virtual void stop(void);
  57. void pause(void); /*{ assert(0); }*/
  58. void resume(void);/* { assert(0); }*/
  59. inline int busy(void) { return busy_; }
  60. inline int paused(void) { return paused_; }
  61. inline double expire(void) {
  62. return ((stime + rtime) - Scheduler::instance().clock());
  63. }
  64. protected:
  65. Mac802_16 *mac;
  66. int busy_;
  67. int paused_;
  68. Event intr;
  69. double stime; // start time
  70. double rtime; // remaining time
  71. };
  72. /** Timer for receiving a packet */
  73. class WimaxRxTimer : public WimaxTimer {
  74.  public:
  75.   WimaxRxTimer(Mac802_16 *m) : WimaxTimer(m) {}
  76.   
  77.   void handle(Event *e);
  78. };
  79. /** Timer for DCD interval */
  80. class WimaxDCDTimer : public WimaxTimer {
  81.  public:
  82.   WimaxDCDTimer(Mac802_16 *m) : WimaxTimer(m) {}
  83.   
  84.   void handle(Event *e);
  85. };
  86. /** Timer for UCD interval */
  87. class WimaxUCDTimer : public WimaxTimer {
  88.  public:
  89.   WimaxUCDTimer(Mac802_16 *m) : WimaxTimer(m) {}
  90.   
  91.   void handle(Event *e);
  92. };
  93. /** Timer for initial ranging regions interval */
  94. class WimaxRngIntTimer : public WimaxTimer {
  95.  public:
  96.   WimaxRngIntTimer(Mac802_16 *m) : WimaxTimer(m) {}
  97.   
  98.   void handle(Event *e);
  99. };
  100. /** Timer for Lost DL-MAP interval */
  101. class WimaxLostDLMAPTimer : public WimaxTimer {
  102.  public:
  103.   WimaxLostDLMAPTimer(Mac802_16 *m) : WimaxTimer(m) {}
  104.   
  105.   void handle(Event *e);
  106. };
  107. /** Timer for Lost UL-MAP interval */
  108. class WimaxLostULMAPTimer : public WimaxTimer {
  109.  public:
  110.   WimaxLostULMAPTimer(Mac802_16 *m) : WimaxTimer(m) {}
  111.   
  112.   void handle(Event *e);
  113. };
  114. /** Timer for T1 : wait for DCD timeout */
  115. class WimaxT1Timer : public WimaxTimer {
  116.  public:
  117.   WimaxT1Timer(Mac802_16 *m) : WimaxTimer(m) {}
  118.   
  119.   void handle(Event *e);
  120. };
  121. /** Timer for T2 : wait for broadcast ranging timeout */
  122. class WimaxT2Timer : public WimaxTimer {
  123.  public:
  124.   WimaxT2Timer(Mac802_16 *m) : WimaxTimer(m) {}
  125.   
  126.   void handle(Event *e);
  127. };
  128. /** Timer for T3 : ranging response timeout */
  129. class WimaxT3Timer : public WimaxTimer {
  130.  public:
  131.   WimaxT3Timer(Mac802_16 *m) : WimaxTimer(m) {}
  132.   
  133.   void handle(Event *e);
  134. };
  135. /** Timer for T6 : wait for registration response */
  136. class WimaxT6Timer : public WimaxTimer {
  137.  public:
  138.   WimaxT6Timer(Mac802_16 *m) : WimaxTimer(m) {}
  139.   
  140.   void handle(Event *e);
  141. };
  142. /** Timer for T9 : registration timeout */
  143. class WimaxT9Timer : public WimaxTimer {
  144.  public:
  145.   WimaxT9Timer(Mac802_16 *m) : WimaxTimer(m) {}
  146.   
  147.   void handle(Event *e);
  148. };
  149. /** Timer for T12 : wait for UCD descriptor */
  150. class WimaxT12Timer : public WimaxTimer {
  151.  public:
  152.   WimaxT12Timer(Mac802_16 *m) : WimaxTimer(m) {}
  153.   
  154.   void handle(Event *e);
  155. };
  156. /** Timer for T16 : wait for bw request grant */
  157. class WimaxT16Timer : public WimaxTimer {
  158.  public:
  159.   WimaxT16Timer(Mac802_16 *m) : WimaxTimer(m) {}
  160.   
  161.   void handle(Event *e);
  162. };
  163. /** Timer for T17 : wait for SS to register */
  164. class WimaxT17Timer : public WimaxTimer {
  165.  public:
  166.   WimaxT17Timer(Mac802_16 *m, int peerIndex) : WimaxTimer(m) { peerIndex_ = peerIndex;}
  167.   
  168.   void handle(Event *e);
  169.  private:
  170.   int peerIndex_;
  171. };
  172. /** Timer for T21 : time the station searches for DL-MAP on a channel */
  173. class WimaxT21Timer : public WimaxTimer {
  174.  public:
  175.   WimaxT21Timer(Mac802_16 *m) : WimaxTimer(m) {}
  176.   
  177.   void handle(Event *e);
  178. };
  179. /** Timer for T44 : wait for BS to send MOB_SCN-REP */
  180. class WimaxT44Timer : public WimaxTimer {
  181.  public:
  182.   WimaxT44Timer(Mac802_16 *m) : WimaxTimer(m) {}
  183.   
  184.   void handle(Event *e);
  185. };
  186. /** Timer for scan interval : timer for scanning */
  187. class WimaxScanIntervalTimer : public WimaxTimer {
  188.  public:
  189.   WimaxScanIntervalTimer(Mac802_16 *m) : WimaxTimer(m) {}
  190.   
  191.   void handle(Event *e);
  192. };
  193. /** Timer for neighbor advertisement interval */
  194. class WimaxMobNbrAdvTimer : public WimaxTimer {
  195.  public:
  196.   WimaxMobNbrAdvTimer(Mac802_16 *m) : WimaxTimer(m) {}
  197.   
  198.   void handle(Event *e);
  199. };
  200. /** Timer for rendez-vous with target BSs */
  201. class WimaxRdvTimer : public WimaxTimer {
  202.  public:
  203.   WimaxRdvTimer(Mac802_16 *m, int channel) : WimaxTimer(m) 
  204.     {
  205.       channel_ = channel;
  206.     }
  207.   
  208.   void handle(Event *e);
  209.  private:
  210.   int channel_;
  211. };
  212. #endif