00001 /***************************************************************************** 00002 * 00003 * 12/17/02 00004 * Nitin Shrivastav 00005 * 00006 * This file contains Timer class definitions. 00007 * 00008 ****************************************************************************/ 00012 #ifndef ns_mac_802_16timers_h 00013 #define ns_mac_802_16timers_h 00014 00015 //#include "mac-802_16.h" 00016 00017 /*=======================CLASS DEFINITIONS============================*/ 00018 00019 /*========================TIMER CLASSES===============================*/ 00020 00021 class Mac802_16; 00022 00023 /************************************************************************* 00024 Base class for all the timer classes 00025 *************************************************************************/ 00027 class Mac802_16Timer : public Handler 00028 { 00029 public: 00030 Mac802_16Timer(Mac802_16* m) : mac(m) 00031 { 00032 busy_ = paused_ = 0; stime = rtime = 0.0; 00033 } 00034 00035 virtual void handle(Event *e) {} ; 00036 00037 void start(Packet *e, double time); 00038 virtual void stop(Packet *e); 00039 00040 inline int busy(void) 00041 { 00042 return busy_; 00043 } 00044 00045 inline double expire(void) 00046 { 00047 return((stime + rtime) - Scheduler::instance().clock()); 00048 } 00049 00050 protected: 00051 Mac802_16 *mac; 00052 int busy_; 00053 int paused_; 00054 Event intr; 00055 double stime; // start time 00056 double rtime; // remaining time 00057 }; 00058 00059 /*=================== Timers common to BS & SS =======================*/ 00060 00061 /************************************************************************* 00062 Timers to control packet sending and receiving time. 00063 *************************************************************************/ 00065 class RxPkt802_16Timer : public Mac802_16Timer 00066 { 00067 public: 00068 RxPkt802_16Timer(Mac802_16 *m) : Mac802_16Timer(m) {} 00069 00070 void handle(Event *e); 00071 }; 00072 00073 /************************************************************************* 00074 00075 *************************************************************************/ 00076 class TxPkt802_16Timer : public Mac802_16Timer 00077 { 00078 public: 00079 TxPkt802_16Timer(Mac802_16 *m) : Mac802_16Timer(m) {} 00080 00081 void handle(Event *e); 00082 }; 00083 00084 /*==================== End Timers common to BS & SS ==================*/ 00085 00086 00087 00088 /*======================== BS timers================================= */ 00089 00090 /************************************************************************* 00091 00092 *************************************************************************/ 00093 class BsTxPkt802_16Timer : public Mac802_16Timer 00094 { 00095 00096 public: 00097 BsTxPkt802_16Timer(Mac802_16 *m) : Mac802_16Timer(m) {} 00098 00099 void handle(Event *e); 00100 }; 00101 00102 /************************************************************************* 00103 Timers to schedule transmition of MAPS. 00104 *************************************************************************/ 00106 class Map802_16Timer : public Mac802_16Timer 00107 { 00108 public: 00109 Map802_16Timer(Mac802_16 *m) : Mac802_16Timer(m) {} 00110 00111 void handle(Event *e); 00112 }; 00113 00114 /************************************************************************* 00115 Timers to schedule transmition of Management messages 00116 *************************************************************************/ 00118 class BsUcd802_16Timer : public Mac802_16Timer 00119 { 00120 public: 00121 BsUcd802_16Timer(Mac802_16 *m) : Mac802_16Timer(m) {} 00122 00123 void handle(Event *e); 00124 }; 00125 00126 /************************************************************************* 00127 00128 *************************************************************************/ 00129 class BsRng802_16Timer : public Mac802_16Timer 00130 { 00131 public: 00132 BsRng802_16Timer(Mac802_16 *m) : Mac802_16Timer(m) {} 00133 00134 void handle(Event *e); 00135 }; 00136 00137 /************************************************************************* 00138 00139 *************************************************************************/ 00140 class BsSync802_16Timer : public Mac802_16Timer 00141 { 00142 public: 00143 BsSync802_16Timer(Mac802_16 *m) : Mac802_16Timer(m) {} 00144 00145 void handle(Event *e); 00146 }; 00147 00148 //#ifdef RATE_CONTROL//--------------------------------------------------- 00149 /************************************************************************* 00150 00151 *************************************************************************/ 00152 class BsToken802_16Timer : public Mac802_16Timer 00153 { 00154 public: 00155 BsToken802_16Timer(Mac802_16 *m) : Mac802_16Timer(m) {} 00156 00157 void handle(Event *e); 00158 }; 00159 //#endif//---------------------------------------------------------------- 00160 00161 /************************************************************************* 00162 00163 *************************************************************************/ 00164 class BsServiceFlowSendTimer: public Mac802_16Timer 00165 { 00166 public: 00167 BsServiceFlowSendTimer(Mac802_16 *m) : Mac802_16Timer(m) {} 00168 00169 void handle(Event *e); 00170 }; 00171 00172 00173 /************************************************************************* 00174 Window used to control the provision of the minimum BW requested by 00175 rtPS and nrtPS services. 00176 *************************************************************************/ 00179 class BsUplinkSchedWindowTimer: public Mac802_16Timer 00180 { 00181 public: 00182 BsUplinkSchedWindowTimer(Mac802_16 *m) : Mac802_16Timer(m) {} 00183 00184 void handle(Event *e); 00185 }; 00186 00187 00188 /*======================== END BS timers============================= */ 00189 00190 00191 /*======================== SS timers=================================== */ 00192 00193 /************************************************************************* 00194 Timers to schedule transmition of Management messages 00195 *************************************************************************/ 00197 class SSRng802_16Timer : public Mac802_16Timer 00198 { 00199 public: 00200 SSRng802_16Timer(Mac802_16 *m) : Mac802_16Timer(m) {} 00201 00202 void handle(Event *e); 00203 }; 00204 00205 /************************************************************************* 00206 SEND timer..(per service-flow timer) 00207 *************************************************************************/ 00209 class SSServiceFlowSendTimer : public Mac802_16Timer 00210 { 00211 public: 00212 SSServiceFlowSendTimer(Mac802_16 *m) : Mac802_16Timer(m) {} 00213 00214 void handle(Event *e); 00215 }; 00216 00217 /************************************************************************* 00218 REQUEST timer..(per service-flow timer) 00219 *************************************************************************/ 00221 class SSServiceFlowRequestTimer : public Mac802_16Timer 00222 { 00223 public: 00224 SSServiceFlowRequestTimer(Mac802_16 *m) : Mac802_16Timer(m) {} 00225 00226 void handle(Event *e); 00227 }; 00228 00229 /*======================== End SS timers=================================== */ 00230 00231 #endif /* __mac_802_16timers_h__ */