![]() |
User Manual, Developers Guide and API Documentation |
![]() |
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
1.5.5