Set flag to generate PRACH only on PRACH slot
This commit is contained in:
@@ -1009,8 +1009,6 @@ typedef struct {
|
||||
int dlsch_mtch_trials[MAX_MBSFN_AREA][NUMBER_OF_CONNECTED_eNB_MAX];
|
||||
int current_dlsch_cqi[NUMBER_OF_CONNECTED_eNB_MAX];
|
||||
unsigned char first_run_timing_advance[NUMBER_OF_CONNECTED_eNB_MAX];
|
||||
uint8_t generate_prach;
|
||||
uint8_t generate_nr_prach;
|
||||
uint8_t prach_cnt;
|
||||
uint8_t prach_PreambleIndex;
|
||||
// uint8_t prach_timer;
|
||||
|
||||
@@ -246,6 +246,8 @@ typedef struct {
|
||||
uint16_t ra_RNTI;
|
||||
/// Pointer to Msg3 payload for UL-grant
|
||||
uint8_t *Msg3;
|
||||
/// Flag for the Msg1 generation
|
||||
uint8_t generate_nr_prach;
|
||||
} NR_PRACH_RESOURCES_t;
|
||||
|
||||
typedef struct NR_DL_FRAME_PARMS NR_DL_FRAME_PARMS;
|
||||
|
||||
@@ -2270,7 +2270,7 @@ void phy_procedures_nrUE_TX(PHY_VARS_NR_UE *ue,
|
||||
nr_ue_prach_procedures(ue, proc, gNB_id, mode);
|
||||
}
|
||||
else {
|
||||
ue->generate_nr_prach = 0;
|
||||
ue->prach_resources[gNB_id]->generate_nr_prach = 0;
|
||||
}
|
||||
|
||||
LOG_I(PHY,"****** end TX-Chain for AbsSubframe %d.%d ******\n", frame_tx, slot_tx);
|
||||
@@ -4503,12 +4503,12 @@ void nr_ue_prach_procedures(PHY_VARS_NR_UE *ue, UE_nr_rxtx_proc_t *proc, uint8_t
|
||||
|
||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_TX_PRACH, VCD_FUNCTION_IN);
|
||||
|
||||
ue->generate_nr_prach = 0;
|
||||
if (ue->mac_enabled == 0){
|
||||
// prach_resources->ra_PreambleIndex = preamble_tx;
|
||||
prach_resources->ra_TDD_map_index = 0;
|
||||
prach_resources->ra_PREAMBLE_RECEIVED_TARGET_POWER = 10;
|
||||
prach_resources->ra_RNTI = 0x1234;
|
||||
prach_resources->generate_nr_prach = 1;
|
||||
} else {
|
||||
// ask L2 for RACH transport
|
||||
if ((runmode != rx_calib_ue) && (runmode != rx_calib_ue_med) && (runmode != rx_calib_ue_byp) && (runmode != no_L2_connect) ) {
|
||||
@@ -4523,9 +4523,8 @@ void nr_ue_prach_procedures(PHY_VARS_NR_UE *ue, UE_nr_rxtx_proc_t *proc, uint8_t
|
||||
}
|
||||
}
|
||||
|
||||
if (ue->prach_resources[gNB_id] != NULL) {
|
||||
if (ue->prach_resources[gNB_id] != NULL && prach_resources->generate_nr_prach == 1) {
|
||||
|
||||
ue->generate_nr_prach = 1;
|
||||
ue->prach_cnt = 0;
|
||||
pathloss = get_nr_PL(mod_id, ue->CC_id, gNB_id);
|
||||
LOG_D(PHY,"runmode %d\n",runmode);
|
||||
@@ -4534,7 +4533,7 @@ void nr_ue_prach_procedures(PHY_VARS_NR_UE *ue, UE_nr_rxtx_proc_t *proc, uint8_t
|
||||
ue->tx_power_dBm[nr_tti_tx] = prach_resources->ra_PREAMBLE_RECEIVED_TARGET_POWER + pathloss;
|
||||
}
|
||||
|
||||
LOG_I(PHY,"[UE %d][RAPROC] Frame %d, nr_tti_rx %d : Generating PRACH, preamble %d, PL %d, P0_PRACH %d, TARGET_RECEIVED_POWER %d dBm, RA-RNTI %d\n",
|
||||
LOG_I(PHY,"[UE %d][RAPROC] Frame %d, nr_tti_tx %d : Generating PRACH, preamble %d, PL %d, P0_PRACH %d, TARGET_RECEIVED_POWER %d dBm, RA-RNTI %d\n",
|
||||
ue->Mod_id,
|
||||
frame_tx,
|
||||
nr_tti_tx,
|
||||
@@ -4555,7 +4554,7 @@ void nr_ue_prach_procedures(PHY_VARS_NR_UE *ue, UE_nr_rxtx_proc_t *proc, uint8_t
|
||||
#endif
|
||||
|
||||
if ((runmode == calib_prach_tx) && (((proc->frame_tx&0xfffe)%100)==0))
|
||||
LOG_D(PHY,"[UE %d][RAPROC] Frame %d, nr_tti_rx %d : PRACH TX power %d dBm, amp %d\n", ue->Mod_id,
|
||||
LOG_D(PHY,"[UE %d][RAPROC] Frame %d, nr_tti_tx %d : PRACH TX power %d dBm, amp %d (%d)\n", ue->Mod_id,
|
||||
proc->frame_rx,
|
||||
proc->nr_tti_tx,
|
||||
ue->tx_power_dBm[nr_tti_tx],
|
||||
@@ -4577,7 +4576,7 @@ void nr_ue_prach_procedures(PHY_VARS_NR_UE *ue, UE_nr_rxtx_proc_t *proc, uint8_t
|
||||
if (ue->mac_enabled == 1)
|
||||
nr_Msg1_transmitted(ue->Mod_id, ue->CC_id, frame_tx, gNB_id);
|
||||
|
||||
LOG_I(PHY,"[UE %d][RAPROC] Frame %d, nr_tti_rx %d: Generating PRACH (gNB %d) preamble index %d for UL, TX power %d dBm (PL %d dB) \n",
|
||||
LOG_I(PHY,"[UE %d][RAPROC] Frame %d, nr_tti_tx %d: Generating PRACH (gNB %d) preamble index %d for UL, TX power %d dBm (PL %d dB) \n",
|
||||
ue->Mod_id,
|
||||
frame_tx,
|
||||
nr_tti_tx,
|
||||
@@ -4591,12 +4590,12 @@ void nr_ue_prach_procedures(PHY_VARS_NR_UE *ue, UE_nr_rxtx_proc_t *proc, uint8_t
|
||||
if (runmode == calib_prach_tx)
|
||||
ue->prach_resources[gNB_id] = NULL;
|
||||
|
||||
LOG_D(PHY,"[UE %d] frame %d nr_tti_rx %d : generate_nr_prach %d, prach_cnt %d\n", ue->Mod_id,frame_tx,nr_tti_tx, ue->generate_nr_prach, ue->prach_cnt);
|
||||
LOG_D(PHY,"[UE %d] frame %d nr_tti_tx %d : generate_nr_prach %d, prach_cnt %d\n", ue->Mod_id, frame_tx, nr_tti_tx, ue->prach_resources[gNB_id]->generate_nr_prach, ue->prach_cnt);
|
||||
|
||||
ue->prach_cnt++;
|
||||
|
||||
if (ue->prach_cnt == 3)
|
||||
ue->generate_nr_prach = 0;
|
||||
prach_resources->generate_nr_prach = 0;
|
||||
|
||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_TX_PRACH, VCD_FUNCTION_OUT);
|
||||
}
|
||||
|
||||
@@ -906,12 +906,23 @@ int get_nr_prach_info_from_index(uint8_t index,
|
||||
if ( (table_6_3_3_2_4_prachConfig_Index[index][7] == 1) && (slot%2 == 0) )
|
||||
return 0; // no prach in even slots @ 120kHz for 1 prach per 60khz slot
|
||||
}
|
||||
*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];
|
||||
if (table_6_3_3_2_4_prachConfig_Index[index][1] != -1)
|
||||
format2 = (uint8_t) table_6_3_3_2_4_prachConfig_Index[index][1];
|
||||
*format = ((uint8_t) table_6_3_3_2_4_prachConfig_Index[index][0]) | (format2<<8);
|
||||
if (start_symbol != NULL && N_t_slot != NULL && N_dur != NULL && format != NULL){
|
||||
*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];
|
||||
if (table_6_3_3_2_4_prachConfig_Index[index][1] != -1)
|
||||
format2 = (uint8_t) table_6_3_3_2_4_prachConfig_Index[index][1];
|
||||
*format = ((uint8_t) table_6_3_3_2_4_prachConfig_Index[index][0]) | (format2<<8);
|
||||
LOG_D(MAC,"Frame %d slot %d: Getting PRACH info from index %d absoluteFrequencyPointA %u mu %u frame_type %u start_symbol %u N_t_slot %u N_dur %u \n", frame,
|
||||
slot,
|
||||
index,
|
||||
pointa,
|
||||
mu,
|
||||
unpaired,
|
||||
*start_symbol,
|
||||
*N_t_slot,
|
||||
*N_dur);
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
@@ -933,12 +944,23 @@ int get_nr_prach_info_from_index(uint8_t index,
|
||||
if ( (table_6_3_3_2_3_prachConfig_Index[index][6] == 1) && (slot%2 == 0) )
|
||||
return 0; // no prach in even slots @ 30kHz for 1 prach per subframe
|
||||
}
|
||||
*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];
|
||||
if (table_6_3_3_2_3_prachConfig_Index[index][1] != -1)
|
||||
format2 = (uint8_t) table_6_3_3_2_3_prachConfig_Index[index][1];
|
||||
*format = ((uint8_t) table_6_3_3_2_3_prachConfig_Index[index][0]) | (format2<<8);
|
||||
if (start_symbol != NULL && N_t_slot != NULL && N_dur != NULL && format != NULL){
|
||||
*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];
|
||||
if (table_6_3_3_2_3_prachConfig_Index[index][1] != -1)
|
||||
format2 = (uint8_t) table_6_3_3_2_3_prachConfig_Index[index][1];
|
||||
*format = ((uint8_t) table_6_3_3_2_3_prachConfig_Index[index][0]) | (format2<<8);
|
||||
LOG_D(MAC,"Frame %d slot %d: Getting PRACH info from index %d absoluteFrequencyPointA %u mu %u frame_type %u start_symbol %u N_t_slot %u N_dur %u \n", frame,
|
||||
slot,
|
||||
index,
|
||||
pointa,
|
||||
mu,
|
||||
unpaired,
|
||||
*start_symbol,
|
||||
*N_t_slot,
|
||||
*N_dur);
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
@@ -958,12 +980,23 @@ int get_nr_prach_info_from_index(uint8_t index,
|
||||
if ( (table_6_3_3_2_2_prachConfig_Index[index][6] == 1) && (slot%2 == 0) )
|
||||
return 0; // no prach in even slots @ 30kHz for 1 prach per subframe
|
||||
}
|
||||
*start_symbol = table_6_3_3_2_2_prachConfig_Index[index][5];
|
||||
*N_t_slot = table_6_3_3_2_2_prachConfig_Index[index][7];
|
||||
*N_dur = table_6_3_3_2_2_prachConfig_Index[index][8];
|
||||
if (table_6_3_3_2_2_prachConfig_Index[index][1] != -1)
|
||||
format2 = (uint8_t) table_6_3_3_2_2_prachConfig_Index[index][1];
|
||||
*format = ((uint8_t) table_6_3_3_2_2_prachConfig_Index[index][0]) | (format2<<8);
|
||||
if (start_symbol != NULL && N_t_slot != NULL && N_dur != NULL && format != NULL){
|
||||
*start_symbol = table_6_3_3_2_2_prachConfig_Index[index][5];
|
||||
*N_t_slot = table_6_3_3_2_2_prachConfig_Index[index][7];
|
||||
*N_dur = table_6_3_3_2_2_prachConfig_Index[index][8];
|
||||
if (table_6_3_3_2_2_prachConfig_Index[index][1] != -1)
|
||||
format2 = (uint8_t) table_6_3_3_2_2_prachConfig_Index[index][1];
|
||||
*format = ((uint8_t) table_6_3_3_2_2_prachConfig_Index[index][0]) | (format2<<8);
|
||||
LOG_D(MAC,"Frame %d slot %d: Getting PRACH info from index %d absoluteFrequencyPointA %u mu %u frame_type %u start_symbol %u N_t_slot %u N_dur %u \n", frame,
|
||||
slot,
|
||||
index,
|
||||
pointa,
|
||||
mu,
|
||||
unpaired,
|
||||
*start_symbol,
|
||||
*N_t_slot,
|
||||
*N_dur);
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
@@ -1039,6 +1072,7 @@ uint8_t compute_nr_root_seq(NR_RACH_ConfigCommon_t *rach_config,
|
||||
if (NCS == 0) return nb_preambles;
|
||||
else {
|
||||
r = L_ra/NCS;
|
||||
printf(" found_sequences %u\n", (nb_preambles/r));
|
||||
return (nb_preambles/r);
|
||||
}
|
||||
}
|
||||
@@ -1076,6 +1110,7 @@ uint8_t compute_nr_root_seq(NR_RACH_ConfigCommon_t *rach_config,
|
||||
AssertFatal(1==0,"Procedure to find nb of sequences for restricted type B not implemented yet");
|
||||
}
|
||||
}
|
||||
printf(" found_sequences %u\n", found_sequences);
|
||||
return found_sequences;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -333,11 +333,15 @@ void nr_ue_get_rach(NR_PRACH_RESOURCES_t *prach_resources,
|
||||
|
||||
NR_UE_MAC_INST_t *mac = get_mac_inst(mod_id);
|
||||
uint8_t lcid = UL_SCH_LCID_CCCH_MSG3, *mac_sdus, *payload, ra_ResponseWindow;
|
||||
uint8_t config_index, mu;
|
||||
int is_nr_prach_slot;
|
||||
uint16_t size_sdu = 0;
|
||||
unsigned short post_padding;
|
||||
fapi_nr_config_request_t *cfg = &mac->phy_config.config_req;
|
||||
NR_ServingCellConfigCommon_t *scc = mac->scc;
|
||||
NR_RACH_ConfigCommon_t *setup = scc->uplinkConfigCommon->initialUplinkBWP->rach_ConfigCommon->choice.setup;
|
||||
NR_RACH_ConfigGeneric_t *rach_ConfigGeneric = &setup->rach_ConfigGeneric;
|
||||
NR_FrequencyInfoDL_t *frequencyInfoDL = scc->downlinkConfigCommon->frequencyInfoDL;
|
||||
// int32_t frame_diff = 0;
|
||||
|
||||
uint8_t sdu_lcids[NB_RB_MAX] = {0};
|
||||
@@ -350,6 +354,27 @@ void nr_ue_get_rach(NR_PRACH_RESOURCES_t *prach_resources,
|
||||
|
||||
LOG_D(MAC, "nr_ue_get_rach, RA_active value: %d", mac->RA_active);
|
||||
|
||||
config_index = rach_ConfigGeneric->prach_ConfigurationIndex;
|
||||
if (setup->msg1_SubcarrierSpacing)
|
||||
mu = *setup->msg1_SubcarrierSpacing;
|
||||
else
|
||||
mu = frequencyInfoDL->scs_SpecificCarrierList.list.array[0]->subcarrierSpacing;
|
||||
|
||||
is_nr_prach_slot = get_nr_prach_info_from_index(config_index,
|
||||
(int)frame,
|
||||
(int)nr_tti_tx,
|
||||
frequencyInfoDL->absoluteFrequencyPointA,
|
||||
mu,
|
||||
cfg->cell_config.frame_duplex_type,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL);
|
||||
if (is_nr_prach_slot)
|
||||
prach_resources->generate_nr_prach = 1;
|
||||
else
|
||||
prach_resources->generate_nr_prach = 0;
|
||||
|
||||
AssertFatal(setup != NULL, "[UE %d] FATAL nr_rach_ConfigCommon is NULL !!!\n", mod_id);
|
||||
|
||||
if (mac->RA_active == 0) {
|
||||
|
||||
Reference in New Issue
Block a user