User Manual, Developers Guide and API Documentation

APCSlave.cpp

Go to the documentation of this file.
00001 /*******************************************************************************
00002  * This file is part of openWNS (open Wireless Network Simulator)
00003  * _____________________________________________________________________________
00004  *
00005  * Copyright (C) 2004-2009
00006  * Chair of Communication Networks (ComNets)
00007  * Kopernikusstr. 5, D-52074 Aachen, Germany
00008  * phone: ++49-241-80-27910,
00009  * fax: ++49-241-80-22242
00010  * email: info@openwns.org
00011  * www: http://www.openwns.org
00012  * _____________________________________________________________________________
00013  *
00014  * openWNS is free software; you can redistribute it and/or modify it under the
00015  * terms of the GNU Lesser General Public License version 2 as published by the
00016  * Free Software Foundation;
00017  *
00018  * openWNS is distributed in the hope that it will be useful, but WITHOUT ANY
00019  * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
00020  * A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more
00021  * details.
00022  *
00023  * You should have received a copy of the GNU Lesser General Public License
00024  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
00025  *
00026  ******************************************************************************/
00027 
00028 #include <WNS/scheduler/strategy/apcstrategy/APCSlave.hpp>
00029 #include <WNS/scheduler/strategy/apcstrategy/APCStrategy.hpp>
00030 #include <WNS/scheduler/strategy/StrategyInterface.hpp>
00031 #include <WNS/scheduler/SchedulerTypes.hpp>
00032 #include <vector>
00033 #include <iostream>
00034 #include <algorithm>
00035 
00036 using namespace wns::scheduler;
00037 using namespace wns::scheduler::strategy;
00038 using namespace wns::scheduler::strategy::apcstrategy;
00039 
00040 STATIC_FACTORY_REGISTER_WITH_CREATOR(APCSlave,
00041                      APCStrategyInterface,
00042                      "APCSlave",
00043                      wns::PyConfigViewCreator);
00044 
00045 APCSlave::APCSlave(const wns::pyconfig::View& config)
00046     : APCStrategy(config)
00047 {
00048 }
00049 
00050 APCSlave::~APCSlave()
00051 {
00052 }
00053 
00054 // called before each timeSlot/frame
00055 void
00056 APCSlave::initialize(SchedulerStatePtr schedulerState,
00057                   SchedulingMapPtr schedulingMap)
00058 {
00059     APCStrategy::initialize(schedulerState,schedulingMap); // must always initialize base class too
00060     MESSAGE_SINGLE(NORMAL, logger, "APCSlave::initialize("<<apcstrategyName<<")");
00061 } // initialize
00062 
00063 APCResult
00064 APCSlave::doStartAPC(RequestForResource& request,
00065                      SchedulerStatePtr schedulerState,
00066                      SchedulingMapPtr schedulingMap)
00067 {
00068     // no power control, just nominal values
00069     APCResult apcResult;
00070     assure(request.subChannel>=0,"need a valid subChannel");
00071     assure(request.timeSlot  >=0,"need a valid timeSlot");
00072     assure(request.spatialLayer      >=0,"need a valid spatialLayer");
00073         if (request.phyModePtr == wns::service::phy::phymode::PhyModeInterfacePtr()) 
00074         { // not given? Hmm.
00075             request.phyModePtr = schedulingMap->getPhyModeUsedInResource(request.subChannel,request.timeSlot,request.spatialLayer);
00076             assure(request.phyModePtr != wns::service::phy::phymode::PhyModeInterfacePtr(),
00077                    "APCSlave requires given phyMode");
00078         }
00079         wns::Power txPower = schedulingMap->getTxPowerUsedInResource(request.subChannel,request.timeSlot,request.spatialLayer);
00080         assure(schedulerState->defaultTxPower!=wns::Power(),
00081              "APCSlave requires defaultTxPower");
00082         assure(txPower!=wns::Power(),
00083              "APCSlave requires given TxPower");
00084         apcResult.txPower    = txPower; // must be given
00085         apcResult.phyModePtr = request.phyModePtr; // must be given
00086     //wns::Ratio pathloss     = request.cqiOnSubChannel.pathloss;
00087     //wns::Power interference = request.cqiOnSubChannel.interference;
00088     //apcResult.sinr = apcResult.txPower/(interference*pathloss);
00089     //apcResult.estimatedCandI = wns::CandI(apcResult.txPower/pathloss,interference);
00090     MESSAGE_SINGLE(NORMAL, logger,"doStartAPC("<<request.toString()<<"): "
00091                <<"TxP="<<apcResult.txPower);
00092     //MESSAGE_SINGLE(NORMAL, logger,"doStartAPC("<<request.toString()<<"): "
00093     //         <<"TxP="<<apcResult.txPower<<", pl="<<pathloss<<", estd: I="<<interference<<", C="<<apcResult.estimatedCandI.C);
00094     //MESSAGE_SINGLE(NORMAL, logger,"doStartAPC("<<request.toString()<<"): "
00095     //         <<"SINR="<<apcResult.sinr<<", PhyMode="<<*(apcResult.phyModePtr));
00096     return apcResult;
00097 }

Generated on Mon May 21 03:31:56 2012 for openWNS by  doxygen 1.5.5