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
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053 #ifndef p802_15_4mac_h
00054 #define p802_15_4mac_h
00055
00056 #include "p802_15_4pkt.h"
00057 #include "p802_15_4phy.h"
00058 #include "p802_15_4timer.h"
00059 #include "p802_15_4hlist.h"
00060 #include "p802_15_4transac.h"
00061
00062
00063 struct PAN_ELE
00064 {
00065 UINT_8 CoordAddrMode;
00066 UINT_16 CoordPANId;
00067 union
00068 {
00069 UINT_16 CoordAddress_16;
00070 IE3ADDR CoordAddress_64;
00071 };
00072 UINT_8 LogicalChannel;
00073 UINT_16 SuperframeSpec;
00074 bool GTSPermit;
00075 UINT_8 LinkQuality;
00076 UINT_32 TimeStamp:24;
00077 bool SecurityUse;
00078 UINT_8 ACLEntry;
00079 bool SecurityFailure;
00080
00081 UINT_16 clusTreeDepth;
00082 };
00083
00084
00085 #define TP_mcps_data_request 1
00086 #define TP_mlme_associate_request 2
00087 #define TP_mlme_associate_response 3
00088 #define TP_mlme_disassociate_request 4
00089 #define TP_mlme_orphan_response 5
00090 #define TP_mlme_reset_request 6
00091 #define TP_mlme_rx_enable_request 7
00092 #define TP_mlme_scan_request 8
00093 #define TP_mlme_start_request 9
00094 #define TP_mlme_sync_request 10
00095 #define TP_mlme_poll_request 11
00096 #define TP_CCA_csmaca 12
00097 #define TP_RX_ON_csmaca 13
00098 struct taskPending
00099 {
00100 taskPending()
00101 {
00102 init();
00103 }
00104 inline void init()
00105 {
00106 mcps_data_request = false;
00107 mcps_data_request_STEP = 0;
00108 mlme_associate_request = false;
00109 mlme_associate_request_STEP = 0;
00110 mlme_associate_response = false;
00111 mlme_associate_response_STEP = 0;
00112 mlme_disassociate_request = false;
00113 mlme_disassociate_request_STEP = 0;
00114 mlme_orphan_response = false;
00115 mlme_orphan_response_STEP = 0;
00116 mlme_reset_request = false;
00117 mlme_reset_request_STEP = 0;
00118 mlme_rx_enable_request = false;
00119 mlme_rx_enable_request_STEP = 0;
00120 mlme_scan_request = false;
00121 mlme_scan_request_STEP = 0;
00122 mlme_start_request = false;
00123 mlme_start_request_STEP = 0;
00124 mlme_sync_request = false;
00125 mlme_sync_request_STEP = 0;
00126 mlme_sync_request_tracking = false;
00127 mlme_poll_request = false;
00128 mlme_poll_request_STEP = 0;
00129 CCA_csmaca = false;
00130 CCA_csmaca_STEP = 0;
00131 RX_ON_csmaca = false;
00132 RX_ON_csmaca_STEP = 0;
00133 }
00134
00135 bool &taskStatus(UINT_8 task)
00136 {
00137 switch (task)
00138 {
00139 case TP_mcps_data_request:
00140 return mcps_data_request;
00141 case TP_mlme_associate_request:
00142 return mlme_associate_request;
00143 case TP_mlme_associate_response:
00144 return mlme_associate_response;
00145 case TP_mlme_disassociate_request:
00146 return mlme_disassociate_request;
00147 case TP_mlme_orphan_response:
00148 return mlme_orphan_response;
00149 case TP_mlme_reset_request:
00150 return mlme_reset_request;
00151 case TP_mlme_rx_enable_request:
00152 return mlme_rx_enable_request;
00153 case TP_mlme_scan_request:
00154 return mlme_scan_request;
00155 case TP_mlme_start_request:
00156 return mlme_start_request;
00157 case TP_mlme_sync_request:
00158 return mlme_sync_request;
00159 case TP_mlme_poll_request:
00160 return mlme_poll_request;
00161 case TP_CCA_csmaca:
00162 return CCA_csmaca;
00163 case TP_RX_ON_csmaca:
00164 return RX_ON_csmaca;
00165 default:
00166 assert(0);
00167
00168 return RX_ON_csmaca;
00169 }
00170 }
00171
00172 UINT_8 &taskStep(UINT_8 task)
00173 {
00174 switch (task)
00175 {
00176 case TP_mcps_data_request:
00177 return mcps_data_request_STEP;
00178 case TP_mlme_associate_request:
00179 return mlme_associate_request_STEP;
00180 case TP_mlme_associate_response:
00181 return mlme_associate_response_STEP;
00182 case TP_mlme_disassociate_request:
00183 return mlme_disassociate_request_STEP;
00184 case TP_mlme_orphan_response:
00185 return mlme_orphan_response_STEP;
00186 case TP_mlme_reset_request:
00187 return mlme_reset_request_STEP;
00188 case TP_mlme_rx_enable_request:
00189 return mlme_rx_enable_request_STEP;
00190 case TP_mlme_scan_request:
00191 return mlme_scan_request_STEP;
00192 case TP_mlme_start_request:
00193 return mlme_start_request_STEP;
00194 case TP_mlme_sync_request:
00195 return mlme_sync_request_STEP;
00196 case TP_mlme_poll_request:
00197 return mlme_poll_request_STEP;
00198 case TP_CCA_csmaca:
00199 return CCA_csmaca_STEP;
00200 case TP_RX_ON_csmaca:
00201 return RX_ON_csmaca_STEP;
00202 default:
00203 assert(0);
00204
00205 return RX_ON_csmaca_STEP;
00206 }
00207 }
00208
00209 char *taskFrFunc(UINT_8 task)
00210 {
00211 switch (task)
00212 {
00213 case TP_mcps_data_request:
00214 return mcps_data_request_frFunc;
00215 case TP_mlme_associate_request:
00216 return mlme_associate_request_frFunc;
00217 case TP_mlme_associate_response:
00218 return mlme_associate_response_frFunc;
00219 case TP_mlme_disassociate_request:
00220 return mlme_disassociate_request_frFunc;
00221 case TP_mlme_orphan_response:
00222 return mlme_orphan_response_frFunc;
00223 case TP_mlme_reset_request:
00224 return mlme_reset_request_frFunc;
00225 case TP_mlme_rx_enable_request:
00226 return mlme_rx_enable_request_frFunc;
00227 case TP_mlme_scan_request:
00228 return mlme_scan_request_frFunc;
00229 case TP_mlme_start_request:
00230 return mlme_start_request_frFunc;
00231 case TP_mlme_sync_request:
00232 return mlme_sync_request_frFunc;
00233 case TP_mlme_poll_request:
00234 return mlme_poll_request_frFunc;
00235 default:
00236 assert(0);
00237
00238 return mlme_poll_request_frFunc;
00239 }
00240 }
00241
00242
00243 bool mcps_data_request;
00244 UINT_8 mcps_data_request_STEP;
00245 char mcps_data_request_frFunc[81];
00246 UINT_8 mcps_data_request_TxOptions;
00247 Packet *mcps_data_request_pendPkt;
00248
00249 bool mlme_associate_request;
00250 UINT_8 mlme_associate_request_STEP;
00251 char mlme_associate_request_frFunc[81];
00252 bool mlme_associate_request_SecurityEnable;
00253 UINT_8 mlme_associate_request_CoordAddrMode;
00254 Packet *mlme_associate_request_pendPkt;
00255
00256 bool mlme_associate_response;
00257 UINT_8 mlme_associate_response_STEP;
00258 char mlme_associate_response_frFunc[81];
00259 IE3ADDR mlme_associate_response_DeviceAddress;
00260 Packet *mlme_associate_response_pendPkt;
00261
00262 bool mlme_disassociate_request;
00263 UINT_8 mlme_disassociate_request_STEP;
00264 char mlme_disassociate_request_frFunc[81];
00265 bool mlme_disassociate_request_toCoor;
00266 Packet *mlme_disassociate_request_pendPkt;
00267
00268 bool mlme_orphan_response;
00269 UINT_8 mlme_orphan_response_STEP;
00270 char mlme_orphan_response_frFunc[81];
00271 IE3ADDR mlme_orphan_response_OrphanAddress;
00272
00273 bool mlme_reset_request;
00274 UINT_8 mlme_reset_request_STEP;
00275 char mlme_reset_request_frFunc[81];
00276 bool mlme_reset_request_SetDefaultPIB;
00277
00278 bool mlme_rx_enable_request;
00279 UINT_8 mlme_rx_enable_request_STEP;
00280 char mlme_rx_enable_request_frFunc[81];
00281 UINT_32 mlme_rx_enable_request_RxOnTime;
00282 UINT_32 mlme_rx_enable_request_RxOnDuration;
00283 double mlme_rx_enable_request_currentTime;
00284
00285 bool mlme_scan_request;
00286 UINT_8 mlme_scan_request_STEP;
00287 char mlme_scan_request_frFunc[81];
00288 UINT_8 mlme_scan_request_ScanType;
00289 UINT_8 mlme_scan_request_orig_macBeaconOrder;
00290 UINT_8 mlme_scan_request_orig_macBeaconOrder2;
00291 UINT_8 mlme_scan_request_orig_macBeaconOrder3;
00292 UINT_16 mlme_scan_request_orig_macPANId;
00293 UINT_32 mlme_scan_request_ScanChannels;
00294 UINT_8 mlme_scan_request_ScanDuration;
00295 UINT_8 mlme_scan_request_CurrentChannel;
00296 UINT_8 mlme_scan_request_ListNum;
00297 UINT_8 mlme_scan_request_EnergyDetectList[27];
00298 PAN_ELE mlme_scan_request_PANDescriptorList[27];
00299
00300 bool mlme_start_request;
00301 UINT_8 mlme_start_request_STEP;
00302 char mlme_start_request_frFunc[81];
00303 UINT_8 mlme_start_request_BeaconOrder;
00304 UINT_8 mlme_start_request_SuperframeOrder;
00305 bool mlme_start_request_BatteryLifeExtension;
00306 bool mlme_start_request_SecurityEnable;
00307 bool mlme_start_request_PANCoordinator;
00308 UINT_16 mlme_start_request_PANId;
00309 UINT_8 mlme_start_request_LogicalChannel;
00310
00311 bool mlme_sync_request;
00312 UINT_8 mlme_sync_request_STEP;
00313 char mlme_sync_request_frFunc[81];
00314 UINT_8 mlme_sync_request_numSearchRetry;
00315 bool mlme_sync_request_tracking;
00316
00317 bool mlme_poll_request;
00318 UINT_8 mlme_poll_request_STEP;
00319 char mlme_poll_request_frFunc[81];
00320 UINT_8 mlme_poll_request_CoordAddrMode;
00321 UINT_16 mlme_poll_request_CoordPANId;
00322 IE3ADDR mlme_poll_request_CoordAddress;
00323 bool mlme_poll_request_SecurityEnable;
00324 bool mlme_poll_request_autoRequest;
00325 bool mlme_poll_request_pending;
00326
00327 bool CCA_csmaca;
00328 UINT_8 CCA_csmaca_STEP;
00329
00330 bool RX_ON_csmaca;
00331 UINT_8 RX_ON_csmaca_STEP;
00332
00333 };
00334
00335
00336 struct MAC_ACL
00337 {
00338 IE3ADDR ACLExtendedAddress;
00339 UINT_16 ACLShortAddress;
00340 UINT_16 ACLPANId;
00341 UINT_8 ACLSecurityMaterialLength;
00342 UINT_8 *ACLSecurityMaterial;
00343 UINT_8 ACLSecuritySuite;
00344 };
00345
00346
00347 typedef enum
00348 {
00349 m_SUCCESS = 0,
00350
00351 m_PAN_at_capacity,
00352 m_PAN_access_denied,
00353
00354 m_BEACON_LOSS = 0xe0,
00355 m_CHANNEL_ACCESS_FAILURE,
00356 m_DENIED,
00357 m_DISABLE_TRX_FAILURE,
00358 m_FAILED_SECURITY_CHECK,
00359 m_FRAME_TOO_LONG,
00360 m_INVALID_GTS,
00361 m_INVALID_HANDLE,
00362 m_INVALID_PARAMETER,
00363 m_NO_ACK,
00364 m_NO_BEACON,
00365 m_NO_DATA,
00366 m_NO_SHORT_ADDRESS,
00367 m_OUT_OF_CAP,
00368 m_PAN_ID_CONFLICT,
00369 m_REALIGNMENT,
00370 m_TRANSACTION_EXPIRED,
00371 m_TRANSACTION_OVERFLOW,
00372 m_TX_ACTIVE,
00373 m_UNAVAILABLE_KEY,
00374 m_UNSUPPORTED_ATTRIBUTE,
00375 m_UNDEFINED
00376 }MACenum;
00377
00378
00379 typedef enum {
00380
00381 macAckWaitDuration,
00382 macAssociationPermit,
00383 macAutoRequest,
00384 macBattLifeExt,
00385 macBattLifeExtPeriods,
00386 macBeaconPayload,
00387 macBeaconPayloadLength,
00388 macBeaconOrder,
00389 macBeaconTxTime,
00390 macBSN,
00391 macCoordExtendedAddress,
00392 macCoordShortAddress,
00393 macDSN,
00394 macGTSPermit,
00395 macMaxCSMABackoffs,
00396 macMinBE,
00397 macPANId,
00398 macPromiscuousMode,
00399 macRxOnWhenIdle,
00400 macShortAddress,
00401 macSuperframeOrder,
00402 macTransactionPersistenceTime,
00403
00404 macACLEntryDescriptorSet,
00405 macACLEntryDescriptorSetSize,
00406 macDefaultSecurity,
00407 macACLDefaultSecurityMaterialLength,
00408 macDefaultSecurityMaterial,
00409 macDefaultSecuritySuite,
00410 macSecurityMode
00411 }MPIBAenum;
00412
00413 struct MAC_PIB
00414 {
00415
00416 UINT_8 macAckWaitDuration;
00417 bool macAssociationPermit;
00418 bool macAutoRequest;
00419 bool macBattLifeExt;
00420 UINT_8 macBattLifeExtPeriods;
00421
00422
00423
00424
00425
00426 UINT_8 macBeaconPayload[aMaxBeaconPayloadLength+1];
00427 UINT_8 macBeaconPayloadLength;
00428 UINT_8 macBeaconOrder;
00429 UINT_32 macBeaconTxTime:24;
00430 UINT_8 macBSN;
00431 IE3ADDR macCoordExtendedAddress;
00432 UINT_16 macCoordShortAddress;
00433 UINT_8 macDSN;
00434 bool macGTSPermit;
00435 UINT_8 macMaxCSMABackoffs;
00436 UINT_8 macMinBE;
00437 UINT_16 macPANId;
00438 bool macPromiscuousMode;
00439 bool macRxOnWhenIdle;
00440 UINT_16 macShortAddress;
00441 UINT_8 macSuperframeOrder;
00442 UINT_16 macTransactionPersistenceTime;
00443
00444 MAC_ACL *macACLEntryDescriptorSet;
00445 UINT_8 macACLEntryDescriptorSetSize;
00446 bool macDefaultSecurity;
00447 UINT_8 macACLDefaultSecurityMaterialLength;
00448 UINT_8 *macDefaultSecurityMaterial;
00449 UINT_8 macDefaultSecuritySuite;
00450 UINT_8 macSecurityMode;
00451 };
00452
00453 #define macTxBcnCmdDataHType 1
00454 #define macIFSHType 2
00455 #define macBackoffBoundType 3
00456 class Mac802_15_4;
00457 class Mac802_15_4Handler : public Handler
00458 {
00459 friend class Mac802_15_4;
00460 public:
00461 Mac802_15_4Handler(Mac802_15_4 *m, int tp) : Handler()
00462 {
00463 mac = m;
00464 type = tp;
00465 nullEvent.uid_ = 0;
00466 }
00467 virtual void handle(Event* e);
00468
00469 protected:
00470 Mac802_15_4 *mac;
00471 int type;
00472 Event nullEvent;
00473 };
00474
00475 #define TxOp_Acked 0x01
00476 #define TxOp_GTS 0x02
00477 #define TxOp_Indirect 0x04
00478 #define TxOp_SecEnabled 0x08
00479 class Phy802_15_4;
00480 class CsmaCA802_15_4;
00481 class SSCS802_15_4;
00482 class Nam802_15_4;
00483 class Mac802_15_4 : public Mac
00484 {
00485 friend class Phy802_15_4;
00486 friend class Mac802_15_4Handler;
00487 friend class macTxOverTimer;
00488 friend class macTxTimer;
00489 friend class macExtractTimer;
00490 friend class macAssoRspWaitTimer;
00491 friend class macDataWaitTimer;
00492 friend class macRxEnableTimer;
00493 friend class macScanTimer;
00494 friend class macBeaconTxTimer;
00495 friend class macBeaconRxTimer;
00496 friend class macBeaconSearchTimer;
00497 friend class CsmaCA802_15_4;
00498 friend class SSCS802_15_4;
00499 friend class Nam802_15_4;
00500 public:
00501 Mac802_15_4(MAC_PIB *mp);
00502 ~Mac802_15_4();
00503 void init(bool reset = false);
00504
00505
00506 void PD_DATA_confirm(PHYenum status);
00507 void PLME_CCA_confirm(PHYenum status);
00508 void PLME_ED_confirm(PHYenum status,UINT_8 EnergyLevel);
00509 void PLME_GET_confirm(PHYenum status,PPIBAenum PIBAttribute,PHY_PIB *PIBAttributeValue);
00510 void PLME_SET_TRX_STATE_confirm(PHYenum status);
00511 void PLME_SET_confirm(PHYenum status,PPIBAenum PIBAttribute);
00512
00513
00514 void MCPS_DATA_request(UINT_8 SrcAddrMode,UINT_16 SrcPANId,IE3ADDR SrcAddr,
00515 UINT_8 DstAddrMode,UINT_16 DstPANId,IE3ADDR DstAddr,
00516 UINT_8 msduLength,Packet *msdu,UINT_8 msduHandle,UINT_8 TxOptions);
00517 void MCPS_DATA_indication(UINT_8 SrcAddrMode,UINT_16 SrcPANId,IE3ADDR SrcAddr,
00518 UINT_8 DstAddrMode,UINT_16 DstPANId,IE3ADDR DstAddr,
00519 UINT_8 msduLength,Packet *msdu,UINT_8 mpduLinkQuality,
00520 bool SecurityUse,UINT_8 ACLEntry);
00521 void MCPS_PURGE_request(UINT_8 msduHandle);
00522 void MLME_ASSOCIATE_request(UINT_8 LogicalChannel,UINT_8 CoordAddrMode,UINT_16 CoordPANId,IE3ADDR CoordAddress,
00523 UINT_8 CapabilityInformation,bool SecurityEnable);
00524 void MLME_ASSOCIATE_response(IE3ADDR DeviceAddress,UINT_16 AssocShortAddress,MACenum status,bool SecurityEnable);
00525 void MLME_DISASSOCIATE_request(IE3ADDR DeviceAddress,UINT_8 DisassociateReason,bool SecurityEnable);
00526 void MLME_DISASSOCIATE_indication(IE3ADDR DeviceAddress,UINT_8 DisassociateReason,bool SecurityUse,UINT_8 ACLEntry);
00527 void MLME_GET_request(MPIBAenum PIBAttribute);
00528 void MLME_GTS_request(UINT_8 GTSCharacteristics,bool SecurityEnable);
00529 void MLME_GTS_confirm(UINT_8 GTSCharacteristics,MACenum status);
00530 void MLME_GTS_indication(UINT_16 DevAddress,UINT_8 GTSCharacteristics,
00531 bool SecurityUse, UINT_8 ACLEntry);
00532 void MLME_ORPHAN_response(IE3ADDR OrphanAddress,UINT_16 ShortAddress,bool AssociatedMember,bool SecurityEnable);
00533 void MLME_RESET_request(bool SetDefaultPIB);
00534 void MLME_RX_ENABLE_request(bool DeferPermit,UINT_32 RxOnTime,UINT_32 RxOnDuration);
00535 void MLME_SCAN_request(UINT_8 ScanType,UINT_32 ScanChannels,UINT_8 ScanDuration);
00536 void MLME_SET_request(MPIBAenum PIBAttribute,MAC_PIB *PIBAttributeValue);
00537 void MLME_START_request(UINT_16 PANId,UINT_8 LogicalChannel,UINT_8 BeaconOrder,
00538 UINT_8 SuperframeOrder,bool PANCoordinator,bool BatteryLifeExtension,
00539 bool CoordRealignment,bool SecurityEnable);
00540 void MLME_SYNC_request(UINT_8 LogicalChannel, bool TrackBeacon);
00541 void MLME_POLL_request(UINT_8 CoordAddrMode,UINT_16 CoordPANId,IE3ADDR CoordAddress,bool SecurityEnable);
00542
00543 inline int hdr_dst(char* hdr,int dst = -2);
00544 inline int hdr_src(char* hdr,int src = -2);
00545 inline int hdr_type(char* hdr, UINT_16 type = 0);
00546
00547 inline Tap *tap(){return tap_;}
00548 void recv(Packet *p, Handler *h);
00549 void recvBeacon(Packet *p);
00550 void recvAck(Packet *p);
00551 void recvCommand(Packet *p);
00552 void recvData(Packet *p);
00553 bool toParent(Packet *p);
00554
00555 protected:
00556 void set_trx_state_request(PHYenum state,const char *frFile,const char *frFunc,int line);
00557 double locateBoundary(bool parent,double wtime);
00558 void txOverHandler(void);
00559 void txHandler(void);
00560 void extractHandler(void);
00561 void assoRspWaitHandler(void);
00562 void dataWaitHandler(void);
00563 void rxEnableHandler(void);
00564 void scanHandler(void);
00565 void beaconTxHandler(bool forTX);
00566 void beaconRxHandler(void);
00567 void beaconSearchHandler(void);
00568 void isPanCoor(bool isPC);
00569
00570 private:
00571 void checkTaskOverflow(UINT_8 task);
00572 void dispatch(PHYenum status,const char *frFunc,PHYenum req_state = p_SUCCESS,MACenum mStatus = m_SUCCESS);
00573 void sendDown(Packet *p,Handler* h);
00574 void mcps_data_request(UINT_8 SrcAddrMode,UINT_16 SrcPANId,IE3ADDR SrcAddr,
00575 UINT_8 DstAddrMode,UINT_16 DstPANId,IE3ADDR DstAddr,
00576 UINT_8 msduLength,Packet *msdu,UINT_8 msduHandle,UINT_8 TxOptions,
00577 bool frUpper = false,PHYenum status = p_SUCCESS,MACenum mStatus = m_SUCCESS);
00578 void mlme_associate_request(UINT_8 LogicalChannel,UINT_8 CoordAddrMode,UINT_16 CoordPANId,IE3ADDR CoordAddress,
00579 UINT_8 CapabilityInformation,bool SecurityEnable,
00580 bool frUpper = false,PHYenum status = p_SUCCESS,MACenum mStatus = m_SUCCESS);
00581 void mlme_associate_response(IE3ADDR DeviceAddress,UINT_16 AssocShortAddress,MACenum Status,bool SecurityEnable,
00582 bool frUpper = false,PHYenum status = p_SUCCESS);
00583 void mlme_disassociate_request(IE3ADDR DeviceAddress,UINT_8 DisassociateReason,bool SecurityEnable,bool frUpper = false,PHYenum status = p_SUCCESS);
00584 void mlme_orphan_response(IE3ADDR OrphanAddress,UINT_16 ShortAddress,bool AssociatedMember,bool SecurityEnable,bool frUpper = false,PHYenum status = p_SUCCESS);
00585 void mlme_reset_request(bool SetDefaultPIB,bool frUpper = false,PHYenum status = p_SUCCESS);
00586 void mlme_rx_enable_request(bool DeferPermit,UINT_32 RxOnTime,UINT_32 RxOnDuration,bool frUpper = false,PHYenum status = p_SUCCESS);
00587 void mlme_scan_request(UINT_8 ScanType,UINT_32 ScanChannels,UINT_8 ScanDuration,bool frUpper = false,PHYenum status = p_SUCCESS);
00588 void mlme_start_request(UINT_16 PANId,UINT_8 LogicalChannel,UINT_8 BeaconOrder,
00589 UINT_8 SuperframeOrder,bool PANCoordinator,bool BatteryLifeExtension,
00590 bool CoordRealignment,bool SecurityEnable,
00591 bool frUpper = false,PHYenum status = p_SUCCESS);
00592 void mlme_sync_request(UINT_8 LogicalChannel, bool TrackBeacon,bool frUpper = false,PHYenum status = p_SUCCESS);
00593 void mlme_poll_request(UINT_8 CoordAddrMode,UINT_16 CoordPANId,IE3ADDR CoordAddress,bool SecurityEnable,
00594 bool autoRequest = false,bool firstTime = false,PHYenum status = p_SUCCESS);
00595
00596 void csmacaBegin(char pktType);
00597 void csmacaResume(void);
00598 void csmacaCallBack(PHYenum status);
00599 int getBattLifeExtSlotNum(void);
00600 double getCAP(bool small);
00601 double getCAPbyType(int type);
00602 bool canProceedWOcsmaca(Packet *p);
00603 void transmitCmdData(void);
00604 void reset_TRX(const char *frFile,const char *frFunc,int line);
00605 void taskSuccess(char task,bool csmacaRes = true);
00606 void taskFailed(char task,MACenum status,bool csmacaRes = true);
00607 void freePkt(Packet *pkt);
00608 UINT_8 macHeaderLen(UINT_16 FrmCtrl);
00609 void constructACK(Packet *p);
00610 void constructMPDU(UINT_8 msduLength,Packet *msdu, UINT_16 FrmCtrl,UINT_8 BDSN,panAddrInfo DstAddrInfo,
00611 panAddrInfo SrcAddrInfo,UINT_16 SuperSpec,UINT_8 CmdType,UINT_16 FCS);
00612 void constructCommandHeader(Packet *p,FrameCtrl *frmCtrl,UINT_8 CmdType,
00613 UINT_8 dstAddrMode,UINT_16 dstPANId,IE3ADDR dstAddr,
00614 UINT_8 srcAddrMode,UINT_16 srcPANId,IE3ADDR srcAddr,
00615 bool secuEnable,bool pending,bool ackreq);
00616 void log(Packet *p);
00617 void resetCounter(int dst);
00618 int command(int argc, const char*const* argv);
00619 void changeNodeColor(double atTime,const char *newColor,bool save = true);
00620 void txBcnCmdDataHandler(void);
00621 void IFSHandler(void);
00622 void backoffBoundHandler(void);
00623
00624 public:
00625 static bool verbose;
00626 static UINT_8 txOption;
00627 static bool ack4data;
00628 static UINT_8 callBack;
00629 static UINT_32 DBG_UID;
00630
00631 protected:
00632
00633 taskPending taskP;
00634 MAC_PIB mpib;
00635 PHY_PIB tmp_ppib;
00636 DevCapability capability;
00637
00638
00639
00640 bool secuBeacon;
00641 SuperframeSpec sfSpec,sfSpec2,sfSpec3;
00642 GTSSpec gtsSpec,gtsSpec2;
00643 PendAddrSpec pendAddrSpec;
00644 UINT_8 beaconPeriods,beaconPeriods2;
00645 PAN_ELE panDes,panDes2;
00646 Packet *rxBeacon;
00647 double macBcnTxTime;
00648 double macBcnRxTime;
00649 double macBcnOtherRxTime;
00650
00651
00652
00653
00654
00655 UINT_8 macBeaconOrder2;
00656 UINT_8 macSuperframeOrder2;
00657 UINT_8 macBeaconOrder3;
00658 UINT_8 macSuperframeOrder3;
00659 bool oneMoreBeacon;
00660 UINT_8 numLostBeacons;
00661
00662 UINT_16 rt_myNodeID;
00663
00664 UINT_8 energyLevel;
00665
00666
00667 DEVICELINK *deviceLink1;
00668 DEVICELINK *deviceLink2;
00669 TRANSACLINK *transacLink1;
00670 TRANSACLINK *transacLink2;
00671
00672 private:
00673 IE3ADDR aExtendedAddress;
00674
00675
00676 macTxOverTimer *txOverT;
00677 macTxTimer *txT;
00678 macExtractTimer *extractT;
00679 macAssoRspWaitTimer *assoRspWaitT;
00680 macDataWaitTimer *dataWaitT;
00681 macRxEnableTimer *rxEnableT;
00682 macScanTimer *scanT;
00683 macBeaconTxTimer *bcnTxT;
00684 macBeaconRxTimer *bcnRxT;
00685 macBeaconSearchTimer *bcnSearchT;
00686
00687
00688 Mac802_15_4Handler txCmdDataH;
00689 Mac802_15_4Handler IFSH;
00690 Mac802_15_4Handler backoffBoundH;
00691
00692 bool isPANCoor;
00693 Phy802_15_4 *phy;
00694 CsmaCA802_15_4 *csmaca;
00695 SSCS802_15_4 *sscs;
00696 Nam802_15_4 *nam;
00697 PHYenum trx_state_req;
00698 bool inTransmission;
00699 bool beaconWaiting;
00700 Packet *txBeacon;
00701 Packet *txAck;
00702 Packet *txBcnCmd;
00703 Packet *txBcnCmd2;
00704 Packet *txData;
00705 Packet *txCsmaca;
00706 Packet *txPkt;
00707 Packet *rxData;
00708 Packet *rxCmd;
00709 UINT_32 txPkt_uid;
00710 double rxDataTime;
00711 bool waitBcnCmdAck;
00712 bool waitBcnCmdAck2;
00713 bool waitDataAck;
00714 UINT_8 backoffStatus;
00715 UINT_8 numDataRetry;
00716 UINT_8 numBcnCmdRetry;
00717 UINT_8 numBcnCmdRetry2;
00718
00719 NsObject *logtarget_;
00720
00721
00722 HLISTLINK *hlistBLink1;
00723 HLISTLINK *hlistBLink2;
00724 HLISTLINK *hlistDLink1;
00725 HLISTLINK *hlistDLink2;
00726 };
00727
00728 #define plme_set_trx_state_request(state) \
00729 set_trx_state_request(state,__FILE__,__FUNCTION__,__LINE__)
00730 #define resetTRX() \
00731 reset_TRX(__FILE__,__FUNCTION__,__LINE__)
00732
00733 #endif
00734
00735