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

#include <ApskEncoder.h>

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

Public Member Functions

 ApskEncoder ()
 
virtual ~ApskEncoder ()
 
virtual std::ostream & printToStream (std::ostream &stream, int level, int evFlags=0) const override
 Prints this object to the provided output stream. More...
 
virtual const ApskCodegetCode () const override
 
virtual const ITransmissionBitModelencode (const ITransmissionPacketModel *packetModel) 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 Member Functions

virtual int numInitStages () const override
 
virtual void initialize (int stage) override
 

Protected Attributes

const ApskCodecode
 
const IScramblerscrambler
 
const IFecCoderfecEncoder
 
const IInterleaverinterleaver
 

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

◆ ApskEncoder()

inet::physicallayer::ApskEncoder::ApskEncoder ( )
19  :
20  code(nullptr),
21  scrambler(nullptr),
22  fecEncoder(nullptr),
23  interleaver(nullptr)
24 {
25 }

◆ ~ApskEncoder()

inet::physicallayer::ApskEncoder::~ApskEncoder ( )
virtual
28 {
29  delete code;
30 }

Member Function Documentation

◆ encode()

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

Implements inet::physicallayer::IEncoder.

60 {
61  auto packet = packetModel->getPacket();
62  const auto& apskPhyHeader = packet->peekAtFront<ApskPhyHeader>();
63  auto length = packet->getTotalLength();
64  BitVector *encodedBits;
65  if (b(length).get() % 8 == 0)
66  encodedBits = new BitVector(packet->peekAllAsBytes()->getBytes());
67  else {
68  encodedBits = new BitVector();
69  const auto& bitsChunk = packet->peekAllAsBits();
70  for (int i = 0; i < b(length).get(); i++)
71  encodedBits->appendBit(bitsChunk->getBit(i));
72  }
73  const IScrambling *scrambling = nullptr;
74  if (scrambler) {
75  *encodedBits = scrambler->scramble(*encodedBits);
76  scrambling = scrambler->getScrambling();
77  EV_DEBUG << "Scrambled bits are: " << *encodedBits << endl;
78  }
79  const IForwardErrorCorrection *forwardErrorCorrection = nullptr;
80  if (fecEncoder) {
81  *encodedBits = fecEncoder->encode(*encodedBits);
82  forwardErrorCorrection = fecEncoder->getForwardErrorCorrection();
83  EV_DEBUG << "FEC encoded bits are: " << *encodedBits << endl;
84  }
85  const IInterleaving *interleaving = nullptr;
86  if (interleaver) {
87  *encodedBits = interleaver->interleave(*encodedBits);
88  interleaving = interleaver->getInterleaving();
89  EV_DEBUG << "Interleaved bits are: " << *encodedBits << endl;
90  }
91  b netHeaderLength = apskPhyHeader->getChunkLength();
92  if (forwardErrorCorrection == nullptr)
93  return new TransmissionBitModel(netHeaderLength, packetModel->getBitrate(), length - netHeaderLength, packetModel->getBitrate(), encodedBits, forwardErrorCorrection, scrambling, interleaving);
94  else {
95  b grossHeaderLength = b(forwardErrorCorrection->getEncodedLength(b(netHeaderLength).get()));
96  bps grossBitrate = packetModel->getBitrate() / forwardErrorCorrection->getCodeRate();
97  return new TransmissionBitModel(grossHeaderLength, grossBitrate, length - grossHeaderLength, grossBitrate, encodedBits, forwardErrorCorrection, scrambling, interleaving);
98  }
99 }

◆ getCode()

virtual const ApskCode* inet::physicallayer::ApskEncoder::getCode ( ) const
inlineoverridevirtual

◆ initialize()

void inet::physicallayer::ApskEncoder::initialize ( int  stage)
overrideprotectedvirtual
33 {
34  if (stage == INITSTAGE_LOCAL) {
35  scrambler = dynamic_cast<IScrambler *>(getSubmodule("scrambler"));
36  fecEncoder = dynamic_cast<IFecCoder *>(getSubmodule("fecEncoder"));
37  interleaver = dynamic_cast<IInterleaver *>(getSubmodule("interleaver"));
38  }
39  else if (stage == INITSTAGE_PHYSICAL_LAYER) {
40  const IScrambling *scrambling = scrambler != nullptr ? scrambler->getScrambling() : nullptr;
41  const ConvolutionalCode *forwardErrorCorrection = fecEncoder != nullptr ? check_and_cast<const ConvolutionalCode *>(fecEncoder->getForwardErrorCorrection()) : nullptr;
42  const IInterleaving *interleaving = interleaver != nullptr ? interleaver->getInterleaving() : nullptr;
43  code = new ApskCode(forwardErrorCorrection, interleaving, scrambling);
44  }
45 }

◆ numInitStages()

virtual int inet::physicallayer::ApskEncoder::numInitStages ( ) const
inlineoverrideprotectedvirtual
33 { return NUM_INIT_STAGES; }

◆ printToStream()

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

Prints this object to the provided output stream.

Reimplemented from inet::IPrintableObject.

48 {
49  stream << "ApskEncoder";
50  if (level <= PRINT_LEVEL_DETAIL)
51  stream << EV_FIELD(code, printFieldToString(code, level + 1, evFlags));
52  if (level <= PRINT_LEVEL_TRACE)
53  stream << EV_FIELD(scrambler, printFieldToString(scrambler, level + 1, evFlags))
56  return stream;
57 }

Member Data Documentation

◆ code

const ApskCode* inet::physicallayer::ApskEncoder::code
protected

◆ fecEncoder

const IFecCoder* inet::physicallayer::ApskEncoder::fecEncoder
protected

Referenced by encode(), initialize(), and printToStream().

◆ interleaver

const IInterleaver* inet::physicallayer::ApskEncoder::interleaver
protected

Referenced by encode(), initialize(), and printToStream().

◆ scrambler

const IScrambler* inet::physicallayer::ApskEncoder::scrambler
protected

Referenced by encode(), initialize(), and printToStream().


The documentation for this class was generated from the following files:
inet::physicallayer::ApskEncoder::fecEncoder
const IFecCoder * fecEncoder
Definition: ApskEncoder.h:29
inet::physicallayer::IInterleaver::interleave
virtual BitVector interleave(const BitVector &bits) const =0
inet::IPrintableObject::PRINT_LEVEL_DETAIL
@ PRINT_LEVEL_DETAIL
Definition: IPrintableObject.h:24
inet::units::units::bps
compose< b, pow< s, -1 > > bps
Definition: Units.h:1169
inet::physicallayer::IScrambler::scramble
virtual BitVector scramble(const BitVector &bits) const =0
inet::physicallayer::ApskEncoder::interleaver
const IInterleaver * interleaver
Definition: ApskEncoder.h:30
inet::physicallayer::ApskEncoder::scrambler
const IScrambler * scrambler
Definition: ApskEncoder.h:28
inet::printFieldToString
std::string printFieldToString(const IPrintableObject *object, int level, int evFlags=0)
Definition: IPrintableObject.h:98
inet::physicallayer::ApskEncoder::code
const ApskCode * code
Definition: ApskEncoder.h:27
EV_FIELD
#define EV_FIELD(...)
Definition: INETDefs.h:112
inet::INITSTAGE_LOCAL
INET_API InitStage INITSTAGE_LOCAL
Initialization of local state that don't use or affect other modules includes:
inet::IPrintableObject::PRINT_LEVEL_TRACE
@ PRINT_LEVEL_TRACE
Definition: IPrintableObject.h:22
inet::INITSTAGE_PHYSICAL_LAYER
INET_API InitStage INITSTAGE_PHYSICAL_LAYER
Initialization of physical layer protocols includes:
inet::units::values::b
value< int64_t, units::b > b
Definition: Units.h:1241
NUM_INIT_STAGES
#define NUM_INIT_STAGES
Definition: InitStageRegistry.h:73
inet::physicallayer::IInterleaver::getInterleaving
virtual const IInterleaving * getInterleaving() const =0
inet::evFlags
int evFlags
Definition: INETDefs.cc:12
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