putting back downlink_harq_process and some other fixes
This commit is contained in:
@@ -122,6 +122,7 @@ int8_t nr_ue_scheduled_response(nr_scheduled_response_t *scheduled_response){
|
|||||||
dlsch0->g_pucch = dlsch_config_pdu->accumulated_delta_PUCCH;
|
dlsch0->g_pucch = dlsch_config_pdu->accumulated_delta_PUCCH;
|
||||||
dlsch0_harq->Nl=1;
|
dlsch0_harq->Nl=1;
|
||||||
dlsch0_harq->mcs_table=dlsch_config_pdu->mcs_table;
|
dlsch0_harq->mcs_table=dlsch_config_pdu->mcs_table;
|
||||||
|
downlink_harq_process(dlsch0_harq, dlsch0->current_harq_pid, dlsch_config_pdu->ndi, dlsch0->rnti_type);
|
||||||
if (dlsch0_harq->status != ACTIVE) {
|
if (dlsch0_harq->status != ACTIVE) {
|
||||||
// dlsch0_harq->status not ACTIVE may be due to false retransmission. Reset the
|
// dlsch0_harq->status not ACTIVE may be due to false retransmission. Reset the
|
||||||
// following flag to skip PDSCH procedures in that case.
|
// following flag to skip PDSCH procedures in that case.
|
||||||
@@ -201,6 +202,7 @@ int8_t nr_ue_scheduled_response(nr_scheduled_response_t *scheduled_response){
|
|||||||
if(pucch_vars->active[j] == false) {
|
if(pucch_vars->active[j] == false) {
|
||||||
LOG_D(PHY,"%d.%d Copying pucch pdu to UE PHY\n",scheduled_response->frame,slot);
|
LOG_D(PHY,"%d.%d Copying pucch pdu to UE PHY\n",scheduled_response->frame,slot);
|
||||||
memcpy((void*)&(pucch_vars->pucch_pdu[j]), (void*)pucch_config_pdu, sizeof(fapi_nr_ul_config_pucch_pdu));
|
memcpy((void*)&(pucch_vars->pucch_pdu[j]), (void*)pucch_config_pdu, sizeof(fapi_nr_ul_config_pucch_pdu));
|
||||||
|
pucch_vars->active[j] = true;
|
||||||
found = true;
|
found = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -308,4 +308,59 @@ void init_downlink_harq_status(NR_DL_UE_HARQ_t *dl_harq)
|
|||||||
dl_harq->status = SCH_IDLE;
|
dl_harq->status = SCH_IDLE;
|
||||||
dl_harq->first_tx = 1;
|
dl_harq->first_tx = 1;
|
||||||
dl_harq->round = 0;
|
dl_harq->round = 0;
|
||||||
|
dl_harq->ack = DL_ACKNACK_NO_SET;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*******************************************************************
|
||||||
|
*
|
||||||
|
* NAME : downlink_harq_process
|
||||||
|
*
|
||||||
|
* PARAMETERS : downlink harq context
|
||||||
|
* harq identifier
|
||||||
|
* ndi (new data indicator) from DCI
|
||||||
|
* rnti_type from DCI
|
||||||
|
*
|
||||||
|
* RETURN : none
|
||||||
|
*
|
||||||
|
* DESCRIPTION : manage downlink information from DCI for downlink transmissions/retransmissions
|
||||||
|
* TS 38.321 5.3.1 DL Assignment reception
|
||||||
|
* TS 38.321 5.3.2 HARQ operation
|
||||||
|
*
|
||||||
|
*********************************************************************/
|
||||||
|
|
||||||
|
void downlink_harq_process(NR_DL_UE_HARQ_t *dl_harq, int harq_pid, int ndi, uint8_t rnti_type) {
|
||||||
|
|
||||||
|
if (rnti_type == _CS_RNTI_) {
|
||||||
|
LOG_E(PHY, "Fatal error in HARQ entity due to not supported CS_RNTI at line %d in function %s of file %s \n", __LINE__ , __func__, __FILE__);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else if ((rnti_type != _C_RNTI_) && (rnti_type != _TC_RNTI_)) {
|
||||||
|
/* harq mechanism is not relevant for other rnti */
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dl_harq->first_tx == 1) {
|
||||||
|
dl_harq->round = 0;
|
||||||
|
dl_harq->status = ACTIVE;
|
||||||
|
dl_harq->DCINdi = ndi;
|
||||||
|
dl_harq->first_tx = 0;
|
||||||
|
|
||||||
|
LOG_D(PHY, "[HARQ-DL-PDSCH harqId : %d] first new reception \n", harq_pid);
|
||||||
|
}
|
||||||
|
else if (dl_harq->DCINdi != ndi) {
|
||||||
|
dl_harq->round = 0;
|
||||||
|
dl_harq->status = ACTIVE;
|
||||||
|
dl_harq->DCINdi = ndi;
|
||||||
|
|
||||||
|
LOG_D(PHY, "[HARQ-DL-PDSCH harqId : %d] new reception due to toogle of ndi \n", harq_pid);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
|
||||||
|
dl_harq->round++;
|
||||||
|
|
||||||
|
if (dl_harq->ack) dl_harq->status = SCH_IDLE;
|
||||||
|
|
||||||
|
LOG_D(PHY, "[HARQ-DL-PDSCH harqId : %d] reception of a retransmission \n", harq_pid);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -120,7 +120,7 @@ void init_downlink_harq_status(NR_DL_UE_HARQ_t *dl_harq);
|
|||||||
@param rnti_type type of rnti
|
@param rnti_type type of rnti
|
||||||
@returns retransmission or new transmission */
|
@returns retransmission or new transmission */
|
||||||
|
|
||||||
harq_result_t downlink_harq_process(NR_DL_UE_HARQ_t *dlsch, int harq_pid, int ndi, uint8_t rnti_type);
|
void downlink_harq_process(NR_DL_UE_HARQ_t *dlsch, int harq_pid, int ndi, uint8_t rnti_type);
|
||||||
|
|
||||||
#undef EXTERN
|
#undef EXTERN
|
||||||
#undef INIT_VARIABLES_HARQ_NR_H
|
#undef INIT_VARIABLES_HARQ_NR_H
|
||||||
|
|||||||
@@ -1786,13 +1786,14 @@ int phy_procedures_nrUE_RX(PHY_VARS_NR_UE *ue,
|
|||||||
// do procedures for C-RNTI
|
// do procedures for C-RNTI
|
||||||
int ret_pdsch = 0;
|
int ret_pdsch = 0;
|
||||||
if (ue->dlsch[proc->thread_id][gNB_id][0]->active == 1) {
|
if (ue->dlsch[proc->thread_id][gNB_id][0]->active == 1) {
|
||||||
|
|
||||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDSCH_PROC_C, VCD_FUNCTION_IN);
|
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDSCH_PROC_C, VCD_FUNCTION_IN);
|
||||||
ret_pdsch = nr_ue_pdsch_procedures(ue,
|
ret_pdsch = nr_ue_pdsch_procedures(ue,
|
||||||
proc,
|
proc,
|
||||||
gNB_id,
|
gNB_id,
|
||||||
PDSCH,
|
PDSCH,
|
||||||
ue->dlsch[proc->thread_id][gNB_id][0],
|
ue->dlsch[proc->thread_id][gNB_id][0],
|
||||||
NULL);
|
NULL);
|
||||||
|
|
||||||
nr_ue_measurement_procedures(2, ue, proc, gNB_id, nr_slot_rx);
|
nr_ue_measurement_procedures(2, ue, proc, gNB_id, nr_slot_rx);
|
||||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDSCH_PROC_C, VCD_FUNCTION_OUT);
|
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDSCH_PROC_C, VCD_FUNCTION_OUT);
|
||||||
|
|||||||
Reference in New Issue
Block a user