⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 p802_15_4sscs.cc

📁 802.15.4 mac 协议源程序
💻 CC
📖 第 1 页 / 共 3 页
字号:
/********************************************//*     NS2 Simulator for IEEE 802.15.4      *//*           (per P802.15.4/D18)            *//*------------------------------------------*//* by:        Jianliang Zheng               *//*        (zheng@ee.ccny.cuny.edu)          *//*              Myung J. Lee                *//*          (lee@ccny.cuny.edu)             *//*        ~~~~~~~~~~~~~~~~~~~~~~~~~         *//*           SAIT-CUNY Joint Lab            *//********************************************/// File:  p802_15_4sscs.cc// Mode:  C++; c-basic-offset:8; tab-width:8; indent-tabs-mode:t// $Header: p802_15_4sscs.cc,v 1.1 2004/10/15 17:32:08 zheng Exp $// Functions in this file are out of the scope of 802.15.4.// But they elaborate how a higher layer interfaces with 802.15.4.// You can modify this file at will to fit your need./* * Copyright (c) 2003-2004 Samsung Advanced Institute of Technology and * The City University of New York. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright *    notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright *    notice, this list of conditions and the following disclaimer in the *    documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software *    must display the following acknowledgement: *	This product includes software developed by the Joint Lab of Samsung  *      Advanced Institute of Technology and The City University of New York. * 4. Neither the name of Samsung Advanced Institute of Technology nor of  *    The City University of New York may be used to endorse or promote  *    products derived from this software without specific prior written  *    permission. * * THIS SOFTWARE IS PROVIDED BY THE JOINT LAB OF SAMSUNG ADVANCED INSTITUTE * OF TECHNOLOGY AND THE CITY UNIVERSITY OF NEW YORK ``AS IS'' AND ANY EXPRESS  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN  * NO EVENT SHALL SAMSUNG ADVANCED INSTITUTE OR THE CITY UNIVERSITY OF NEW YORK  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE  * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */#include "p802_15_4sscs.h"#ifdef ZigBeeIF#include "../zbr/zbr_link.h"#include "../zbr/zbr.h"#endif#define assoRetryInterval	1.0//UINT_32 SSCS802_15_4::ScanChannels = 0x07ffffff;UINT_32 SSCS802_15_4::ScanChannels = 0x00003800;	//only scan the first 3 channels in 2.4Gvoid SSCS802_15_4Timer::start(double wtime){	assert(!active);	active = true;	nullEvent.uid_ = 0;	Scheduler::instance().schedule(this,&nullEvent,wtime);}void SSCS802_15_4Timer::cancel(void){	active = false;	Scheduler::instance().cancel(&nullEvent);}void SSCS802_15_4Timer::handle(Event* e){	active = false;	if (sscs->neverAsso)		sscs->startDevice(sscs->t_isCT,sscs->t_isFFD,sscs->t_assoPermit,sscs->t_txBeacon,sscs->t_BO,sscs->t_SO,true);}char *statusName(MACenum status){	switch(status)	{		case m_SUCCESS:			return "SUCCESS";		case m_PAN_at_capacity:			return "PAN_at_capacity";		case m_PAN_access_denied:			return "PAN_access_denied";		case m_BEACON_LOSS:			return "BEACON_LOSS";		case m_CHANNEL_ACCESS_FAILURE:			return "CHANNEL_ACCESS_FAILURE";		case m_DENIED:			return "DENIED";		case m_DISABLE_TRX_FAILURE:			return "DISABLE_TRX_FAILURE";		case m_FAILED_SECURITY_CHECK:			return "FAILED_SECURITY_CHECK";		case m_FRAME_TOO_LONG:			return "FRAME_TOO_LONG";		case m_INVALID_GTS:			return "INVALID_GTS";		case m_INVALID_HANDLE:			return "INVALID_HANDLE";		case m_INVALID_PARAMETER:			return "INVALID_PARAMETER";		case m_NO_ACK:			return "NO_ACK";		case m_NO_BEACON:			return "NO_BEACON";		case m_NO_DATA:			return "NO_DATA";		case m_NO_SHORT_ADDRESS:			return "NO_SHORT_ADDRESS";		case m_OUT_OF_CAP:			return "OUT_OF_CAP";		case m_PAN_ID_CONFLICT:			return "PAN_ID_CONFLICT";		case m_REALIGNMENT:			return "REALIGNMENT";		case m_TRANSACTION_EXPIRED:			return "TRANSACTION_EXPIRED";		case m_TRANSACTION_OVERFLOW:			return "TRANSACTION_OVERFLOW";		case m_TX_ACTIVE:			return "TX_ACTIVE";		case m_UNAVAILABLE_KEY:			return "UNAVAILABLE_KEY";		case m_UNSUPPORTED_ATTRIBUTE:			return "UNSUPPORTED_ATTRIBUTE";		case m_UNDEFINED:		default:			return "UNDEFINED";	}}SSCS802_15_4::SSCS802_15_4(Mac802_15_4 *m):assoH(this){	Tcl& tcl = Tcl::instance();	Node *node;	MobileNode* mnode;	mac = m;	neverAsso = true;#ifdef ZigBeeIF	zbr = getZBRLink(mac->index_);#endif	hlistLink1 = NULL;	hlistLink2 = NULL;}SSCS802_15_4::~SSCS802_15_4(){}void SSCS802_15_4::MCPS_DATA_confirm(UINT_8 msduHandle,MACenum status){}void SSCS802_15_4::MCPS_DATA_indication(UINT_8 SrcAddrMode,UINT_16 SrcPANId,IE3ADDR SrcAddr,					UINT_8 DstAddrMode,UINT_16 DstPANId,IE3ADDR DstAddr,					UINT_8 msduLength,Packet *msdu,UINT_8 mpduLinkQuality,					bool SecurityUse,UINT_8 ACLEntry){	Packet::free(msdu);}void SSCS802_15_4::MCPS_PURGE_confirm(UINT_8 msduHandle,MACenum status){}#ifdef ZigBeeIFextern NET_SYSTEM_CONFIG NetSystemConfig;#endifvoid SSCS802_15_4::MLME_ASSOCIATE_indication(IE3ADDR DeviceAddress,UINT_8 CapabilityInformation,bool SecurityUse,UINT_8 ACLEntry){		//we assign the cluster tree address as the MAC short address	unsigned int child_num,logAddr;	bool noCapacity;#ifdef ZigBeeIF	if (t_isCT)			//need to assign a cluster tree logic address	{		assertZBR();		noCapacity = false;		if (zbr->myDepth >= NetSystemConfig.Lm)			noCapacity = true;		else		{			child_num = 1;			logAddr = zbr->myNodeID + 1;							while (!updateCTAddrLink(zbr_oper_est,logAddr))			{				if (getIpAddrFrLogAddr(logAddr,false) == (UINT_16)DeviceAddress)					break; 				logAddr += ZBR::c_skip(zbr->myDepth);						child_num++;				if (child_num > NetSystemConfig.Cm)					break;			}			if (child_num > NetSystemConfig.Cm)				noCapacity = true;		}		if (noCapacity)						//no capacity		{#ifdef DEBUG802_15_4			fprintf(stdout,"[%s::%s][%f](node %d) no capacity for cluster-tree: request from %d\n",__FILE__,__FUNCTION__,CURRENT_TIME,mac->index_,DeviceAddress);#endif			zbr->sscs_nb_insert((UINT_16)DeviceAddress,NEIGHBOR);			mac->MLME_ASSOCIATE_response(DeviceAddress,0,m_PAN_at_capacity,false);		}		else		{			chkAddCTAddrLink(logAddr,DeviceAddress);			chkAddDeviceLink(&mac->deviceLink1,&mac->deviceLink2,DeviceAddress,CapabilityInformation);			zbr->sscs_nb_insert((UINT_16)DeviceAddress,CHILD);			mac->MLME_ASSOCIATE_response(DeviceAddress,logAddr,m_SUCCESS,false);		}	}	else	//just assign the IP address as the MAC short address for non-cluster tree#endif	{		chkAddDeviceLink(&mac->deviceLink1,&mac->deviceLink2,DeviceAddress,CapabilityInformation);		mac->MLME_ASSOCIATE_response(DeviceAddress,(UINT_16)DeviceAddress,m_SUCCESS,false);	}}void SSCS802_15_4::MLME_ASSOCIATE_confirm(UINT_16 AssocShortAddress,MACenum status){	MAC_PIB t_mpib;	if (status == m_SUCCESS)	{		rt_myNodeID = AssocShortAddress;		/*		if (!sscsTaskP.startDevice_isCluster_Tree)			t_mpib.macShortAddress = AssocShortAddress;		else		*/			t_mpib.macShortAddress = mac->index_;		//don't use cluster tree logic address		mac->MLME_SET_request(macShortAddress,&t_mpib);	}	dispatch(status,"MLME_ASSOCIATE_confirm");}void SSCS802_15_4::MLME_DISASSOCIATE_confirm(MACenum status){}void SSCS802_15_4::MLME_BEACON_NOTIFY_indication(UINT_8 BSN,PAN_ELE *PANDescriptor,UINT_8 PendAddrSpec,IE3ADDR *AddrList,UINT_8 sduLength,UINT_8 *sdu){}void SSCS802_15_4::MLME_GET_confirm(MACenum status,MPIBAenum PIBAttribute,MAC_PIB *PIBAttributeValue){}void SSCS802_15_4::MLME_ORPHAN_indication(IE3ADDR OrphanAddress,bool SecurityUse,UINT_8 ACLEntry){	if (updateDeviceLink(tr_oper_est,&mac->deviceLink1,&mac->deviceLink2,OrphanAddress) == 0)		mac->MLME_ORPHAN_response(OrphanAddress,(UINT_16)OrphanAddress,true,false);	else		mac->MLME_ORPHAN_response(OrphanAddress,0,false,false);}void SSCS802_15_4::MLME_RESET_confirm(MACenum status){}void SSCS802_15_4::MLME_RX_ENABLE_confirm(MACenum status){}void SSCS802_15_4::MLME_SET_confirm(MACenum status,MPIBAenum PIBAttribute){}void SSCS802_15_4::MLME_SCAN_confirm(MACenum status,UINT_8 ScanType,UINT_32 UnscannedChannels,				     UINT_8 ResultListSize,UINT_8 *EnergyDetectList,				     PAN_ELE *PANDescriptorList){	MAC_PIB t_mpib;	T_UnscannedChannels = UnscannedChannels;	T_ResultListSize = ResultListSize;	T_EnergyDetectList = EnergyDetectList;	T_PANDescriptorList = PANDescriptorList;	if (ScanType == 0x01)		dispatch(status,"MLME_SCAN_confirm");	if (ScanType == 0x03)	if (status == m_SUCCESS)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -