diff --git a/openair1/PHY/MODULATION/modulation_UE.h b/openair1/PHY/MODULATION/modulation_UE.h index 99986725c0..07d7625770 100644 --- a/openair1/PHY/MODULATION/modulation_UE.h +++ b/openair1/PHY/MODULATION/modulation_UE.h @@ -49,12 +49,12 @@ int slot_fep(PHY_VARS_UE *phy_vars_ue, int reset_freq_est); int nr_slot_fep(PHY_VARS_NR_UE *ue, - UE_nr_rxtx_proc_t *proc, + const UE_nr_rxtx_proc_t *proc, unsigned char symbol, c16_t rxdataF[][ue->frame_parms.samples_per_slot_wCP]); int nr_slot_fep_init_sync(PHY_VARS_NR_UE *ue, - UE_nr_rxtx_proc_t *proc, + const UE_nr_rxtx_proc_t *proc, unsigned char symbol, int sample_offset, bool pbch_decoded, diff --git a/openair1/PHY/MODULATION/slot_fep_nr.c b/openair1/PHY/MODULATION/slot_fep_nr.c index 43b83223f6..a645d9ded1 100644 --- a/openair1/PHY/MODULATION/slot_fep_nr.c +++ b/openair1/PHY/MODULATION/slot_fep_nr.c @@ -35,7 +35,7 @@ #endif*/ int nr_slot_fep(PHY_VARS_NR_UE *ue, - UE_nr_rxtx_proc_t *proc, + const UE_nr_rxtx_proc_t *proc, unsigned char symbol, c16_t rxdataF[][ue->frame_parms.samples_per_slot_wCP]) { @@ -114,7 +114,7 @@ int nr_slot_fep(PHY_VARS_NR_UE *ue, } int nr_slot_fep_init_sync(PHY_VARS_NR_UE *ue, - UE_nr_rxtx_proc_t *proc, + const UE_nr_rxtx_proc_t *proc, unsigned char symbol, int sample_offset, bool pbch_decoded, diff --git a/openair1/PHY/NR_REFSIG/sss_nr.h b/openair1/PHY/NR_REFSIG/sss_nr.h index 7292cc0f02..129c5a5917 100644 --- a/openair1/PHY/NR_REFSIG/sss_nr.h +++ b/openair1/PHY/NR_REFSIG/sss_nr.h @@ -76,7 +76,7 @@ void insert_sss_nr(int16_t *sss_time, NR_DL_FRAME_PARMS *frame_parms); bool rx_sss_nr(PHY_VARS_NR_UE *ue, - UE_nr_rxtx_proc_t *proc, + const UE_nr_rxtx_proc_t *proc, int32_t *tot_metric, uint8_t *phase_max, int *freq_offset_sss, diff --git a/openair1/PHY/NR_UE_ESTIMATION/nr_dl_channel_estimation.c b/openair1/PHY/NR_UE_ESTIMATION/nr_dl_channel_estimation.c index d658f012ad..a310e7d127 100644 --- a/openair1/PHY/NR_UE_ESTIMATION/nr_dl_channel_estimation.c +++ b/openair1/PHY/NR_UE_ESTIMATION/nr_dl_channel_estimation.c @@ -74,7 +74,7 @@ int nr_prs_channel_estimation(uint8_t gNB_id, uint8_t rsc_id, uint8_t rep_num, PHY_VARS_NR_UE *ue, - UE_nr_rxtx_proc_t *proc, + const UE_nr_rxtx_proc_t *proc, NR_DL_FRAME_PARMS *frame_params, c16_t rxdataF[][ue->frame_parms.samples_per_slot_wCP]) { @@ -628,7 +628,7 @@ int nr_prs_channel_estimation(uint8_t gNB_id, } int nr_pbch_dmrs_correlation(PHY_VARS_NR_UE *ue, - UE_nr_rxtx_proc_t *proc, + const UE_nr_rxtx_proc_t *proc, unsigned char symbol, int dmrss, NR_UE_SSB *current_ssb, @@ -782,7 +782,7 @@ int nr_pbch_channel_estimation(PHY_VARS_NR_UE *ue, int estimateSz, struct complex16 dl_ch_estimates[][estimateSz], struct complex16 dl_ch_estimates_time[][ue->frame_parms.ofdm_symbol_size], - UE_nr_rxtx_proc_t *proc, + const UE_nr_rxtx_proc_t *proc, unsigned char symbol, int dmrss, uint8_t ssb_index, @@ -1054,7 +1054,7 @@ int nr_pbch_channel_estimation(PHY_VARS_NR_UE *ue, } void nr_pdcch_channel_estimation(PHY_VARS_NR_UE *ue, - UE_nr_rxtx_proc_t *proc, + const UE_nr_rxtx_proc_t *proc, unsigned char symbol, fapi_nr_coreset_t *coreset, uint16_t first_carrier_offset, @@ -1606,7 +1606,7 @@ void NFAPI_NR_DMRS_TYPE2_average_prb(NR_DL_FRAME_PARMS *frame_parms, #endif } int nr_pdsch_channel_estimation(PHY_VARS_NR_UE *ue, - UE_nr_rxtx_proc_t *proc, + const UE_nr_rxtx_proc_t *proc, unsigned short p, unsigned char symbol, unsigned char nscid, diff --git a/openair1/PHY/NR_UE_ESTIMATION/nr_estimation.h b/openair1/PHY/NR_UE_ESTIMATION/nr_estimation.h index 65591293a8..a313a3a759 100644 --- a/openair1/PHY/NR_UE_ESTIMATION/nr_estimation.h +++ b/openair1/PHY/NR_UE_ESTIMATION/nr_estimation.h @@ -37,7 +37,7 @@ int nr_prs_channel_estimation(uint8_t gNB_id, uint8_t rsc_id, uint8_t rep_num, PHY_VARS_NR_UE *ue, - UE_nr_rxtx_proc_t *proc, + const UE_nr_rxtx_proc_t *proc, NR_DL_FRAME_PARMS *frame_params, c16_t rxdataF[][ue->frame_parms.samples_per_slot_wCP]); @@ -48,7 +48,7 @@ void peak_estimator(int32_t *buffer, int32_t buf_len, int32_t *peak_idx, int32_t \brief This function performs channel estimation including frequency and temporal interpolation */ void nr_pdcch_channel_estimation(PHY_VARS_NR_UE *ue, - UE_nr_rxtx_proc_t *proc, + const UE_nr_rxtx_proc_t *proc, unsigned char symbol, fapi_nr_coreset_t *coreset, uint16_t first_carrier_offset, @@ -58,7 +58,7 @@ void nr_pdcch_channel_estimation(PHY_VARS_NR_UE *ue, c16_t rxdataF[][ue->frame_parms.samples_per_slot_wCP]); int nr_pbch_dmrs_correlation(PHY_VARS_NR_UE *ue, - UE_nr_rxtx_proc_t *proc, + const UE_nr_rxtx_proc_t *proc, unsigned char symbol, int dmrss, NR_UE_SSB *current_ssb, @@ -68,7 +68,7 @@ int nr_pbch_channel_estimation(PHY_VARS_NR_UE *ue, int estimateSz, struct complex16 dl_ch_estimates[][estimateSz], struct complex16 dl_ch_estimates_time[][ue->frame_parms.ofdm_symbol_size], - UE_nr_rxtx_proc_t *proc, + const UE_nr_rxtx_proc_t *proc, unsigned char symbol, int dmrss, uint8_t ssb_index, @@ -76,7 +76,7 @@ int nr_pbch_channel_estimation(PHY_VARS_NR_UE *ue, c16_t rxdataF[][ue->frame_parms.samples_per_slot_wCP]); int nr_pdsch_channel_estimation(PHY_VARS_NR_UE *ue, - UE_nr_rxtx_proc_t *proc, + const UE_nr_rxtx_proc_t *proc, unsigned short p, unsigned char symbol, unsigned char nscid, @@ -100,20 +100,20 @@ void nr_adjust_synch_ue(NR_DL_FRAME_PARMS *frame_parms, uint8_t subframe, unsigned char clear, short coef); - + void nr_ue_measurements(PHY_VARS_NR_UE *ue, - UE_nr_rxtx_proc_t *proc, + const UE_nr_rxtx_proc_t *proc, NR_UE_DLSCH_t *dlsch, uint32_t pdsch_est_size, int32_t dl_ch_estimates[][pdsch_est_size]); void nr_ue_ssb_rsrp_measurements(PHY_VARS_NR_UE *ue, uint8_t gNB_index, - UE_nr_rxtx_proc_t *proc, + const UE_nr_rxtx_proc_t *proc, c16_t rxdataF[][ue->frame_parms.samples_per_slot_wCP]); void nr_ue_rrc_measurements(PHY_VARS_NR_UE *ue, - UE_nr_rxtx_proc_t *proc, + const UE_nr_rxtx_proc_t *proc, c16_t rxdataF[][ue->frame_parms.samples_per_slot_wCP]); void phy_adjust_gain_nr(PHY_VARS_NR_UE *ue, diff --git a/openair1/PHY/NR_UE_ESTIMATION/nr_ue_measurements.c b/openair1/PHY/NR_UE_ESTIMATION/nr_ue_measurements.c index a6aa2ba22f..840577d296 100644 --- a/openair1/PHY/NR_UE_ESTIMATION/nr_ue_measurements.c +++ b/openair1/PHY/NR_UE_ESTIMATION/nr_ue_measurements.c @@ -75,7 +75,7 @@ float_t get_nr_RSRP(module_id_t Mod_id,uint8_t CC_id,uint8_t gNB_index) } void nr_ue_measurements(PHY_VARS_NR_UE *ue, - UE_nr_rxtx_proc_t *proc, + const UE_nr_rxtx_proc_t *proc, NR_UE_DLSCH_t *dlsch, uint32_t pdsch_est_size, int32_t dl_ch_estimates[][pdsch_est_size]) @@ -180,9 +180,9 @@ void nr_ue_measurements(PHY_VARS_NR_UE *ue, // - RX Gain dB void nr_ue_ssb_rsrp_measurements(PHY_VARS_NR_UE *ue, int ssb_index, - UE_nr_rxtx_proc_t *proc, - c16_t rxdataF[][ue->frame_parms.samples_per_slot_wCP]) { - + const UE_nr_rxtx_proc_t *proc, + c16_t rxdataF[][ue->frame_parms.samples_per_slot_wCP]) +{ int k_start = 56; int k_end = 183; int slot = proc->nr_slot_rx; @@ -235,9 +235,9 @@ void nr_ue_ssb_rsrp_measurements(PHY_VARS_NR_UE *ue, // Measurement units: // - psd_awgn (AWGN power spectral density): dBm/Hz void nr_ue_rrc_measurements(PHY_VARS_NR_UE *ue, - UE_nr_rxtx_proc_t *proc, - c16_t rxdataF[][ue->frame_parms.samples_per_slot_wCP]){ - + const UE_nr_rxtx_proc_t *proc, + c16_t rxdataF[][ue->frame_parms.samples_per_slot_wCP]) +{ uint8_t k; int slot = proc->nr_slot_rx; int aarx; @@ -300,11 +300,12 @@ void nr_ue_rrc_measurements(PHY_VARS_NR_UE *ue, LOG_D(PHY, "In [%s][slot:%d] NF USRP %d dB\n", __FUNCTION__, slot, nf_usrp); #endif - LOG_D(PHY, "In [%s][slot:%d] Noise Level %d (digital level %d dB, noise power spectral density %f dBm/RE)\n", - __FUNCTION__, - slot, - ue->measurements.n0_power_tot, - ue->measurements.n0_power_tot_dB, - ue->measurements.n0_power_tot_dB + 30 - 10*log10(pow(2, 30)) - dB_fixed(ue->frame_parms.ofdm_symbol_size) - ((int)rx_gain - (int)rx_gain_offset)); - + LOG_D(PHY, + "In [%s][slot:%d] Noise Level %d (digital level %d dB, noise power spectral density %f dBm/RE)\n", + __FUNCTION__, + slot, + ue->measurements.n0_power_tot, + ue->measurements.n0_power_tot_dB, + ue->measurements.n0_power_tot_dB + 30 - 10 * log10(pow(2, 30)) - dB_fixed(ue->frame_parms.ofdm_symbol_size) + - ((int)rx_gain - (int)rx_gain_offset)); } diff --git a/openair1/PHY/NR_UE_TRANSPORT/csi_rx.c b/openair1/PHY/NR_UE_TRANSPORT/csi_rx.c index f11042f9b2..7e80721524 100644 --- a/openair1/PHY/NR_UE_TRANSPORT/csi_rx.c +++ b/openair1/PHY/NR_UE_TRANSPORT/csi_rx.c @@ -807,8 +807,10 @@ int nr_csi_im_power_estimation(const PHY_VARS_NR_UE *ue, return 0; } -int nr_ue_csi_im_procedures(PHY_VARS_NR_UE *ue, UE_nr_rxtx_proc_t *proc, c16_t rxdataF[][ue->frame_parms.samples_per_slot_wCP]) { - +int nr_ue_csi_im_procedures(PHY_VARS_NR_UE *ue, + const UE_nr_rxtx_proc_t *proc, + c16_t rxdataF[][ue->frame_parms.samples_per_slot_wCP]) +{ int gNB_id = proc->gNB_id; if(!ue->csiim_vars[gNB_id]->active) { return -1; @@ -852,7 +854,9 @@ static nfapi_nr_dl_tti_csi_rs_pdu_rel15_t convert_csirs_pdu(const fapi_nr_dl_con return dl_tti_csi_rs_pdu; } -void nr_ue_csi_rs_procedures(PHY_VARS_NR_UE *ue, UE_nr_rxtx_proc_t *proc, c16_t rxdataF[][ue->frame_parms.samples_per_slot_wCP]) +void nr_ue_csi_rs_procedures(PHY_VARS_NR_UE *ue, + const UE_nr_rxtx_proc_t *proc, + c16_t rxdataF[][ue->frame_parms.samples_per_slot_wCP]) { int gNB_id = proc->gNB_id; diff --git a/openair1/PHY/NR_UE_TRANSPORT/dci_nr.c b/openair1/PHY/NR_UE_TRANSPORT/dci_nr.c index c979926c92..b95193e5e9 100644 --- a/openair1/PHY/NR_UE_TRANSPORT/dci_nr.c +++ b/openair1/PHY/NR_UE_TRANSPORT/dci_nr.c @@ -609,13 +609,13 @@ void nr_pdcch_detection_mrc(NR_DL_FRAME_PARMS *frame_parms, } int32_t nr_rx_pdcch(PHY_VARS_NR_UE *ue, - UE_nr_rxtx_proc_t *proc, + const UE_nr_rxtx_proc_t *proc, int32_t pdcch_est_size, int32_t pdcch_dl_ch_estimates[][pdcch_est_size], int16_t *pdcch_e_rx, fapi_nr_dl_config_dci_dl_pdu_rel15_t *rel15, - c16_t rxdataF[][ue->frame_parms.samples_per_slot_wCP]) { - + c16_t rxdataF[][ue->frame_parms.samples_per_slot_wCP]) +{ NR_DL_FRAME_PARMS *frame_parms = &ue->frame_parms; uint8_t log2_maxh, aarx; @@ -739,8 +739,6 @@ int32_t nr_rx_pdcch(PHY_VARS_NR_UE *ue, return (0); } - - void nr_pdcch_unscrambling(int16_t *e_rx, uint16_t scrambling_RNTI, uint32_t length, @@ -805,11 +803,11 @@ static uint16_t nr_dci_false_detection(uint64_t *dci, } uint8_t nr_dci_decoding_procedure(PHY_VARS_NR_UE *ue, - UE_nr_rxtx_proc_t *proc, + const UE_nr_rxtx_proc_t *proc, int16_t *pdcch_e_rx, fapi_nr_dci_indication_t *dci_ind, - fapi_nr_dl_config_dci_dl_pdu_rel15_t *rel15) { - + fapi_nr_dl_config_dci_dl_pdu_rel15_t *rel15) +{ //int gNB_id = 0; int16_t tmp_e[16*108]; rnti_t n_rnti; @@ -892,5 +890,3 @@ uint8_t nr_dci_decoding_procedure(PHY_VARS_NR_UE *ue, } return(dci_ind->number_of_dcis); } - - diff --git a/openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_decoding.c b/openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_decoding.c index a0a90e8d42..1af7e8852f 100644 --- a/openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_decoding.c +++ b/openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_decoding.c @@ -74,11 +74,11 @@ void nr_dlsch_unscrambling(int16_t *llr, uint32_t size, uint8_t q, uint32_t Nid, static bool nr_ue_postDecode(PHY_VARS_NR_UE *phy_vars_ue, notifiedFIFO_elt_t *req, notifiedFIFO_t *nf_p, - bool last, + const bool last, int b_size, uint8_t b[b_size], int *num_seg_ok, - UE_nr_rxtx_proc_t *proc) + const UE_nr_rxtx_proc_t *proc) { ldpcDecode_ue_t *rdata = (ldpcDecode_ue_t*) NotifiedFifoData(req); NR_DL_UE_HARQ_t *harq_process = rdata->harq_process; @@ -265,7 +265,7 @@ static void nr_processDLSegment(void *arg) } uint32_t nr_dlsch_decoding(PHY_VARS_NR_UE *phy_vars_ue, - UE_nr_rxtx_proc_t *proc, + const UE_nr_rxtx_proc_t *proc, int eNB_id, short *dlsch_llr, NR_DL_FRAME_PARMS *frame_parms, diff --git a/openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_demodulation.c b/openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_demodulation.c index 390917885c..608db26921 100644 --- a/openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_demodulation.c +++ b/openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_demodulation.c @@ -49,8 +49,8 @@ int32_t nr_dlsch_demod_shift = 0; //int16_t interf_unaw_shift = 13; -//#define DEBUG_HARQ -//#define DEBUG_PHY +// #define DEBUG_HARQ(a...) printf(a) +#define DEBUG_HARQ(...) //#define DEBUG_DLSCH_DEMOD //#define DEBUG_PDSCH_RX @@ -233,7 +233,7 @@ void nr_dlsch_detection_mrc(uint32_t rx_size_symbol, /* Main Function */ int nr_rx_pdsch(PHY_VARS_NR_UE *ue, - UE_nr_rxtx_proc_t *proc, + const UE_nr_rxtx_proc_t *proc, NR_UE_DLSCH_t dlsch[2], unsigned char symbol, unsigned char first_symbol_flag, @@ -267,36 +267,19 @@ int nr_rx_pdsch(PHY_VARS_NR_UE *ue, NR_UE_COMMON *common_vars = &ue->common_vars; NR_DL_FRAME_PARMS *frame_parms = &ue->frame_parms; PHY_NR_MEASUREMENTS *measurements = &ue->measurements; - int frame = proc->frame_rx; - int nr_slot_rx = proc->nr_slot_rx; - int gNB_id = proc->gNB_id; + const int frame = proc->frame_rx; + const int nr_slot_rx = proc->nr_slot_rx; + const int gNB_id = proc->gNB_id; int avg[16]; -// int avg_0[2]; -// int avg_1[2]; - uint8_t slot = 0; - unsigned char aatx=0,aarx=0; - - int avgs = 0;// rb; - NR_DL_UE_HARQ_t *dlsch0_harq, *dlsch1_harq = NULL; - int32_t codeword_TB0 = -1; int32_t codeword_TB1 = -1; - //to be updated higher layer - unsigned short start_rb = 0; - unsigned short nb_rb_pdsch = 50; - //int16_t *pllr_symbol_cw0_deint; - //int16_t *pllr_symbol_cw1_deint; - //uint16_t bundle_L = 2; - int32_t median[16]; - uint32_t nb_re_pdsch; - uint16_t startSymbIdx=0; - uint16_t nbSymb=0; - uint16_t pduBitmap=0x0; + uint32_t nb_re_pdsch = -1; + NR_DL_UE_HARQ_t *dlsch0_harq, *dlsch1_harq = NULL; dlsch0_harq = &ue->dl_harq_processes[0][harq_pid]; if (NR_MAX_NB_LAYERS>4) dlsch1_harq = &ue->dl_harq_processes[1][harq_pid]; @@ -311,75 +294,61 @@ int nr_rx_pdsch(PHY_VARS_NR_UE *ue, dlsch0_harq = &ue->dl_harq_processes[codeword_TB0][harq_pid]; dlsch1_harq = &ue->dl_harq_processes[codeword_TB1][harq_pid]; - #ifdef DEBUG_HARQ - printf("[DEMOD] I am assuming both TBs are active, in cw0 %d and cw1 %d \n", codeword_TB0, codeword_TB1); - #endif + DEBUG_HARQ("[DEMOD] I am assuming both TBs are active, in cw0 %d and cw1 %d \n", codeword_TB0, codeword_TB1); } else if ((dlsch0_harq->status == ACTIVE) && (dlsch1_harq->status != ACTIVE) ) { codeword_TB0 = dlsch0_harq->codeword; dlsch0_harq = &ue->dl_harq_processes[codeword_TB0][harq_pid]; dlsch1_harq = NULL; - #ifdef DEBUG_HARQ - printf("[DEMOD] I am assuming only TB0 is active, in cw %d \n", codeword_TB0); - #endif + DEBUG_HARQ("[DEMOD] I am assuming only TB0 is active, in cw %d \n", codeword_TB0); } else if ((dlsch0_harq->status != ACTIVE) && (dlsch1_harq->status == ACTIVE)){ codeword_TB1 = dlsch1_harq->codeword; dlsch0_harq = NULL; dlsch1_harq = &ue->dl_harq_processes[codeword_TB1][harq_pid]; - #ifdef DEBUG_HARQ - printf("[DEMOD] I am assuming only TB1 is active, it is in cw %d\n", codeword_TB1); - #endif - - LOG_E(PHY, "[UE][FATAL] DLSCH: TB0 not active and TB1 active case is not supported\n"); + DEBUG_HARQ("[DEMOD] I am assuming only TB1 is active, it is in cw %d\n", codeword_TB1); + LOG_E(PHY, "[DEMOD] slot %d TB0 not active and TB1 active case is not supported\n", nr_slot_rx); return -1; } else { - LOG_E(PHY,"[UE][FATAL] nr_slot_rx %d: no active DLSCH\n", nr_slot_rx); - return(-1); + LOG_E(PHY, "[DEMOD] slot %d: no active DLSCH (2 layers case)\n", nr_slot_rx); + return (-1); } } else if (dlsch0_harq) { if (dlsch0_harq->status == ACTIVE) { codeword_TB0 = dlsch0_harq->codeword; dlsch0_harq = &ue->dl_harq_processes[0][harq_pid]; - - #ifdef DEBUG_HARQ - printf("[DEMOD] I am assuming only TB0 is active\n"); - #endif + DEBUG_HARQ("[DEMOD] I am assuming only TB0 is active\n"); } else { - LOG_E(PHY,"[UE][FATAL] nr_slot_rx %d: no active DLSCH\n", nr_slot_rx); + LOG_E(PHY, "[DEMOD] slot %d nr_rx_pdsch no active DLSCH (one layer case)\n", nr_slot_rx); return (-1); } } else { - LOG_E(PHY, "Done\n"); + LOG_E(PHY, "[DEMOD] slot %d Inconsistent call to nr_rx_pdsch (no layer 0)\n", nr_slot_rx); return -1; } - #ifdef DEBUG_HARQ - printf("[DEMOD] MIMO mode = %d\n", dlsch0_harq->mimo_mode); - printf("[DEMOD] cw for TB0 = %d, cw for TB1 = %d\n", codeword_TB0, codeword_TB1); - #endif + DEBUG_HARQ("[DEMOD] cw for TB0 = %d, cw for TB1 = %d\n", codeword_TB0, codeword_TB1); - start_rb = dlsch[0].dlsch_config.start_rb; - nb_rb_pdsch = dlsch[0].dlsch_config.number_rbs; + int start_rb = dlsch[0].dlsch_config.start_rb; + int nb_rb_pdsch = dlsch[0].dlsch_config.number_rbs; DevAssert(dlsch0_harq); - if (gNB_id > 2) { - LOG_W(PHY, "In %s: Illegal gNB_id %d\n", __FUNCTION__, gNB_id); + LOG_E(PHY, "In %s: Illegal gNB_id %d\n", __FUNCTION__, gNB_id); return(-1); } if (!common_vars) { - LOG_W(PHY,"dlsch_demodulation.c: Null common_vars\n"); + LOG_E(PHY, "dlsch_demodulation.c: Null common_vars\n"); return(-1); } if (!frame_parms) { - LOG_W(PHY,"dlsch_demodulation.c: Null frame_parms\n"); + LOG_E(PHY, "dlsch_demodulation.c: Null frame_parms\n"); return(-1); } @@ -463,18 +432,19 @@ int nr_rx_pdsch(PHY_VARS_NR_UE *ue, start_meas(&meas); if (first_symbol_flag == 1) { nr_dlsch_channel_level(rx_size_symbol, dl_ch_estimates_ext, frame_parms, nl, avg, symbol, nb_re_pdsch, nb_rb_pdsch); - avgs = 0; - for (aatx=0;aatx 1) { nr_dlsch_channel_level_median(rx_size_symbol, dl_ch_estimates_ext, median, nl, n_rx, nb_re_pdsch); - for (aatx = 0; aatx < nl; aatx++) { - for (aarx = 0; aarx < n_rx; aarx++) { + for (int aatx = 0; aatx < nl; aatx++) { + for (int aarx = 0; aarx < n_rx; aarx++) { avgs = cmax(avgs, median[aatx*n_rx + aarx]); } } @@ -589,6 +559,9 @@ int nr_rx_pdsch(PHY_VARS_NR_UE *ue, start_meas(&meas); /* Store the valid DL RE's */ dl_valid_re[symbol-1] = nb_re_pdsch; + int startSymbIdx = 0; + int nbSymb = 0; + int pduBitmap = 0; if(dlsch0_harq->status == ACTIVE) { startSymbIdx = dlsch[0].dlsch_config.start_symbol; diff --git a/openair1/PHY/NR_UE_TRANSPORT/nr_initial_sync.c b/openair1/PHY/NR_UE_TRANSPORT/nr_initial_sync.c index a0230ac8cb..56631c75ea 100644 --- a/openair1/PHY/NR_UE_TRANSPORT/nr_initial_sync.c +++ b/openair1/PHY/NR_UE_TRANSPORT/nr_initial_sync.c @@ -100,8 +100,10 @@ void free_list(NR_UE_SSB *node) { free(node); } - -int nr_pbch_detection(UE_nr_rxtx_proc_t * proc, PHY_VARS_NR_UE *ue, int pbch_initial_symbol, c16_t rxdataF[][ue->frame_parms.samples_per_slot_wCP]) +int nr_pbch_detection(const UE_nr_rxtx_proc_t *proc, + PHY_VARS_NR_UE *ue, + int pbch_initial_symbol, + c16_t rxdataF[][ue->frame_parms.samples_per_slot_wCP]) { NR_DL_FRAME_PARMS *frame_parms=&ue->frame_parms; int ret =-1; @@ -196,9 +198,7 @@ int nr_pbch_detection(UE_nr_rxtx_proc_t * proc, PHY_VARS_NR_UE *ue, int pbch_ini } -int nr_initial_sync(UE_nr_rxtx_proc_t *proc, - PHY_VARS_NR_UE *ue, - int n_frames, int sa) +int nr_initial_sync(const UE_nr_rxtx_proc_t *proc, PHY_VARS_NR_UE *ue, int n_frames, int sa) { int32_t sync_pos, sync_pos_frame; // k_ssb, N_ssb_crb, sync_pos2, diff --git a/openair1/PHY/NR_UE_TRANSPORT/nr_pbch.c b/openair1/PHY/NR_UE_TRANSPORT/nr_pbch.c index c7d10b69f4..ed30c95fe0 100644 --- a/openair1/PHY/NR_UE_TRANSPORT/nr_pbch.c +++ b/openair1/PHY/NR_UE_TRANSPORT/nr_pbch.c @@ -356,9 +356,9 @@ const uint8_t pbch_deinterleaving_pattern[32] = {28, 0, 31, 30, 7, 29, 25, 27, 1, 4, 3, 14, 15, 16, 17, 2, 26, 18, 19, 20, 21, 22, 6, 23}; int nr_rx_pbch(PHY_VARS_NR_UE *ue, - UE_nr_rxtx_proc_t *proc, + const UE_nr_rxtx_proc_t *proc, int estimateSz, - struct complex16 dl_ch_estimates [][estimateSz], + struct complex16 dl_ch_estimates[][estimateSz], NR_DL_FRAME_PARMS *frame_parms, uint8_t i_ssb, MIMO_mode_t mimo_mode, diff --git a/openair1/PHY/NR_UE_TRANSPORT/nr_transport_proto_ue.h b/openair1/PHY/NR_UE_TRANSPORT/nr_transport_proto_ue.h index 4047abe164..d673baadda 100644 --- a/openair1/PHY/NR_UE_TRANSPORT/nr_transport_proto_ue.h +++ b/openair1/PHY/NR_UE_TRANSPORT/nr_transport_proto_ue.h @@ -198,19 +198,19 @@ void nr_conjch0_mult_ch1(int *ch0, @returns 0 on success, 1 on unsuccessful decoding */ -uint32_t nr_dlsch_decoding(PHY_VARS_NR_UE *phy_vars_ue, - UE_nr_rxtx_proc_t *proc, - int eNB_id, - short *dlsch_llr, - NR_DL_FRAME_PARMS *frame_parms, - NR_UE_DLSCH_t *dlsch, - NR_DL_UE_HARQ_t *harq_process, - uint32_t frame, - uint16_t nb_symb_sch, - uint8_t nr_slot_rx, - uint8_t harq_pid, - int b_size, - uint8_t b[b_size]); +uint32_t nr_dlsch_decoding(PHY_VARS_NR_UE *phy_vars_ue, + const UE_nr_rxtx_proc_t *proc, + int eNB_id, + short *dlsch_llr, + NR_DL_FRAME_PARMS *frame_parms, + NR_UE_DLSCH_t *dlsch, + NR_DL_UE_HARQ_t *harq_process, + uint32_t frame, + uint16_t nb_symb_sch, + uint8_t nr_slot_rx, + uint8_t harq_pid, + int b_size, + uint8_t b[b_size]); int nr_ulsch_encoding(PHY_VARS_NR_UE *ue, NR_UE_ULSCH_t *ulsch, @@ -267,14 +267,13 @@ void nr_dlsch_unscrambling(int16_t* llr, uint32_t n_RNTI); int32_t nr_rx_pdcch(PHY_VARS_NR_UE *ue, - UE_nr_rxtx_proc_t *proc, + const UE_nr_rxtx_proc_t *proc, int32_t pdcch_est_size, int32_t pdcch_dl_ch_estimates[][pdcch_est_size], int16_t *pdcch_e_rx, fapi_nr_dl_config_dci_dl_pdu_rel15_t *rel15, c16_t rxdataF[][ue->frame_parms.samples_per_slot_wCP]); - /*! \brief Performs detection of SSS to find cell ID and other framing parameters (FDD/TDD, normal/extended prefix) @param phy_vars_ue Pointer to UE variables @param tot_metric Pointer to variable containing maximum metric under framing hypothesis (to be compared to other hypotheses @@ -289,26 +288,30 @@ int rx_sss(PHY_VARS_NR_UE *phy_vars_ue,int32_t *tot_metric,uint8_t *flip_max,uin \returns number of tx antennas or -1 if error */ int nr_rx_pbch(PHY_VARS_NR_UE *ue, - UE_nr_rxtx_proc_t *proc, + const UE_nr_rxtx_proc_t *proc, const int estimateSz, struct complex16 dl_ch_estimates[][estimateSz], NR_DL_FRAME_PARMS *frame_parms, uint8_t i_ssb, MIMO_mode_t mimo_mode, - fapiPbch_t* result, + fapiPbch_t *result, c16_t rxdataF[][ue->frame_parms.samples_per_slot_wCP]); -int nr_pbch_detection(UE_nr_rxtx_proc_t *proc, +int nr_pbch_detection(const UE_nr_rxtx_proc_t *proc, PHY_VARS_NR_UE *ue, int pbch_initial_symbol, c16_t rxdataF[][ue->frame_parms.samples_per_slot_wCP]); - #ifndef modOrder #define modOrder(I_MCS,I_TBS) ((I_MCS-I_TBS)*2+2) // Find modulation order from I_TBS and I_MCS #endif -int dump_ue_stats(PHY_VARS_NR_UE *phy_vars_ue, UE_nr_rxtx_proc_t *proc, char* buffer, int length, runmode_t mode, int input_level_dBm); +int dump_ue_stats(PHY_VARS_NR_UE *phy_vars_ue, + const UE_nr_rxtx_proc_t *proc, + char *buffer, + int length, + runmode_t mode, + int input_level_dBm); /*! \brief This function performs the initial cell search procedure - PSS detection, SSS detection and PBCH detection. At the @@ -320,10 +323,7 @@ int dump_ue_stats(PHY_VARS_NR_UE *phy_vars_ue, UE_nr_rxtx_proc_t *proc, char* bu @param n_frames @param sa current running mode */ -int nr_initial_sync(UE_nr_rxtx_proc_t *proc, - PHY_VARS_NR_UE *phy_vars_ue, - int n_frames, - int sa); +int nr_initial_sync(const UE_nr_rxtx_proc_t *proc, PHY_VARS_NR_UE *phy_vars_ue, int n_frames, int sa); /*! \brief This function gets the carrier frequencies either from FP or command-line-set global variables, depending on the @@ -368,7 +368,7 @@ void nr_pdcch_unscrambling(int16_t *z, int16_t *z2); uint8_t nr_dci_decoding_procedure(PHY_VARS_NR_UE *ue, - UE_nr_rxtx_proc_t *proc, + const UE_nr_rxtx_proc_t *proc, int16_t *pdcch_e_rx, fapi_nr_dci_indication_t *dci_ind, fapi_nr_dl_config_dci_dl_pdu_rel15_t *rel15); @@ -401,7 +401,7 @@ uint8_t nr_dci_decoding_procedure(PHY_VARS_NR_UE *ue, @param ptrs_re_per_slot */ int nr_rx_pdsch(PHY_VARS_NR_UE *ue, - UE_nr_rxtx_proc_t *proc, + const UE_nr_rxtx_proc_t *proc, NR_UE_DLSCH_t dlsch[2], unsigned char symbol, unsigned char first_symbol_flag, diff --git a/openair1/PHY/NR_UE_TRANSPORT/sss_nr.c b/openair1/PHY/NR_UE_TRANSPORT/sss_nr.c index 6df24949a9..76196febcd 100644 --- a/openair1/PHY/NR_UE_TRANSPORT/sss_nr.c +++ b/openair1/PHY/NR_UE_TRANSPORT/sss_nr.c @@ -258,7 +258,7 @@ static int pss_ch_est_nr(PHY_VARS_NR_UE *ue, static int do_pss_sss_extract_nr( PHY_VARS_NR_UE *ue, - UE_nr_rxtx_proc_t *proc, + const UE_nr_rxtx_proc_t *proc, c16_t pss_ext[NB_ANTENNAS_RX][LENGTH_PSS_NR], c16_t sss_ext[NB_ANTENNAS_RX][LENGTH_SSS_NR], uint8_t doPss, @@ -340,7 +340,7 @@ static int do_pss_sss_extract_nr( *********************************************************************/ static int pss_sss_extract_nr(PHY_VARS_NR_UE *phy_vars_ue, - UE_nr_rxtx_proc_t *proc, + const UE_nr_rxtx_proc_t *proc, c16_t pss_ext[NB_ANTENNAS_RX][LENGTH_PSS_NR], c16_t sss_ext[NB_ANTENNAS_RX][LENGTH_SSS_NR], uint8_t subframe, @@ -362,7 +362,7 @@ static int pss_sss_extract_nr(PHY_VARS_NR_UE *phy_vars_ue, * *********************************************************************/ bool rx_sss_nr(PHY_VARS_NR_UE *ue, - UE_nr_rxtx_proc_t *proc, + const UE_nr_rxtx_proc_t *proc, int32_t *tot_metric, uint8_t *phase_max, int *freq_offset_sss, diff --git a/openair1/SCHED_NR_UE/defs.h b/openair1/SCHED_NR_UE/defs.h index e999626bfd..2ff16ed18d 100644 --- a/openair1/SCHED_NR_UE/defs.h +++ b/openair1/SCHED_NR_UE/defs.h @@ -98,17 +98,9 @@ typedef struct { */ void phy_procedures_nrUE_TX(PHY_VARS_NR_UE *ue, const UE_nr_rxtx_proc_t *proc, nr_phy_data_tx_t *phy_data); -void send_slot_ind(notifiedFIFO_t *nf, int slot); +void pbch_pdcch_processing(PHY_VARS_NR_UE *ue, const UE_nr_rxtx_proc_t *proc, nr_phy_data_t *phy_data); -void pbch_pdcch_processing(PHY_VARS_NR_UE *ue, - UE_nr_rxtx_proc_t *proc, - nr_phy_data_t *phy_data); - -void pdsch_processing(PHY_VARS_NR_UE *ue, - UE_nr_rxtx_proc_t *proc, - nr_phy_data_t *phy_data); - -int phy_procedures_slot_parallelization_nrUE_RX(PHY_VARS_NR_UE *ue, UE_nr_rxtx_proc_t *proc, uint8_t abstraction_flag, uint8_t do_pdcch_flag, relaying_type_t r_type); +void pdsch_processing(PHY_VARS_NR_UE *ue, const UE_nr_rxtx_proc_t *proc, nr_phy_data_t *phy_data); void processSlotTX(void *arg); @@ -139,7 +131,7 @@ bool is_csi_rs_in_symbol(fapi_nr_dl_config_csirs_pdu_rel15_t csirs_config_pdu, i void nr_fill_dl_indication(nr_downlink_indication_t *dl_ind, fapi_nr_dci_indication_t *dci_ind, fapi_nr_rx_indication_t *rx_ind, - UE_nr_rxtx_proc_t *proc, + const UE_nr_rxtx_proc_t *proc, PHY_VARS_NR_UE *ue, void *phy_data); @@ -153,32 +145,25 @@ void nr_fill_rx_indication(fapi_nr_rx_indication_t *rx_ind, NR_UE_DLSCH_t *dlsch0, NR_UE_DLSCH_t *dlsch1, uint16_t n_pdus, - UE_nr_rxtx_proc_t *proc, + const UE_nr_rxtx_proc_t *proc, void *typeSpecific, uint8_t *b); -bool nr_ue_dlsch_procedures(PHY_VARS_NR_UE *ue, - UE_nr_rxtx_proc_t *proc, - NR_UE_DLSCH_t dlsch[2], - int16_t* llr[2]); - -int nr_ue_pdsch_procedures(PHY_VARS_NR_UE *ue, - UE_nr_rxtx_proc_t *proc, - NR_UE_DLSCH_t dlsch[2], - int16_t *llr[2], - c16_t rxdataF[][ue->frame_parms.samples_per_slot_wCP]); - int nr_ue_pdcch_procedures(PHY_VARS_NR_UE *ue, - UE_nr_rxtx_proc_t *proc, + const UE_nr_rxtx_proc_t *proc, int32_t pdcch_est_size, int32_t pdcch_dl_ch_estimates[][pdcch_est_size], nr_phy_data_t *phy_data, int n_ss, c16_t rxdataF[][ue->frame_parms.samples_per_slot_wCP]); -int nr_ue_csi_im_procedures(PHY_VARS_NR_UE *ue, UE_nr_rxtx_proc_t *proc, c16_t rxdataF[][ue->frame_parms.samples_per_slot_wCP]); +int nr_ue_csi_im_procedures(PHY_VARS_NR_UE *ue, + const UE_nr_rxtx_proc_t *proc, + c16_t rxdataF[][ue->frame_parms.samples_per_slot_wCP]); -void nr_ue_csi_rs_procedures(PHY_VARS_NR_UE *ue, UE_nr_rxtx_proc_t *proc, c16_t rxdataF[][ue->frame_parms.samples_per_slot_wCP]); +void nr_ue_csi_rs_procedures(PHY_VARS_NR_UE *ue, + const UE_nr_rxtx_proc_t *proc, + c16_t rxdataF[][ue->frame_parms.samples_per_slot_wCP]); #endif /** @}*/ diff --git a/openair1/SCHED_NR_UE/harq_nr.c b/openair1/SCHED_NR_UE/harq_nr.c index f9c6440067..b7b542bf54 100644 --- a/openair1/SCHED_NR_UE/harq_nr.c +++ b/openair1/SCHED_NR_UE/harq_nr.c @@ -145,8 +145,14 @@ void downlink_harq_process(NR_DL_UE_HARQ_t *dl_harq, int harq_pid, int dci_ndi, dl_harq->status = ACTIVE; dl_harq->first_rx = 1; } else { - LOG_D(PHY,"receive harq process: %p harqPid=%d, rv=%d, ndi=%d, rntiType=%d new transmission= %s\n", - dl_harq, harq_pid, rv, dci_ndi, rnti_type, dl_harq->Ndi != dci_ndi ? "yes":"no"); + LOG_D(PHY, + "receive harq process: %p harqPid=%d, rv=%d, ndi=%d, rntiType=%d new transmission= %s\n", + dl_harq, + harq_pid, + rv, + dci_ndi, + rnti_type, + dl_harq->Ndi != dci_ndi ? "yes" : "no"); AssertFatal(rv<4 && rv>=0, "invalid redondancy version %d\n", rv); if (dci_ndi!=dl_harq->Ndi) { if (dl_harq->ack == DL_NACK) diff --git a/openair1/SCHED_NR_UE/phy_procedures_nr_ue.c b/openair1/SCHED_NR_UE/phy_procedures_nr_ue.c index f8547ed5b6..f4aec4b8dc 100644 --- a/openair1/SCHED_NR_UE/phy_procedures_nr_ue.c +++ b/openair1/SCHED_NR_UE/phy_procedures_nr_ue.c @@ -82,7 +82,7 @@ static const unsigned int gain_table[31] = {100, 112, 126, 141, 158, 178, void nr_fill_dl_indication(nr_downlink_indication_t *dl_ind, fapi_nr_dci_indication_t *dci_ind, fapi_nr_rx_indication_t *rx_ind, - UE_nr_rxtx_proc_t *proc, + const UE_nr_rxtx_proc_t *proc, PHY_VARS_NR_UE *ue, void *phy_data) { @@ -114,7 +114,7 @@ void nr_fill_rx_indication(fapi_nr_rx_indication_t *rx_ind, NR_UE_DLSCH_t *dlsch0, NR_UE_DLSCH_t *dlsch1, uint16_t n_pdus, - UE_nr_rxtx_proc_t *proc, + const UE_nr_rxtx_proc_t *proc, void *typeSpecific, uint8_t *b) { @@ -306,11 +306,11 @@ void phy_procedures_nrUE_TX(PHY_VARS_NR_UE *ue, const UE_nr_rxtx_proc_t *proc, n void nr_ue_measurement_procedures(uint16_t l, PHY_VARS_NR_UE *ue, - UE_nr_rxtx_proc_t *proc, + const UE_nr_rxtx_proc_t *proc, NR_UE_DLSCH_t *dlsch, uint32_t pdsch_est_size, - int32_t dl_ch_estimates[][pdsch_est_size]) { - + int32_t dl_ch_estimates[][pdsch_est_size]) +{ NR_DL_FRAME_PARMS *frame_parms=&ue->frame_parms; int nr_slot_rx = proc->nr_slot_rx; int gNB_id = proc->gNB_id; @@ -361,11 +361,11 @@ void nr_ue_measurement_procedures(uint16_t l, } static int nr_ue_pbch_procedures(PHY_VARS_NR_UE *ue, - UE_nr_rxtx_proc_t *proc, + const UE_nr_rxtx_proc_t *proc, int estimateSz, struct complex16 dl_ch_estimates[][estimateSz], - c16_t rxdataF[][ue->frame_parms.samples_per_slot_wCP]) { - + c16_t rxdataF[][ue->frame_parms.samples_per_slot_wCP]) +{ int ret = 0; DevAssert(ue); @@ -424,7 +424,7 @@ unsigned int nr_get_tx_amp(int power_dBm, int power_max_dBm, int N_RB_UL, int nb } int nr_ue_pdcch_procedures(PHY_VARS_NR_UE *ue, - UE_nr_rxtx_proc_t *proc, + const UE_nr_rxtx_proc_t *proc, int32_t pdcch_est_size, int32_t pdcch_dl_ch_estimates[][pdcch_est_size], nr_phy_data_t *phy_data, @@ -838,10 +838,8 @@ bool nr_ue_dlsch_procedures(PHY_VARS_NR_UE *ue, return dec; } -void pbch_pdcch_processing(PHY_VARS_NR_UE *ue, - UE_nr_rxtx_proc_t *proc, - nr_phy_data_t *phy_data) { - +void pbch_pdcch_processing(PHY_VARS_NR_UE *ue, const UE_nr_rxtx_proc_t *proc, nr_phy_data_t *phy_data) +{ int frame_rx = proc->frame_rx; int nr_slot_rx = proc->nr_slot_rx; int gNB_id = proc->gNB_id; @@ -1016,9 +1014,7 @@ void pbch_pdcch_processing(PHY_VARS_NR_UE *ue, VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SLOT_FEP_PDCCH, VCD_FUNCTION_OUT); } -void pdsch_processing(PHY_VARS_NR_UE *ue, - UE_nr_rxtx_proc_t *proc, - nr_phy_data_t *phy_data) +void pdsch_processing(PHY_VARS_NR_UE *ue, const UE_nr_rxtx_proc_t *proc, nr_phy_data_t *phy_data) { int frame_rx = proc->frame_rx; int nr_slot_rx = proc->nr_slot_rx; diff --git a/openair1/SIMULATION/NR_PHY/pbchsim.c b/openair1/SIMULATION/NR_PHY/pbchsim.c index a624b79e55..662a59992b 100644 --- a/openair1/SIMULATION/NR_PHY/pbchsim.c +++ b/openair1/SIMULATION/NR_PHY/pbchsim.c @@ -97,44 +97,34 @@ nfapi_mode_t nfapi_getmode(void) { return NFAPI_MODE_UNKNOWN; } void nr_fill_dl_indication(nr_downlink_indication_t *dl_ind, fapi_nr_dci_indication_t *dci_ind, fapi_nr_rx_indication_t *rx_ind, - UE_nr_rxtx_proc_t *proc, + const UE_nr_rxtx_proc_t *proc, PHY_VARS_NR_UE *ue, - void *phy_data) {} + void *phy_data) +{ +} void nr_fill_rx_indication(fapi_nr_rx_indication_t *rx_ind, uint8_t pdu_type, PHY_VARS_NR_UE *ue, NR_UE_DLSCH_t *dlsch0, NR_UE_DLSCH_t *dlsch1, uint16_t n_pdus, - UE_nr_rxtx_proc_t *proc, + const UE_nr_rxtx_proc_t *proc, void *typeSpecific, - uint8_t *b) {} + uint8_t *b) +{ +} int nr_ue_pdcch_procedures(PHY_VARS_NR_UE *ue, - UE_nr_rxtx_proc_t *proc, - int32_t pdcch_est_size, - int32_t pdcch_dl_ch_estimates[][pdcch_est_size], - nr_phy_data_t *phy_data, - int n_ss, - c16_t rxdataF[][ue->frame_parms.samples_per_slot_wCP]) { + const UE_nr_rxtx_proc_t *proc, + int32_t pdcch_est_size, + int32_t pdcch_dl_ch_estimates[][pdcch_est_size], + nr_phy_data_t *phy_data, + int n_ss, + c16_t rxdataF[][ue->frame_parms.samples_per_slot_wCP]) +{ return 0; } -int nr_ue_pdsch_procedures(PHY_VARS_NR_UE *ue, - UE_nr_rxtx_proc_t *proc, - NR_UE_DLSCH_t dlsch[2], - int16_t *llr[2], - c16_t rxdataF[][ue->frame_parms.samples_per_slot_wCP]) { - return 0; -} - -bool nr_ue_dlsch_procedures(PHY_VARS_NR_UE *ue, - UE_nr_rxtx_proc_t *proc, - NR_UE_DLSCH_t dlsch[2], - int16_t *llr[2]) { - return false; -} - void nr_phy_config_request_sim_pbchsim(PHY_VARS_gNB *gNB, int N_RB_DL, int N_RB_UL, diff --git a/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c b/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c index b8ccdf3d8d..036ca54285 100644 --- a/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c +++ b/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c @@ -1071,7 +1071,7 @@ void handle_ssb_meas(NR_UE_MAC_INST_t *mac, uint8_t ssb_index, int16_t rsrp_dbm) // L2 Abstraction Layer // Note: sdu should always be processed because data and timing advance updates are transmitted by the UE -int8_t handle_dlsch(nr_downlink_indication_t *dl_info, int pdu_id) +static int8_t handle_dlsch(nr_downlink_indication_t *dl_info, int pdu_id) { /* L1 assigns harq_pid, but in emulated L1 mode we need to assign the harq_pid based on the saved global g_harq_pid. Because we are