p802_15_4sscs.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_4sscs.h
  13. // Mode:  C++; c-basic-offset:8; tab-width:8; indent-tabs-mode:t
  14. // $Header: /cvsroot/nsnam/ns-2/wpan/p802_15_4sscs.h,v 1.2 2005/07/13 03:51:33 tomh Exp $
  15. // Functions in this file are out of the scope of 802.15.4.
  16. // But they elaborate how a higher layer interfaces with 802.15.4.
  17. // You can modify this file at will to fit your need.
  18. /*
  19.  * Copyright (c) 2003-2004 Samsung Advanced Institute of Technology and
  20.  * The City University of New York. All rights reserved.
  21.  *
  22.  * Redistribution and use in source and binary forms, with or without
  23.  * modification, are permitted provided that the following conditions
  24.  * are met:
  25.  * 1. Redistributions of source code must retain the above copyright
  26.  *    notice, this list of conditions and the following disclaimer.
  27.  * 2. Redistributions in binary form must reproduce the above copyright
  28.  *    notice, this list of conditions and the following disclaimer in the
  29.  *    documentation and/or other materials provided with the distribution.
  30.  * 3. All advertising materials mentioning features or use of this software
  31.  *    must display the following acknowledgement:
  32.  * This product includes software developed by the Joint Lab of Samsung 
  33.  *      Advanced Institute of Technology and The City University of New York.
  34.  * 4. Neither the name of Samsung Advanced Institute of Technology nor of 
  35.  *    The City University of New York may be used to endorse or promote 
  36.  *    products derived from this software without specific prior written 
  37.  *    permission.
  38.  *
  39.  * THIS SOFTWARE IS PROVIDED BY THE JOINT LAB OF SAMSUNG ADVANCED INSTITUTE
  40.  * OF TECHNOLOGY AND THE CITY UNIVERSITY OF NEW YORK ``AS IS'' AND ANY EXPRESS 
  41.  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 
  42.  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN 
  43.  * NO EVENT SHALL SAMSUNG ADVANCED INSTITUTE OR THE CITY UNIVERSITY OF NEW YORK 
  44.  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 
  45.  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE 
  46.  * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 
  47.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 
  48.  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 
  49.  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  50.  */
  51. #ifndef p802_15_4sscs_h
  52. #define p802_15_4sscs_h
  53. //enable/disable ZigBee interface
  54. //#define ZigBeeIF
  55. #include "p802_15_4def.h"
  56. #include "p802_15_4mac.h"
  57. //task pending (callback)
  58. #define sscsTP_startPANCoord 1
  59. #define sscsTP_startDevice 2
  60. struct sscsTaskPending
  61. {
  62. sscsTaskPending()
  63. {
  64. init();
  65. }
  66. inline void init()
  67. {
  68. startPANCoord = false;
  69. startPANCoord_STEP = 0;
  70. startDevice = false;
  71. startDevice_STEP = 0;
  72. }
  73. bool &taskStatus(UINT_8 task)
  74. {
  75. switch (task)
  76. {
  77. case sscsTP_startPANCoord:
  78. return startPANCoord;
  79. case sscsTP_startDevice:
  80. return startDevice;
  81. default:
  82. assert(0);
  83. // shutup compiler.
  84. return startDevice;
  85. }
  86. }
  87. UINT_8 &taskStep(UINT_8 task)
  88. {
  89. switch (task)
  90. {
  91. case sscsTP_startPANCoord:
  92. return startPANCoord_STEP;
  93. case sscsTP_startDevice:
  94. return startDevice_STEP;
  95. default:
  96. assert(0);
  97. // shutup compiler.
  98. return startDevice_STEP;
  99. }
  100. }
  101. //----------------
  102. bool startPANCoord;
  103. bool startPANCoord_isCluster_Tree;
  104. UINT_8 startPANCoord_STEP;
  105. bool startPANCoord_txBeacon;
  106. UINT_8 startPANCoord_BO;
  107. UINT_8 startPANCoord_SO;
  108. UINT_8 startPANCoord_Channel;
  109. //----------------
  110. bool startDevice;
  111. bool startDevice_isCluster_Tree;
  112. UINT_8 startDevice_STEP;
  113. bool startDevice_isFFD;
  114. bool startDevice_assoPermit;
  115. bool startDevice_txBeacon;
  116. UINT_8 startDevice_BO;
  117. UINT_8 startDevice_SO;
  118. UINT_8 startDevice_Channel;
  119. PAN_ELE startDevice_panDes;
  120. //----------------
  121. };
  122. class SSCS802_15_4;
  123. class SSCS802_15_4Timer : public Handler
  124. {
  125. friend class SSCS802_15_4;
  126. public:
  127. SSCS802_15_4Timer(SSCS802_15_4 *s) : Handler()
  128. {
  129. sscs = s;
  130. active = false;
  131. }
  132. virtual void start(double wtime);
  133. virtual void cancel(void);
  134. virtual void handle(Event* e);
  135. protected:
  136. SSCS802_15_4 *sscs;
  137. bool active;
  138. Event nullEvent;
  139. };
  140. #ifdef ZigBeeIF
  141. class ZBR;
  142. #endif
  143. class SSCS802_15_4
  144. {
  145. friend class Mac802_15_4;
  146. friend class SSCS802_15_4Timer;
  147. public:
  148. SSCS802_15_4(Mac802_15_4 *m);
  149. ~SSCS802_15_4();
  150. void MCPS_DATA_confirm(UINT_8 msduHandle,MACenum status);
  151. void MCPS_DATA_indication(UINT_8 SrcAddrMode,UINT_16 SrcPANId,IE3ADDR SrcAddr,
  152.   UINT_8 DstAddrMode,UINT_16 DstPANId,IE3ADDR DstAddr,
  153.   UINT_8 msduLength,Packet *msdu,UINT_8 mpduLinkQuality,
  154.   bool SecurityUse,UINT_8 ACLEntry);
  155. void MCPS_PURGE_confirm(UINT_8 msduHandle,MACenum status);
  156. void MLME_ASSOCIATE_indication(IE3ADDR DeviceAddress,UINT_8 CapabilityInformation,bool SecurityUse,UINT_8 ACLEntry);
  157. void MLME_ASSOCIATE_confirm(UINT_16 AssocShortAddress,MACenum status);
  158. void MLME_DISASSOCIATE_confirm(MACenum status);
  159. void MLME_BEACON_NOTIFY_indication(UINT_8 BSN,PAN_ELE *PANDescriptor,UINT_8 PendAddrSpec,IE3ADDR *AddrList,UINT_8 sduLength,UINT_8 *sdu);
  160. void MLME_GET_confirm(MACenum status,MPIBAenum PIBAttribute,MAC_PIB *PIBAttributeValue);
  161. void MLME_ORPHAN_indication(IE3ADDR OrphanAddress,bool SecurityUse,UINT_8 ACLEntry);
  162. void MLME_RESET_confirm(MACenum status);
  163. void MLME_RX_ENABLE_confirm(MACenum status);
  164. void MLME_SET_confirm(MACenum status,MPIBAenum PIBAttribute);
  165. void MLME_SCAN_confirm(MACenum status,UINT_8 ScanType,UINT_32 UnscannedChannels,
  166.        UINT_8 ResultListSize,UINT_8 *EnergyDetectList,
  167.        PAN_ELE *PANDescriptorList);
  168. void MLME_COMM_STATUS_indication(UINT_16 PANId,UINT_8 SrcAddrMode,IE3ADDR SrcAddr,
  169.  UINT_8 DstAddrMode,IE3ADDR DstAddr,MACenum status);
  170. void MLME_START_confirm(MACenum status);
  171. void MLME_SYNC_LOSS_indication(MACenum LossReason);
  172. void MLME_POLL_confirm(MACenum status);
  173. protected:
  174. void checkTaskOverflow(UINT_8 task);
  175. void dispatch(MACenum status,char *frFunc);
  176. void startPANCoord(bool isClusterTree,bool txBeacon,UINT_8 BO,UINT_8 SO,bool firsttime,MACenum status = m_SUCCESS);
  177. void startDevice(bool isClusterTree,bool isFFD,bool assoPermit,bool txBeacon,UINT_8 BO,UINT_8 SO,bool firsttime,MACenum status = m_SUCCESS);
  178. int command(int argc, const char*const* argv);
  179. #ifdef ZigBeeIF
  180. //for cluster tree
  181. void assertZBR(void);
  182. int RNType(void);
  183. void setGetClusTreePara(char setGet,Packet *p);
  184. #endif
  185. protected:
  186. bool t_isCT,t_txBeacon,t_isFFD,t_assoPermit;
  187. UINT_8 t_BO,t_SO;
  188. //for cluster tree
  189. UINT_16 rt_myDepth;
  190. UINT_16 rt_myNodeID;
  191. UINT_16 rt_myParentNodeID;
  192. public:
  193. static UINT_32 ScanChannels;
  194. bool neverAsso;
  195. private:
  196. Mac802_15_4 *mac;
  197. #ifdef ZigBeeIF
  198. ZBR *zbr;
  199. #endif
  200. SSCS802_15_4Timer assoH;
  201. sscsTaskPending sscsTaskP;
  202. //--- store results returned from MLME_SCAN_confirm() ---
  203. UINT_32 T_UnscannedChannels;
  204. UINT_8 T_ResultListSize;
  205. UINT_8 *T_EnergyDetectList;
  206. PAN_ELE *T_PANDescriptorList;
  207. UINT_8 Channel;
  208. //-------------------------------------------------------
  209. HLISTLINK *hlistLink1;
  210. HLISTLINK *hlistLink2;
  211. };
  212. #endif
  213. // End of file: p802_15_4sscs.h