INET Framework for OMNeT++/OMNEST
inet::physicallayer::Ieee80211OfdmEncoder Class Reference

#include <Ieee80211OfdmEncoder.h>

Inheritance diagram for inet::physicallayer::Ieee80211OfdmEncoder:
inet::physicallayer::IEncoder inet::IPrintableObject

Public Member Functions

 Ieee80211OfdmEncoder (const Ieee80211OfdmCode *code)
 
 ~Ieee80211OfdmEncoder ()
 
virtual const ITransmissionBitModelencode (const ITransmissionPacketModel *packetModel) const override
 
virtual std::ostream & printToStream (std::ostream &stream, int level, int evFlags=0) const override
 Prints this object to the provided output stream. More...
 
const Ieee80211OfdmCodegetCode () const override
 
- Public Member Functions inherited from inet::IPrintableObject
virtual ~IPrintableObject ()
 
virtual std::string printToString () const
 
virtual std::string printToString (int level, int evFlags=0) const
 
virtual std::string getInfoStringRepresentation (int evFlags=0) const
 
virtual std::string getDetailStringRepresentation (int evFlags=0) const
 
virtual std::string getDebugStringRepresentation (int evFlags=0) const
 
virtual std::string getTraceStringRepresentation (int evFlags=0) const
 
virtual std::string getCompleteStringRepresentation (int evFlags=0) const
 

Protected Attributes

const IFecCoderconvolutionalCoder = nullptr
 
const IInterleaverinterleaver = nullptr
 
const IScramblerscrambler = nullptr
 
const Ieee80211OfdmCodecode = nullptr
 

Additional Inherited Members

- Public Types inherited from inet::IPrintableObject
enum  PrintLevel {
  PRINT_LEVEL_TRACE, PRINT_LEVEL_DEBUG, PRINT_LEVEL_DETAIL, PRINT_LEVEL_INFO,
  PRINT_LEVEL_COMPLETE = INT_MIN
}
 
enum  PrintFlag { PRINT_FLAG_FORMATTED = (1 << 0), PRINT_FLAG_MULTILINE = (1 << 1) }
 

Constructor & Destructor Documentation

◆ Ieee80211OfdmEncoder()

inet::physicallayer::Ieee80211OfdmEncoder::Ieee80211OfdmEncoder ( const Ieee80211OfdmCode code)
73  :
74  convolutionalCoder(nullptr),
75  interleaver(nullptr),
76  scrambler(nullptr),
77  code(code)
78 {
79  if (code->getScrambling())
80  scrambler = new AdditiveScrambler(code->getScrambling());
81  if (code->getInterleaving())
82  interleaver = new Ieee80211OfdmInterleaver(code->getInterleaving());
84  convolutionalCoder = new ConvolutionalCoder(code->getConvolutionalCode());
85 }

◆ ~Ieee80211OfdmEncoder()

inet::physicallayer::Ieee80211OfdmEncoder::~Ieee80211OfdmEncoder ( )
88 {
89  delete convolutionalCoder;
90  delete interleaver;
91  delete scrambler;
92 }

Member Function Documentation

◆ encode()

const ITransmissionBitModel * inet::physicallayer::Ieee80211OfdmEncoder::encode ( const ITransmissionPacketModel packetModel) const
overridevirtual

Implements inet::physicallayer::IEncoder.

38 {
39  auto packet = packetModel->getPacket();
40  auto length = packet->getTotalLength();
41  BitVector *encodedBits;
42  if (b(length).get() % 8 == 0) {
43  auto bytes = packet->peekAllAsBytes()->getBytes();
44  encodedBits = new BitVector(bytes);
45  }
46  else {
47  encodedBits = new BitVector();
48  const auto& bitsChunk = packet->peekAllAsBits();
49  for (int i = 0; i < b(length).get(); i++)
50  encodedBits->appendBit(bitsChunk->getBit(i));
51  }
52  const IScrambling *scrambling = nullptr;
53  if (scrambler) {
54  *encodedBits = scrambler->scramble(*encodedBits);
55  scrambling = scrambler->getScrambling();
56  EV_DEBUG << "Scrambled bits are: " << *encodedBits << endl;
57  }
58  const IForwardErrorCorrection *forwardErrorCorrection = nullptr;
59  if (convolutionalCoder) {
60  *encodedBits = convolutionalCoder->encode(*encodedBits);
61  forwardErrorCorrection = convolutionalCoder->getForwardErrorCorrection();
62  EV_DEBUG << "FEC encoded bits are: " << *encodedBits << endl;
63  }
64  const IInterleaving *interleaving = nullptr;
65  if (interleaver) {
66  *encodedBits = interleaver->interleave(*encodedBits);
67  interleaving = interleaver->getInterleaving();
68  EV_DEBUG << "Interleaved bits are: " << *encodedBits << endl;
69  }
70  return new TransmissionBitModel(encodedBits, forwardErrorCorrection, scrambling, interleaving);
71 }

Referenced by inet::physicallayer::Ieee80211OfdmEncoderModule::encode(), and inet::physicallayer::Ieee80211LayeredOfdmTransmitter::encodeAndModulate().

◆ getCode()

const Ieee80211OfdmCode* inet::physicallayer::Ieee80211OfdmEncoder::getCode ( ) const
inlineoverridevirtual

Implements inet::physicallayer::IEncoder.

37 { return code; }

◆ printToStream()

std::ostream & inet::physicallayer::Ieee80211OfdmEncoder::printToStream ( std::ostream &  stream,
int  level,
int  evFlags = 0 
) const
overridevirtual

Prints this object to the provided output stream.

Reimplemented from inet::IPrintableObject.

27 {
28  stream << "Ieee80211OfdmEncoder";
29  if (level <= PRINT_LEVEL_TRACE)
33  << EV_FIELD(code, printFieldToString(code, level + 1, evFlags));
34  return stream;
35 }

Referenced by inet::physicallayer::Ieee80211OfdmEncoderModule::printToStream().

Member Data Documentation

◆ code

const Ieee80211OfdmCode* inet::physicallayer::Ieee80211OfdmEncoder::code = nullptr
protected

◆ convolutionalCoder

const IFecCoder* inet::physicallayer::Ieee80211OfdmEncoder::convolutionalCoder = nullptr
protected

◆ interleaver

const IInterleaver* inet::physicallayer::Ieee80211OfdmEncoder::interleaver = nullptr
protected

◆ scrambler

const IScrambler* inet::physicallayer::Ieee80211OfdmEncoder::scrambler = nullptr
protected

The documentation for this class was generated from the following files:
inet::physicallayer::IInterleaver::interleave
virtual BitVector interleave(const BitVector &bits) const =0
inet::physicallayer::Ieee80211OfdmEncoder::code
const Ieee80211OfdmCode * code
Definition: Ieee80211OfdmEncoder.h:29
inet::physicallayer::IScrambler::scramble
virtual BitVector scramble(const BitVector &bits) const =0
inet::physicallayer::Ieee80211OfdmEncoder::convolutionalCoder
const IFecCoder * convolutionalCoder
Definition: Ieee80211OfdmEncoder.h:26
inet::physicallayer::Ieee80211OfdmEncoder::interleaver
const IInterleaver * interleaver
Definition: Ieee80211OfdmEncoder.h:27
inet::printFieldToString
std::string printFieldToString(const IPrintableObject *object, int level, int evFlags=0)
Definition: IPrintableObject.h:98
EV_FIELD
#define EV_FIELD(...)
Definition: INETDefs.h:112
inet::physicallayer::Ieee80211OfdmCode::getScrambling
const AdditiveScrambling * getScrambling() const
Definition: Ieee80211OfdmCode.h:33
inet::IPrintableObject::PRINT_LEVEL_TRACE
@ PRINT_LEVEL_TRACE
Definition: IPrintableObject.h:22
inet::units::values::b
value< int64_t, units::b > b
Definition: Units.h:1241
inet::physicallayer::Ieee80211OfdmCode::getInterleaving
const Ieee80211OfdmInterleaving * getInterleaving() const
Definition: Ieee80211OfdmCode.h:32
inet::physicallayer::IInterleaver::getInterleaving
virtual const IInterleaving * getInterleaving() const =0
inet::evFlags
int evFlags
Definition: INETDefs.cc:12
inet::physicallayer::Ieee80211OfdmEncoder::scrambler
const IScrambler * scrambler
Definition: Ieee80211OfdmEncoder.h:28
inet::physicallayer::IFecCoder::getForwardErrorCorrection
virtual const IForwardErrorCorrection * getForwardErrorCorrection() const =0
inet::physicallayer::IFecCoder::encode
virtual BitVector encode(const BitVector &informationBits) const =0
inet::physicallayer::IScrambler::getScrambling
virtual const IScrambling * getScrambling() const =0
inet::physicallayer::Ieee80211OfdmCode::getConvolutionalCode
const ConvolutionalCode * getConvolutionalCode() const
Definition: Ieee80211OfdmCode.h:31