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

📄 wireless-phy.cc

📁 fso antenna model for ns2
💻 CC
📖 第 1 页 / 共 2 页
字号:
		// Send the packet	channel_->recv(p, this);}int WirelessPhy::sendUp(Packet *p){	/*	 * Sanity Check	 */	assert(initialized());	PacketStamp s;	double Pr;	int pkt_recvd = 0;	Pr = p->txinfo_.getTxPr();		// if the node is in sleeping mode, drop the packet simply	if (em()) {			if (Is_node_on()!= true){			pkt_recvd = 0;			goto DONE;			}			if (Is_sleeping()==true && (Is_node_on() == true)) {				pkt_recvd = 0;				goto DONE;			}				}	// if the energy goes to ZERO, drop the packet simply	if (em()) {		if (em()->energy() <= 0) {			pkt_recvd = 0;			goto DONE;		}	}	if(propagation_) {		s.stamp((MobileNode*)node(), ant_, 0, lambda_);		Pr = propagation_->Pr(&p->txinfo_, &s, this);		if (Pr < CSThresh_) {			pkt_recvd = 0;			goto DONE;		}		if (Pr < RXThresh_) {			/*			 * We can detect, but not successfully receive			 * this packet.			 */			hdr_cmn *hdr = HDR_CMN(p);			hdr->error() = 1;#if DEBUG > 3			printf("SM %f.9 _%d_ drop pkt from %d low POWER %e/%e\n",			       Scheduler::instance().clock(), node()->index(),			       p->txinfo_.getNode()->index(),			       Pr,RXThresh);#endif		}	}	if(modulation_) {		hdr_cmn *hdr = HDR_CMN(p);		hdr->error() = modulation_->BitError(Pr,hdr->size());	// RPI FSO Extension		// hdr->error() = modulation_->BitError(Pr);	}		/*	 * The MAC layer must be notified of the packet reception	 * now - ie; when the first bit has been detected - so that	 * it can properly do Collision Avoidance / Detection.	 */	pkt_recvd = 1;DONE:	p->txinfo_.getAntenna()->release();	/* WILD HACK: The following two variables are a wild hack.	   They will go away in the next release...	   They're used by the mac-802_11 object to determine	   capture.  This will be moved into the net-if family of 	   objects in the future. */	p->txinfo_.RxPr = Pr;	p->txinfo_.CPThresh = CPThresh_;	/*	 * Decrease energy if packet successfully received	 */	if(pkt_recvd && em()) {		double rcvtime = hdr_cmn::access(p)->txtime();		// no way to reach here if the energy level < 0				double start_time = MAX(channel_idle_time_, NOW);		double end_time = MAX(channel_idle_time_, NOW+rcvtime);		double actual_rcvtime = end_time-start_time;		if (start_time > update_energy_time_) {			em()->DecrIdleEnergy(start_time-update_energy_time_,					     P_idle_);			update_energy_time_ = start_time;		}				em()->DecrRcvEnergy(actual_rcvtime,Pr_consume_);/*  if (end_time > channel_idle_time_) {  status_ = RECV;  }*/		channel_idle_time_ = end_time;		update_energy_time_ = end_time;		status_ = IDLE;		/*		  hdr_diff *dfh = HDR_DIFF(p);		  printf("Node %d receives (%d, %d, %d) energy %lf.\n",		  node()->address(), dfh->sender_id.addr_, 		  dfh->sender_id.port_, dfh->pk_num, node()->energy());		*/		// log node energy		if (em()->energy() > 0) {		((MobileNode *)node_)->log_energy(1);        	} 		if (em()->energy() <= 0) {  			// saying node died			em()->setenergy(0);			((MobileNode*)node())->log_energy(0);		}	}		return pkt_recvd;}voidWirelessPhy::node_on(){        node_on_= TRUE;	status_ = IDLE;       if (em() == NULL) 	    return;	   	if (NOW > update_energy_time_) {      	    update_energy_time_ = NOW;   	}}void WirelessPhy::node_off(){        node_on_= FALSE;	status_ = SLEEP;	if (em() == NULL)            return;        if (NOW > update_energy_time_) {            em()->DecrIdleEnergy(NOW-update_energy_time_,                                P_idle_);            update_energy_time_ = NOW;	}}void WirelessPhy::node_wakeup(){	if (status_== IDLE)		return;	if (em() == NULL)            return;        if ( NOW > update_energy_time_ && (status_== SLEEP) ) {		//the power consumption when radio goes from SLEEP mode to IDLE mode		em()->DecrTransitionEnergy(T_transition_,P_transition_);				em()->DecrSleepEnergy(NOW-update_energy_time_,				      P_sleep_);		status_ = IDLE;	        update_energy_time_ = NOW;				// log node energy		if (em()->energy() > 0) {			((MobileNode *)node_)->log_energy(1);	        } else {			((MobileNode *)node_)->log_energy(0);   	        }	}}void WirelessPhy::node_sleep(){////        node_on_= FALSE;//	if (status_== SLEEP)		return;	if (em() == NULL)            return;        if ( NOW > update_energy_time_ && (status_== IDLE) ) {	//the power consumption when radio goes from IDLE mode to SLEEP mode	    em()->DecrTransitionEnergy(T_transition_,P_transition_);            em()->DecrIdleEnergy(NOW-update_energy_time_,                                P_idle_);		status_ = SLEEP;	        update_energy_time_ = NOW;	// log node energy		if (em()->energy() > 0) {			((MobileNode *)node_)->log_energy(1);	        } else {			((MobileNode *)node_)->log_energy(0);   	        }	}}//voidWirelessPhy::dump(void) const{	Phy::dump();	fprintf(stdout,		"\tPt: %f, Gt: %f, Gr: %f, lambda: %f, L: %f\n",		Pt_, ant_->getTxGain(0,0,0,lambda_), ant_->getRxGain(0,0,0,lambda_), lambda_, L_);	//fprintf(stdout, "\tbandwidth: %f\n", bandwidth_);	fprintf(stdout, "--------------------------------------------------\n");}void WirelessPhy::UpdateIdleEnergy(){	if (em() == NULL) {		return;	}	if (NOW > update_energy_time_ && (Is_node_on()==TRUE && status_ == IDLE ) ) {		  em()-> DecrIdleEnergy(NOW-update_energy_time_,					P_idle_);		  update_energy_time_ = NOW;	}	// log node energy	if (em()->energy() > 0) {		((MobileNode *)node_)->log_energy(1);        } else {		((MobileNode *)node_)->log_energy(0);           }//	idle_timer_.resched(10.0);}double WirelessPhy::getDist(double Pr, double Pt, double Gt, double Gr,			    double hr, double ht, double L, double lambda){	if (propagation_) {		return propagation_->getDist(Pr, Pt, Gt, Gr, hr, ht, L,					     lambda);	}	return 0;}//void WirelessPhy::UpdateSleepEnergy(){	if (em() == NULL) {		return;	}	if (NOW > update_energy_time_ && ( Is_node_on()==TRUE  && Is_sleeping() == true) ) {		  em()-> DecrSleepEnergy(NOW-update_energy_time_,					P_sleep_);		  update_energy_time_ = NOW;		// log node energy		if (em()->energy() > 0) {			((MobileNode *)node_)->log_energy(1);        	} else {			((MobileNode *)node_)->log_energy(0);           	}	}		//A hack to make states consistent with those of in Energy Model for AF	int static s=em()->sleep();	if(em()->sleep()!=s){		s=em()->sleep();			if(s==1)			node_sleep();		else			node_wakeup();					printf("\n AF hack %d\n",em()->sleep());		}			sleep_timer_.resched(10.0);}// begin RPI FSO ExtensionWirelessPhy::~WirelessPhy(){}// end RPI FSO Extension

⌨️ 快捷键说明

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