added for assoc period more than 1
This commit is contained in:
@@ -1131,7 +1131,8 @@ int get_nr_prach_info_from_index(uint8_t index,
|
||||
uint8_t *N_t_slot,
|
||||
uint8_t *N_dur,
|
||||
uint16_t *RA_sfn_index,
|
||||
uint8_t *N_RA_slot) {
|
||||
uint8_t *N_RA_slot,
|
||||
uint8_t *config_period) {
|
||||
|
||||
int x,y;
|
||||
int64_t s_map;
|
||||
@@ -1161,6 +1162,7 @@ int get_nr_prach_info_from_index(uint8_t index,
|
||||
return 0; // no prach in even slots @ 120kHz for 1 prach per 60khz slot
|
||||
}
|
||||
if (start_symbol != NULL && N_t_slot != NULL && N_dur != NULL && format != NULL){
|
||||
*config_period = x;
|
||||
*start_symbol = table_6_3_3_2_4_prachConfig_Index[index][6];
|
||||
*N_t_slot = table_6_3_3_2_4_prachConfig_Index[index][8];
|
||||
*N_dur = table_6_3_3_2_4_prachConfig_Index[index][9];
|
||||
@@ -1209,6 +1211,7 @@ int get_nr_prach_info_from_index(uint8_t index,
|
||||
return 0; // no prach in even slots @ 30kHz for 1 prach per subframe
|
||||
}
|
||||
if (start_symbol != NULL && N_t_slot != NULL && N_dur != NULL && format != NULL){
|
||||
*config_period = x;
|
||||
*start_symbol = table_6_3_3_2_3_prachConfig_Index[index][5];
|
||||
*N_t_slot = table_6_3_3_2_3_prachConfig_Index[index][7];
|
||||
*N_dur = table_6_3_3_2_3_prachConfig_Index[index][8];
|
||||
|
||||
@@ -100,7 +100,8 @@ int get_nr_prach_info_from_index(uint8_t index,
|
||||
uint8_t *N_t_slot,
|
||||
uint8_t *N_dur,
|
||||
uint16_t *RA_sfn_index,
|
||||
uint8_t *N_RA_slot);
|
||||
uint8_t *N_RA_slot,
|
||||
uint8_t *config_period);
|
||||
|
||||
int get_nr_prach_occasion_info_from_index(uint8_t index,
|
||||
uint32_t pointa,
|
||||
|
||||
@@ -73,6 +73,7 @@ int16_t ssb_index_from_prach(module_id_t module_idP,
|
||||
uint16_t start_symbol_index = 0;
|
||||
uint8_t mu,N_dur,N_t_slot,start_symbol = 0, temp_start_symbol = 0, N_RA_slot;
|
||||
uint16_t format,RA_sfn_index = -1;
|
||||
uint8_t config_period = 0;
|
||||
uint16_t prach_occasion_id = -1;
|
||||
uint8_t num_active_ssb = cc->num_active_ssb;
|
||||
|
||||
@@ -92,7 +93,8 @@ int16_t ssb_index_from_prach(module_id_t module_idP,
|
||||
&N_t_slot,
|
||||
&N_dur,
|
||||
&RA_sfn_index,
|
||||
&N_RA_slot);
|
||||
&N_RA_slot,
|
||||
&config_period);
|
||||
uint8_t index = 0,slot_index = 0;
|
||||
for (slot_index = 0;slot_index < N_RA_slot; slot_index++) {
|
||||
if (N_RA_slot <= 1) { //1 PRACH slot in a subframe
|
||||
@@ -113,7 +115,7 @@ int16_t ssb_index_from_prach(module_id_t module_idP,
|
||||
}
|
||||
|
||||
// prach_occasion_id = subframe_index * N_t_slot * N_RA_slot * fdm + N_RA_slot_index * N_t_slot * fdm + freq_index + fdm * start_symbol_index;
|
||||
prach_occasion_id = (RA_sfn_index + slot_index) * N_t_slot * fdm + start_symbol_index * fdm + freq_index;
|
||||
prach_occasion_id = (((frameP % (cc->max_association_period * config_period))/config_period)*cc->total_prach_occasions_per_config_period) + (RA_sfn_index + slot_index) * N_t_slot * fdm + start_symbol_index * fdm + freq_index;
|
||||
//one RO is shared by one or more SSB
|
||||
if(num_ssb_per_RO <= 1 )
|
||||
index = (int) (prach_occasion_id / (int)(1/num_ssb_per_RO)) % num_active_ssb;
|
||||
@@ -173,13 +175,15 @@ void find_SSB_and_RO_available(module_id_t module_idP) {
|
||||
}
|
||||
}
|
||||
|
||||
for(int i = 0; (1 << i) < max_association_period;i++) {
|
||||
for(int i = 1; (1 << (i-1)) <= max_association_period;i++) {
|
||||
if(total_RA_occasions >= (int) (num_active_ssb/num_ssb_per_RO)) {
|
||||
repetition = (uint16_t)((total_RA_occasions * num_ssb_per_RO )/num_active_ssb);
|
||||
break;
|
||||
repetition = (uint16_t)((total_RA_occasions * num_ssb_per_RO )/num_active_ssb);
|
||||
break;
|
||||
}
|
||||
else {
|
||||
total_RA_occasions = total_RA_occasions * i;
|
||||
cc->max_association_period = i;
|
||||
}
|
||||
else
|
||||
total_RA_occasions = total_RA_occasions * i;
|
||||
}
|
||||
|
||||
unused_RA_occasion = total_RA_occasions - (int)((num_active_ssb * repetition)/num_ssb_per_RO);
|
||||
@@ -201,6 +205,7 @@ void schedule_nr_prach(module_id_t module_idP, frame_t frameP, sub_frame_t slotP
|
||||
uint8_t config_index = scc->uplinkConfigCommon->initialUplinkBWP->rach_ConfigCommon->choice.setup->rach_ConfigGeneric.prach_ConfigurationIndex;
|
||||
uint8_t mu,N_dur,N_t_slot,start_symbol = 0,temp_start_symbol = 0,N_RA_slot;
|
||||
uint16_t RA_sfn_index = -1;
|
||||
uint8_t config_period = 0;
|
||||
uint16_t format;
|
||||
int slot_index = 0;
|
||||
uint16_t prach_occasion_id = -1;
|
||||
@@ -223,7 +228,8 @@ void schedule_nr_prach(module_id_t module_idP, frame_t frameP, sub_frame_t slotP
|
||||
&N_t_slot,
|
||||
&N_dur,
|
||||
&RA_sfn_index,
|
||||
&N_RA_slot) ) {
|
||||
&N_RA_slot,
|
||||
&config_period) ) {
|
||||
uint16_t format0 = format&0xff; // first column of format from table
|
||||
uint16_t format1 = (format>>8)&0xff; // second column of format from table
|
||||
|
||||
@@ -251,7 +257,7 @@ void schedule_nr_prach(module_id_t module_idP, frame_t frameP, sub_frame_t slotP
|
||||
UL_tti_req->Slot = slotP;
|
||||
for (int n=0; n < fdm; n++) { // one structure per frequency domain occasion
|
||||
|
||||
prach_occasion_id = (RA_sfn_index + slot_index) * N_t_slot * fdm + index * fdm + n;
|
||||
prach_occasion_id = (((frameP % (cc->max_association_period * config_period))/config_period)*cc->total_prach_occasions_per_config_period) + (RA_sfn_index + slot_index) * N_t_slot * fdm + index * fdm + n;
|
||||
if(prach_occasion_id < cc->total_prach_occasions){
|
||||
|
||||
UL_tti_req->pdus_list[UL_tti_req->n_pdus].pdu_type = NFAPI_NR_UL_CONFIG_PRACH_PDU_TYPE;
|
||||
|
||||
@@ -181,8 +181,12 @@ typedef struct {
|
||||
uint8_t num_sf_allocation_pattern;
|
||||
///Number of active SSBs
|
||||
uint8_t num_active_ssb;
|
||||
//Total available prach occasions per configuration period
|
||||
uint32_t total_prach_occasions_per_config_period;
|
||||
//Total available prach occasions
|
||||
uint32_t total_prach_occasions;
|
||||
//Max Association period
|
||||
uint8_t max_association_period;
|
||||
} NR_COMMON_channels_t;
|
||||
|
||||
|
||||
|
||||
@@ -157,7 +157,7 @@ void fill_default_secondaryCellGroup(NR_ServingCellConfigCommon_t *servingcellco
|
||||
secondaryCellGroup->spCellConfig->reconfigurationWithSync->rach_ConfigDedicated->choice.uplink->cfra->resources.choice.ssb = calloc(1,sizeof(struct NR_CFRA__resources__ssb));
|
||||
secondaryCellGroup->spCellConfig->reconfigurationWithSync->rach_ConfigDedicated->choice.uplink->cfra->resources.choice.ssb->ra_ssb_OccasionMaskIndex = 0;
|
||||
struct NR_CFRA_SSB_Resource *ssbElem[8];
|
||||
for(int i = 0; i < 8; i++) {
|
||||
for(int i = 0; i < 1; i++) {
|
||||
ssbElem[i] = calloc(1,sizeof(struct NR_CFRA_SSB_Resource));
|
||||
ssbElem[i]->ssb = i;
|
||||
ssbElem[i]->ra_PreambleIndex = 63;
|
||||
|
||||
Reference in New Issue
Block a user