2007/12/17

NS2 快速入門: DV-distance 模擬 (5)

存取實體層

Reference: http://www.baisi.net/viewthread.php?tid=13936

節錄片段程式碼:
dv-distance/dv-distance.cc
[cpp]
int DV_DistanceAgent::command(int argc, const char*const* argv) {
Node* self_ = Node::get_node_by_address(addr());
printf("S: self->nodeid(): %d\n", self_->nodeid());
}

void DV_DistanceAgent::recv(Packet* pkt, Handler*) {
printf("Recv OK\n");

printf("R: pkt->txinfo_.getNode()->nodeid(): %d\n", pkt->txinfo_.getNode()->nodeid());
printf("R: txinfo_.getTxPr(): %.20lf\n", pkt->txinfo_.getTxPr());
printf("R: txinfo_.getLambda(): %.20lf\n", pkt->txinfo_.getLambda());
printf("R: txinfo_.RxPr: %.20lf\n", pkt->txinfo_.RxPr);
printf("R: distance: %.20lf\n", this->getDist(pkt));
}

double DV_DistanceAgent::getDist(Packet* pkt) const {
Antenna* ant = pkt->txinfo_.getAntenna();
WirelessPhy* phy = (WirelessPhy*)(pkt->txinfo_.getNode()->ifhead().lh_first);

double lambda = pkt->txinfo_.getLambda();
double Pr = pkt->txinfo_.RxPr;
double Pt = pkt->txinfo_.getTxPr();
double Gt = ant->getTxGain(ant->getX(), ant->getY(), ant->getZ(), lambda);
double Gr = ant->getRxGain(ant->getX(), ant->getY(), ant->getZ(), lambda);
double ht = ant->getZ();
double hr = ant->getZ();
double L = phy->getL();

return phy->getDist(Pr, Pt, Gt, Gr, ht, hr, L, lambda);
}
[/cpp]

No comments:

Post a Comment