LteHarqProcessTx Class Reference

Simu5G: LteHarqProcessTx Class Reference
Simu5G
LteHarqProcessTx Class Reference

#include <LteHarqProcessTx.h>

Inheritance diagram for LteHarqProcessTx:
[legend]

Public Member Functions

 LteHarqProcessTx (Binder *binder, unsigned char acid, unsigned int numUnits, unsigned int numProcesses, LteMacBase *macOwner, LteMacBase *dstMac)
virtual void insertPdu (inet::Packet *pdu, Codeword cw)
std::vector< UnitStatus > getProcessStatus ()
bool hasReadyUnits ()
simtime_t getOldestUnitTxTime ()
virtual CwList readyUnitsIds ()
virtual CwList emptyUnitsIds ()
virtual CwList selectedUnitsIds ()
bool isEmpty ()
long getPduId (Codeword cw)
virtual bool isHarqProcessActive ()

Protected Attributes

opp_component_ptr< LteMacBase > macOwner_
 reference to mac module, used to handle errors
UnitVector units_
 contained units vector
unsigned int numProcesses_
 total number of processes in this H-ARQ buffer
unsigned char numHarqUnits_
 number of contained H-ARQ units
unsigned char acid_
 H-ARQ process identifier.
unsigned char numEmptyUnits_
 Number of empty units inside this process.
unsigned int numSelected_
 Number of selected units inside this process.
bool dropped_

Detailed Description

Container of H-ARQ units. An H-ARQ process contains the units with id (acid + totalNumberOfProcesses * cw[i]), for each i.

An H-ARQ buffer is made of H-ARQ processes. An H-ARQ process is atomic for transmission, while H-ARQ units are atomic for H-ARQ feedback.

Constructor & Destructor Documentation

◆ LteHarqProcessTx()

LteHarqProcessTx ( Binder * binder,
unsigned char acid,
unsigned int numUnits,
unsigned int numProcesses,
LteMacBase * macOwner,
LteMacBase * dstMac )

Creates a new H-ARQ process, which is a container of H-ARQ units.

Parameters
acidH-ARQ process identifier
numUnitsnumber of units contained in this process (MAX_CODEWORDS)
numProcessesnumber of processes contained in the H-ARQ buffer.
Returns

Member Function Documentation

◆ insertPdu()

virtual void insertPdu ( inet::Packet * pdu,
Codeword cw )
virtual

Insert a PDU into an H-ARQ unit contained in this process.

Parameters
pduPDU to be inserted
unitIdid of destination unit

◆ getProcessStatus()

std::vector< UnitStatus > getProcessStatus ( )
Returns

◆ hasReadyUnits()

bool hasReadyUnits ( )

Checks if this process has one or more H-ARQ units ready for retransmission.

Returns
true if there is at least one unit ready for RTX, false if none

◆ getOldestUnitTxTime()

simtime_t getOldestUnitTxTime ( )

Returns the TX time of the unit which is not retransmitting for the longest period of time, inside this process (the oldest PDU TX time).

Returns
TX time of the oldest unit in this process

◆ readyUnitsIds()

virtual CwList readyUnitsIds ( )
virtual

Returns a list of IDs of ready for retransmission units of this process.

Returns
list of unit IDs which are ready for RTX

◆ emptyUnitsIds()

virtual CwList emptyUnitsIds ( )
virtual

Returns a list of IDs of empty units inside this process.

Returns
empty units IDs list.

◆ selectedUnitsIds()

virtual CwList selectedUnitsIds ( )
virtual

Returns a list of IDs of selected units.

Returns
selected units IDs list.

◆ isEmpty()

bool isEmpty ( )

Tells if the process is empty: all of its units are in EMPTY state.

Returns
true if the process is empty, false if it isn't

◆ getPduId()

long getPduId ( Codeword cw)

This is necessary because when a PDU is in CORRECT state at the corresponding H-ARQ RX process, it may be extracted and potentially deleted, so PDU reference cannot be used to retrieve the PDU ID when feedback is received, because feedback is received 1 TTI after PDU extraction at the RX process!

Parameters
unitIdunit ID
Returns
PDU ID

References numHarqUnits_.

◆ isHarqProcessActive()

virtual bool isHarqProcessActive ( )
virtual
Author
Alessandro Noferi

Check if the process is active

Returns
true if at least one unit status is not TXHARQ_PDU_EMPTY

Member Data Documentation

◆ macOwner_

opp_component_ptr<LteMacBase> macOwner_
protected

reference to mac module, used to handle errors

◆ units_

UnitVector units_
protected

contained units vector

◆ numProcesses_

unsigned int numProcesses_
protected

total number of processes in this H-ARQ buffer

◆ numHarqUnits_

unsigned char numHarqUnits_
protected

number of contained H-ARQ units

Referenced by getPduId().

◆ acid_

unsigned char acid_
protected

H-ARQ process identifier.

◆ numEmptyUnits_

unsigned char numEmptyUnits_
protected

Number of empty units inside this process.

◆ numSelected_

unsigned int numSelected_
protected

Number of selected units inside this process.

◆ dropped_

bool dropped_
protected

Set this flag when a handover or a D2D switch occurs, so that the HARQ process was interrupted. This is useful in case the process receives a feedback after reset.