mirror of https://github.com/PentHertz/srsLTE.git
removed last tti in adaptive retx. moved to phch_common
This commit is contained in:
parent
058fbd7112
commit
49a621e193
|
@ -50,6 +50,8 @@
|
|||
#define TTI_TX(tti) ((tti+HARQ_DELAY_MS)%10240)
|
||||
#define TTI_RX_ACK(tti) ((tti+(2*HARQ_DELAY_MS))%10240)
|
||||
|
||||
#define UL_PIDOF(tti) (tti%(2*HARQ_DELAY_MS))
|
||||
|
||||
#define TTIMOD_SZ (((2*HARQ_DELAY_MS) < 10)?10:20)
|
||||
#define TTIMOD(tti) (tti%TTIMOD_SZ)
|
||||
|
||||
|
|
|
@ -217,7 +217,7 @@ private:
|
|||
|
||||
// Receive and route HARQ feedbacks
|
||||
if (grant) {
|
||||
if ((!(grant->rnti_type == SRSLTE_RNTI_TEMP) && grant->ndi[0] != get_ndi()) ||
|
||||
if ((!(grant->rnti_type == SRSLTE_RNTI_TEMP) && grant->ndi[0] != get_ndi() && ack) ||
|
||||
(grant->rnti_type == SRSLTE_RNTI_USER && !has_grant()) ||
|
||||
grant->is_from_rar)
|
||||
{
|
||||
|
@ -294,7 +294,6 @@ private:
|
|||
bool has_grant() { return is_grant_configured; }
|
||||
bool get_ndi() { return cur_grant.ndi[0]; }
|
||||
bool is_sps() { return false; }
|
||||
uint32_t last_tx_tti() { return tti_last_tx; }
|
||||
uint32_t get_nof_retx() { return current_tx_nb; }
|
||||
int get_current_tbs() { return cur_grant.n_bytes[0]*8; }
|
||||
|
||||
|
|
|
@ -66,6 +66,14 @@ namespace srsue {
|
|||
float avg_noise;
|
||||
float avg_rsrp;
|
||||
|
||||
// Save last TBS for mcs>28 cases
|
||||
int last_dl_tbs[2*HARQ_DELAY_MS][SRSLTE_MAX_CODEWORDS];
|
||||
uint32_t last_dl_tti[2*HARQ_DELAY_MS];
|
||||
|
||||
int last_ul_tbs[2*HARQ_DELAY_MS];
|
||||
uint32_t last_ul_tti[2*HARQ_DELAY_MS];
|
||||
srslte_mod_t last_ul_mod[2*HARQ_DELAY_MS];
|
||||
|
||||
phch_common(uint32_t max_mutex = 3);
|
||||
void init(phy_interface_rrc::phy_cfg_t *config,
|
||||
phy_args_t *args,
|
||||
|
|
|
@ -150,12 +150,6 @@ private:
|
|||
float cfo;
|
||||
bool rar_cqi_request;
|
||||
|
||||
// Save last TBS for mcs>28 cases
|
||||
int last_dl_tbs[2*HARQ_DELAY_MS][SRSLTE_MAX_CODEWORDS];
|
||||
int last_ul_tbs[2*HARQ_DELAY_MS];
|
||||
uint32_t last_ul_tti[2*HARQ_DELAY_MS];
|
||||
srslte_mod_t last_ul_mod[2*HARQ_DELAY_MS];
|
||||
|
||||
// Metrics
|
||||
dl_metrics_t dl_metrics;
|
||||
ul_metrics_t ul_metrics;
|
||||
|
|
|
@ -477,19 +477,19 @@ bool phch_worker::decode_pdcch_dl(srsue::mac_interface_phy::mac_grant_t* grant)
|
|||
return false;
|
||||
}
|
||||
|
||||
grant->pid = ASYNC_DL_SCHED?dci_unpacked.harq_process:(tti%(2*HARQ_DELAY_MS));
|
||||
grant->pid = ASYNC_DL_SCHED?dci_unpacked.harq_process:(UL_PIDOF(TTI_TX(tti)));
|
||||
|
||||
// Set last TBS for this TB (pid) in case of mcs>28 (7.1.7.2 of 36.213)
|
||||
for (int i=0;i<SRSLTE_MAX_CODEWORDS;i++) {
|
||||
if (grant->phy_grant.dl.mcs[i].idx > 28) {
|
||||
grant->phy_grant.dl.mcs[i].tbs = last_dl_tbs[grant->pid%(2*HARQ_DELAY_MS)][i];
|
||||
grant->phy_grant.dl.mcs[i].tbs = phy->last_dl_tbs[grant->pid][i];
|
||||
}
|
||||
if(grant->phy_grant.dl.mcs[i].tbs < 0) {
|
||||
Info("Invalid TBS size for PDSCH grant\n");
|
||||
grant->phy_grant.dl.mcs[i].tbs = 0;
|
||||
}
|
||||
// save it
|
||||
last_dl_tbs[grant->pid%(2*HARQ_DELAY_MS)][i] = grant->phy_grant.dl.mcs[i].tbs;
|
||||
phy->last_dl_tbs[grant->pid][i] = grant->phy_grant.dl.mcs[i].tbs;
|
||||
}
|
||||
|
||||
/* Fill MAC grant structure */
|
||||
|
@ -749,21 +749,15 @@ bool phch_worker::decode_pdcch_ul(mac_interface_phy::mac_grant_t* grant)
|
|||
// Use last TBS for this TB in case of mcs>28
|
||||
if (grant->phy_grant.ul.mcs.idx > 28) {
|
||||
// Make sure we received a grant in the previous TTI for this PID
|
||||
if (last_ul_tti[TTI_RX(tti)%(2*HARQ_DELAY_MS)] == TTI_RX(tti)) {
|
||||
grant->phy_grant.ul.mcs.tbs = last_ul_tbs[TTI_RX(tti)%(2*HARQ_DELAY_MS)];
|
||||
grant->phy_grant.ul.mcs.mod = last_ul_mod[TTI_RX(tti)%(2*HARQ_DELAY_MS)];
|
||||
grant->phy_grant.ul.Qm = srslte_mod_bits_x_symbol(grant->phy_grant.ul.mcs.mod);
|
||||
} else {
|
||||
Warning("Missed original grant in adaptive retx\n");
|
||||
ret = false;
|
||||
}
|
||||
grant->phy_grant.ul.mcs.tbs = phy->last_ul_tbs[UL_PIDOF(TTI_TX(tti))];
|
||||
grant->phy_grant.ul.mcs.mod = phy->last_ul_mod[UL_PIDOF(TTI_TX(tti))];
|
||||
grant->phy_grant.ul.Qm = srslte_mod_bits_x_symbol(grant->phy_grant.ul.mcs.mod);
|
||||
}
|
||||
}
|
||||
if (ret) {
|
||||
last_ul_tbs[TTI_RX(tti)%(2*HARQ_DELAY_MS)] = grant->phy_grant.ul.mcs.tbs;
|
||||
last_ul_mod[TTI_RX(tti)%(2*HARQ_DELAY_MS)] = grant->phy_grant.ul.mcs.mod;
|
||||
last_ul_tti[TTI_RX(tti)%(2*HARQ_DELAY_MS)] = TTI_TX(tti);
|
||||
|
||||
phy->last_ul_tbs[UL_PIDOF(TTI_TX(tti))] = grant->phy_grant.ul.mcs.tbs;
|
||||
phy->last_ul_mod[UL_PIDOF(TTI_TX(tti))] = grant->phy_grant.ul.mcs.mod;
|
||||
phy->last_ul_tti[UL_PIDOF(TTI_TX(tti))] = TTI_RX_ACK(tti);
|
||||
/* Limit UL modulation if not supported by the UE or disabled by higher layers */
|
||||
if (!phy->config->enable_64qam) {
|
||||
if (grant->phy_grant.ul.mcs.mod >= SRSLTE_MOD_64QAM) {
|
||||
|
|
Loading…
Reference in New Issue