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 dlsch_mtch_trials[MAX_MBSFN_AREA][NUMBER_OF_CONNECTED_eNB_MAX];
|
||||||
int current_dlsch_cqi[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];
|
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_cnt;
|
||||||
uint8_t prach_PreambleIndex;
|
uint8_t prach_PreambleIndex;
|
||||||
// uint8_t prach_timer;
|
// uint8_t prach_timer;
|
||||||
|
|||||||
@@ -246,6 +246,8 @@ typedef struct {
|
|||||||
uint16_t ra_RNTI;
|
uint16_t ra_RNTI;
|
||||||
/// Pointer to Msg3 payload for UL-grant
|
/// Pointer to Msg3 payload for UL-grant
|
||||||
uint8_t *Msg3;
|
uint8_t *Msg3;
|
||||||
|
/// Flag for the Msg1 generation
|
||||||
|
uint8_t generate_nr_prach;
|
||||||
} NR_PRACH_RESOURCES_t;
|
} NR_PRACH_RESOURCES_t;
|
||||||
|
|
||||||
typedef struct NR_DL_FRAME_PARMS NR_DL_FRAME_PARMS;
|
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);
|
nr_ue_prach_procedures(ue, proc, gNB_id, mode);
|
||||||
}
|
}
|
||||||
else {
|
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);
|
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);
|
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){
|
if (ue->mac_enabled == 0){
|
||||||
// prach_resources->ra_PreambleIndex = preamble_tx;
|
// prach_resources->ra_PreambleIndex = preamble_tx;
|
||||||
prach_resources->ra_TDD_map_index = 0;
|
prach_resources->ra_TDD_map_index = 0;
|
||||||
prach_resources->ra_PREAMBLE_RECEIVED_TARGET_POWER = 10;
|
prach_resources->ra_PREAMBLE_RECEIVED_TARGET_POWER = 10;
|
||||||
prach_resources->ra_RNTI = 0x1234;
|
prach_resources->ra_RNTI = 0x1234;
|
||||||
|
prach_resources->generate_nr_prach = 1;
|
||||||
} else {
|
} else {
|
||||||
// ask L2 for RACH transport
|
// ask L2 for RACH transport
|
||||||
if ((runmode != rx_calib_ue) && (runmode != rx_calib_ue_med) && (runmode != rx_calib_ue_byp) && (runmode != no_L2_connect) ) {
|
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;
|
ue->prach_cnt = 0;
|
||||||
pathloss = get_nr_PL(mod_id, ue->CC_id, gNB_id);
|
pathloss = get_nr_PL(mod_id, ue->CC_id, gNB_id);
|
||||||
LOG_D(PHY,"runmode %d\n",runmode);
|
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;
|
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,
|
ue->Mod_id,
|
||||||
frame_tx,
|
frame_tx,
|
||||||
nr_tti_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
|
#endif
|
||||||
|
|
||||||
if ((runmode == calib_prach_tx) && (((proc->frame_tx&0xfffe)%100)==0))
|
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->frame_rx,
|
||||||
proc->nr_tti_tx,
|
proc->nr_tti_tx,
|
||||||
ue->tx_power_dBm[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)
|
if (ue->mac_enabled == 1)
|
||||||
nr_Msg1_transmitted(ue->Mod_id, ue->CC_id, frame_tx, gNB_id);
|
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,
|
ue->Mod_id,
|
||||||
frame_tx,
|
frame_tx,
|
||||||
nr_tti_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)
|
if (runmode == calib_prach_tx)
|
||||||
ue->prach_resources[gNB_id] = NULL;
|
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++;
|
ue->prach_cnt++;
|
||||||
|
|
||||||
if (ue->prach_cnt == 3)
|
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);
|
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) )
|
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
|
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];
|
if (start_symbol != NULL && N_t_slot != NULL && N_dur != NULL && format != NULL){
|
||||||
*N_t_slot = table_6_3_3_2_4_prachConfig_Index[index][8];
|
*start_symbol = table_6_3_3_2_4_prachConfig_Index[index][6];
|
||||||
*N_dur = table_6_3_3_2_4_prachConfig_Index[index][9];
|
*N_t_slot = table_6_3_3_2_4_prachConfig_Index[index][8];
|
||||||
if (table_6_3_3_2_4_prachConfig_Index[index][1] != -1)
|
*N_dur = table_6_3_3_2_4_prachConfig_Index[index][9];
|
||||||
format2 = (uint8_t) table_6_3_3_2_4_prachConfig_Index[index][1];
|
if (table_6_3_3_2_4_prachConfig_Index[index][1] != -1)
|
||||||
*format = ((uint8_t) table_6_3_3_2_4_prachConfig_Index[index][0]) | (format2<<8);
|
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;
|
return 1;
|
||||||
}
|
}
|
||||||
else
|
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) )
|
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
|
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];
|
if (start_symbol != NULL && N_t_slot != NULL && N_dur != NULL && format != NULL){
|
||||||
*N_t_slot = table_6_3_3_2_3_prachConfig_Index[index][7];
|
*start_symbol = table_6_3_3_2_3_prachConfig_Index[index][5];
|
||||||
*N_dur = table_6_3_3_2_3_prachConfig_Index[index][8];
|
*N_t_slot = table_6_3_3_2_3_prachConfig_Index[index][7];
|
||||||
if (table_6_3_3_2_3_prachConfig_Index[index][1] != -1)
|
*N_dur = table_6_3_3_2_3_prachConfig_Index[index][8];
|
||||||
format2 = (uint8_t) table_6_3_3_2_3_prachConfig_Index[index][1];
|
if (table_6_3_3_2_3_prachConfig_Index[index][1] != -1)
|
||||||
*format = ((uint8_t) table_6_3_3_2_3_prachConfig_Index[index][0]) | (format2<<8);
|
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;
|
return 1;
|
||||||
}
|
}
|
||||||
else
|
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) )
|
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
|
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];
|
if (start_symbol != NULL && N_t_slot != NULL && N_dur != NULL && format != NULL){
|
||||||
*N_t_slot = table_6_3_3_2_2_prachConfig_Index[index][7];
|
*start_symbol = table_6_3_3_2_2_prachConfig_Index[index][5];
|
||||||
*N_dur = table_6_3_3_2_2_prachConfig_Index[index][8];
|
*N_t_slot = table_6_3_3_2_2_prachConfig_Index[index][7];
|
||||||
if (table_6_3_3_2_2_prachConfig_Index[index][1] != -1)
|
*N_dur = table_6_3_3_2_2_prachConfig_Index[index][8];
|
||||||
format2 = (uint8_t) table_6_3_3_2_2_prachConfig_Index[index][1];
|
if (table_6_3_3_2_2_prachConfig_Index[index][1] != -1)
|
||||||
*format = ((uint8_t) table_6_3_3_2_2_prachConfig_Index[index][0]) | (format2<<8);
|
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;
|
return 1;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -1039,6 +1072,7 @@ uint8_t compute_nr_root_seq(NR_RACH_ConfigCommon_t *rach_config,
|
|||||||
if (NCS == 0) return nb_preambles;
|
if (NCS == 0) return nb_preambles;
|
||||||
else {
|
else {
|
||||||
r = L_ra/NCS;
|
r = L_ra/NCS;
|
||||||
|
printf(" found_sequences %u\n", (nb_preambles/r));
|
||||||
return (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");
|
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;
|
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);
|
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 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;
|
uint16_t size_sdu = 0;
|
||||||
unsigned short post_padding;
|
unsigned short post_padding;
|
||||||
|
fapi_nr_config_request_t *cfg = &mac->phy_config.config_req;
|
||||||
NR_ServingCellConfigCommon_t *scc = mac->scc;
|
NR_ServingCellConfigCommon_t *scc = mac->scc;
|
||||||
NR_RACH_ConfigCommon_t *setup = scc->uplinkConfigCommon->initialUplinkBWP->rach_ConfigCommon->choice.setup;
|
NR_RACH_ConfigCommon_t *setup = scc->uplinkConfigCommon->initialUplinkBWP->rach_ConfigCommon->choice.setup;
|
||||||
NR_RACH_ConfigGeneric_t *rach_ConfigGeneric = &setup->rach_ConfigGeneric;
|
NR_RACH_ConfigGeneric_t *rach_ConfigGeneric = &setup->rach_ConfigGeneric;
|
||||||
|
NR_FrequencyInfoDL_t *frequencyInfoDL = scc->downlinkConfigCommon->frequencyInfoDL;
|
||||||
// int32_t frame_diff = 0;
|
// int32_t frame_diff = 0;
|
||||||
|
|
||||||
uint8_t sdu_lcids[NB_RB_MAX] = {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);
|
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);
|
AssertFatal(setup != NULL, "[UE %d] FATAL nr_rach_ConfigCommon is NULL !!!\n", mod_id);
|
||||||
|
|
||||||
if (mac->RA_active == 0) {
|
if (mac->RA_active == 0) {
|
||||||
|
|||||||
Reference in New Issue
Block a user