p802_15_4phy.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_4phy.h
  13. // Mode:  C++; c-basic-offset:8; tab-width:8; indent-tabs-mode:t
  14. // $Header: /cvsroot/nsnam/ns-2/wpan/p802_15_4phy.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_4phy_h
  49. #define p802_15_4phy_h
  50. //#include <scheduler.h>
  51. #include <packet.h>
  52. #include <wireless-phy.h>
  53. #include "p802_15_4def.h"
  54. //PHY enumerations description (Table 16)
  55. typedef enum
  56. {
  57. p_BUSY = 0,
  58. p_BUSY_RX,
  59. p_BUSY_TX,
  60. p_FORCE_TRX_OFF,
  61. p_IDLE,
  62. p_INVALID_PARAMETER,
  63. p_RX_ON,
  64. p_SUCCESS,
  65. p_TRX_OFF,
  66. p_TX_ON,
  67. p_UNSUPPORT_ATTRIBUTE,
  68. p_UNDEFINED //we added this for handling any case not specified in the draft
  69. }PHYenum;
  70. //PHY PIB attributes (Table 19)
  71. typedef enum
  72. {
  73. phyCurrentChannel = 0x00,
  74. phyChannelsSupported,
  75. phyTransmitPower,
  76. phyCCAMode
  77. }PPIBAenum;
  78. struct PHY_PIB
  79. {
  80. UINT_8 phyCurrentChannel;
  81. UINT_32 phyChannelsSupported;
  82. UINT_8 phyTransmitPower;
  83. UINT_8 phyCCAMode;
  84. };
  85. //---handlers---
  86. #define phyCCAHType 1
  87. #define phyEDHType 2
  88. #define phyTRXHType 3
  89. #define phyRecvOverHType 4
  90. #define phySendOverHType 5
  91. #define phyCCAReportHType 6  // 2.31 change: new timer added for CCA reporting
  92. class Phy802_15_4;
  93. class Phy802_15_4Timer : public Handler
  94. {
  95. friend class Phy802_15_4;
  96. public:
  97. Phy802_15_4Timer(Phy802_15_4 *p, int tp) : Handler()
  98. {
  99. phy = p;
  100. type = tp;
  101. active = false;
  102. }
  103. virtual void start(double wtime);
  104. virtual void cancel(void);
  105. virtual void handle(Event* e);
  106. protected:
  107. Phy802_15_4 *phy;
  108. int type;
  109. bool active;
  110. Event nullEvent;
  111. };
  112. class Mac802_15_4;
  113. class Phy802_15_4 : public WirelessPhy
  114. {
  115. friend class Phy802_15_4Timer;
  116. public:
  117. Phy802_15_4(PHY_PIB *pp);
  118. void macObj(Mac802_15_4 *m);
  119. bool channelSupported(UINT_8 channel);
  120. double getRate(char dataOrSymbol);
  121. double trxTime(Packet *p,bool phyPkt = false);
  122. void construct_PPDU(UINT_8 psduLength,Packet *psdu);
  123. void PD_DATA_request(UINT_8 psduLength,Packet *psdu);
  124. void PD_DATA_indication(UINT_8 psduLength,Packet *psdu,UINT_8 ppduLinkQuality);
  125. void PLME_CCA_request();
  126. void PLME_ED_request();
  127. void PLME_GET_request(PPIBAenum PIBAttribute);
  128. void PLME_SET_TRX_STATE_request(PHYenum state);
  129. void PLME_SET_request(PPIBAenum PIBAttribute,PHY_PIB *PIBAttributeValue);
  130. UINT_8 measureLinkQ(Packet *p);
  131. void recv(Packet *p, Handler *h);
  132. Packet* rxPacket(void) {return rxPkt;}
  133. void wakeupNode(int cause); // 2.31 change: for MAC to wake up the node
  134. void putNodeToSleep(); // 2.31 change: for MAC to put the node to sleep
  135. double channel_sleep_time_; // 2.31 change: time when node was put to sleep 
  136. double T_transition_local_; // 2.31 change: created a local variable since WirelessPhy::T_transition_ is not visible to CsmaCA802_15_4
  137. public:
  138. static PHY_PIB PPIB;
  139. double last_tx_time; // 2.31 change: 
  140. protected:
  141. void CCAHandler(void);
  142. void EDHandler(void);
  143. void TRXHandler(void);
  144. void recvOverHandler(Packet *p);
  145. void sendOverHandler(void);
  146. void CCAReportHandler(void); // 2.31 change: new timer added to report CCA
  147. private:
  148. PHY_PIB ppib;
  149. PHYenum trx_state; //tranceiver state: TRX_OFF/TX_ON/RX_ON
  150. PHYenum trx_state_defer_set; //defer setting tranceiver state: TX_ON/RX_ON/TRX_OFF/IDLE (IDLE = no defer pending)
  151. PHYenum trx_state_turnaround; //defer setting tranceiver state in case Tx2Rx or Rx2Tx
  152. PHYenum tx_state; //transmitting state: IDLE/BUSY
  153. PHYenum sensed_ch_state; //Stored value of ch state done at beginning of  //backoffSlot for forwarding to MAC after ccaDetectTime
  154. Packet *rxPkt; //the packet meets the following conditions:
  155. // -- on the current channel
  156. // -- for this node (not interference)
  157. // -- with the strongest receiving power among all packets that are for this node and on the current channel
  158. Packet *txPkt; //the packet being transmitted
  159. Packet *txPktCopy; //the copy of the packet being transmitted
  160. double rxTotPower[27];
  161. double rxEDPeakPower;
  162. UINT_32 rxTotNum[27];
  163. UINT_32 rxThisTotNum[27];
  164. Mac802_15_4 *mac;
  165. Phy802_15_4Timer CCAH;
  166. Phy802_15_4Timer EDH;
  167. Phy802_15_4Timer TRXH;
  168. Phy802_15_4Timer recvOverH;
  169. Phy802_15_4Timer sendOverH;
  170. Phy802_15_4Timer CCAReportH; // 2.31 change: new timer to report CCA
  171. };
  172. #endif
  173. // End of file: p802_15_4phy.h