Commit aa096ee8 authored by francescomani's avatar francescomani Committed by Laurent THOMAS

MR2526 fix for find_pucch_resource_set

parent dd5ca817
...@@ -380,8 +380,6 @@ void set_harq_status(NR_UE_MAC_INST_t *mac, ...@@ -380,8 +380,6 @@ void set_harq_status(NR_UE_MAC_INST_t *mac,
bool get_downlink_ack(NR_UE_MAC_INST_t *mac, frame_t frame, int slot, PUCCH_sched_t *pucch); bool get_downlink_ack(NR_UE_MAC_INST_t *mac, frame_t frame, int slot, PUCCH_sched_t *pucch);
int find_pucch_resource_set(NR_UE_MAC_INST_t *mac, int uci_size);
void multiplex_pucch_resource(NR_UE_MAC_INST_t *mac, PUCCH_sched_t *pucch, int num_res); void multiplex_pucch_resource(NR_UE_MAC_INST_t *mac, PUCCH_sched_t *pucch, int num_res);
int16_t get_pucch_tx_power_ue(NR_UE_MAC_INST_t *mac, int16_t get_pucch_tx_power_ue(NR_UE_MAC_INST_t *mac,
......
...@@ -1705,55 +1705,38 @@ int get_deltatf(uint16_t nb_of_prbs, ...@@ -1705,55 +1705,38 @@ int get_deltatf(uint16_t nb_of_prbs,
return DELTA_TF; return DELTA_TF;
} }
/******************************************************************* static int find_pucch_resource_set(NR_PUCCH_Config_t *pucch_Config, int size)
*
* NAME : find_pucch_resource_set
*
* PARAMETERS : ue context
* gNB_id identifier
*
*
* RETURN : harq process identifier
*
* DESCRIPTION : return tx harq process identifier for given transmission slot
* YS 38.213 9.2.2 PUCCH Formats for UCI transmission
*
*********************************************************************/
int find_pucch_resource_set(NR_UE_MAC_INST_t *mac, int size)
{ {
int pucch_resource_set_id = 0; // Procedure described in 38.213 Section 9.2.1
NR_PUCCH_Config_t *pucch_Config = mac->current_UL_BWP->pucch_Config;
AssertFatal(pucch_Config && pucch_Config->resourceSetToAddModList, "pucch-Config NULL, this function shouldn't have been called\n");
//long *pucch_max_pl_bits = NULL; AssertFatal(size <= 1706, "O_UCI cannot be larger that 1706 bits\n");
/* from TS 38.331 field maxPayloadMinus1 // a first set of PUCCH resources with pucch-ResourceSetId = 0 if O UCI ≤ 2 including 1 or 2 HARQ-ACK information bits
-- Maximum number of payload bits minus 1 that the UE may transmit using this PUCCH resource set. In a PUCCH occurrence, the UE if (size <= 2)
-- chooses the first of its PUCCH-ResourceSet which supports the number of bits that the UE wants to transmit. return 0;
-- The field is not present in the first set (Set0) since the maximum Size of Set0 is specified to be 3 bit.
-- The field is not present in the last configured set since the UE derives its maximum payload size as specified in 38.213. const int n_set = pucch_Config->resourceSetToAddModList->list.count;
-- This field can take integer values that are multiples of 4. Corresponds to L1 parameter 'N_2' or 'N_3' (see 38.213, section 9.2)
*/ int N2 = 1706;
/* look for the first resource set which supports size number of bits for payload */ int N3 = 1706;
while (pucch_resource_set_id < MAX_NB_OF_PUCCH_RESOURCE_SETS) { for (int i = 0; i < n_set; i++) {
if (pucch_Config && pucch_Config->resourceSetToAddModList && pucch_Config->resourceSetToAddModList->list.array[pucch_resource_set_id] != NULL) { NR_PUCCH_ResourceSet_t *pucchresset = pucch_Config->resourceSetToAddModList->list.array[i];
// PUCCH with format0 can be up to 3 bits (2 ack/nacks + 1 sr is 3 max bits) NR_PUCCH_ResourceId_t id = pucchresset->pucch_ResourceSetId;
if (size <= 3) { if (id == 1)
pucch_resource_set_id = 0; N2 = pucchresset->maxPayloadSize ? *pucchresset->maxPayloadSize : 1706;
return (pucch_resource_set_id); if (id == 2)
break; N3 = pucchresset->maxPayloadSize ? *pucchresset->maxPayloadSize : 1706;
} else {
pucch_resource_set_id = 1;
return (pucch_resource_set_id);
break;
}
}
pucch_resource_set_id++;
} }
pucch_resource_set_id = MAX_NB_OF_PUCCH_RESOURCE_SETS; // a second set of PUCCH resources with pucch-ResourceSetId = 1, if provided by higher layers, if 2 < O UCI ≤ N 2
if (size <= N2)
return (pucch_resource_set_id); return 1;
// a third set of PUCCH resources with pucch-ResourceSetId = 2, if provided by higher layers, if N 2 < O UCI ≤ N 3
if (size <= N3)
return 2;
// a fourth set of PUCCH resources with pucch-ResourceSetId = 3, if provided by higher layers, if N 3 < O UCI ≤ 1706
return 3;
} }
NR_PUCCH_Resource_t *find_pucch_resource_from_list(struct NR_PUCCH_Config__resourceToAddModList *resourceToAddModList, NR_PUCCH_Resource_t *find_pucch_resource_from_list(struct NR_PUCCH_Config__resourceToAddModList *resourceToAddModList,
...@@ -2421,7 +2404,7 @@ bool get_downlink_ack(NR_UE_MAC_INST_t *mac, frame_t frame, int slot, PUCCH_sche ...@@ -2421,7 +2404,7 @@ bool get_downlink_ack(NR_UE_MAC_INST_t *mac, frame_t frame, int slot, PUCCH_sche
|| pucch_Config->resourceSetToAddModList->list.array[0] == NULL) || pucch_Config->resourceSetToAddModList->list.array[0] == NULL)
configure_initial_pucch(pucch, res_ind); configure_initial_pucch(pucch, res_ind);
else { else {
int resource_set_id = find_pucch_resource_set(mac, O_ACK); int resource_set_id = find_pucch_resource_set(pucch_Config, O_ACK);
int n_list = pucch_Config->resourceSetToAddModList->list.count; int n_list = pucch_Config->resourceSetToAddModList->list.count;
AssertFatal(resource_set_id < n_list, "Invalid PUCCH resource set id %d\n", resource_set_id); AssertFatal(resource_set_id < n_list, "Invalid PUCCH resource set id %d\n", resource_set_id);
n_list = pucch_Config->resourceSetToAddModList->list.array[resource_set_id]->resourceList.list.count; n_list = pucch_Config->resourceSetToAddModList->list.array[resource_set_id]->resourceList.list.count;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment