diff --git a/openair1/SCHED_NR/nr_ru_procedures.c b/openair1/SCHED_NR/nr_ru_procedures.c index e0be09aa9c282957d361b637f8370c78363616b9..a2c117af7126093088106aade3746cdcd96c683f 100644 --- a/openair1/SCHED_NR/nr_ru_procedures.c +++ b/openair1/SCHED_NR/nr_ru_procedures.c @@ -32,7 +32,8 @@ #include "PHY/defs_gNB.h" #include "PHY/phy_extern.h" -#include "SCHED_NR/defs.h" +#include "sched_nr.h" +#include "PHY/MODULATION/modulation_common.h" #include "PHY/LTE_TRANSPORT/if4_tools.h" #include "PHY/LTE_TRANSPORT/if5_tools.h" @@ -85,6 +86,7 @@ void nr_feptx0(RU_t *ru,int slot) { void nr_feptx_ofdm_2thread(RU_t *ru) { NR_DL_FRAME_PARMS *fp=ru->nr_frame_parms; + nfapi_config_request_t *cfg = &ru->gNB_list[0]->gNB_config; RU_proc_t *proc = &ru->proc; struct timespec wait; int subframe = ru->proc.subframe_tx; @@ -94,7 +96,7 @@ void nr_feptx_ofdm_2thread(RU_t *ru) { start_meas(&ru->ofdm_mod_stats); - if (nr_subframe_select(fp,subframe) == SF_UL) return; + if (nr_subframe_select(cfg,subframe) == SF_UL) return; // this copy should be done in the precoding thread (currently inactive) for (int aa=0;aa<ru->nb_tx;aa++) @@ -104,7 +106,7 @@ void nr_feptx_ofdm_2thread(RU_t *ru) { VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPTX_OFDM , 1 ); - if (nr_subframe_select(fp,subframe)==SF_DL) { + if (nr_subframe_select(cfg,subframe)==SF_DL) { // If this is not an S-subframe if (pthread_mutex_timedlock(&proc->mutex_feptx,&wait) != 0) { printf("[RU] ERROR pthread_mutex_lock for feptx thread (IC %d)\n", proc->instance_cnt_feptx); @@ -202,8 +204,8 @@ void nr_feptx_ofdm(RU_t *ru) { slot_offset = subframe*fp->samples_per_subframe; - if ((nr_subframe_select(fp,subframe)==SF_DL)|| - ((nr_subframe_select(fp,subframe)==SF_S))) { + if ((nr_subframe_select(cfg,subframe)==SF_DL)|| + ((nr_subframe_select(cfg,subframe)==SF_S))) { // LOG_D(HW,"Frame %d: Generating slot %d\n",frame,next_slot); start_meas(&ru->ofdm_mod_stats); @@ -228,7 +230,7 @@ void nr_feptx_ofdm(RU_t *ru) { 14, fp); // if S-subframe generate first slot only - if (nr_subframe_select(fp,subframe) == SF_DL) + if (nr_subframe_select(cfg,subframe) == SF_DL) nr_normal_prefix_mod(&ru->common.txdataF_BF[aa][slot_offset_F+slot_sizeF], dummy_tx_b+(fp->samples_per_subframe / fp->slots_per_subframe), 14, diff --git a/openair1/SCHED_NR/phy_procedures_nr_common.c b/openair1/SCHED_NR/phy_procedures_nr_common.c index 4f06644ee8578df54399ebd420a20de2a0b99fd8..623e14644aeb5763e1fd0993686261fc5387560a 100644 --- a/openair1/SCHED_NR/phy_procedures_nr_common.c +++ b/openair1/SCHED_NR/phy_procedures_nr_common.c @@ -31,12 +31,13 @@ */ #include "PHY/defs_gNB.h" #include "PHY/phy_extern.h" -#include "SCHED_NR/defs.h" +#include "sched_nr.h" nr_subframe_t nr_subframe_select(nfapi_config_request_t *cfg,unsigned char subframe) { if (cfg->subframe_config.duplex_mode.value == FDD) return(SF_DL); + else + return SF_DL; } - diff --git a/openair1/SCHED_NR/phy_procedures_nr_gNB.c b/openair1/SCHED_NR/phy_procedures_nr_gNB.c index a2099b82cb8c3afa17d2ce20837ae993eb25074d..e40d8e0a5c029b9980eced41e5d79f8a073ffde6 100644 --- a/openair1/SCHED_NR/phy_procedures_nr_gNB.c +++ b/openair1/SCHED_NR/phy_procedures_nr_gNB.c @@ -21,6 +21,7 @@ #include "PHY/phy_extern.h" #include "PHY/defs_gNB.h" +#include "sched_nr.h" #include "PHY/NR_TRANSPORT/nr_transport.h" #include "SCHED/sched_eNB.h" #include "SCHED/sched_common_extern.h" diff --git a/openair1/SCHED_NR/defs.h b/openair1/SCHED_NR/sched_nr.h similarity index 62% rename from openair1/SCHED_NR/defs.h rename to openair1/SCHED_NR/sched_nr.h index 61d6b2461cf1e14052a53468ca014e512e064291..dde2c77d6dea8681a70dffb616aaf8d871f7a6c2 100644 --- a/openair1/SCHED_NR/defs.h +++ b/openair1/SCHED_NR/sched_nr.h @@ -20,9 +20,9 @@ */ /* - \author R. Knopp, F. Kaltenberger + \author Guy De Souza \company EURECOM - \email knopp@eurecom.fr + \email desouza@eurecom.fr */ #ifndef __openair_SCHED_NR_DEFS_H__ @@ -33,23 +33,11 @@ #include "SCHED/sched_eNB.h" lte_subframe_t nr_subframe_select (nfapi_config_request_t *cfg, unsigned char subframe); -int nr_generate_pss( int16_t *d_pss, - int32_t **txdataF, - int16_t amp, - uint8_t ssb_start_symbol, - nfapi_config_request_t* config, - NR_DL_FRAME_PARMS *frame_parms); -int nr_generate_sss( int16_t *d_sss, - int32_t **txdataF, - int16_t amp, - uint8_t ssb_start_symbol, - nfapi_config_request_t* config, - NR_DL_FRAME_PARMS *frame_parms); -int nr_generate_pbch_dmrs(uint32_t gold_sequence, - int32_t **txdataF, - int16_t amp, - nfapi_config_request_t* config, - NR_DL_FRAME_PARMS *frame_parms); void nr_set_ssb_first_subcarrier(nfapi_config_request_t *cfg, NR_DL_FRAME_PARMS *fp); +void phy_procedures_gNB_TX(PHY_VARS_gNB *gNB, gNB_rxtx_proc_t *proc, int do_meas); +void nr_init_feptx_thread(RU_t *ru,pthread_attr_t *attr_feptx); +void nr_feptx_ofdm(RU_t *ru); +void nr_feptx_ofdm_2thread(RU_t *ru); +void nr_feptx0(RU_t *ru,int slot); #endif diff --git a/targets/RT/USER/nr-gnb.c b/targets/RT/USER/nr-gnb.c index 5c29aab949259edfd98966f56a5a8f1929876809..591a8793848a0022d6e567612e65601dcfc4fbb4 100644 --- a/targets/RT/USER/nr-gnb.c +++ b/targets/RT/USER/nr-gnb.c @@ -48,6 +48,7 @@ #include "PHY/defs_gNB.h" #include "SCHED/sched_eNB.h" +#include "SCHED_NR/sched_nr.h" #include "PHY/LTE_TRANSPORT/transport_proto.h" #undef MALLOC //there are two conflicting definitions, so we better make sure we don't use it at all diff --git a/targets/RT/USER/nr-ru.c b/targets/RT/USER/nr-ru.c index d3527354bb6b3ed1bd1ea4f15d39b02dd16a0475..c2d09be83f838076c7e8dfdf7ca7c213becf3c15 100644 --- a/targets/RT/USER/nr-ru.c +++ b/targets/RT/USER/nr-ru.c @@ -74,6 +74,7 @@ #include "LAYER2/MAC/mac_extern.h" #include "PHY/LTE_TRANSPORT/transport_proto.h" #include "SCHED/sched_eNB.h" +#include "SCHED_NR/sched_nr.h" #include "PHY/LTE_ESTIMATION/lte_estimation.h" #include "PHY/INIT/phy_init.h" @@ -332,7 +333,7 @@ static inline void fh_if5_mobipass_south_out(RU_t *ru) { static inline void fh_if4p5_south_out(RU_t *ru) { if (ru == RC.ru[0]) VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_TRX_TST, ru->proc.timestamp_tx&0xffffffff ); LOG_D(PHY,"Sending IF4p5 for frame %d subframe %d\n",ru->proc.frame_tx,ru->proc.subframe_tx); - if (subframe_select(&ru->frame_parms,ru->proc.subframe_tx)!=SF_UL) + if (nr_subframe_select(&ru->gNB_list[0]->gNB_config,ru->proc.subframe_tx)!=SF_UL) send_IF4p5(ru,ru->proc.frame_tx, ru->proc.subframe_tx, IF4p5_PDLFFT); } @@ -380,7 +381,7 @@ void fh_if4p5_south_in(RU_t *ru,int *frame,int *subframe) { uint16_t packet_type; uint32_t symbol_number=0; - uint32_t symbol_mask_full; + uint32_t symbol_mask_full=0; /* if ((fp->frame_type == TDD) && (subframe_select(fp,*subframe)==SF_S)) symbol_mask_full = (1<<fp->ul_symbols_in_S_subframe)-1; @@ -2155,7 +2156,7 @@ void init_RU(char *rf_config_file) { gNB0 = ru->gNB_list[0]; fp = ru->nr_frame_parms; LOG_D(PHY, "RU FUnction:%d ru->if_south:%d\n", ru->function, ru->if_south); - LOG_D(PHY, "gNB0:%p fp:%d\n", gNB0, fp); + if (gNB0) { if ((ru->function != NGFI_RRU_IF5) && (ru->function != NGFI_RRU_IF4p5))