User Manual, Developers Guide and API Documentation

Trigger.cpp

Go to the documentation of this file.
00001 /******************************************************************************
00002  * WNS (Wireless Network Simulator)                                           *
00003  * __________________________________________________________________________ *
00004  *                                                                            *
00005  * Copyright (C) 2004-2006                                                    *
00006  * Chair of Communication Networks (ComNets)                                  *
00007  * Kopernikusstr. 16, D-52074 Aachen, Germany                                 *
00008  * phone: ++49-241-80-27910 (phone), fax: ++49-241-80-22242                   *
00009  * email: wns@comnets.rwth-aachen.de                                          *
00010  * www: http://wns.comnets.rwth-aachen.de                                     *
00011  ******************************************************************************/
00012 
00013 #include <GLUE/trigger/Trigger.hpp>
00014 
00015 #include <GLUE/BERProvider.hpp>
00016 #include <WNS/ldk/sar/Fixed.hpp>
00017 
00018 #include <WNS/Assure.hpp>
00019 
00020 #include <string>
00021 #include <cmath>
00022 
00023 using namespace glue::trigger;
00024 using namespace wns::ldk;
00025 
00026 STATIC_FACTORY_REGISTER_WITH_CREATOR(Trigger,
00027                      wns::ldk::FunctionalUnit,
00028                      "glue.Trigger",
00029                      FUNConfigCreator);
00030 
00031 Trigger::Trigger(fun::FUN* fun, const wns::pyconfig::View& _config) :
00032     FunctionalUnitLight(fun, _config),
00033     connected(false),
00034     config(_config),
00035     logger(config.get<wns::pyconfig::View>("logger")),
00036     packetHeaderSize(config.get<int>("packetHeaderSize"))
00037 {
00038     friends.berProvider = NULL;
00039     friends.sar = NULL;
00040 } // Trigger
00041 
00042 Trigger::~Trigger()
00043 {
00044     if (connected)
00045         friends.berProvider->detachBERConsumer(this);
00046 } // ~Trigger
00047 
00048 void
00049 Trigger::onFUNCreated()
00050 {
00051     friends.berProvider = getFUN()->findFriend<BERProvider*>(config.get<std::string>("BERProvider"));
00052     friends.berProvider->attachBERConsumer(this);
00053     connected = true;
00054 
00055     assureType(friends.berProvider, wns::ldk::FunctionalUnit*);
00056 
00057     MESSAGE_BEGIN(NORMAL, logger, m, getFUN()->getName());
00058     m << " Attached Trigger FU to BERProvider "
00059       << dynamic_cast<wns::ldk::FunctionalUnit*>(friends.berProvider)->getName();
00060     MESSAGE_END();
00061 
00062     friends.sar = getFUN()->findFriend<wns::ldk::sar::Fixed*>(config.get<std::string>("SAR"));
00063     assureType(friends.sar, wns::ldk::sar::Fixed*);
00064 } // onFUNCreated
00065 
00066 
00067 void
00068 Trigger::onBERProviderDeleted()
00069 {
00070     connected = false;
00071 
00072     MESSAGE_BEGIN(NORMAL, logger, m, getFUN()->getName());
00073     m << " Lost BERProvider!";
00074     MESSAGE_END();
00075 } // BERProviderDeleted
00076 
00077 
00078 void
00079 Trigger::onNewMeasurement(double BER, int packetSize)
00080 {
00081     MESSAGE_BEGIN(NORMAL, logger, m, getFUN()->getName());
00082     m << " Received BER: " << BER
00083       << ", packetSize: " << packetSize;
00084     MESSAGE_END();
00085 
00086     double dHeaderSize = (double)packetHeaderSize;
00087 
00088     int optPayloadSize = (int)(std::sqrt(dHeaderSize*dHeaderSize/4 - dHeaderSize / log(1-BER)) - dHeaderSize/2);
00089 
00090     friends.sar->setSegmentSize(optPayloadSize);
00091 
00092     MESSAGE_BEGIN(NORMAL, logger, m, getFUN()->getName());
00093     m << " Set fragment size to: " << optPayloadSize
00094       << "Bit";
00095     MESSAGE_END();
00096 } // reportBER
00097 
00098 
00099 

Generated on Sat May 26 03:31:56 2012 for openWNS by  doxygen 1.5.5