Hello
       I want to calculate the signal strength received from some APS. But
 up to now, I just have written some codes like below to implement this
 function.
 proc record {} {
   global filepr pt l lambda gt gr pi node
    set ns [Simulator instance]
    set time 0.1;# record 0.5 second
   set m_x [$node(1) set X_]
   set m_y [$node(1) set Y_]
   set n_x [$node(0) set X_]
    set n_y [$node(0) set Y_]
    set d [expr (sqrt(pow(($m_x - $n_x),2)+ pow(($m_y-$n_y),2)))]
   set m [expr (1 /(4 * $pi * $d))]
    set pr [expr ($pt * $gr * $gt * $m * $m / 1)]
    set now [$ns now]

    puts $filepr "$d\t$pr"
    $ns at [expr $now + $time] "record"
 }
 I set all the parameters but d to calculate Pr. About d, I record the
 dynamic coordinate(x,y), and then compared it to the coordiate of
 AP(x1,y1) to get d.
 But now, I want to implement using a function written in the file
 /mobile/propagation.cc

 double FreeSpace::Pr(PacketStamp *t, PacketStamp *r, WirelessPhy *ifp)
 {
       double L = ifp->getL();         // system loss
      double lambda = ifp->getLambda();   // wavelength

       double Xt, Yt, Zt;              // location of transmitter
 double Xr, Yr, Zr;


          // location of receiver
t->getNode()->getLoc(&Xt, &Yt, &Zt);
       r->getNode()->getLoc(&Xr, &Yr, &Zr);

       // Is antenna position relative to node position?
       Xr += r->getAntenna()->getX();
       Yr += r->getAntenna()->getY();
       Zr += r->getAntenna()->getZ();
       Xt += t->getAntenna()->getX();
       Yt += t->getAntenna()->getY();
       Zt += t->getAntenna()->getZ();

       double dX = Xr - Xt;
       double dY = Yr - Yt;
       double dZ = Zr - Zt;
       double d = sqrt(dX * dX + dY * dY + dZ * dZ);

       // get antenna gain
       double Gt = t->getAntenna()->getTxGain(dX, dY, dZ, lambda);
       double Gr = r->getAntenna()->getRxGain(dX, dY, dZ, lambda);

       // calculate receiving power at distance
       double Pr = Friis(t->getTxPr(), Gt, Gr, lambda, L, d);
      // warning: use of `l' length character with `f' type character
       //  - Sally Floyd, FreeBSD.
       printf("%lf: d: %lf, Pr: %e\n", Scheduler::instance().clock(), d, Pr);

       return Pr;
 }

The question is I don't know how to call this c++ function using tcl
script
_______________________________________________
Gossip mailing list
https://www.mail-archive.com/gossip@mail-archive.com
https://www.mail-archive.com/cgi-bin/mailman/options/gossip

Reply via email to