LteHarqProcessTx.h Source File

Simu5G: LteHarqProcessTx.h Source File
Simu5G
LteHarqProcessTx.h
1//
2// Simu5G
3//
4// Copyright (C) 2012-2021 Giovanni Nardini, Giovanni Stea, Antonio Virdis et al. (University of Pisa)
5// Copyright (C) 2022-2026 Giovanni Nardini, Giovanni Stea et al. (University of Pisa)
6//
7// This file is part of a software released under the license included in file
8// "license.pdf". Please read LICENSE and README files before using it.
9// The above files and the present reference are part of the software itself,
10// and cannot be removed from it.
11//
12
13#ifndef _LTE_LTEHARQPROCESSTX_H_
14#define _LTE_LTEHARQPROCESSTX_H_
15
16#include "simu5g/stack/mac/buffer/harq/LteHarqUnitTx.h"
17#include "simu5g/stack/mac/LteMacBase.h"
18
19namespace simu5g {
20
21using namespace omnetpp;
22
23typedef std::vector<LteHarqUnitTx *> UnitVector;
24typedef std::pair<unsigned char, TxHarqPduStatus> UnitStatus;
25typedef std::vector<std::vector<UnitStatus>> BufferStatus;
26
35
36class LteHarqProcessTx : noncopyable
37{
38 protected:
39
41 opp_component_ptr<LteMacBase> macOwner_;
42
44 UnitVector units_;
45
47 unsigned int numProcesses_;
48
50 unsigned char numHarqUnits_;
51
53 unsigned char acid_;
54
56 unsigned char numEmptyUnits_; //++ @ insert, -- @ unit reset (ack or fourth nack)
57
59 unsigned int numSelected_; //++ @ markSelected and insert, -- @ extract/sendDown
60
64
65 public:
66
67 /*
68 * Default Constructor
69 */
70 LteHarqProcessTx() {}
71
80 LteHarqProcessTx(Binder *binder, unsigned char acid, unsigned int numUnits, unsigned int numProcesses, LteMacBase *macOwner,
81 LteMacBase *dstMac);
82
89 virtual void insertPdu(inet::Packet *pdu, Codeword cw);
90
91 virtual void markSelected(Codeword cw);
92
93 virtual inet::Packet *extractPdu(Codeword cw);
94
95 virtual bool pduFeedback(HarqAcknowledgment fb, Codeword cw);
96
97 virtual bool selfNack(Codeword cw);
98
104 std::vector<UnitStatus> getProcessStatus();
105
112
121
128 virtual CwList readyUnitsIds();
129
135 virtual CwList emptyUnitsIds();
136
142 virtual CwList selectedUnitsIds();
143
149 bool isEmpty();
150
151 inet::Packet *getPdu(Codeword cw);
152
164
165 virtual void forceDropProcess();
166
167 virtual bool forceDropUnit(Codeword cw);
168
169 unsigned int getNumHarqUnits()
170 {
171 return numHarqUnits_;
172 }
173
174 TxHarqPduStatus getUnitStatus(Codeword cw);
175
176 virtual void dropPdu(Codeword cw);
177 bool isUnitEmpty(Codeword cw);
178 bool isUnitReady(Codeword cw);
179 unsigned char getTransmissions(Codeword cw);
180 int64_t getPduLength(Codeword cw);
181 simtime_t getTxTime(Codeword cw);
182 bool isUnitMarked(Codeword cw);
183 bool isDropped();
184
192
193 virtual bool isHarqProcessActive();
194
195 virtual ~LteHarqProcessTx();
196};
197
198} //namespace
199
200#endif
201
Definition Binder.h:48
virtual CwList emptyUnitsIds()
long getPduId(Codeword cw)
unsigned int numSelected_
Number of selected units inside this process.
Definition LteHarqProcessTx.h:59
simtime_t getOldestUnitTxTime()
unsigned char acid_
H-ARQ process identifier.
Definition LteHarqProcessTx.h:53
UnitVector units_
contained units vector
Definition LteHarqProcessTx.h:44
virtual void insertPdu(inet::Packet *pdu, Codeword cw)
unsigned int numProcesses_
total number of processes in this H-ARQ buffer
Definition LteHarqProcessTx.h:47
virtual bool isHarqProcessActive()
unsigned char numHarqUnits_
number of contained H-ARQ units
Definition LteHarqProcessTx.h:50
LteHarqProcessTx(Binder *binder, unsigned char acid, unsigned int numUnits, unsigned int numProcesses, LteMacBase *macOwner, LteMacBase *dstMac)
virtual CwList selectedUnitsIds()
std::vector< UnitStatus > getProcessStatus()
unsigned char numEmptyUnits_
Number of empty units inside this process.
Definition LteHarqProcessTx.h:56
bool dropped_
Definition LteHarqProcessTx.h:63
opp_component_ptr< LteMacBase > macOwner_
reference to mac module, used to handle errors
Definition LteHarqProcessTx.h:41
virtual CwList readyUnitsIds()
MAC Layer.
Definition LteMacBase.h:80
Definition AlertReceiver.h:24
unsigned short Codeword
Codeword.
Definition LteCommon.h:202