//
// Copyright (C) 2014 OpenSim Ltd.
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public License
// along with this program; if not, see .
//
#include "Ieee80211SymbolDomainTest.h"
#include "inet/common/ModuleAccess.h"
#include
namespace inet {
Define_Module(Ieee80211SymbolDomainTest);
void Ieee80211SymbolDomainTest::initialize(int stage)
{
if (stage == INITSTAGE_LOCAL)
{
ieee80211OFDMSignalEncoder = getModuleFromPar(par("ieee80211OFDMSignalEncoderModule"), this);
ieee80211OFDMDataEncoder = getModuleFromPar(par("ieee80211OFDMDataEncoderModule"), this);
ieee80211OFDMSignalModulator = getModuleFromPar(par("ieee80211OFDMSignalModulatorModule"), this);
ieee80211OFDMDataModulator = getModuleFromPar(par("ieee80211OFDMDataModulatorModule"), this);
ieee80211OFDMSignalDemodulator = getModuleFromPar(par("ieee80211OFDMSignalDemodulatorModule"), this);
ieee80211OFDMDataDemodulator = getModuleFromPar(par("ieee80211OFDMDataDemodulatorModule"), this);
ieee80211OFDMSignalDecoder = getModuleFromPar(par("ieee80211OFDMSignalDecoderModule"), this);
ieee80211OFDMDataDecoder = getModuleFromPar(par("ieee80211OFDMDataDecoderModule"), this);
parseInput(par("testFile").stringValue());
}
else if (stage == INITSTAGE_LAST)
{
test();
}
}
void Ieee80211SymbolDomainTest::parseInput(const char* fileName)
{
std::ifstream file(fileName);
std::string in;
while (file >> in)
{
for (unsigned int i = 0; i < in.size(); i++)
{
if (in.at(i) == '0')
input.appendBit(false);
else if (in.at(i) == '1')
input.appendBit(true);
else
throw cRuntimeError("Unexpected input format = %s", in.c_str());
}
}
}
void Ieee80211SymbolDomainTest::test() const
{
BitVector *signalField = new BitVector();
BitVector *dataField = new BitVector();
for (unsigned int i = 0; i < 24; i++)
signalField->appendBit(input.getBit(i));
for (unsigned int i = 24; i < input.getSize(); i++)
dataField->appendBit(input.getBit(i));
TransmissionPacketModel signalPacketModel(NULL, signalField, bps(NaN));
TransmissionPacketModel dataPacketModel(NULL, dataField, bps(NaN));
const ITransmissionBitModel *signalBitModel = ieee80211OFDMSignalEncoder->encode(&signalPacketModel);
const ITransmissionBitModel *dataBitModel = ieee80211OFDMDataEncoder->encode(&dataPacketModel);
const ITransmissionSymbolModel *transmissionSignalSymbolModel = ieee80211OFDMSignalModulator->modulate(signalBitModel);
const ITransmissionSymbolModel *transmissionDataSymbolModel = ieee80211OFDMDataModulator->modulate(dataBitModel);
ReceptionSymbolModel receptionSignalSymbolModel(0, 0, 0, 0, new std::vector(*transmissionSignalSymbolModel->getSymbols()));
const IReceptionBitModel *receptionSignalBitModel = ieee80211OFDMSignalDemodulator->demodulate(&receptionSignalSymbolModel);
ReceptionSymbolModel receptionDataSymbolModel(0, 0, 0, 0, new std::vector(*transmissionDataSymbolModel->getSymbols()));
const IReceptionBitModel *receptionDataBitModel = ieee80211OFDMDataDemodulator->demodulate(&receptionDataSymbolModel);
const IReceptionPacketModel *receptionSignalPacketModel = ieee80211OFDMSignalDecoder->decode(receptionSignalBitModel);
const IReceptionPacketModel *receptionDataPacketModel = ieee80211OFDMDataDecoder->decode(receptionDataBitModel);
delete dataBitModel;
delete signalBitModel;
delete transmissionDataSymbolModel;
delete transmissionSignalSymbolModel;
delete receptionDataBitModel;
delete receptionSignalBitModel;
delete receptionDataPacketModel;
delete receptionSignalPacketModel;
}
} /* namespace inet */