Fixed bugs in pucch UE
UE now sends ack/nack in format0
This commit is contained in:
@@ -105,6 +105,7 @@ int8_t nr_ue_scheduled_response(nr_scheduled_response_t *scheduled_response){
|
|||||||
dlsch0_harq->Nl=1;
|
dlsch0_harq->Nl=1;
|
||||||
dlsch0_harq->mcs_table=0;
|
dlsch0_harq->mcs_table=0;
|
||||||
dlsch0_harq->harq_ack.rx_status = downlink_harq_process(dlsch0_harq, dlsch0->current_harq_pid, dlsch_config_pdu->ndi, dlsch0->rnti_type);
|
dlsch0_harq->harq_ack.rx_status = downlink_harq_process(dlsch0_harq, dlsch0->current_harq_pid, dlsch_config_pdu->ndi, dlsch0->rnti_type);
|
||||||
|
dlsch0_harq->harq_ack.vDAI_DL = dlsch_config_pdu->dai;
|
||||||
LOG_D(MAC, ">>>> \tdlsch0->g_pucch = %d\tdlsch0_harq.mcs = %d\n", dlsch0->g_pucch, dlsch0_harq->mcs);
|
LOG_D(MAC, ">>>> \tdlsch0->g_pucch = %d\tdlsch0_harq.mcs = %d\n", dlsch0->g_pucch, dlsch0_harq->mcs);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -347,7 +347,7 @@ bool pucch_procedures_ue_nr(PHY_VARS_NR_UE *ue, uint8_t gNB_id, UE_nr_rxtx_proc_
|
|||||||
/**********************************************/
|
/**********************************************/
|
||||||
else if ((pucch_resource_set != MAX_NB_OF_PUCCH_RESOURCE_SETS) && (pucch_resource_id != MAX_NB_OF_PUCCH_RESOURCES)) {
|
else if ((pucch_resource_set != MAX_NB_OF_PUCCH_RESOURCE_SETS) && (pucch_resource_id != MAX_NB_OF_PUCCH_RESOURCES)) {
|
||||||
/* check that current configuration is supported */
|
/* check that current configuration is supported */
|
||||||
if ((mac->scg->physicalCellGroupConfig->harq_ACK_SpatialBundlingPUCCH[0] != FALSE)
|
if ((mac->scg->physicalCellGroupConfig->harq_ACK_SpatialBundlingPUCCH != NULL)
|
||||||
|| (mac->scg->physicalCellGroupConfig->pdsch_HARQ_ACK_Codebook != 1)) {
|
|| (mac->scg->physicalCellGroupConfig->pdsch_HARQ_ACK_Codebook != 1)) {
|
||||||
LOG_E(PHY,"PUCCH Unsupported cell group configuration : at line %d in function %s of file %s \n", LINE_FILE , __func__, FILE_NAME);
|
LOG_E(PHY,"PUCCH Unsupported cell group configuration : at line %d in function %s of file %s \n", LINE_FILE , __func__, FILE_NAME);
|
||||||
return(FALSE);
|
return(FALSE);
|
||||||
@@ -356,11 +356,11 @@ bool pucch_procedures_ue_nr(PHY_VARS_NR_UE *ue, uint8_t gNB_id, UE_nr_rxtx_proc_
|
|||||||
LOG_E(PHY,"PUCCH Unsupported code block group for serving cell config : at line %d in function %s of file %s \n", LINE_FILE , __func__, FILE_NAME);
|
LOG_E(PHY,"PUCCH Unsupported code block group for serving cell config : at line %d in function %s of file %s \n", LINE_FILE , __func__, FILE_NAME);
|
||||||
return(FALSE);
|
return(FALSE);
|
||||||
}
|
}
|
||||||
pucch_resource = mac->ULbwp[bwp_id-1]->bwp_Dedicated->pucch_Config->choice.setup->resourceToAddModList->list.array[pucch_resource_id];
|
pucch_resource = select_resource_by_id(pucch_resource_id, mac->ULbwp[bwp_id-1]->bwp_Dedicated->pucch_Config->choice.setup);
|
||||||
format = pucch_resource->format.present;
|
format = pucch_resource->format.present;
|
||||||
nb_symbols_total = get_nb_symbols_pucch(pucch_resource, format);
|
nb_symbols_total = get_nb_symbols_pucch(pucch_resource, format);
|
||||||
starting_symbol_index = pucch_resource->startingPRB;
|
starting_symbol_index = get_starting_symb_idx(pucch_resource, format);
|
||||||
starting_prb = get_starting_symb_idx(pucch_resource, format);
|
starting_prb = pucch_resource->startingPRB;
|
||||||
second_hop = starting_prb;
|
second_hop = starting_prb;
|
||||||
if (format==pucch_format1_nr)
|
if (format==pucch_format1_nr)
|
||||||
time_domain_occ = pucch_resource->format.choice.format1->timeDomainOCC;
|
time_domain_occ = pucch_resource->format.choice.format1->timeDomainOCC;
|
||||||
@@ -779,7 +779,7 @@ uint8_t get_downlink_ack(PHY_VARS_NR_UE *ue, uint8_t gNB_id, UE_nr_rxtx_proc_t
|
|||||||
U_DAI_c = number_harq_feedback/number_of_code_word;
|
U_DAI_c = number_harq_feedback/number_of_code_word;
|
||||||
N_m_c_rx = number_harq_feedback;
|
N_m_c_rx = number_harq_feedback;
|
||||||
int N_SPS_c = 0; /* FFS TODO_NR multicells and SPS are not supported at the moment */
|
int N_SPS_c = 0; /* FFS TODO_NR multicells and SPS are not supported at the moment */
|
||||||
if (mac->scg->physicalCellGroupConfig->harq_ACK_SpatialBundlingPUCCH[0] == FALSE) {
|
if (mac->scg->physicalCellGroupConfig->harq_ACK_SpatialBundlingPUCCH == NULL) {
|
||||||
int N_TB_max_DL = mac->DLbwp[0]->bwp_Dedicated->pdsch_Config->choice.setup->maxNrofCodeWordsScheduledByDCI[0];
|
int N_TB_max_DL = mac->DLbwp[0]->bwp_Dedicated->pdsch_Config->choice.setup->maxNrofCodeWordsScheduledByDCI[0];
|
||||||
*n_HARQ_ACK = (((V_DAI_m_DL - U_DAI_c)%4) * N_TB_max_DL) + N_m_c_rx + N_SPS_c;
|
*n_HARQ_ACK = (((V_DAI_m_DL - U_DAI_c)%4) * N_TB_max_DL) + N_m_c_rx + N_SPS_c;
|
||||||
NR_TST_PHY_PRINTF("PUCCH power n(%d) = ( V(%d) - U(%d) )mod4 * N_TB(%d) + N(%d) \n", *n_HARQ_ACK, V_DAI_m_DL, U_DAI_c, N_TB_max_DL, N_m_c_rx);
|
NR_TST_PHY_PRINTF("PUCCH power n(%d) = ( V(%d) - U(%d) )mod4 * N_TB(%d) + N(%d) \n", *n_HARQ_ACK, V_DAI_m_DL, U_DAI_c, N_TB_max_DL, N_m_c_rx);
|
||||||
@@ -1094,31 +1094,33 @@ boolean_t check_pucch_format(NR_UE_MAC_INST_t *mac, uint8_t gNB_id, pucch_format
|
|||||||
pucch_format_nr_t selected_pucch_format_second;
|
pucch_format_nr_t selected_pucch_format_second;
|
||||||
NR_SetupRelease_PUCCH_FormatConfig_t *identified_format;
|
NR_SetupRelease_PUCCH_FormatConfig_t *identified_format;
|
||||||
|
|
||||||
switch (format_pucch) {
|
if (format_pucch != pucch_format0_nr) {
|
||||||
case pucch_format1_nr:
|
switch (format_pucch) {
|
||||||
if (mac->ULbwp[bwp_id-1]->bwp_Dedicated->pucch_Config->choice.setup->format1 != NULL)
|
case pucch_format1_nr:
|
||||||
identified_format = mac->ULbwp[bwp_id-1]->bwp_Dedicated->pucch_Config->choice.setup->format1;
|
if (mac->ULbwp[bwp_id-1]->bwp_Dedicated->pucch_Config->choice.setup->format1 != NULL)
|
||||||
break;
|
identified_format = mac->ULbwp[bwp_id-1]->bwp_Dedicated->pucch_Config->choice.setup->format1;
|
||||||
|
break;
|
||||||
|
|
||||||
case pucch_format2_nr:
|
case pucch_format2_nr:
|
||||||
if (mac->ULbwp[bwp_id-1]->bwp_Dedicated->pucch_Config->choice.setup->format2 != NULL)
|
if (mac->ULbwp[bwp_id-1]->bwp_Dedicated->pucch_Config->choice.setup->format2 != NULL)
|
||||||
identified_format = mac->ULbwp[bwp_id-1]->bwp_Dedicated->pucch_Config->choice.setup->format2;
|
identified_format = mac->ULbwp[bwp_id-1]->bwp_Dedicated->pucch_Config->choice.setup->format2;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case pucch_format3_nr:
|
case pucch_format3_nr:
|
||||||
if (mac->ULbwp[bwp_id-1]->bwp_Dedicated->pucch_Config->choice.setup->format3 != NULL)
|
if (mac->ULbwp[bwp_id-1]->bwp_Dedicated->pucch_Config->choice.setup->format3 != NULL)
|
||||||
identified_format = mac->ULbwp[bwp_id-1]->bwp_Dedicated->pucch_Config->choice.setup->format3;
|
identified_format = mac->ULbwp[bwp_id-1]->bwp_Dedicated->pucch_Config->choice.setup->format3;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case pucch_format4_nr:
|
case pucch_format4_nr:
|
||||||
if (mac->ULbwp[bwp_id-1]->bwp_Dedicated->pucch_Config->choice.setup->format4 != NULL)
|
if (mac->ULbwp[bwp_id-1]->bwp_Dedicated->pucch_Config->choice.setup->format4 != NULL)
|
||||||
identified_format = mac->ULbwp[bwp_id-1]->bwp_Dedicated->pucch_Config->choice.setup->format4;
|
identified_format = mac->ULbwp[bwp_id-1]->bwp_Dedicated->pucch_Config->choice.setup->format4;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (identified_format->choice.setup->nrofSlots != 1) {
|
if (identified_format->choice.setup->nrofSlots != 1) {
|
||||||
LOG_E(PHY,"PUCCH not implemented multislots transmission : at line %d in function %s of file %s \n", LINE_FILE , __func__, FILE_NAME);
|
LOG_E(PHY,"PUCCH not implemented multislots transmission : at line %d in function %s of file %s \n", LINE_FILE , __func__, FILE_NAME);
|
||||||
return (FALSE);
|
return (FALSE);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (nb_symbols_for_tx <= 2) {
|
if (nb_symbols_for_tx <= 2) {
|
||||||
@@ -1320,3 +1322,17 @@ int get_ics_pucch(NR_PUCCH_Resource_t *pucch_resource, pucch_format_nr_t format_
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
NR_PUCCH_Resource_t *select_resource_by_id(int resource_id, NR_PUCCH_Config_t *pucch_config)
|
||||||
|
{
|
||||||
|
int n_list = pucch_config->resourceToAddModList->list.count;
|
||||||
|
NR_PUCCH_Resource_t *pucchres;
|
||||||
|
AssertFatal(n_list>0,"PUCCH resourceToAddModList is empty\n");
|
||||||
|
|
||||||
|
for (int i=0; i<n_list; i++) {
|
||||||
|
pucchres = pucch_config->resourceToAddModList->list.array[i];
|
||||||
|
if (pucchres->pucch_ResourceId == resource_id)
|
||||||
|
return pucchres;
|
||||||
|
}
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -240,4 +240,6 @@ uint8_t get_nb_symbols_pucch(NR_PUCCH_Resource_t *pucch_resource, pucch_format_n
|
|||||||
uint16_t get_starting_symb_idx(NR_PUCCH_Resource_t *pucch_resource, pucch_format_nr_t format_type);
|
uint16_t get_starting_symb_idx(NR_PUCCH_Resource_t *pucch_resource, pucch_format_nr_t format_type);
|
||||||
|
|
||||||
int get_ics_pucch(NR_PUCCH_Resource_t *pucch_resource, pucch_format_nr_t format_type);
|
int get_ics_pucch(NR_PUCCH_Resource_t *pucch_resource, pucch_format_nr_t format_type);
|
||||||
|
|
||||||
|
NR_PUCCH_Resource_t *select_resource_by_id(int resource_id, NR_PUCCH_Config_t *pucch_config);
|
||||||
#endif /* PUCCH_UCI_UE_NR_H */
|
#endif /* PUCCH_UCI_UE_NR_H */
|
||||||
|
|||||||
Reference in New Issue
Block a user