00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036 #ifndef __mac_timers_h__
00037 #define __mac_timers_h__
00038
00039
00040
00041
00042 class Mac802_11;
00043
00044 class MacTimer : public Handler {
00045 public:
00046 MacTimer(Mac802_11* m) : mac(m) {
00047 busy_ = paused_ = 0; stime = rtime = 0.0;
00048 }
00049
00050 virtual void handle(Event *e) = 0;
00051
00052 virtual void start(double time);
00053 virtual void stop(void);
00054 virtual void pause(void) { assert(0); }
00055 virtual void resume(void) { assert(0); }
00056
00057 inline int busy(void) { return busy_; }
00058 inline int paused(void) { return paused_; }
00059 inline double expire(void) {
00060 return ((stime + rtime) - Scheduler::instance().clock());
00061 }
00062
00063 protected:
00064 Mac802_11 *mac;
00065 int busy_;
00066 int paused_;
00067 Event intr;
00068 double stime;
00069 double rtime;
00070 };
00071
00072
00073 class BackoffTimer : public MacTimer {
00074 public:
00075 BackoffTimer(Mac802_11 *m) : MacTimer(m), difs_wait(0.0) {}
00076
00077
00078
00079 void start(int cw, int idle, double difs = 0.0);
00080 void handle(Event *e);
00081 void pause(void);
00082 void resume(double difs);
00083 private:
00084 double difs_wait;
00085 };
00086
00087 class DeferTimer : public MacTimer {
00088 public:
00089 DeferTimer(Mac802_11 *m) : MacTimer(m) {}
00090
00091 void start(double);
00092 void handle(Event *e);
00093 };
00094
00095 class BeaconTimer : public MacTimer {
00096 public:
00097 BeaconTimer(Mac802_11 *m) : MacTimer(m) {}
00098
00099 void start(double);
00100 void handle(Event *e);
00101 };
00102
00103 class ProbeTimer : public MacTimer {
00104 public:
00105 ProbeTimer(Mac802_11 *m) : MacTimer(m) {}
00106
00107 void start(double);
00108 void handle(Event *e);
00109 };
00110
00111
00112 class IFTimer : public MacTimer {
00113 public:
00114 IFTimer(Mac802_11 *m) : MacTimer(m) {}
00115
00116 void handle(Event *e);
00117 };
00118
00119 class NavTimer : public MacTimer {
00120 public:
00121 NavTimer(Mac802_11 *m) : MacTimer(m) {}
00122
00123 void handle(Event *e);
00124 };
00125
00126 class RxTimer : public MacTimer {
00127 public:
00128 RxTimer(Mac802_11 *m) : MacTimer(m) {}
00129
00130 void handle(Event *e);
00131 };
00132
00133 class TxTimer : public MacTimer {
00134 public:
00135 TxTimer(Mac802_11 *m) : MacTimer(m) {}
00136
00137 void handle(Event *e);
00138 };
00139
00140 #endif
00141