fixing bugs in pucch ue functions
This commit is contained in:
committed by
luis_pereira87
parent
145dd0c9bf
commit
fb413c8bde
@@ -221,7 +221,7 @@ static float RSRP_meas_mapping_nr[98]
|
|||||||
-43
|
-43
|
||||||
}
|
}
|
||||||
;
|
;
|
||||||
|
|
||||||
long
|
long
|
||||||
binary_search_float_nr(
|
binary_search_float_nr(
|
||||||
float elements[],
|
float elements[],
|
||||||
@@ -476,33 +476,34 @@ bool pucch_procedures_ue_nr(PHY_VARS_NR_UE *ue, uint8_t gNB_id, UE_nr_rxtx_proc_
|
|||||||
mac->cg->spCellConfig->spCellConfigDedicated->csi_MeasConfig&&
|
mac->cg->spCellConfig->spCellConfigDedicated->csi_MeasConfig&&
|
||||||
mac->cg->spCellConfig->spCellConfigDedicated->csi_MeasConfig->choice.setup) {
|
mac->cg->spCellConfig->spCellConfigDedicated->csi_MeasConfig->choice.setup) {
|
||||||
NR_CSI_MeasConfig_t *csi_MeasConfig = mac->cg->spCellConfig->spCellConfigDedicated->csi_MeasConfig->choice.setup;
|
NR_CSI_MeasConfig_t *csi_MeasConfig = mac->cg->spCellConfig->spCellConfigDedicated->csi_MeasConfig->choice.setup;
|
||||||
|
|
||||||
uint16_t report_slot_csi =csi_MeasConfig->csi_ReportConfigToAddModList->list.array[0]->reportConfigType.choice.periodic->reportSlotConfig.choice.slots320;
|
uint16_t report_slot_csi =csi_MeasConfig->csi_ReportConfigToAddModList->list.array[0]->reportConfigType.choice.periodic->reportSlotConfig.choice.slots320;
|
||||||
|
|
||||||
//if (mac->csirc->reportQuantity.choice.ssb_Index_RSRP){
|
//if (mac->csirc->reportQuantity.choice.ssb_Index_RSRP){
|
||||||
if (report_slot_csi == proc->nr_slot_tx)
|
if (report_slot_csi == proc->nr_slot_tx)
|
||||||
csi_status = get_csi_nr(mac, ue, gNB_id, &csi_payload);
|
csi_status = get_csi_nr(mac, ue, gNB_id, &csi_payload);
|
||||||
else
|
else
|
||||||
csi_status = 0;
|
csi_status = 0;
|
||||||
//}
|
//}
|
||||||
|
|
||||||
O_CSI = cqi_status + ri_status + csi_status;
|
O_CSI = cqi_status + ri_status + csi_status;
|
||||||
|
|
||||||
/* Part - II */
|
/* Part - II */
|
||||||
/* if payload is empty or only negative SR -> no pucch transmission */
|
/* if payload is empty or only negative SR -> no pucch transmission */
|
||||||
|
|
||||||
if(O_ACK == 0) {
|
if(O_ACK == 0) {
|
||||||
N_UCI = O_SR + O_CSI;
|
N_UCI = O_SR + O_CSI;
|
||||||
if ((N_UCI == 0) || ((O_CSI == 0) && (sr_payload == 0))) { /* TS 38.213 9.2.4 UE procedure for reporting SR */
|
if ((N_UCI == 0) || ((O_CSI == 0) && (sr_payload == 0))) { /* TS 38.213 9.2.4 UE procedure for reporting SR */
|
||||||
NR_TST_PHY_PRINTF("PUCCH No feedback AbsSubframe %d.%d \n", frame_tx%1024, nr_slot_tx);
|
NR_TST_PHY_PRINTF("PUCCH No feedback AbsSubframe %d.%d \n", frame_tx%1024, nr_slot_tx);
|
||||||
LOG_D(PHY,"PUCCH No feedback AbsSubframe %d.%d \n", frame_tx%1024, nr_slot_tx);
|
LOG_D(PHY,"PUCCH No feedback AbsSubframe %d.%d \n", frame_tx%1024, nr_slot_tx);
|
||||||
return (FALSE);
|
return (FALSE);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
/* a resource set and a resource should be find according to payload size */
|
/* a resource set and a resource should be find according to payload size */
|
||||||
pucch_resource_set = find_pucch_resource_set( mac, gNB_id, N_UCI);
|
pucch_resource_set = find_pucch_resource_set( mac, gNB_id, N_UCI);
|
||||||
if (pucch_resource_set != MAX_NB_OF_PUCCH_RESOURCE_SETS) {
|
if (pucch_resource_set != MAX_NB_OF_PUCCH_RESOURCE_SETS) {
|
||||||
pucch_resource_indicator = 0;
|
pucch_resource_indicator = 0;
|
||||||
|
/* get the first resource of the set */
|
||||||
pucch_resource_id = mac->ULbwp[bwp_id-1]->bwp_Dedicated->pucch_Config->choice.setup->resourceSetToAddModList->list.array[pucch_resource_set]->resourceList.list.array[pucch_resource_indicator][0]; /* get the first resource of the set */
|
pucch_resource_id = mac->ULbwp[bwp_id-1]->bwp_Dedicated->pucch_Config->choice.setup->resourceSetToAddModList->list.array[pucch_resource_set]->resourceList.list.array[pucch_resource_indicator][0]; /* get the first resource of the set */
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@@ -510,7 +511,7 @@ bool pucch_procedures_ue_nr(PHY_VARS_NR_UE *ue, uint8_t gNB_id, UE_nr_rxtx_proc_
|
|||||||
O_CSI = 0;
|
O_CSI = 0;
|
||||||
csi_payload = 0;
|
csi_payload = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (O_CSI == 0) {
|
if (O_CSI == 0) {
|
||||||
/* only SR has to be send */
|
/* only SR has to be send */
|
||||||
/* in this case there is no DCI related to PUCCH parameters so pucch resource should be get from sr configuration */
|
/* in this case there is no DCI related to PUCCH parameters so pucch resource should be get from sr configuration */
|
||||||
@@ -528,7 +529,7 @@ bool pucch_procedures_ue_nr(PHY_VARS_NR_UE *ue, uint8_t gNB_id, UE_nr_rxtx_proc_
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
N_UCI = O_SR + O_ACK + O_CSI;
|
N_UCI = O_SR + O_ACK + O_CSI;
|
||||||
if (N_UCI ==0) return(TRUE);
|
if (N_UCI ==0) return(TRUE);
|
||||||
|
|
||||||
/* Part - III */
|
/* Part - III */
|
||||||
@@ -680,7 +681,6 @@ bool pucch_procedures_ue_nr(PHY_VARS_NR_UE *ue, uint8_t gNB_id, UE_nr_rxtx_proc_
|
|||||||
int O_CRC = 0;
|
int O_CRC = 0;
|
||||||
|
|
||||||
nb_symbols = nb_symbols_total; /* by default, it can be reduced due to symbols reserved for dmrs */
|
nb_symbols = nb_symbols_total; /* by default, it can be reduced due to symbols reserved for dmrs */
|
||||||
pucch_resource = format>1 ? mac->ULbwp[bwp_id-1]->bwp_Dedicated->pucch_Config->choice.setup->resourceToAddModList->list.array[pucch_resource_id] : 0;
|
|
||||||
|
|
||||||
switch(format) {
|
switch(format) {
|
||||||
case pucch_format0_nr:
|
case pucch_format0_nr:
|
||||||
@@ -867,18 +867,18 @@ bool pucch_procedures_ue_nr(PHY_VARS_NR_UE *ue, uint8_t gNB_id, UE_nr_rxtx_proc_
|
|||||||
mac->scc_SIB->uplinkConfigCommon->initialUplinkBWP.pucch_ConfigCommon->choice.setup->hoppingId[0]:
|
mac->scc_SIB->uplinkConfigCommon->initialUplinkBWP.pucch_ConfigCommon->choice.setup->hoppingId[0]:
|
||||||
mac->physCellId);
|
mac->physCellId);
|
||||||
nr_generate_pucch0(ue,ue->common_vars.txdataF,
|
nr_generate_pucch0(ue,ue->common_vars.txdataF,
|
||||||
&ue->frame_parms,
|
&ue->frame_parms,
|
||||||
pucch_GroupHopping,
|
pucch_GroupHopping,
|
||||||
hoppingId,
|
hoppingId,
|
||||||
tx_amp,
|
tx_amp,
|
||||||
nr_slot_tx,
|
nr_slot_tx,
|
||||||
(uint8_t)m_0,
|
(uint8_t)m_0,
|
||||||
(uint8_t)m_CS,
|
(uint8_t)m_CS,
|
||||||
nb_symbols_total,
|
nb_symbols_total,
|
||||||
starting_symbol_index,
|
starting_symbol_index,
|
||||||
startingPRB,
|
startingPRB,
|
||||||
secondHopPRB
|
secondHopPRB
|
||||||
);
|
);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case pucch_format1_nr:
|
case pucch_format1_nr:
|
||||||
@@ -1072,8 +1072,8 @@ 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->cg != NULL &&
|
if (mac->cg != NULL &&
|
||||||
mac->cg->physicalCellGroupConfig != NULL &&
|
mac->cg->physicalCellGroupConfig != NULL &&
|
||||||
mac->cg->physicalCellGroupConfig->harq_ACK_SpatialBundlingPUCCH != NULL) {
|
mac->cg->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;
|
||||||
@@ -1179,7 +1179,7 @@ boolean_t select_pucch_resource(PHY_VARS_NR_UE *ue, NR_UE_MAC_INST_t *mac, uint8
|
|||||||
int current_resource_id = MAX_NB_OF_PUCCH_RESOURCES;
|
int current_resource_id = MAX_NB_OF_PUCCH_RESOURCES;
|
||||||
pucch_format_nr_t format_pucch;
|
pucch_format_nr_t format_pucch;
|
||||||
int ready_pucch_resource_id = FALSE; /* in the case that it is already given */
|
int ready_pucch_resource_id = FALSE; /* in the case that it is already given */
|
||||||
NR_PUCCH_Resource_t *pucch_resource;
|
NR_PUCCH_Resource_t *pucch_resource = NULL;
|
||||||
NR_BWP_Id_t bwp_id = mac->UL_BWP_Id;
|
NR_BWP_Id_t bwp_id = mac->UL_BWP_Id;
|
||||||
|
|
||||||
/* ini values to unset */
|
/* ini values to unset */
|
||||||
@@ -1267,6 +1267,7 @@ boolean_t select_pucch_resource(PHY_VARS_NR_UE *ue, NR_UE_MAC_INST_t *mac, uint8
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (resource_set_found == TRUE) {
|
if (resource_set_found == TRUE) {
|
||||||
|
|
||||||
if (pucch_resource_indicator < MAX_PUCCH_RESOURCE_INDICATOR) {
|
if (pucch_resource_indicator < MAX_PUCCH_RESOURCE_INDICATOR) {
|
||||||
// Verify that the value of pucch_resource_indicator is valid
|
// Verify that the value of pucch_resource_indicator is valid
|
||||||
struct NR_PUCCH_Config__resourceSetToAddModList *resourceSetToAddModList = NULL;
|
struct NR_PUCCH_Config__resourceSetToAddModList *resourceSetToAddModList = NULL;
|
||||||
@@ -1275,9 +1276,8 @@ boolean_t select_pucch_resource(PHY_VARS_NR_UE *ue, NR_UE_MAC_INST_t *mac, uint8
|
|||||||
AssertFatal(mac->ULbwp[bwp_id-1]->bwp_Dedicated->pucch_Config->choice.setup->resourceSetToAddModList!=NULL,"mac->ULbwp[bwp_id-1]->bwp_Dedicated->pucch_Config->choice.setup->resourceSetToAddModList is null\n");
|
AssertFatal(mac->ULbwp[bwp_id-1]->bwp_Dedicated->pucch_Config->choice.setup->resourceSetToAddModList!=NULL,"mac->ULbwp[bwp_id-1]->bwp_Dedicated->pucch_Config->choice.setup->resourceSetToAddModList is null\n");
|
||||||
resourceSetToAddModList = mac->ULbwp[bwp_id-1]->bwp_Dedicated->pucch_Config->choice.setup->resourceSetToAddModList;
|
resourceSetToAddModList = mac->ULbwp[bwp_id-1]->bwp_Dedicated->pucch_Config->choice.setup->resourceSetToAddModList;
|
||||||
resourceToAddModList = mac->ULbwp[bwp_id-1]->bwp_Dedicated->pucch_Config->choice.setup->resourceToAddModList;
|
resourceToAddModList = mac->ULbwp[bwp_id-1]->bwp_Dedicated->pucch_Config->choice.setup->resourceToAddModList;
|
||||||
}
|
} else if (bwp_id == 0 && mac->cg->spCellConfig->spCellConfigDedicated->uplinkConfig->initialUplinkBWP->pucch_Config->choice.setup->resourceSetToAddModList!=NULL) {
|
||||||
else if (bwp_id == 0 && mac->cg->spCellConfig->spCellConfigDedicated->uplinkConfig->initialUplinkBWP->pucch_Config->choice.setup->resourceSetToAddModList!=NULL) {
|
resourceSetToAddModList = mac->cg->spCellConfig->spCellConfigDedicated->uplinkConfig->initialUplinkBWP->pucch_Config->choice.setup->resourceSetToAddModList;
|
||||||
resourceSetToAddModList = mac->cg->spCellConfig->spCellConfigDedicated->uplinkConfig->initialUplinkBWP->pucch_Config->choice.setup->resourceSetToAddModList;
|
|
||||||
resourceToAddModList = mac->cg->spCellConfig->spCellConfigDedicated->uplinkConfig->initialUplinkBWP->pucch_Config->choice.setup->resourceToAddModList;
|
resourceToAddModList = mac->cg->spCellConfig->spCellConfigDedicated->uplinkConfig->initialUplinkBWP->pucch_Config->choice.setup->resourceToAddModList;
|
||||||
}
|
}
|
||||||
if (resourceSetToAddModList->list.array[pucch_resource_set_id]->resourceList.list.count <= pucch_resource_indicator)
|
if (resourceSetToAddModList->list.array[pucch_resource_set_id]->resourceList.list.count <= pucch_resource_indicator)
|
||||||
@@ -1318,11 +1318,14 @@ boolean_t select_pucch_resource(PHY_VARS_NR_UE *ue, NR_UE_MAC_INST_t *mac, uint8
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pucch_resource = resourceToAddModList->list.array[current_resource_id];
|
uint8_t pucch_resource_count = resourceToAddModList->list.count;
|
||||||
|
for (uint8_t i=0; i<pucch_resource_count; i++) {
|
||||||
|
if (resourceToAddModList->list.array[i]->pucch_ResourceId == current_resource_id)
|
||||||
|
pucch_resource = resourceToAddModList->list.array[i];
|
||||||
|
}
|
||||||
if (pucch_resource != NULL) {
|
if (pucch_resource != NULL) {
|
||||||
format_pucch = resourceToAddModList->list.array[current_resource_id]->format.present;
|
format_pucch = pucch_resource->format.present;
|
||||||
nb_symbols_for_tx = get_nb_symbols_pucch(pucch_resource, format_pucch);
|
nb_symbols_for_tx = get_nb_symbols_pucch(pucch_resource, format_pucch);
|
||||||
|
|
||||||
if (check_pucch_format(mac, gNB_id, format_pucch, nb_symbols_for_tx, uci_size) == TRUE) {
|
if (check_pucch_format(mac, gNB_id, format_pucch, nb_symbols_for_tx, uci_size) == TRUE) {
|
||||||
*resource_set_id = pucch_resource_set_id;
|
*resource_set_id = pucch_resource_set_id;
|
||||||
*resource_id = current_resource_id;
|
*resource_id = current_resource_id;
|
||||||
|
|||||||
Reference in New Issue
Block a user