p802_15_4timer.h
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:7k
源码类别:

通讯编程

开发平台:

Visual C++

  1. /********************************************/
  2. /*     NS2 Simulator for IEEE 802.15.4      */
  3. /*           (per P802.15.4/D18)            */
  4. /*------------------------------------------*/
  5. /* by:        Jianliang Zheng               */
  6. /*        (zheng@ee.ccny.cuny.edu)          */
  7. /*              Myung J. Lee                */
  8. /*          (lee@ccny.cuny.edu)             */
  9. /*        ~~~~~~~~~~~~~~~~~~~~~~~~~         */
  10. /*           SAIT-CUNY Joint Lab            */
  11. /********************************************/
  12. // File:  p802_15_4timer.h
  13. // Mode:  C++; c-basic-offset:8; tab-width:8; indent-tabs-mode:t
  14. // $Header: /cvsroot/nsnam/ns-2/wpan/p802_15_4timer.h,v 1.2 2007/01/30 05:00:52 tom_henderson Exp $
  15. /*
  16.  * Copyright (c) 2003-2004 Samsung Advanced Institute of Technology and
  17.  * The City University of New York. All rights reserved.
  18.  *
  19.  * Redistribution and use in source and binary forms, with or without
  20.  * modification, are permitted provided that the following conditions
  21.  * are met:
  22.  * 1. Redistributions of source code must retain the above copyright
  23.  *    notice, this list of conditions and the following disclaimer.
  24.  * 2. Redistributions in binary form must reproduce the above copyright
  25.  *    notice, this list of conditions and the following disclaimer in the
  26.  *    documentation and/or other materials provided with the distribution.
  27.  * 3. All advertising materials mentioning features or use of this software
  28.  *    must display the following acknowledgement:
  29.  * This product includes software developed by the Joint Lab of Samsung 
  30.  *      Advanced Institute of Technology and The City University of New York.
  31.  * 4. Neither the name of Samsung Advanced Institute of Technology nor of 
  32.  *    The City University of New York may be used to endorse or promote 
  33.  *    products derived from this software without specific prior written 
  34.  *    permission.
  35.  *
  36.  * THIS SOFTWARE IS PROVIDED BY THE JOINT LAB OF SAMSUNG ADVANCED INSTITUTE
  37.  * OF TECHNOLOGY AND THE CITY UNIVERSITY OF NEW YORK ``AS IS'' AND ANY EXPRESS 
  38.  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 
  39.  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN 
  40.  * NO EVENT SHALL SAMSUNG ADVANCED INSTITUTE OR THE CITY UNIVERSITY OF NEW YORK 
  41.  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 
  42.  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE 
  43.  * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 
  44.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 
  45.  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 
  46.  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  47.  */
  48. #ifndef p802_15_4timer_h
  49. #define p802_15_4timer_h
  50. #include <scheduler.h>
  51. #include <assert.h>
  52. #include <math.h>
  53. class Mac802_15_4;
  54. //--base timer class for MAC sublayer---
  55. class Mac802_15_4Timer : public Handler
  56. {
  57. public:
  58. Mac802_15_4Timer();
  59. void reset(void);
  60. virtual void handle(Event *e) = 0;
  61. virtual void start(double time);
  62. virtual void stop(void);
  63. virtual void pause(void) {assert(0);} //to be overloaded in subclass
  64. virtual void resume(void) {assert(0);} //to be overloaded in subclass
  65. inline int busy(void) {return busy_;}
  66. inline int paused(void) {return paused_;}
  67. inline double expire(void)  //remaining time
  68. {
  69. return ((stime + wtime) - Scheduler::instance().clock());
  70. }
  71. protected:
  72. int busy_;
  73. int paused_;
  74. Event event;
  75. double stime; //start time
  76. double wtime; //waiting time
  77. };
  78. //---timers for MAC sublayer---
  79. class CsmaCA802_15_4;
  80. class macBackoffTimer : public Mac802_15_4Timer
  81. {
  82. public:
  83. macBackoffTimer(CsmaCA802_15_4 *csma);
  84. //void start(double time, double st, bool idle);
  85. void handle(Event *e);
  86. //void pause(void);
  87. //void resume(double beacontime);
  88. /*
  89. inline void slot_wtime(double beacontime) //calculate slot waiting time -- force timers to expire on slot boundries
  90. {
  91. double rmd;
  92. assert(slottime);
  93. rmd = fmod(Scheduler::instance().clock() + wtime - beacontime, slottime);
  94. if(rmd > 0.0)
  95. wtime += (slottime - rmd);
  96. else
  97. wtime -= rmd; //no effect
  98. }
  99. */
  100. private:
  101. CsmaCA802_15_4 *csmaca;
  102. };
  103. class macBeaconOtherTimer : public Mac802_15_4Timer
  104. {
  105. public:
  106. macBeaconOtherTimer(CsmaCA802_15_4 *csma);
  107. void handle(Event *e);
  108. private:
  109. CsmaCA802_15_4 *csmaca;
  110. };
  111. class macDeferCCATimer : public Mac802_15_4Timer
  112. {
  113. public:
  114. macDeferCCATimer(CsmaCA802_15_4 *csma);
  115. void handle(Event *e);
  116. private:
  117. CsmaCA802_15_4 *csmaca;
  118. };
  119. class macTxOverTimer : public Mac802_15_4Timer
  120. {
  121. public:
  122. macTxOverTimer(Mac802_15_4 *m) : Mac802_15_4Timer() {mac = m;}
  123. void handle(Event *e);
  124. private:
  125. Mac802_15_4 *mac;
  126. };
  127. class macTxTimer : public Mac802_15_4Timer
  128. {
  129. public:
  130. macTxTimer(Mac802_15_4 *m) : Mac802_15_4Timer() {mac = m;}
  131. void handle(Event *e);
  132. private:
  133. Mac802_15_4 *mac;
  134. };
  135. class macExtractTimer : public Mac802_15_4Timer
  136. {
  137. public:
  138. macExtractTimer(Mac802_15_4 *m) : Mac802_15_4Timer() {mac = m;onlyCAP = false;}
  139. void backoffCAP(double time);
  140. void start(double time,bool onlycap);
  141. void stop(void);
  142. void handle(Event *e);
  143. void resume(void);
  144. private:
  145. Mac802_15_4 *mac;
  146. double leftTime;
  147. bool onlyCAP;
  148. };
  149. class macAssoRspWaitTimer : public Mac802_15_4Timer
  150. {
  151. public:
  152. macAssoRspWaitTimer(Mac802_15_4 *m) : Mac802_15_4Timer() {mac = m;}
  153. void handle(Event *e);
  154. private:
  155. Mac802_15_4 *mac;
  156. };
  157. class macDataWaitTimer : public Mac802_15_4Timer
  158. {
  159. public:
  160. macDataWaitTimer(Mac802_15_4 *m) : Mac802_15_4Timer() {mac = m;}
  161. void handle(Event *e);
  162. private:
  163. Mac802_15_4 *mac;
  164. };
  165. class macRxEnableTimer : public Mac802_15_4Timer
  166. {
  167. public:
  168. macRxEnableTimer(Mac802_15_4 *m) : Mac802_15_4Timer() {mac = m;}
  169. void handle(Event *e);
  170. private:
  171. Mac802_15_4 *mac;
  172. };
  173. class macScanTimer : public Mac802_15_4Timer
  174. {
  175. public:
  176. macScanTimer(Mac802_15_4 *m) : Mac802_15_4Timer() {mac = m;}
  177. void handle(Event *e);
  178. private:
  179. Mac802_15_4 *mac;
  180. };
  181. class macBeaconTxTimer : public Mac802_15_4Timer
  182. {
  183. public:
  184. macBeaconTxTimer(Mac802_15_4 *m) : Mac802_15_4Timer() {macBeaconOrder_last = 15; mac = m;}
  185. void start(bool reset = false, bool fortx = false, double wt = 0.0);
  186. void handle(Event *e);
  187. private:
  188. bool forTX;
  189. unsigned char macBeaconOrder_last;
  190. Mac802_15_4 *mac;
  191. };
  192. class macBeaconRxTimer : public Mac802_15_4Timer
  193. {
  194. public:
  195. macBeaconRxTimer(Mac802_15_4 *m) : Mac802_15_4Timer() {mac = m;lastTime = 0.0;}
  196. void start(void);
  197. void handle(Event *e);
  198. private:
  199. Mac802_15_4 *mac;
  200. double lastTime;
  201. };
  202. class macBeaconSearchTimer : public Mac802_15_4Timer
  203. {
  204. public:
  205. macBeaconSearchTimer(Mac802_15_4 *m) : Mac802_15_4Timer() {mac = m;}
  206. void handle(Event *e);
  207. private:
  208. Mac802_15_4 *mac;
  209. };
  210. //2.31 change: Timer to control node shutdown and wakeup
  211. class macWakeupTimer : public Mac802_15_4Timer
  212. {
  213. public:
  214. macWakeupTimer(Mac802_15_4 *m) : Mac802_15_4Timer() {mac = m;lastTime = 0.0;}
  215. void start(void);
  216. void handle(Event *e);
  217. private:
  218. Mac802_15_4 *mac;
  219. double lastTime;
  220. };
  221. #endif
  222. // End of file: p802_15_4timer.h