bugfix: send UL NACK (on PHICH) at the right place
The PHICH was not programmed for the last round (4) because it was not programmed in rx_sdu but in schedule_ulsch_rnti, only in case of a programmed retransmission (there is obviously no retransmission programmed after the last round). The case of Msg3 is not handled. To be done somehow.
This commit is contained in:
@@ -212,6 +212,30 @@ rx_sdu(const module_id_t enb_mod_idP,
|
||||
UE_list->UE_template[CC_idP][UE_id].scheduled_ul_bytes = 0;
|
||||
} else
|
||||
UE_list->UE_sched_ctrl[UE_id].round_UL[CC_idP][harq_pid]++;
|
||||
|
||||
first_rb = UE_list->UE_template[CC_idP][UE_id].first_rb_ul[harq_pid];
|
||||
|
||||
// Program NACK for PHICH
|
||||
LOG_D(MAC,
|
||||
"Programming PHICH NACK for rnti %x harq_pid %d (first_rb %d)\n",
|
||||
current_rnti, harq_pid, first_rb);
|
||||
nfapi_hi_dci0_request_t *hi_dci0_req = &mac->HI_DCI0_req[CC_idP];
|
||||
nfapi_hi_dci0_request_body_t *hi_dci0_req_body = &hi_dci0_req->hi_dci0_request_body;
|
||||
nfapi_hi_dci0_request_pdu_t *hi_dci0_pdu =
|
||||
&hi_dci0_req_body->hi_dci0_pdu_list[hi_dci0_req_body->number_of_dci + hi_dci0_req_body->number_of_hi];
|
||||
memset((void *) hi_dci0_pdu, 0, sizeof(nfapi_hi_dci0_request_pdu_t));
|
||||
hi_dci0_pdu->pdu_type = NFAPI_HI_DCI0_HI_PDU_TYPE;
|
||||
hi_dci0_pdu->pdu_size = 2 + sizeof(nfapi_hi_dci0_hi_pdu);
|
||||
hi_dci0_pdu->hi_pdu.hi_pdu_rel8.tl.tag = NFAPI_HI_DCI0_REQUEST_HI_PDU_REL8_TAG;
|
||||
hi_dci0_pdu->hi_pdu.hi_pdu_rel8.resource_block_start = first_rb;
|
||||
hi_dci0_pdu->hi_pdu.hi_pdu_rel8.cyclic_shift_2_for_drms = 0;
|
||||
hi_dci0_pdu->hi_pdu.hi_pdu_rel8.hi_value = 0;
|
||||
hi_dci0_req_body->number_of_hi++;
|
||||
hi_dci0_req_body->sfnsf = sfnsf_add_subframe(frameP,subframeP, 0);
|
||||
hi_dci0_req_body->tl.tag = NFAPI_HI_DCI0_REQUEST_BODY_TAG;
|
||||
hi_dci0_req->sfn_sf = sfnsf_add_subframe(frameP,subframeP, 4);
|
||||
hi_dci0_req->header.message_id = NFAPI_HI_DCI0_REQUEST;
|
||||
|
||||
return;
|
||||
|
||||
}
|
||||
@@ -251,6 +275,9 @@ rx_sdu(const module_id_t enb_mod_idP,
|
||||
ra[RA_id].Msg3_subframe = (ra[RA_id].Msg3_subframe + 8) % 10;
|
||||
add_msg3(enb_mod_idP, CC_idP, &ra[RA_id], frameP, subframeP);
|
||||
}
|
||||
|
||||
/* TODO: program NACK for PHICH? */
|
||||
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
@@ -1448,6 +1475,10 @@ schedule_ulsch_rnti(module_id_t module_idP,
|
||||
T_INT(first_rb[CC_id]),
|
||||
T_INT(rb_table[rb_table_index]), T_INT(round));
|
||||
|
||||
#if 0
|
||||
/* This is done in rx_sdu, as it has to.
|
||||
* Since the code is a bit different, let's keep this version here for review, in case of problem.
|
||||
*/
|
||||
// fill in NAK information
|
||||
|
||||
hi_dci0_pdu = &hi_dci0_req_body->hi_dci0_pdu_list[hi_dci0_req_body->number_of_dci + hi_dci0_req_body->number_of_hi];
|
||||
@@ -1471,6 +1502,7 @@ schedule_ulsch_rnti(module_id_t module_idP,
|
||||
UE_template->first_rb_ul[harq_pid],
|
||||
UE_template->nb_rb_ul[harq_pid],
|
||||
UE_template->TBS_UL[harq_pid], round);
|
||||
#endif
|
||||
// Add UL_config PDUs
|
||||
LOG_D(MAC,
|
||||
"[PUSCH %d] Frame %d, Subframe %d: Adding UL CONFIG.Request for UE %d/%x, ulsch_frame %d, ulsch_subframe %d\n",
|
||||
|
||||
Reference in New Issue
Block a user