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

#include <ApskDecoder.h>

Inheritance diagram for inet::physicallayer::ApskDecoder:
inet::physicallayer::IDecoder inet::IPrintableObject

Public Member Functions

 ApskDecoder ()
 
virtual ~ApskDecoder ()
 
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
 
virtual const IReceptionPacketModeldecode (const IReceptionBitModel *bitModel) 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 IScramblerdescrambler
 
const IFecCoderfecDecoder
 
const IInterleaverdeinterleaver
 

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

◆ ApskDecoder()

inet::physicallayer::ApskDecoder::ApskDecoder ( )
19  :
20  code(nullptr),
21  descrambler(nullptr),
22  fecDecoder(nullptr),
23  deinterleaver(nullptr)
24 {
25 }

◆ ~ApskDecoder()

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

Member Function Documentation

◆ decode()

const IReceptionPacketModel * inet::physicallayer::ApskDecoder::decode ( const IReceptionBitModel bitModel) const
overridevirtual

Implements inet::physicallayer::IDecoder.

60 {
61  bool hasBitError = false;
62  BitVector *decodedBits = new BitVector(*bitModel->getBits());
63  if (deinterleaver)
64  *decodedBits = deinterleaver->deinterleave(*decodedBits);
65  if (fecDecoder) {
66  std::pair<BitVector, bool> fecDecodedDataField = fecDecoder->decode(*decodedBits);
67  hasBitError = !fecDecodedDataField.second;
68  *decodedBits = fecDecodedDataField.first;
69  }
70  if (descrambler)
71  *decodedBits = descrambler->descramble(*decodedBits);
72  Packet *packet;
73  if (decodedBits->getSize() % 8 == 0) {
74  const auto& bytesChunk = makeShared<BytesChunk>(decodedBits->getBytes());
75  packet = new Packet(nullptr, bytesChunk);
76  }
77  else {
78  std::vector<bool> bits;
79  for (uint32_t i = 0; i < decodedBits->getSize(); i++)
80  bits.push_back(decodedBits->getBit(i));
81  const auto& bitsChunk = makeShared<BitsChunk>(bits);
82  packet = new Packet(nullptr, bitsChunk);
83  }
84  delete decodedBits;
85  packet->setBitError(hasBitError);
86  return new ReceptionPacketModel(packet, bps(NaN), NaN);
87 }

◆ getCode()

virtual const ApskCode* inet::physicallayer::ApskDecoder::getCode ( ) const
inlinevirtual
35 { return code; }

◆ initialize()

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

◆ numInitStages()

virtual int inet::physicallayer::ApskDecoder::numInitStages ( ) const
inlineoverrideprotectedvirtual
27 { return NUM_INIT_STAGES; }

◆ printToStream()

std::ostream & inet::physicallayer::ApskDecoder::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 << "ApskDecoder";
50  if (level <= PRINT_LEVEL_DETAIL)
51  stream << EV_FIELD(code);
52  if (level <= PRINT_LEVEL_TRACE)
56  return stream;
57 }

Member Data Documentation

◆ code

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

◆ deinterleaver

const IInterleaver* inet::physicallayer::ApskDecoder::deinterleaver
protected

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

◆ descrambler

const IScrambler* inet::physicallayer::ApskDecoder::descrambler
protected

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

◆ fecDecoder

const IFecCoder* inet::physicallayer::ApskDecoder::fecDecoder
protected

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


The documentation for this class was generated from the following files:
inet::physicallayer::IInterleaver::deinterleave
virtual BitVector deinterleave(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::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::ApskDecoder::deinterleaver
const IInterleaver * deinterleaver
Definition: ApskDecoder.h:24
inet::physicallayer::IFecCoder::decode
virtual std::pair< BitVector, bool > decode(const BitVector &encodedBits) const =0
NaN
#define NaN
Definition: INETMath.h:91
inet::INITSTAGE_LOCAL
INET_API InitStage INITSTAGE_LOCAL
Initialization of local state that don't use or affect other modules includes:
inet::physicallayer::ApskDecoder::fecDecoder
const IFecCoder * fecDecoder
Definition: ApskDecoder.h:23
inet::IPrintableObject::PRINT_LEVEL_TRACE
@ PRINT_LEVEL_TRACE
Definition: IPrintableObject.h:22
inet::physicallayer::ApskDecoder::code
const ApskCode * code
Definition: ApskDecoder.h:21
inet::INITSTAGE_PHYSICAL_LAYER
INET_API InitStage INITSTAGE_PHYSICAL_LAYER
Initialization of physical layer protocols includes:
NUM_INIT_STAGES
#define NUM_INIT_STAGES
Definition: InitStageRegistry.h:73
inet::physicallayer::IInterleaver::getInterleaving
virtual const IInterleaving * getInterleaving() const =0
inet::physicallayer::IScrambler::descramble
virtual BitVector descramble(const BitVector &bits) const =0
inet::physicallayer::ApskDecoder::descrambler
const IScrambler * descrambler
Definition: ApskDecoder.h:22
inet::evFlags
int evFlags
Definition: INETDefs.cc:12
inet::physicallayer::IFecCoder::getForwardErrorCorrection
virtual const IForwardErrorCorrection * getForwardErrorCorrection() const =0
inet::physicallayer::IScrambler::getScrambling
virtual const IScrambling * getScrambling() const =0