mirror of https://github.com/PentHertz/srsLTE.git
Fix minor issues with adaptive retx ENB
This commit is contained in:
parent
d080985ef0
commit
72d83be8bc
|
@ -95,7 +95,7 @@ private:
|
|||
srslte_enb_dl_t enb_dl;
|
||||
srslte_enb_ul_t enb_ul;
|
||||
|
||||
srslte_timestamp_t tx_time;
|
||||
srslte_timestamp_t tx_time;
|
||||
|
||||
// Class to store user information
|
||||
class ue {
|
||||
|
@ -112,6 +112,11 @@ private:
|
|||
void metrics_read(phy_metrics_t *metrics);
|
||||
void metrics_dl(uint32_t mcs);
|
||||
void metrics_ul(uint32_t mcs, float rssi, float sinr, uint32_t turbo_iters);
|
||||
|
||||
int last_dl_tbs[2*HARQ_DELAY_MS][SRSLTE_MAX_CODEWORDS];
|
||||
int last_ul_tbs[2*HARQ_DELAY_MS];
|
||||
srslte_mod_t last_ul_mod[2*HARQ_DELAY_MS];
|
||||
|
||||
private:
|
||||
phy_metrics_t metrics;
|
||||
};
|
||||
|
|
|
@ -709,7 +709,7 @@ int sched::ul_sched(uint32_t tti, srsenb::sched_interface::ul_sched_res_t* sched
|
|||
|
||||
/* Indicate PHICH acknowledgment if needed */
|
||||
if (h->has_pending_ack()) {
|
||||
sched_result->phich[nof_phich_elems].phich = h->get_ack()?ul_sched_phich_t::ACK:ul_sched_phich_t::NACK;
|
||||
sched_result->phich[nof_phich_elems].phich = h->get_ack()?ul_sched_phich_t::ACK:ul_sched_phich_t::NACK;
|
||||
sched_result->phich[nof_phich_elems].rnti = rnti;
|
||||
nof_phich_elems++;
|
||||
}
|
||||
|
@ -767,7 +767,7 @@ int sched::ul_sched(uint32_t tti, srsenb::sched_interface::ul_sched_res_t* sched
|
|||
{
|
||||
ul_harq_proc::ul_alloc_t alloc = h->get_alloc();
|
||||
bool is_newtx = h->is_empty();
|
||||
bool needs_pdcch = !h->is_adaptive_retx() && !is_rar;
|
||||
bool needs_pdcch = h->is_adaptive_retx() && !is_rar;
|
||||
|
||||
// Set number of retx
|
||||
if (is_newtx) {
|
||||
|
|
|
@ -198,13 +198,13 @@ ul_harq_proc::ul_alloc_t ul_harq_proc::get_alloc()
|
|||
|
||||
void ul_harq_proc::set_alloc(ul_harq_proc::ul_alloc_t alloc)
|
||||
{
|
||||
is_adaptive = false;
|
||||
is_adaptive = true;
|
||||
memcpy(&allocation, &alloc, sizeof(ul_alloc_t));
|
||||
}
|
||||
|
||||
void ul_harq_proc::same_alloc()
|
||||
{
|
||||
is_adaptive = true;
|
||||
is_adaptive = false;
|
||||
}
|
||||
|
||||
bool ul_harq_proc::is_adaptive_retx()
|
||||
|
@ -243,8 +243,7 @@ void ul_harq_proc::reset_pending_data()
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
uint32_t ul_harq_proc::get_pending_data()
|
||||
uint32_t ul_harq_proc::get_pending_data()
|
||||
{
|
||||
return pending_data;
|
||||
}
|
||||
|
|
|
@ -444,7 +444,8 @@ int sched_ue::generate_format0(ul_harq_proc *h,
|
|||
int tbs = 0;
|
||||
|
||||
ul_harq_proc::ul_alloc_t allocation = h->get_alloc();
|
||||
|
||||
|
||||
bool is_newtx = true;
|
||||
if (h->get_rar_mcs(&mcs)) {
|
||||
tbs = srslte_ra_tbs_from_idx(srslte_ra_tbs_idx_from_mcs(mcs), allocation.L)/8;
|
||||
h->new_tx(tti, mcs, tbs);
|
||||
|
@ -463,7 +464,8 @@ int sched_ue::generate_format0(ul_harq_proc *h,
|
|||
|
||||
h->new_tx(tti, mcs, tbs);
|
||||
|
||||
} else {
|
||||
} else {
|
||||
is_newtx = false;
|
||||
h->new_retx(tti, &mcs, NULL);
|
||||
tbs = srslte_ra_tbs_from_idx(srslte_ra_tbs_idx_from_mcs(mcs), allocation.L)/8;
|
||||
}
|
||||
|
@ -474,9 +476,13 @@ int sched_ue::generate_format0(ul_harq_proc *h,
|
|||
if (tbs > 0) {
|
||||
dci->type2_alloc.L_crb = allocation.L;
|
||||
dci->type2_alloc.RB_start = allocation.RB_start;
|
||||
dci->mcs_idx = mcs;
|
||||
dci->rv_idx = sched::get_rvidx(h->nof_retx());
|
||||
dci->ndi = h->get_ndi();
|
||||
dci->rv_idx = sched::get_rvidx(h->nof_retx());
|
||||
if (!is_newtx && h->is_adaptive_retx()) {
|
||||
dci->mcs_idx = 28+dci->rv_idx;
|
||||
} else {
|
||||
dci->mcs_idx = mcs;
|
||||
}
|
||||
dci->ndi = h->get_ndi();
|
||||
dci->cqi_request = cqi_request;
|
||||
dci->freq_hop_fl = srslte_ra_ul_dci_t::SRSLTE_RA_PUSCH_HOP_DISABLED;
|
||||
dci->tpc_pusch = next_tpc_pusch;
|
||||
|
|
|
@ -412,6 +412,22 @@ int phch_worker::decode_pusch(srslte_enb_ul_pusch_t *grants, uint32_t nof_pusch)
|
|||
srslte_ra_ul_grant_t phy_grant;
|
||||
int res = -1;
|
||||
if (!srslte_ra_ul_dci_to_grant(&grants[i].grant, enb_ul.cell.nof_prb, n_rb_ho, &phy_grant)) {
|
||||
|
||||
// Handle Format0 adaptive retx
|
||||
// Use last TBS for this TB in case of mcs>28
|
||||
if (phy_grant.mcs.idx > 28) {
|
||||
phy_grant.mcs.tbs = ue_db[rnti].last_ul_tbs[TTI_RX(tti_rx)%(2*HARQ_DELAY_MS)];
|
||||
Info("RETX: mcs=%d, old_tbs=%d pid=%d\n", phy_grant.mcs.idx, phy_grant.mcs.tbs, TTI_TX(tti_rx)%(2*HARQ_DELAY_MS));
|
||||
}
|
||||
ue_db[rnti].last_ul_tbs[TTI_RX(tti_rx)%(2*HARQ_DELAY_MS)] = phy_grant.mcs.tbs;
|
||||
|
||||
if (phy_grant.mcs.mod == SRSLTE_MOD_LAST) {
|
||||
phy_grant.mcs.mod = ue_db[rnti].last_ul_mod[TTI_RX(tti_rx)%(2*HARQ_DELAY_MS)];
|
||||
phy_grant.Qm = srslte_mod_bits_x_symbol(phy_grant.mcs.mod);
|
||||
}
|
||||
ue_db[rnti].last_ul_mod[TTI_RX(tti_rx)%(2*HARQ_DELAY_MS)] = phy_grant.mcs.mod;
|
||||
|
||||
|
||||
if (phy_grant.mcs.mod == SRSLTE_MOD_64QAM) {
|
||||
phy_grant.mcs.mod = SRSLTE_MOD_16QAM;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue