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

📄 p802_15_4sscs.cc

📁 Low Rate Wireless Personal Area Networks (LR-WPANs)in C
💻 CC
📖 第 1 页 / 共 3 页
字号:
				mac->MLME_SET_request(macAssociationPermit,&t_mpib);				sscsTaskP.startDevice_Channel = ch;				fprintf(stdout,"[%f](node %d) sending association request to [channel:%d] [PAN_ID:%d] [CoordAddr:%d] ... \n",CURRENT_TIME,mac->index_,ch,T_PANDescriptorList[i].CoordPANId,T_PANDescriptorList[i].CoordAddress_64);				sscsTaskP.taskStep(sscsTP_startDevice)++;				sscsTaskP.startDevice_panDes = T_PANDescriptorList[i];				mac->MLME_ASSOCIATE_request(ch,T_PANDescriptorList[i].CoordAddrMode,T_PANDescriptorList[i].CoordPANId,T_PANDescriptorList[i].CoordAddress_64,mac->capability.cap,false);			}			break;		case 2:			sfSpec.SuperSpec = sscsTaskP.startDevice_panDes.SuperframeSpec;			sfSpec.parse();			if (sfSpec.BO != 15)				strcpy(tmpstr,"beacon enabled");			else				strcpy(tmpstr,"non-beacon enabled");			if (status != m_SUCCESS)			{				//reset association permission				t_mpib.macAssociationPermit = false;				mac->MLME_SET_request(macAssociationPermit,&t_mpib);				fprintf(stdout,"<!>[%f](node %d) association failed -> %s (%s) [channel:%d] [PAN_ID:%d] [CoordAddr:%d]\n",CURRENT_TIME,mac->index_,statusName(status),tmpstr,sscsTaskP.startDevice_panDes.LogicalChannel,sscsTaskP.startDevice_panDes.CoordPANId,sscsTaskP.startDevice_panDes.CoordAddress_64);				assoH.start(assoRetryInterval);				sscsTaskP.taskStatus(sscsTP_startDevice) = false;#ifdef ZigBeeIF				if (isClusterTree)				{					assertZBR();					zbr->sscs_nb_insert(sscsTaskP.startDevice_panDes.CoordAddress_64,NEIGHBOR);					if (status == m_PAN_at_capacity)						chkAddUpdHListLink(&hlistLink1,&hlistLink2,(UINT_16)sscsTaskP.startDevice_panDes.CoordAddress_64,0);				}#endif			}			else			{				neverAsso = false;				fprintf(stdout,"[%f](node %d) association successful (%s) [channel:%d] [PAN_ID:%d] [CoordAddr:%d]\n",CURRENT_TIME,mac->index_,tmpstr,sscsTaskP.startDevice_panDes.LogicalChannel,sscsTaskP.startDevice_panDes.CoordPANId,sscsTaskP.startDevice_panDes.CoordAddress_64);#ifdef ZigBeeIF				if (isClusterTree)				{					assertZBR();					zbr->myDepth = rt_myDepth;					zbr->myNodeID = rt_myNodeID;					zbr->myParentNodeID = rt_myParentNodeID;					zbr->sscs_nb_insert(sscsTaskP.startDevice_panDes.CoordAddress_64,PARENT);					//chkAddCTAddrLink(zbr->myNodeID,mac->index_);	//too late -- may result in assigning duplicated addresses					activateCTAddrLink(zbr->myNodeID,mac->index_);					emptyHListLink(&hlistLink1,&hlistLink2);				}#endif				if (sfSpec.BO != 15)				{					fprintf(stdout,"[%f](node %d) begin to synchronize with the coordinator\n",CURRENT_TIME,mac->index_);					mac->MLME_SYNC_request(sscsTaskP.startDevice_panDes.LogicalChannel,true);					sscsTaskP.taskStatus(sscsTP_startDevice) = false;				}				if (isFFD && txBeacon)				{					sscsTaskP.taskStep(sscsTP_startDevice)++;					fprintf(stdout,"[%f](node %d) begin to transmit beacons\n",CURRENT_TIME,mac->index_);					mac->MLME_START_request(mac->mpib.macPANId,sscsTaskP.startDevice_Channel,BO,SO,false,false,false,false);				}				else					sscsTaskP.taskStatus(sscsTP_startDevice) = false;#ifdef ZigBeeIF				if (isClusterTree)					zbr->dRate = mac->phy->getRate('d');#endif			}			break;		case 3:			sscsTaskP.taskStatus(sscsTP_startDevice) = false;			if (status == m_SUCCESS)				fprintf(stdout,"[%f](node %d) beacon transmission successful [channel:%d] [PAN_ID:%d]\n",CURRENT_TIME,mac->index_,sscsTaskP.startDevice_Channel,mac->mpib.macPANId);			else				fprintf(stdout,"<!>[%f](node %d) failed to transmit beacons -> %s [channel:%d] [PAN_ID:%d]\n",CURRENT_TIME,mac->index_,statusName(status),sscsTaskP.startDevice_Channel,mac->mpib.macPANId);			break;		default:			break;	}}//--------------------------------------------------------------------------/* The following primitives are availabe from MAC sublayer. You can call these primitives from SSCS or other upper layer *	void MCPS_DATA_request(UINT_8 SrcAddrMode,UINT_16 SrcPANId,IE3ADDR SrcAddr, *			       UINT_8 DstAddrMode,UINT_16 DstPANId,IE3ADDR DstAddr, *			       UINT_8 msduLength,Packet *msdu,UINT_8 msduHandle,UINT_8 TxOptions); *	void 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); *	void MCPS_PURGE_request(UINT_8 msduHandle); *	void MLME_ASSOCIATE_request(UINT_8 LogicalChannel,UINT_8 CoordAddrMode,UINT_16 CoordPANId,IE3ADDR CoordAddress, *				    UINT_8 CapabilityInformation,bool SecurityEnable); *	void MLME_ASSOCIATE_response(IE3ADDR DeviceAddress,UINT_16 AssocShortAddress,MACenum status,bool SecurityEnable); *	void MLME_DISASSOCIATE_request(IE3ADDR DeviceAddress,UINT_8 DisassociateReason,bool SecurityEnable); *	void MLME_DISASSOCIATE_indication(IE3ADDR DeviceAddress,UINT_8 DisassociateReason,bool SecurityUse,UINT_8 ACLEntry); *	void MLME_DISASSOCIATE_confirm(MACenum status); *	void MLME_GET_request(MPIBAenum PIBAttribute); *	void MLME_GTS_request(UINT_8 GTSCharacteristics,bool SecurityEnable); *	void MLME_GTS_confirm(UINT_8 GTSCharacteristics,MACenum status); *	void MLME_GTS_indication(UINT_16 DevAddress,UINT_8 GTSCharacteristics, *				 bool SecurityUse, UINT_8 ACLEntry); *	void MLME_ORPHAN_indication(IE3ADDR OrphanAddress,bool SecurityUse,UINT_8 ACLEntry); *	void MLME_ORPHAN_response(IE3ADDR OrphanAddress,UINT_16 ShortAddress,bool AssociatedMember,bool SecurityEnable); *	void MLME_RESET_request(bool SetDefaultPIB); *	void MLME_RX_ENABLE_request(bool DeferPermit,UINT_32 RxOnTime,UINT_32 RxOnDuration); *	void MLME_RX_ENABLE_confirm(MACenum status); *	void MLME_SCAN_request(UINT_8 ScanType,UINT_32 ScanChannels,UINT_8 ScanDuration); *	void MLME_SET_request(MPIBAenum PIBAttribute,MAC_PIB *PIBAttributeValue); *	void MLME_SET_confirm(MACenum status,MPIBAenum PIBAttribute); *	void MLME_START_request(UINT_16 PANId,UINT_8 LogicalChannel,UINT_8 BeaconOrder, *				UINT_8 SuperframeOrder,bool PANCoordinator,bool BatteryLifeExtension, *				bool CoordRealignment,bool SecurityEnable); *	void MLME_SYNC_request(UINT_8 LogicalChannel, bool TrackBeacon); *	void MLME_SYNC_LOSS_indication(MACenum LossReason); *	void MLME_POLL_request(UINT_8 CoordAddrMode,UINT_16 CoordPANId,IE3ADDR CoordAddress,bool SecurityEnable); *	void MLME_POLL_confirm(MACenum status); *///--------------------------------------------------------------------------/* The following commands are available in Tcl scripts -- most of them are the wrap-up of primitives */int SSCS802_15_4::command(int argc, const char*const* argv){	//Commands from	Tcl will be one	of the following forms:	// --- $node sscs startPANCoord	<txBeacon = 1> <beaconOrder = 3> <SuperframeOrder = 3>	// --- $node sscs startDevice <isFFD = 1> <assoPermit = 1> <txBeacon = 0> <beaconOrder = 3> <SuperframeOrder = 3>	// --- $node sscs startCTPANCoord <txBeacon = 1> <beaconOrder = 3> <SuperframeOrder = 3>	// --- $node sscs startCTDevice <isFFD = 1> <assoPermit = 1> <txBeacon = 0> <beaconOrder = 3> <SuperframeOrder = 3>	// --- $node sscs startBeacon <beaconOrder = 3> <SuperframeOrder = 3>	// --- $node sscs stopBeacon	int i;	if ((strcmp(argv[2], "startPANCoord") == 0)	||  (strcmp(argv[2], "startCTPANCoord") == 0))	{		i = 2;		t_isCT = (strcmp(argv[i], "startCTPANCoord") == 0);#ifndef ZigBeeIF		t_isCT = false;#endif		if (argc == i + 1)		{			t_txBeacon = true;			t_BO = 3;			t_SO = 3;		}		else if (argc == i + 2)		{			t_txBeacon = (atoi(argv[i+1])!=0);			t_BO = 3;			t_SO = 3;		}		else if (argc == i + 3)		{			t_txBeacon = (atoi(argv[i+1])!=0);			t_BO = atoi(argv[i+2]);			t_SO = 3;		}		else		{			t_txBeacon = (atoi(argv[i+1])!=0);			t_BO = atoi(argv[i+2]);			t_SO = atoi(argv[i+3]);		}		startPANCoord(t_isCT,t_txBeacon,t_BO,t_SO,true);	}	else if ((strcmp(argv[2], "startDevice") == 0)	||       (strcmp(argv[2], "startCTDevice") == 0))	{		i = 2;		t_isCT = (strcmp(argv[i], "startCTDevice") == 0);#ifndef ZigBeeIF		t_isCT = false;#endif		if (argc == i + 1)		{			t_isFFD = true;			t_assoPermit = true;			t_txBeacon = false;			t_BO = 3;			t_SO = 3;		}		else if (argc == i + 2)		{			t_isFFD = (atoi(argv[i+1])!=0);			t_assoPermit = true;			t_txBeacon = false;			t_BO = 3;			t_SO = 3;		}		else if (argc == i + 3)		{			t_isFFD = (atoi(argv[i+1])!=0);			t_assoPermit = (atoi(argv[i+2])!=0);			t_txBeacon = false;			t_BO = 3;			t_SO = 3;		}		else if (argc == i + 4)		{			t_isFFD = (atoi(argv[i+1])!=0);			t_assoPermit = (atoi(argv[i+2])!=0);			t_txBeacon = (atoi(argv[i+3])!=0);			t_BO = 3;			t_SO = 3;		}		else if (argc == i + 5)		{			t_isFFD = (atoi(argv[i+1])!=0);			t_assoPermit = (atoi(argv[i+2])!=0);			t_txBeacon = (atoi(argv[i+3])!=0);			t_BO = atoi(argv[i+4]);			t_SO = 3;		}		else		{			t_isFFD = (atoi(argv[i+1])!=0);			t_assoPermit = (atoi(argv[i+2])!=0);			t_txBeacon = (atoi(argv[i+3])!=0);			t_BO = atoi(argv[i+4]);			t_SO = atoi(argv[i+5]);		}		if (!t_isFFD)			t_assoPermit = false;		startDevice(t_isCT,t_isFFD,t_assoPermit,t_txBeacon,t_BO,t_SO,true);	}	else if (strcmp(argv[2], "startBeacon") == 0)	{		if (argc == 3)		{			t_BO = 3;			t_SO = 3;		}		else if (argc == 4)		{			t_BO = atoi(argv[3]);			t_SO = 3;		}		else		{			t_BO = atoi(argv[3]);			t_SO = atoi(argv[4]);		}		mac->phy->PLME_GET_request(phyCurrentChannel);		mac->MLME_START_request(mac->mpib.macPANId,mac->tmp_ppib.phyCurrentChannel,t_BO,t_SO,mac->isPANCoor,false,false,false);	}	else if (strcmp(argv[2], "stopBeacon") == 0)	{		mac->phy->PLME_GET_request(phyCurrentChannel);		mac->MLME_START_request(mac->mpib.macPANId,mac->tmp_ppib.phyCurrentChannel,15,15,mac->isPANCoor,false,false,false);	}	return TCL_OK;}#ifdef ZigBeeIFvoid SSCS802_15_4::assertZBR(void){	if (!zbr)		zbr = getZBRLink(mac->index_);	assert(zbr);	zbr->dRate = mac->phy->getRate('d');}int SSCS802_15_4::RNType(void){	if (!t_isCT)		return 1;	assertZBR();	return zbr->RNType;}void SSCS802_15_4::setGetClusTreePara(char setGet,Packet *p){	hdr_lrwpan *wph = HDR_LRWPAN(p);	if (!t_isCT)		return;	assertZBR();	if (setGet == 's')	{		wph->clusTreeDepth = zbr->myDepth;		wph->clusTreeParentNodeID = zbr->myNodeID;	}	else	{		rt_myDepth = wph->clusTreeDepth + 1;		rt_myParentNodeID = wph->clusTreeParentNodeID;	}}#endif// End of file: p802_15_4sscs.cc

⌨️ 快捷键说明

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