mphy-tracer.cc

00001 /*
00002  * Copyright (c) 2007 Regents of the SIGNET lab, University of Padova.
00003  * All rights reserved.
00004  *
00005  * Redistribution and use in source and binary forms, with or without
00006  * modification, are permitted provided that the following conditions
00007  * are met:
00008  * 1. Redistributions of source code must retain the above copyright
00009  *    notice, this list of conditions and the following disclaimer.
00010  * 2. Redistributions in binary form must reproduce the above copyright
00011  *    notice, this list of conditions and the following disclaimer in the
00012  *    documentation and/or other materials provided with the distribution.
00013  * 3. Neither the name of the University of Padova (SIGNET lab) nor the 
00014  *    names of its contributors may be used to endorse or promote products 
00015  *    derived from this software without specific prior written permission.
00016  *
00017  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
00018  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 
00019  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 
00020  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR 
00021  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 
00022  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 
00023  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 
00024  * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
00025  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 
00026  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 
00027  * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
00028  */
00029 
00030 #include "mphy.h"
00031 #include<math.h>
00032 #include<node-core.h>
00033 
00034 class MPhyTracer : public Tracer
00035 {
00036  public:
00037   MPhyTracer();
00038  protected:
00039   void format(Packet *p, SAP* sap);
00040   double WtodBm(double W);
00041 };
00042 
00043 
00044 
00045 MPhyTracer::MPhyTracer() : Tracer(1) {}
00046 
00047 
00048 double MPhyTracer::WtodBm(double W)
00049 {
00050   return ( W > 0 ? (10*log10(W)+30) : -HUGE_VAL);
00051 }
00052 
00053 
00054 
00055 void MPhyTracer::format(Packet *p, SAP *sap)
00056 {
00057 
00058   hdr_MPhy* ph = HDR_MPHY(p);
00059   hdr_cmn* ch = HDR_CMN(p);
00060 
00061   // tracing only downward packets
00062   //if (ch->direction() == hdr_cmn::DOWN) return;
00063 
00064 
00065   // tracing only worth packets
00066   if (ph->worth_tracing)
00067     {
00068 
00069       Position* sp = dynamic_cast<Position*>(ph->srcPosition);
00070       Position* dp = dynamic_cast<Position*>(ph->dstPosition);
00071 
00072       double dist;
00073       if (sp && dp)
00074         dist = sp->getDist(dp);
00075       else
00076         dist = 0.0;
00077 
00078 
00079       // dBm version
00080       //   writeTrace(sap, " %s Pt=%.2fdBm Pr=%.2fdBm Pn=%.2fdBm Pi=%.2fdBm tau=%.2es dur=%.5fs dist=%.1fm ",
00081       //             MPhy::getModulationName(ph->modulationType),
00082       //             WtodBm(ph->Pt),
00083       //             WtodBm(ph->Pr),
00084       //             WtodBm(ph->Pn),
00085       //             WtodBm(ph->Pi),
00086       //             ph->rxtime - ph->txtime,
00087       //             ph->duration,
00088       //             (ph->srcPosition && ph->dstPosition) ? ph->srcPosition->getDist(ph->dstPosition) : 0.0
00089       //             );
00090 
00091       // Watt (or whatever else... anyway, linear) version
00092       writeTrace(sap, " %s Pt=%.2e Pr=%.2e Pn=%.2e Pi=%.2e tau=%.2es dur=%.5fs dist=%.1fm ",
00093                  MPhy::getModulationName(ph->modulationType),
00094                  ph->Pt,
00095                  ph->Pr,
00096                  ph->Pn,
00097                  ph->Pi,
00098                  ph->rxtime - ph->txtime,
00099                  ph->duration,
00100                  dist
00101                  );
00102       //ph->worth_tracing = false; // no more phy tracing for this pkt
00103     }
00104 }
00105 
00106 extern "C" int Mphytracer_Init()
00107 {  
00108   SAP::addTracer(new MPhyTracer);
00109   return 0;
00110 }
00111 extern "C" int  Cygmphytracer_Init()
00112 {
00113   Mphytracer_Init();
00114 }
00115 
00116 

Generated on Wed Nov 26 15:47:28 2008 for NS-MIRACLE library by  doxygen 1.5.2