From a7721ae24e547368acf62f5065cc7031f5c1d543 Mon Sep 17 00:00:00 2001 From: Raymond Knopp <raymond.knopp@eurecom.fr> Date: Mon, 11 Aug 2014 14:16:45 +0000 Subject: [PATCH] git-svn-id: http://svn.eurecom.fr/openair4G/trunk@5700 818b1a75-f10b-46b9-bf7c-635c3b92a50f --- targets/SIMU/USER/Makefile | 1 + targets/SIMU/USER/channel_sim.c | 141 ++++----- targets/SIMU/USER/event_handler.c | 241 ++++++++-------- targets/SIMU/USER/init_lte.c | 20 +- targets/SIMU/USER/oaisim.c | 410 ++++++++++++++------------- targets/SIMU/USER/oaisim.h | 4 +- targets/SIMU/USER/oaisim_functions.c | 181 ++++++------ 7 files changed, 524 insertions(+), 474 deletions(-) diff --git a/targets/SIMU/USER/Makefile b/targets/SIMU/USER/Makefile index 48f42facab..7ab2896643 100644 --- a/targets/SIMU/USER/Makefile +++ b/targets/SIMU/USER/Makefile @@ -191,6 +191,7 @@ endif endif endif +CFLAGS += -DMAX_NUM_CCs=1 include $(OPENAIR1_DIR)/PHY/Makefile.inc include $(OPENAIR1_DIR)/SCHED/Makefile.inc include $(OPENAIR2_DIR)/RRC/LITE/MESSAGES/Makefile.inc diff --git a/targets/SIMU/USER/channel_sim.c b/targets/SIMU/USER/channel_sim.c index b7e21fb4de..8e72486819 100644 --- a/targets/SIMU/USER/channel_sim.c +++ b/targets/SIMU/USER/channel_sim.c @@ -111,11 +111,12 @@ void do_OFDM_mod(mod_sym_t **txdataF, int32_t **txdata, uint32_t frame,uint16_t void do_DL_sig(double **r_re0,double **r_im0, double **r_re,double **r_im, double **s_re,double **s_im, - channel_desc_t *eNB2UE[NUMBER_OF_eNB_MAX][NUMBER_OF_UE_MAX], + channel_desc_t *eNB2UE[NUMBER_OF_eNB_MAX][NUMBER_OF_UE_MAX][MAX_NUM_CCs], node_desc_t *enb_data[NUMBER_OF_eNB_MAX], node_desc_t *ue_data[NUMBER_OF_UE_MAX], uint16_t next_slot,uint8_t abstraction_flag,LTE_DL_FRAME_PARMS *frame_parms, - uint8_t UE_id) { + uint8_t UE_id, + int CC_id) { int32_t att_eNB_id=-1; int32_t **txdata,**rxdata; @@ -129,8 +130,8 @@ void do_DL_sig(double **r_re0,double **r_im0, double min_path_loss=-200; uint8_t hold_channel=0; // uint8_t aatx,aarx; - uint8_t nb_antennas_rx = eNB2UE[0][0]->nb_rx; // number of rx antennas at UE - uint8_t nb_antennas_tx = eNB2UE[0][0]->nb_tx; // number of tx antennas at eNB + uint8_t nb_antennas_rx = eNB2UE[0][0][CC_id]->nb_rx; // number of rx antennas at UE + uint8_t nb_antennas_tx = eNB2UE[0][0][CC_id]->nb_tx; // number of tx antennas at eNB int subframe_sched = ((next_slot>>1) == 0) ? 9 : ((next_slot>>1)-1); @@ -146,17 +147,17 @@ void do_DL_sig(double **r_re0,double **r_im0, if (!hold_channel) { // calculate the random channel from each eNB for (eNB_id=0;eNB_id<NB_eNB_INST;eNB_id++) { - random_channel(eNB2UE[eNB_id][UE_id],abstraction_flag); + random_channel(eNB2UE[eNB_id][UE_id][CC_id],abstraction_flag); /* for (i=0;i<eNB2UE[eNB_id][UE_id]->nb_taps;i++) printf("eNB2UE[%d][%d]->a[0][%d] = (%f,%f)\n",eNB_id,UE_id,i,eNB2UE[eNB_id][UE_id]->a[0][i].x,eNB2UE[eNB_id][UE_id]->a[0][i].y); */ - freq_channel(eNB2UE[eNB_id][UE_id], frame_parms->N_RB_DL,frame_parms->N_RB_DL*12+1); + freq_channel(eNB2UE[eNB_id][UE_id][CC_id], frame_parms->N_RB_DL,frame_parms->N_RB_DL*12+1); } // find out which eNB the UE is attached to for (eNB_id=0;eNB_id<NB_eNB_INST;eNB_id++) { - if (find_ue(PHY_vars_UE_g[UE_id]->lte_ue_pdcch_vars[0]->crnti,PHY_vars_eNB_g[eNB_id])>=0) { + if (find_ue(PHY_vars_UE_g[UE_id][CC_id]->lte_ue_pdcch_vars[0]->crnti,PHY_vars_eNB_g[eNB_id][CC_id])>=0) { // UE with UE_id is connected to eNb with eNB_id att_eNB_id=eNB_id; LOG_D(OCM,"A: UE attached to eNB (UE%d->eNB%d)\n",UE_id,eNB_id); @@ -166,8 +167,8 @@ void do_DL_sig(double **r_re0,double **r_im0, // if UE is not attached yet, find assume its the eNB with the smallest pathloss if (att_eNB_id<0) { for (eNB_id=0;eNB_id<NB_eNB_INST;eNB_id++) { - if (min_path_loss<eNB2UE[eNB_id][UE_id]->path_loss_dB) { - min_path_loss = eNB2UE[eNB_id][UE_id]->path_loss_dB; + if (min_path_loss<eNB2UE[eNB_id][UE_id][CC_id]->path_loss_dB) { + min_path_loss = eNB2UE[eNB_id][UE_id][CC_id]->path_loss_dB; att_eNB_id=eNB_id; LOG_D(OCM,"B: UE attached to eNB (UE%d->eNB%d)\n",UE_id,eNB_id); } @@ -180,20 +181,20 @@ void do_DL_sig(double **r_re0,double **r_im0, } #ifdef DEBUG_SIM - rx_pwr = signal_energy_fp2(eNB2UE[att_eNB_id][UE_id]->ch[0], - eNB2UE[att_eNB_id][UE_id]->channel_length)*eNB2UE[att_eNB_id][UE_id]->channel_length; - LOG_D(OCM,"Channel eNB %d => UE %d : tx_power %d dBm, path_loss %f dB\n", - att_eNB_id,UE_id, - PHY_vars_eNB_g[att_eNB_id]->lte_frame_parms.pdsch_config_common.referenceSignalPower, - eNB2UE[att_eNB_id][UE_id]->path_loss_dB); + rx_pwr = signal_energy_fp2(eNB2UE[att_eNB_id][UE_id][CC_id]->ch[0], + eNB2UE[att_eNB_id][UE_id][CC_id]->channel_length)*eNB2UE[att_eNB_id][UE_id][CC_id]->channel_length; + LOG_D(OCM,"Channel (CCid %d) eNB %d => UE %d : tx_power %d dBm, path_loss %f dB\n", + CC_id,att_eNB_id,UE_id, + PHY_vars_eNB_g[att_eNB_id][CC_id]->lte_frame_parms.pdsch_config_common.referenceSignalPower, + eNB2UE[att_eNB_id][UE_id][CC_id]->path_loss_dB); #endif //dlsch_abstraction(PHY_vars_UE_g[UE_id]->sinr_dB, rb_alloc, 8); // fill in perfect channel estimates - channel_desc_t *desc1 = eNB2UE[att_eNB_id][UE_id]; - int32_t **dl_channel_est = PHY_vars_UE_g[UE_id]->lte_ue_common_vars.dl_ch_estimates[0]; + channel_desc_t *desc1 = eNB2UE[att_eNB_id][UE_id][CC_id]; + int32_t **dl_channel_est = PHY_vars_UE_g[UE_id][CC_id]->lte_ue_common_vars.dl_ch_estimates[0]; // double scale = pow(10.0,(enb_data[att_eNB_id]->tx_power_dBm + eNB2UE[att_eNB_id][UE_id]->path_loss_dB + (double) PHY_vars_UE_g[UE_id]->rx_total_gain_dB)/20.0); - double scale = pow(10.0,(PHY_vars_eNB_g[att_eNB_id]->lte_frame_parms.pdsch_config_common.referenceSignalPower+eNB2UE[att_eNB_id][UE_id]->path_loss_dB + (double) PHY_vars_UE_g[UE_id]->rx_total_gain_dB)/20.0); + double scale = pow(10.0,(PHY_vars_eNB_g[att_eNB_id][CC_id]->lte_frame_parms.pdsch_config_common.referenceSignalPower+eNB2UE[att_eNB_id][UE_id][CC_id]->path_loss_dB + (double) PHY_vars_UE_g[UE_id][CC_id]->rx_total_gain_dB)/20.0); //this factor is not really needed (it was actually wrong in the non abstraction mode) //scale = scale * sqrt(512.0/300.0); //TODO: make this variable for all BWs LOG_D(OCM,"scale =%lf (%d dB)\n",scale,(int) (20*log10(scale))); @@ -231,12 +232,12 @@ void do_DL_sig(double **r_re0,double **r_im0, */ // calculate the SNR for the attached eNB (this assumes eNB always uses PMI stored in eNB_UE_stats; to be improved) - init_snr(eNB2UE[att_eNB_id][UE_id], enb_data[att_eNB_id], ue_data[UE_id], PHY_vars_UE_g[UE_id]->sinr_dB, &PHY_vars_UE_g[UE_id]->N0, PHY_vars_UE_g[UE_id]->transmission_mode[att_eNB_id], PHY_vars_eNB_g[att_eNB_id]->eNB_UE_stats[UE_id].DL_pmi_single,PHY_vars_eNB_g[att_eNB_id]->mu_mimo_mode[UE_id].dl_pow_off); + init_snr(eNB2UE[att_eNB_id][UE_id][CC_id], enb_data[att_eNB_id], ue_data[UE_id], PHY_vars_UE_g[UE_id][CC_id]->sinr_dB, &PHY_vars_UE_g[UE_id][CC_id]->N0, PHY_vars_UE_g[UE_id][CC_id]->transmission_mode[att_eNB_id], PHY_vars_eNB_g[att_eNB_id][CC_id]->eNB_UE_stats[UE_id].DL_pmi_single,PHY_vars_eNB_g[att_eNB_id][CC_id]->mu_mimo_mode[UE_id].dl_pow_off); // calculate sinr here for (eNB_id = 0; eNB_id < NB_eNB_INST; eNB_id++) { if (att_eNB_id != eNB_id) { - calculate_sinr(eNB2UE[eNB_id][UE_id], enb_data[eNB_id], ue_data[UE_id], PHY_vars_UE_g[UE_id]->sinr_dB); + calculate_sinr(eNB2UE[eNB_id][UE_id][CC_id], enb_data[eNB_id], ue_data[UE_id], PHY_vars_UE_g[UE_id][CC_id]->sinr_dB); } } } // hold channel @@ -248,12 +249,12 @@ void do_DL_sig(double **r_re0,double **r_im0, */ for (eNB_id=0;eNB_id<NB_eNB_INST;eNB_id++) { - start_meas(&PHY_vars_eNB_g[eNB_id]->ofdm_mod_stats); - do_OFDM_mod(PHY_vars_eNB_g[eNB_id]->lte_eNB_common_vars.txdataF[0], - PHY_vars_eNB_g[eNB_id]->lte_eNB_common_vars.txdata[0], - PHY_vars_eNB_g[eNB_id]->proc[subframe_sched].frame_tx,next_slot, - &PHY_vars_eNB_g[eNB_id]->lte_frame_parms); - stop_meas(&PHY_vars_eNB_g[eNB_id]->ofdm_mod_stats); + start_meas(&PHY_vars_eNB_g[eNB_id][CC_id]->ofdm_mod_stats); + do_OFDM_mod(PHY_vars_eNB_g[eNB_id][CC_id]->lte_eNB_common_vars.txdataF[0], + PHY_vars_eNB_g[eNB_id][CC_id]->lte_eNB_common_vars.txdata[0], + PHY_vars_eNB_g[eNB_id][CC_id]->proc[subframe_sched].frame_tx,next_slot, + &PHY_vars_eNB_g[eNB_id][CC_id]->lte_frame_parms); + stop_meas(&PHY_vars_eNB_g[eNB_id][CC_id]->ofdm_mod_stats); } //for (UE_id=0;UE_id<NB_UE_INST;UE_id++) { @@ -279,8 +280,8 @@ void do_DL_sig(double **r_re0,double **r_im0, // if (((double)PHY_vars_UE_g[UE_id]->tx_power_dBm + // eNB2UE[eNB_id][UE_id]->path_loss_dB) <= -107.0) // break; - frame_parms = &PHY_vars_eNB_g[eNB_id]->lte_frame_parms; - txdata = PHY_vars_eNB_g[eNB_id]->lte_eNB_common_vars.txdata[0]; + frame_parms = &PHY_vars_eNB_g[eNB_id][CC_id]->lte_frame_parms; + txdata = PHY_vars_eNB_g[eNB_id][CC_id]->lte_eNB_common_vars.txdata[0]; slot_offset = (next_slot)*(frame_parms->samples_per_tti>>1); slot_offset_meas = ((next_slot&1)==0) ? slot_offset : (slot_offset-(frame_parms->samples_per_tti>>1)); tx_pwr = dac_fixed_gain(s_re, @@ -293,48 +294,48 @@ void do_DL_sig(double **r_re0,double **r_im0, frame_parms->ofdm_symbol_size, 14, // enb_data[eNB_id]->tx_power_dBm); - PHY_vars_eNB_g[eNB_id]->lte_frame_parms.pdsch_config_common.referenceSignalPower); + PHY_vars_eNB_g[eNB_id][CC_id]->lte_frame_parms.pdsch_config_common.referenceSignalPower); #ifdef DEBUG_SIM - LOG_D(OCM,"[SIM][DL] eNB %d: tx_pwr %f dBm, for slot %d (subframe %d)\n", - eNB_id, + LOG_D(OCM,"[SIM][DL] eNB %d (CCid %d): tx_pwr %f dBm, for slot %d (subframe %d)\n", + eNB_id,CC_id, 10*log10(tx_pwr), next_slot, next_slot>>1); #endif //eNB2UE[eNB_id][UE_id]->path_loss_dB = 0; - multipath_channel(eNB2UE[eNB_id][UE_id],s_re,s_im,r_re0,r_im0, + multipath_channel(eNB2UE[eNB_id][UE_id][CC_id],s_re,s_im,r_re0,r_im0, frame_parms->samples_per_tti>>1,hold_channel); #ifdef DEBUG_SIM - rx_pwr = signal_energy_fp2(eNB2UE[eNB_id][UE_id]->ch[0], - eNB2UE[eNB_id][UE_id]->channel_length)*eNB2UE[eNB_id][UE_id]->channel_length; - LOG_D(OCM,"[SIM][DL] Channel eNB %d => UE %d : Channel gain %f dB (%f)\n",eNB_id,UE_id,10*log10(rx_pwr),rx_pwr); + rx_pwr = signal_energy_fp2(eNB2UE[eNB_id][UE_id][CC_id]->ch[0], + eNB2UE[eNB_id][UE_id][CC_id]->channel_length)*eNB2UE[eNB_id][UE_id][CC_id]->channel_length; + LOG_D(OCM,"[SIM][DL] Channel eNB %d => UE %d (CCid %d): Channel gain %f dB (%f)\n",eNB_id,UE_id,CC_id,10*log10(rx_pwr),rx_pwr); #endif #ifdef DEBUG_SIM - for (i=0;i<eNB2UE[eNB_id][UE_id]->channel_length;i++) - printf("ch(%d,%d)[%d] : (%f,%f)\n",eNB_id,UE_id,i,eNB2UE[eNB_id][UE_id]->ch[0][i].x,eNB2UE[eNB_id][UE_id]->ch[0][i].y); + for (i=0;i<eNB2UE[eNB_id][UE_id][CC_id]->channel_length;i++) + printf("ch(%d,%d)[%d] : (%f,%f)\n",eNB_id,UE_id,i,eNB2UE[eNB_id][UE_id][CC_id]->ch[0][i].x,eNB2UE[eNB_id][UE_id][CC_id]->ch[0][i].y); #endif - LOG_D(OCM,"[SIM][DL] Channel eNB %d => UE %d : tx_power %f dBm, path_loss %f dB\n", - eNB_id,UE_id, - (double)PHY_vars_eNB_g[eNB_id]->lte_frame_parms.pdsch_config_common.referenceSignalPower, + LOG_D(OCM,"[SIM][DL] Channel eNB %d => UE %d (CCid %d): tx_power %f dBm, path_loss %f dB\n", + eNB_id,UE_id,CC_id, + (double)PHY_vars_eNB_g[eNB_id][CC_id]->lte_frame_parms.pdsch_config_common.referenceSignalPower, // enb_data[eNB_id]->tx_power_dBm, - eNB2UE[eNB_id][UE_id]->path_loss_dB); + eNB2UE[eNB_id][UE_id][CC_id]->path_loss_dB); #ifdef DEBUG_SIM rx_pwr = signal_energy_fp(r_re0,r_im0,nb_antennas_rx,512,0)*512.0/300.0; LOG_D(OCM,"[SIM][DL] UE %d : rx_pwr %f dBm for slot %d (subframe %d)\n",UE_id,10*log10(rx_pwr),next_slot,next_slot>>1); #endif - if (eNB2UE[eNB_id][UE_id]->first_run == 1) - eNB2UE[eNB_id][UE_id]->first_run = 0; + if (eNB2UE[eNB_id][UE_id][CC_id]->first_run == 1) + eNB2UE[eNB_id][UE_id][CC_id]->first_run = 0; // RF model #ifdef DEBUG_SIM - LOG_D(OCM,"[SIM][DL] UE %d : rx_gain %d dB for slot %d (subframe %d)\n",UE_id,PHY_vars_UE_g[UE_id]->rx_total_gain_dB,next_slot,next_slot>>1); + LOG_D(OCM,"[SIM][DL] UE %d (CCid %d): rx_gain %d dB for slot %d (subframe %d)\n",UE_id,CC_id,PHY_vars_UE_g[UE_id][CC_id]->rx_total_gain_dB,next_slot,next_slot>>1); #endif /* rf_rx(r_re0, @@ -361,8 +362,8 @@ void do_DL_sig(double **r_re0,double **r_im0, r_im0, nb_antennas_rx, frame_parms->samples_per_tti>>1, - 1e3/eNB2UE[eNB_id][UE_id]->BW, // sampling time (ns) - (double)PHY_vars_UE_g[UE_id]->rx_total_gain_dB - 66.227); // rx_gain (dB) (66.227 = 20*log10(pow2(11)) = gain from the adc that will be applied later) + 1e3/eNB2UE[eNB_id][UE_id][CC_id]->BW, // sampling time (ns) + (double)PHY_vars_UE_g[UE_id][CC_id]->rx_total_gain_dB - 66.227); // rx_gain (dB) (66.227 = 20*log10(pow2(11)) = gain from the adc that will be applied later) #ifdef DEBUG_SIM rx_pwr = signal_energy_fp(r_re0,r_im0,nb_antennas_rx,frame_parms->ofdm_symbol_size,0)*512.0/300; @@ -383,7 +384,7 @@ void do_DL_sig(double **r_re0,double **r_im0, LOG_D(OCM,"[SIM][DL] UE %d : ADC in %f dB for slot %d (subframe %d)\n",UE_id,10*log10(rx_pwr),next_slot,next_slot>>1); #endif - rxdata = PHY_vars_UE_g[UE_id]->lte_ue_common_vars.rxdata; + rxdata = PHY_vars_UE_g[UE_id][CC_id]->lte_ue_common_vars.rxdata; slot_offset = (next_slot)*(frame_parms->samples_per_tti>>1); adc(r_re, @@ -409,7 +410,7 @@ void do_DL_sig(double **r_re0,double **r_im0, } -void do_UL_sig(double **r_re0,double **r_im0,double **r_re,double **r_im,double **s_re,double **s_im,channel_desc_t *UE2eNB[NUMBER_OF_UE_MAX][NUMBER_OF_eNB_MAX],node_desc_t *enb_data[NUMBER_OF_eNB_MAX],node_desc_t *ue_data[NUMBER_OF_UE_MAX],uint16_t next_slot,uint8_t abstraction_flag,LTE_DL_FRAME_PARMS *frame_parms, uint32_t frame) { +void do_UL_sig(double **r_re0,double **r_im0,double **r_re,double **r_im,double **s_re,double **s_im,channel_desc_t *UE2eNB[NUMBER_OF_UE_MAX][NUMBER_OF_eNB_MAX][MAX_NUM_CCs],node_desc_t *enb_data[NUMBER_OF_eNB_MAX],node_desc_t *ue_data[NUMBER_OF_UE_MAX],uint16_t next_slot,uint8_t abstraction_flag,LTE_DL_FRAME_PARMS *frame_parms, uint32_t frame,uint8_t CC_id) { int32_t **txdata,**rxdata; #ifdef PHY_ABSTRACTION_UL @@ -417,8 +418,8 @@ void do_UL_sig(double **r_re0,double **r_im0,double **r_re,double **r_im,double #endif uint8_t eNB_id=0,UE_id=0; - uint8_t nb_antennas_rx = UE2eNB[0][0]->nb_rx; // number of rx antennas at eNB - uint8_t nb_antennas_tx = UE2eNB[0][0]->nb_tx; // number of tx antennas at UE + uint8_t nb_antennas_rx = UE2eNB[0][0][CC_id]->nb_rx; // number of rx antennas at eNB + uint8_t nb_antennas_tx = UE2eNB[0][0][CC_id]->nb_tx; // number of tx antennas at UE double tx_pwr, rx_pwr; int32_t rx_pwr2; @@ -451,27 +452,27 @@ void do_UL_sig(double **r_re0,double **r_im0,double **r_re,double **r_im,double for (UE_id=0;UE_id<NB_UE_INST;UE_id++) { if (!hold_channel) { - random_channel(UE2eNB[UE_id][eNB_id],abstraction_flag); - freq_channel(UE2eNB[UE_id][eNB_id], frame_parms->N_RB_UL,frame_parms->N_RB_UL*12+1); + random_channel(UE2eNB[UE_id][eNB_id][CC_id],abstraction_flag); + freq_channel(UE2eNB[UE_id][eNB_id][CC_id], frame_parms->N_RB_UL,frame_parms->N_RB_UL*12+1); // REceived power at the eNB - rx_pwr = signal_energy_fp2(UE2eNB[UE_id][eNB_id]->ch[0], - UE2eNB[UE_id][eNB_id]->channel_length)*UE2eNB[UE_id][att_eNB_id]->channel_length; // calculate the rx power at the eNB + rx_pwr = signal_energy_fp2(UE2eNB[UE_id][eNB_id][CC_id]->ch[0], + UE2eNB[UE_id][eNB_id][CC_id]->channel_length)*UE2eNB[UE_id][att_eNB_id][CC_id]->channel_length; // calculate the rx power at the eNB } // write_output("SINRch.m","SINRch",PHY_vars_eNB_g[att_eNB_id]->sinr_dB_eNB,frame_parms->N_RB_UL*12+1,1,1); if(subframe>1 && subframe <5) { harq_pid = subframe2harq_pid(frame_parms,frame,subframe); - ul_nb_rb = PHY_vars_eNB_g[att_eNB_id]->ulsch_eNB[(uint8_t)UE_id]->harq_processes[harq_pid]->nb_rb; - ul_fr_rb = PHY_vars_eNB_g[att_eNB_id]->ulsch_eNB[(uint8_t)UE_id]->harq_processes[harq_pid]->first_rb; + ul_nb_rb = PHY_vars_eNB_g[att_eNB_id][CC_id]->ulsch_eNB[(uint8_t)UE_id]->harq_processes[harq_pid]->nb_rb; + ul_fr_rb = PHY_vars_eNB_g[att_eNB_id][CC_id]->ulsch_eNB[(uint8_t)UE_id]->harq_processes[harq_pid]->first_rb; } if(ul_nb_rb>1 && (ul_fr_rb < 25 && ul_fr_rb > -1)) { number_rb_ul = ul_nb_rb; first_rbUL = ul_fr_rb; - init_snr_up(UE2eNB[UE_id][att_eNB_id],enb_data[att_eNB_id], ue_data[UE_id],PHY_vars_eNB_g[att_eNB_id]->sinr_dB,&PHY_vars_UE_g[att_eNB_id]->N0,ul_nb_rb,ul_fr_rb); + init_snr_up(UE2eNB[UE_id][att_eNB_id][CC_id],enb_data[att_eNB_id], ue_data[UE_id],PHY_vars_eNB_g[att_eNB_id][CC_id]->sinr_dB,&PHY_vars_UE_g[att_eNB_id][CC_id]->N0,ul_nb_rb,ul_fr_rb); } } //UE_id @@ -510,13 +511,13 @@ if (abstraction_flag!=0) { // Compute RX signal for eNB = eNB_id for (UE_id=0;UE_id<NB_UE_INST;UE_id++){ - txdata = PHY_vars_UE_g[UE_id]->lte_ue_common_vars.txdata; - frame_parms = &PHY_vars_UE_g[UE_id]->lte_frame_parms; + txdata = PHY_vars_UE_g[UE_id][CC_id]->lte_ue_common_vars.txdata; + frame_parms = &PHY_vars_UE_g[UE_id][CC_id]->lte_frame_parms; slot_offset = (next_slot)*(frame_parms->samples_per_tti>>1); slot_offset_meas = ((next_slot&1)==0) ? slot_offset : (slot_offset-(frame_parms->samples_per_tti>>1)); - if (((double)PHY_vars_UE_g[UE_id]->tx_power_dBm + - UE2eNB[UE_id][eNB_id]->path_loss_dB) <= -125.0) { + if (((double)PHY_vars_UE_g[UE_id][CC_id]->tx_power_dBm + + UE2eNB[UE_id][eNB_id][CC_id]->path_loss_dB) <= -125.0) { // don't simulate a UE that is too weak } @@ -531,18 +532,18 @@ if (abstraction_flag!=0) { slot_offset_meas, frame_parms->ofdm_symbol_size, 14, - PHY_vars_UE_g[UE_id]->tx_power_dBm); + PHY_vars_UE_g[UE_id][CC_id]->tx_power_dBm); //ue_data[UE_id]->tx_power_dBm); #ifdef DEBUG_SIM LOG_D(OCM,"[SIM][UL] UE %d tx_pwr %f dBm (target %d dBm) for slot %d (subframe %d, slot_offset %d, slot_offset_meas %d)\n",UE_id,10*log10(tx_pwr),PHY_vars_UE_g[UE_id]->tx_power_dBm,next_slot,next_slot>>1,slot_offset,slot_offset_meas); #endif - multipath_channel(UE2eNB[UE_id][eNB_id],s_re,s_im,r_re0,r_im0, + multipath_channel(UE2eNB[UE_id][eNB_id][CC_id],s_re,s_im,r_re0,r_im0, frame_parms->samples_per_tti>>1,hold_channel); #ifdef DEBUG_SIM - rx_pwr = signal_energy_fp2(UE2eNB[UE_id][eNB_id]->ch[0], - UE2eNB[UE_id][eNB_id]->channel_length)*UE2eNB[UE_id][eNB_id]->channel_length; + rx_pwr = signal_energy_fp2(UE2eNB[UE_id][eNB_id][CC_id]->ch[0], + UE2eNB[UE_id][eNB_id][CC_id]->channel_length)*UE2eNB[UE_id][eNB_id][CC_id]->channel_length; LOG_D(OCM,"[SIM][UL] slot %d Channel UE %d => eNB %d : %f dB (hold %d)\n",next_slot,UE_id,eNB_id,10*log10(rx_pwr),hold_channel); #endif @@ -553,8 +554,8 @@ if (abstraction_flag!=0) { #endif - if (UE2eNB[UE_id][eNB_id]->first_run == 1) - UE2eNB[UE_id][eNB_id]->first_run = 0; + if (UE2eNB[UE_id][eNB_id][CC_id]->first_run == 1) + UE2eNB[UE_id][eNB_id][CC_id]->first_run = 0; @@ -593,15 +594,15 @@ if (abstraction_flag!=0) { r_im, nb_antennas_rx, frame_parms->samples_per_tti>>1, - 1e3/UE2eNB[0][eNB_id]->BW, // sampling time (ns) - (double)PHY_vars_eNB_g[eNB_id]->rx_total_gain_eNB_dB - 66.227); // rx_gain (dB) (66.227 = 20*log10(pow2(11)) = gain from the adc that will be applied later) + 1e3/UE2eNB[0][eNB_id][CC_id]->BW, // sampling time (ns) + (double)PHY_vars_eNB_g[eNB_id][CC_id]->rx_total_gain_eNB_dB - 66.227); // rx_gain (dB) (66.227 = 20*log10(pow2(11)) = gain from the adc that will be applied later) #ifdef DEBUG_SIM rx_pwr = signal_energy_fp(r_re,r_im,nb_antennas_rx,frame_parms->samples_per_tti>>1,0); LOG_D(OCM,"[SIM][UL] rx_pwr (ADC in) %f dB for slot %d (subframe %d)\n",10*log10(rx_pwr),next_slot,next_slot>>1); #endif - rxdata = PHY_vars_eNB_g[eNB_id]->lte_eNB_common_vars.rxdata[0]; + rxdata = PHY_vars_eNB_g[eNB_id][CC_id]->lte_eNB_common_vars.rxdata[0]; slot_offset = (next_slot)*(frame_parms->samples_per_tti>>1); adc(r_re, diff --git a/targets/SIMU/USER/event_handler.c b/targets/SIMU/USER/event_handler.c index c67b36f3bd..dfe1e00b4d 100644 --- a/targets/SIMU/USER/event_handler.c +++ b/targets/SIMU/USER/event_handler.c @@ -334,7 +334,7 @@ void execute_events(frame_t frame){ void update_mac(Event_t event) { LOG_I(EMU,"A NEW MAC MODEL\n"); int i = 0; - + UE_list_t *UE_list; if(event.optype == READ) { @@ -456,23 +456,24 @@ void update_mac(Event_t event) { LOG_I(EMU,"update complete mac params \n"); if(event.ue == -1 && event.lcid == -1) { - for(i=0;i<NUMBER_OF_UE_MAX;i++) + UE_list = &eNB_mac_inst->UE_list; + for(i=UE_list->head;i>=0;i=UE_list->next[i]) { if(&mac_config[i].DCI_aggregation_min) { LOG_I(EMU,"update dci aggregation min\n"); oai_emulation->mac_config[i].DCI_aggregation_min= mac_config[i].DCI_aggregation_min; - eNB_mac_inst->UE_template[i].DCI_aggregation_min = oai_emulation->mac_config[i].DCI_aggregation_min; + UE_list->UE_template[0][i].DCI_aggregation_min = oai_emulation->mac_config[i].DCI_aggregation_min; LOG_I(EMU,"DCI_aggregation_min UE %d: \n",i); - LOG_I(EMU,"%" PRIu8,eNB_mac_inst->UE_template[i].DCI_aggregation_min); + LOG_I(EMU,"%" PRIu8,UE_list->UE_template[0][i].DCI_aggregation_min); } if(&mac_config[i].DLSCH_dci_size_bits !=NULL) { oai_emulation->mac_config[i].DLSCH_dci_size_bits= mac_config[i].DLSCH_dci_size_bits; - eNB_mac_inst->UE_template[i].DLSCH_dci_size_bits = oai_emulation->mac_config[i].DLSCH_dci_size_bits; + UE_list->UE_template[0][i].DLSCH_dci_size_bits = oai_emulation->mac_config[i].DLSCH_dci_size_bits; LOG_I(EMU,"DLSCH_dci_size_bits UE %d: \n",i); - LOG_I(EMU,"%" PRIu8,eNB_mac_inst->UE_template[i].DLSCH_dci_size_bits); + LOG_I(EMU,"%" PRIu8,UE_list->UE_template[0][i].DLSCH_dci_size_bits); } if(mac_config[i].priority !=NULL) { @@ -484,9 +485,9 @@ void update_mac(Event_t event) { if(&mac_config[i].priority[j]!=NULL) { oai_emulation->mac_config[i].priority[j]= mac_config[i].priority[j]; - eNB_mac_inst->UE_sched_ctrl[i].priority[j] = oai_emulation->mac_config[i].priority[j]; + UE_list->UE_sched_ctrl[i].priority[j] = oai_emulation->mac_config[i].priority[j]; LOG_I(EMU,"priority UE %d LCID %d:",i,j); - LOG_I(EMU,"%" PRIu8 "\n",eNB_mac_inst->UE_sched_ctrl[i].priority[j]); + LOG_I(EMU,"%" PRIu8 "\n",UE_list->UE_sched_ctrl[i].priority[j]); } } } @@ -498,9 +499,9 @@ void update_mac(Event_t event) { { oai_emulation->mac_config[i].ul_bandwidth[j]= mac_config[i].ul_bandwidth[j]; - eNB_mac_inst->UE_sched_ctrl[i].ul_bandwidth[j] = oai_emulation->mac_config[i].ul_bandwidth[j]; + UE_list->UE_sched_ctrl[i].ul_bandwidth[j] = oai_emulation->mac_config[i].ul_bandwidth[j]; LOG_I(EMU,"ul_bandwidth UE %d LCID %d:", i, j); - LOG_I(EMU,"%" PRIu8 "\n",eNB_mac_inst->UE_sched_ctrl[i].ul_bandwidth[j]); + LOG_I(EMU,"%" PRIu8 "\n",UE_list->UE_sched_ctrl[i].ul_bandwidth[j]); } } if(&mac_config[i].dl_bandwidth !=NULL) @@ -510,38 +511,38 @@ void update_mac(Event_t event) { { oai_emulation->mac_config[i].dl_bandwidth[j]= mac_config[i].dl_bandwidth[j]; - eNB_mac_inst->UE_sched_ctrl[i].dl_bandwidth[j] = oai_emulation->mac_config[i].dl_bandwidth[j]; + UE_list->UE_sched_ctrl[i].dl_bandwidth[j] = oai_emulation->mac_config[i].dl_bandwidth[j]; LOG_I(EMU,"ul_bandwidth UE %d LCID %d:", i, j); - LOG_I(EMU,"%" PRIu8 "\n",eNB_mac_inst->UE_sched_ctrl[i].dl_bandwidth[j]); + LOG_I(EMU,"%" PRIu8 "\n",UE_list->UE_sched_ctrl[i].dl_bandwidth[j]); } } if(&mac_config[i].ue_AggregatedMaximumBitrateDL !=NULL) { oai_emulation->mac_config[i].ue_AggregatedMaximumBitrateDL= mac_config[i].ue_AggregatedMaximumBitrateDL; - eNB_mac_inst->UE_sched_ctrl[i].ue_AggregatedMaximumBitrateDL = oai_emulation->mac_config[i].ue_AggregatedMaximumBitrateDL; + UE_list->UE_sched_ctrl[i].ue_AggregatedMaximumBitrateDL = oai_emulation->mac_config[i].ue_AggregatedMaximumBitrateDL; LOG_I(EMU,"ue_AggregatedMaximumBitrateDL UE %d:",i ); - LOG_I(EMU,"%" PRIu64 "\n",eNB_mac_inst->UE_sched_ctrl[i].ue_AggregatedMaximumBitrateDL); + LOG_I(EMU,"%" PRIu64 "\n",UE_list->UE_sched_ctrl[i].ue_AggregatedMaximumBitrateDL); } if(&mac_config[i].ue_AggregatedMaximumBitrateUL !=NULL) { oai_emulation->mac_config[i].ue_AggregatedMaximumBitrateUL= mac_config[i].ue_AggregatedMaximumBitrateUL; - eNB_mac_inst->UE_sched_ctrl[i].ue_AggregatedMaximumBitrateUL = oai_emulation->mac_config[i].ue_AggregatedMaximumBitrateUL; + UE_list->UE_sched_ctrl[i].ue_AggregatedMaximumBitrateUL = oai_emulation->mac_config[i].ue_AggregatedMaximumBitrateUL; LOG_I(EMU,"ue_AggregatedMaximumBitrateUL UE %d:",i); - LOG_I(EMU,"%" PRIu64 "\n",eNB_mac_inst->UE_sched_ctrl[i].ue_AggregatedMaximumBitrateUL); + LOG_I(EMU,"%" PRIu64 "\n",UE_list->UE_sched_ctrl[i].ue_AggregatedMaximumBitrateUL); } if(&mac_config[i].cqiSchedInterval !=NULL) { oai_emulation->mac_config[i].cqiSchedInterval= mac_config[i].cqiSchedInterval; - eNB_mac_inst->UE_sched_ctrl[i].cqiSchedInterval = oai_emulation->mac_config[i].cqiSchedInterval; + UE_list->UE_sched_ctrl[i].cqiSchedInterval = oai_emulation->mac_config[i].cqiSchedInterval; LOG_I(EMU,"cqiSchedInterval UE %d:",i); - LOG_I(EMU,"%" PRIu16 "\n",eNB_mac_inst->UE_sched_ctrl[i].cqiSchedInterval); + LOG_I(EMU,"%" PRIu16 "\n",UE_list->UE_sched_ctrl[i].cqiSchedInterval); } if(&mac_config[i].mac_ContentionResolutionTimer !=NULL) { oai_emulation->mac_config[i].mac_ContentionResolutionTimer= mac_config[i].mac_ContentionResolutionTimer; - eNB_mac_inst->UE_sched_ctrl[i].mac_ContentionResolutionTimer = oai_emulation->mac_config[i].mac_ContentionResolutionTimer; + UE_list->UE_sched_ctrl[i].mac_ContentionResolutionTimer = oai_emulation->mac_config[i].mac_ContentionResolutionTimer; LOG_I(EMU,"mac_ContentionResolutionTimer UE %:", i); - LOG_I(EMU,"%" PRIu8 "\n",eNB_mac_inst->UE_sched_ctrl[i].mac_ContentionResolutionTimer); + LOG_I(EMU,"%" PRIu8 "\n",UE_list->UE_sched_ctrl[i].mac_ContentionResolutionTimer); } if(mac_config->max_allowed_rbs !=NULL) { @@ -549,9 +550,9 @@ void update_mac(Event_t event) { for(j=0;j<MAX_NUM_LCID;j++) { oai_emulation->mac_config[i].max_allowed_rbs[j]= mac_config[i].max_allowed_rbs[j]; - eNB_mac_inst->UE_sched_ctrl[i].max_allowed_rbs[j] = oai_emulation->mac_config[i].max_allowed_rbs[j]; + UE_list->UE_sched_ctrl[i].max_allowed_rbs[j] = oai_emulation->mac_config[i].max_allowed_rbs[j]; LOG_I(EMU,"max_allowed_rbs UE %d LCID %d:",i,j); - LOG_I(EMU,"%" PRIu16 "\n",eNB_mac_inst->UE_sched_ctrl[i].max_allowed_rbs[j]); + LOG_I(EMU,"%" PRIu16 "\n",UE_list->UE_sched_ctrl[i].max_allowed_rbs[j]); } } if(mac_config[i].max_mcs !=NULL) @@ -560,9 +561,9 @@ void update_mac(Event_t event) { for(j=0;j<MAX_NUM_LCID;j++) { oai_emulation->mac_config[i].max_mcs[j]= mac_config[i].max_mcs[j]; - eNB_mac_inst->UE_sched_ctrl[i].max_mcs[j] = oai_emulation->mac_config[i].max_mcs[j]; + UE_list->UE_sched_ctrl[i].max_mcs[j] = oai_emulation->mac_config[i].max_mcs[j]; LOG_I(EMU,"max_mcs UE %d LCID %d:",i,j); - LOG_I(EMU,"%" PRIu8 "\n",eNB_mac_inst->UE_sched_ctrl[i].max_mcs[j]); + LOG_I(EMU,"%" PRIu8 "\n",UE_list->UE_sched_ctrl[i].max_mcs[j]); } } @@ -581,16 +582,16 @@ void update_mac(Event_t event) { LOG_I(EMU,"update dci aggregation min\n"); oai_emulation->mac_config[i].DCI_aggregation_min= mac_config[i].DCI_aggregation_min; // duplication dans le ue template, vérifier la validité avant - eNB_mac_inst->UE_template[i].DCI_aggregation_min = oai_emulation->mac_config[i].DCI_aggregation_min; + UE_list->UE_template[0][i].DCI_aggregation_min = oai_emulation->mac_config[i].DCI_aggregation_min; LOG_I(EMU,"DCI_aggregation_min UE %d: \n",i); - LOG_I(EMU,"%" PRIu8,eNB_mac_inst->UE_template[i].DCI_aggregation_min); + LOG_I(EMU,"%" PRIu8,UE_list->UE_template[0][i].DCI_aggregation_min); } if(&mac_config[i].DLSCH_dci_size_bits !=NULL) { oai_emulation->mac_config[i].DLSCH_dci_size_bits= mac_config[i].DLSCH_dci_size_bits; - eNB_mac_inst->UE_template[i].DLSCH_dci_size_bits = oai_emulation->mac_config[i].DLSCH_dci_size_bits; + UE_list->UE_template[0][i].DLSCH_dci_size_bits = oai_emulation->mac_config[i].DLSCH_dci_size_bits; LOG_I(EMU,"DLSCH_dci_size_bits UE %d: \n",i); - LOG_I(EMU,"%" PRIu8,eNB_mac_inst->UE_template[i].DLSCH_dci_size_bits); + LOG_I(EMU,"%" PRIu8,UE_list->UE_template[0][i].DLSCH_dci_size_bits); } if(mac_config[i].priority !=NULL) { @@ -600,9 +601,9 @@ void update_mac(Event_t event) { if(&mac_config[i].priority[j]!=NULL) { oai_emulation->mac_config[i].priority[j]= mac_config[i].priority[j]; - eNB_mac_inst->UE_sched_ctrl[i].priority[j] = oai_emulation->mac_config[i].priority[j]; + UE_list->UE_sched_ctrl[i].priority[j] = oai_emulation->mac_config[i].priority[j]; LOG_I(EMU,"priority UE %d LCID %d:",i,j); - LOG_I(EMU,"%" PRIu8 "\n",eNB_mac_inst->UE_sched_ctrl[i].priority[j]); + LOG_I(EMU,"%" PRIu8 "\n",UE_list->UE_sched_ctrl[i].priority[j]); } } @@ -613,79 +614,79 @@ void update_mac(Event_t event) { oai_emulation->mac_config[i].ul_bandwidth[j]= mac_config[i].ul_bandwidth[j]; - eNB_mac_inst->UE_sched_ctrl[i].ul_bandwidth[j] = oai_emulation->mac_config[i].ul_bandwidth[j]; + UE_list->UE_sched_ctrl[i].ul_bandwidth[j] = oai_emulation->mac_config[i].ul_bandwidth[j]; LOG_I(EMU,"ul_bandwidth UE %d LCID %d:", i, j); - LOG_I(EMU,"%" PRIu8 "\n",eNB_mac_inst->UE_sched_ctrl[i].ul_bandwidth[j]); + LOG_I(EMU,"%" PRIu8 "\n",UE_list->UE_sched_ctrl[i].ul_bandwidth[j]); } if(&mac_config[i].dl_bandwidth !=NULL) { oai_emulation->mac_config[i].dl_bandwidth[j]= mac_config[i].dl_bandwidth[j]; - eNB_mac_inst->UE_sched_ctrl[i].dl_bandwidth[j] = oai_emulation->mac_config[i].dl_bandwidth[j]; + UE_list->UE_sched_ctrl[i].dl_bandwidth[j] = oai_emulation->mac_config[i].dl_bandwidth[j]; LOG_I(EMU,"ul_bandwidth UE %d LCID %d:", i, j); - LOG_I(EMU,"%" PRIu8 "\n",eNB_mac_inst->UE_sched_ctrl[i].dl_bandwidth[j]); + LOG_I(EMU,"%" PRIu8 "\n",UE_list->UE_sched_ctrl[i].dl_bandwidth[j]); } if(&mac_config[i].min_ul_bandwidth !=NULL) { // faire boucle par ue puis par lcid oai_emulation->mac_config[i].min_ul_bandwidth[j]= mac_config[i].min_ul_bandwidth[j]; - eNB_mac_inst->UE_sched_ctrl[i].min_ul_bandwidth[j] = oai_emulation->mac_config[i].min_ul_bandwidth[j]; + UE_list->UE_sched_ctrl[i].min_ul_bandwidth[j] = oai_emulation->mac_config[i].min_ul_bandwidth[j]; LOG_I(EMU,"min_ul_bandwidth UE %d LCID %d:", i, j); - LOG_I(EMU,"%" PRIu8 "\n",eNB_mac_inst->UE_sched_ctrl[i].min_ul_bandwidth[j]); + LOG_I(EMU,"%" PRIu8 "\n",UE_list->UE_sched_ctrl[i].min_ul_bandwidth[j]); } if(&mac_config[i].min_dl_bandwidth !=NULL) { oai_emulation->mac_config[i].min_dl_bandwidth[j]= mac_config[i].min_dl_bandwidth[j]; - eNB_mac_inst->UE_sched_ctrl[i].min_dl_bandwidth[j] = oai_emulation->mac_config[i].min_dl_bandwidth[j]; + UE_list->UE_sched_ctrl[i].min_dl_bandwidth[j] = oai_emulation->mac_config[i].min_dl_bandwidth[j]; LOG_I(EMU,"min_dl_bandwidth UE %d LCID %d:", i, j); - LOG_I(EMU,"%" PRIu8 "\n",eNB_mac_inst->UE_sched_ctrl[i].min_dl_bandwidth[j]); + LOG_I(EMU,"%" PRIu8 "\n",UE_list->UE_sched_ctrl[i].min_dl_bandwidth[j]); } if(&mac_config[i].ue_AggregatedMaximumBitrateDL !=NULL) { oai_emulation->mac_config[i].ue_AggregatedMaximumBitrateDL= mac_config[i].ue_AggregatedMaximumBitrateDL; - eNB_mac_inst->UE_sched_ctrl[i].ue_AggregatedMaximumBitrateDL = oai_emulation->mac_config[i].ue_AggregatedMaximumBitrateDL; + UE_list->UE_sched_ctrl[i].ue_AggregatedMaximumBitrateDL = oai_emulation->mac_config[i].ue_AggregatedMaximumBitrateDL; LOG_I(EMU,"ue_AggregatedMaximumBitrateDL UE %d:",i ); - LOG_I(EMU,"%" PRIu64 "\n",eNB_mac_inst->UE_sched_ctrl[i].ue_AggregatedMaximumBitrateDL); + LOG_I(EMU,"%" PRIu64 "\n",UE_list->UE_sched_ctrl[i].ue_AggregatedMaximumBitrateDL); } if(&mac_config[i].ue_AggregatedMaximumBitrateUL !=NULL) { oai_emulation->mac_config[i].ue_AggregatedMaximumBitrateUL= mac_config[i].ue_AggregatedMaximumBitrateUL; - eNB_mac_inst->UE_sched_ctrl[i].ue_AggregatedMaximumBitrateUL = oai_emulation->mac_config[i].ue_AggregatedMaximumBitrateUL; + UE_list->UE_sched_ctrl[i].ue_AggregatedMaximumBitrateUL = oai_emulation->mac_config[i].ue_AggregatedMaximumBitrateUL; LOG_I(EMU,"ue_AggregatedMaximumBitrateUL UE %d:",i); - LOG_I(EMU,"%" PRIu64 "\n",eNB_mac_inst->UE_sched_ctrl[i].ue_AggregatedMaximumBitrateUL); + LOG_I(EMU,"%" PRIu64 "\n",UE_list->UE_sched_ctrl[i].ue_AggregatedMaximumBitrateUL); } if(&mac_config[i].cqiSchedInterval !=NULL) { oai_emulation->mac_config[i].cqiSchedInterval= mac_config[i].cqiSchedInterval; - eNB_mac_inst->UE_sched_ctrl[i].cqiSchedInterval = oai_emulation->mac_config[i].cqiSchedInterval; + UE_list->UE_sched_ctrl[i].cqiSchedInterval = oai_emulation->mac_config[i].cqiSchedInterval; LOG_I(EMU,"cqiSchedInterval UE %d:",i); - LOG_I(EMU,"%" PRIu16 "\n",eNB_mac_inst->UE_sched_ctrl[i].cqiSchedInterval); + LOG_I(EMU,"%" PRIu16 "\n",UE_list->UE_sched_ctrl[i].cqiSchedInterval); } if(&mac_config[i].mac_ContentionResolutionTimer !=NULL) { oai_emulation->mac_config[i].mac_ContentionResolutionTimer= mac_config[i].mac_ContentionResolutionTimer; - eNB_mac_inst->UE_sched_ctrl[i].mac_ContentionResolutionTimer = oai_emulation->mac_config[i].mac_ContentionResolutionTimer; + UE_list->UE_sched_ctrl[i].mac_ContentionResolutionTimer = oai_emulation->mac_config[i].mac_ContentionResolutionTimer; LOG_I(EMU,"mac_ContentionResolutionTimer UE %:", i); - LOG_I(EMU,"%" PRIu8 "\n",eNB_mac_inst->UE_sched_ctrl[i].mac_ContentionResolutionTimer); + LOG_I(EMU,"%" PRIu8 "\n",UE_list->UE_sched_ctrl[i].mac_ContentionResolutionTimer); } if(mac_config->max_allowed_rbs !=NULL) { oai_emulation->mac_config[i].max_allowed_rbs[j]= mac_config[i].max_allowed_rbs[j]; - eNB_mac_inst->UE_sched_ctrl[i].max_allowed_rbs[j] = oai_emulation->mac_config[i].max_allowed_rbs[j]; + UE_list->UE_sched_ctrl[i].max_allowed_rbs[j] = oai_emulation->mac_config[i].max_allowed_rbs[j]; LOG_I(EMU,"max_allowed_rbs UE %d LCID %d:",i,j); - LOG_I(EMU,"%" PRIu16 "\n",eNB_mac_inst->UE_sched_ctrl[i].max_allowed_rbs[j]); + LOG_I(EMU,"%" PRIu16 "\n",UE_list->UE_sched_ctrl[i].max_allowed_rbs[j]); } if(mac_config[i].max_mcs !=NULL) { oai_emulation->mac_config[i].max_mcs[j]= mac_config[i].max_mcs[j]; - eNB_mac_inst->UE_sched_ctrl[i].max_mcs[j] = oai_emulation->mac_config[i].max_mcs[j]; + UE_list->UE_sched_ctrl[i].max_mcs[j] = oai_emulation->mac_config[i].max_mcs[j]; LOG_I(EMU,"max_mcs UE %d LCID %d:",i,j); - LOG_I(EMU,"%" PRIu8 "\n",eNB_mac_inst->UE_sched_ctrl[i].max_mcs[j]); + LOG_I(EMU,"%" PRIu8 "\n",UE_list->UE_sched_ctrl[i].max_mcs[j]); } } @@ -707,9 +708,9 @@ void update_mac(Event_t event) { if(&mac_config[i].priority[j]!=NULL) { oai_emulation->mac_config[i].priority[j]= mac_config[i].priority[j]; - eNB_mac_inst->UE_sched_ctrl[i].priority[j] = oai_emulation->mac_config[i].priority[j]; + UE_list->UE_sched_ctrl[i].priority[j] = oai_emulation->mac_config[i].priority[j]; LOG_I(EMU,"priority UE %d LCID %d:",i,j); - LOG_I(EMU,"%" PRIu8 "\n",eNB_mac_inst->UE_sched_ctrl[i].priority[j]); + LOG_I(EMU,"%" PRIu8 "\n",UE_list->UE_sched_ctrl[i].priority[j]); } } } @@ -717,9 +718,9 @@ void update_mac(Event_t event) { else { oai_emulation->mac_config[event.ue].priority[event.lcid]= mac_config[event.ue].priority[event.lcid]; - eNB_mac_inst->UE_sched_ctrl[event.ue].priority[event.lcid] = oai_emulation->mac_config[event.ue].priority[event.lcid]; + UE_list->UE_sched_ctrl[event.ue].priority[event.lcid] = oai_emulation->mac_config[event.ue].priority[event.lcid]; LOG_I(EMU,"priority UE %d LCID %d:",i,j); - LOG_I(EMU,"%" PRIu8 "\n",eNB_mac_inst->UE_sched_ctrl[event.ue].priority[event.lcid]); + LOG_I(EMU,"%" PRIu8 "\n",UE_list->UE_sched_ctrl[event.ue].priority[event.lcid]); } } else if(!strcmp((char *) event.key, "DCI_aggregation_min") && event.value!=NULL && validate_mac(event)) @@ -730,20 +731,21 @@ void update_mac(Event_t event) { LOG_I(EMU,"DCI_aggregation_min update \n"); if(event.ue == -1) { - for(i=0;i<NUMBER_OF_UE_MAX;i++) + UE_list = &eNB_mac_inst->UE_list; + for(i=UE_list->head;i>=0;i=UE_list->next[i]) { oai_emulation->mac_config[i].DCI_aggregation_min=mac_config[i].DCI_aggregation_min; - eNB_mac_inst->UE_template[i].DCI_aggregation_min = oai_emulation->mac_config[i].DCI_aggregation_min; + UE_list->UE_template[0][i].DCI_aggregation_min = oai_emulation->mac_config[i].DCI_aggregation_min; LOG_I(EMU,"DCI_aggregation_min UE %d : \n", i); - LOG_I(EMU,"%" PRIu8 "\n",eNB_mac_inst->UE_template[i].DCI_aggregation_min); + LOG_I(EMU,"%" PRIu8 "\n",UE_list->UE_template[0][i].DCI_aggregation_min); } } else { oai_emulation->mac_config[event.ue].DCI_aggregation_min=mac_config[event.ue].DCI_aggregation_min; - eNB_mac_inst->UE_template[event.ue].DCI_aggregation_min = oai_emulation->mac_config[event.ue].DCI_aggregation_min; + UE_list->UE_template[0][event.ue].DCI_aggregation_min = oai_emulation->mac_config[event.ue].DCI_aggregation_min; LOG_I(EMU,"DCI_aggregation_min UE %d : \n", event.ue); - LOG_I(EMU,"%" PRIu8 "\n",eNB_mac_inst->UE_template[event.ue].DCI_aggregation_min); + LOG_I(EMU,"%" PRIu8 "\n",UE_list->UE_template[0][event.ue].DCI_aggregation_min); } } else if(!strcmp((char *) event.key, "DLSCH_dci_size_bits") && event.value!=NULL && validate_mac(event)) @@ -755,20 +757,21 @@ void update_mac(Event_t event) { LOG_I(EMU,"DLSCH_dci_size_bits update \n"); if(event.ue == -1) { - for(i=0;i<NUMBER_OF_UE_MAX;i++) + UE_list = &eNB_mac_inst->UE_list; + for(i=UE_list->head;i>=0;i=UE_list->next[i]) { oai_emulation->mac_config[i].DLSCH_dci_size_bits=mac_config[i].DLSCH_dci_size_bits; - eNB_mac_inst->UE_template[i].DLSCH_dci_size_bits = oai_emulation->mac_config[i].DLSCH_dci_size_bits; + UE_list->UE_template[0][i].DLSCH_dci_size_bits = oai_emulation->mac_config[i].DLSCH_dci_size_bits; LOG_I(EMU,"DLSCH_dci_size_bits UE %d: \n", i); - LOG_I(EMU,"%" PRIu8,eNB_mac_inst->UE_template[i].DLSCH_dci_size_bits); + LOG_I(EMU,"%" PRIu8,UE_list->UE_template[0][i].DLSCH_dci_size_bits); } } else { oai_emulation->mac_config[event.ue].DLSCH_dci_size_bits=mac_config[event.ue].DLSCH_dci_size_bits; - eNB_mac_inst->UE_template[event.ue].DLSCH_dci_size_bits = oai_emulation->mac_config[event.ue].DLSCH_dci_size_bits; + UE_list->UE_template[0][event.ue].DLSCH_dci_size_bits = oai_emulation->mac_config[event.ue].DLSCH_dci_size_bits; LOG_I(EMU,"DLSCH_dci_size_bits UE %d: \n", event.ue); - LOG_I(EMU,"%" PRIu8,eNB_mac_inst->UE_template[event.ue].DLSCH_dci_size_bits); + LOG_I(EMU,"%" PRIu8,UE_list->UE_template[0][event.ue].DLSCH_dci_size_bits); } } @@ -781,7 +784,8 @@ void update_mac(Event_t event) { int j=0; if(event.ue == -1 && event.lcid == -1) { - for(i=0;i<NUMBER_OF_UE_MAX;i++) + UE_list = &eNB_mac_inst->UE_list; + for(i=UE_list->head;i>=0;i=UE_list->next[i]) { @@ -791,9 +795,9 @@ void update_mac(Event_t event) { if(&mac_config[i].ul_bandwidth[j]!=NULL) { oai_emulation->mac_config[i].ul_bandwidth[j]= mac_config[i].ul_bandwidth[j]; - eNB_mac_inst->UE_sched_ctrl[i].ul_bandwidth[j] = oai_emulation->mac_config[i].ul_bandwidth[j]; + UE_list->UE_sched_ctrl[i].ul_bandwidth[j] = oai_emulation->mac_config[i].ul_bandwidth[j]; LOG_I(EMU,"ul_bandwidth UE %d LCID %d:",i,j); - LOG_I(EMU,"%" PRIu8 "\n",eNB_mac_inst->UE_sched_ctrl[i].ul_bandwidth[j]); + LOG_I(EMU,"%" PRIu8 "\n",UE_list->UE_sched_ctrl[i].ul_bandwidth[j]); } } @@ -802,9 +806,9 @@ void update_mac(Event_t event) { else { oai_emulation->mac_config[event.ue].ul_bandwidth[event.lcid]= mac_config[event.ue].ul_bandwidth[event.lcid]; - eNB_mac_inst->UE_sched_ctrl[event.ue].ul_bandwidth[event.lcid] = oai_emulation->mac_config[event.ue].ul_bandwidth[event.lcid]; + UE_list->UE_sched_ctrl[event.ue].ul_bandwidth[event.lcid] = oai_emulation->mac_config[event.ue].ul_bandwidth[event.lcid]; LOG_I(EMU,"ul_bandwidth UE %d LCID %d:",event.ue, event.lcid); - LOG_I(EMU,"%" PRIu8 "\n",eNB_mac_inst->UE_sched_ctrl[event.ue].ul_bandwidth[event.lcid]); + LOG_I(EMU,"%" PRIu8 "\n",UE_list->UE_sched_ctrl[event.ue].ul_bandwidth[event.lcid]); } } @@ -816,7 +820,8 @@ void update_mac(Event_t event) { int j=0; if(event.ue == -1 && event.lcid == -1) { - for(i=0;i<NUMBER_OF_UE_MAX;i++) + UE_list = &eNB_mac_inst->UE_list; + for(i=UE_list->head;i>=0;i=UE_list->next[i]) { if(event.value + i !=NULL) { @@ -827,9 +832,9 @@ void update_mac(Event_t event) { if(&mac_config[i].dl_bandwidth[j]!=NULL) { oai_emulation->mac_config[i].dl_bandwidth[j]= mac_config[i].dl_bandwidth[j]; - eNB_mac_inst->UE_sched_ctrl[i].dl_bandwidth[j] = oai_emulation->mac_config[i].dl_bandwidth[j]; + UE_list->UE_sched_ctrl[i].dl_bandwidth[j] = oai_emulation->mac_config[i].dl_bandwidth[j]; LOG_I(EMU,"dl_bandwidth UE %d LCID %d:",i,j); - LOG_I(EMU,"%" PRIu8 "\n",eNB_mac_inst->UE_sched_ctrl[i].dl_bandwidth[j]); + LOG_I(EMU,"%" PRIu8 "\n",UE_list->UE_sched_ctrl[i].dl_bandwidth[j]); } } } @@ -838,9 +843,9 @@ void update_mac(Event_t event) { else { oai_emulation->mac_config[event.ue].dl_bandwidth[event.lcid]= mac_config[event.ue].dl_bandwidth[event.lcid]; - eNB_mac_inst->UE_sched_ctrl[event.ue].dl_bandwidth[event.lcid] = oai_emulation->mac_config[event.ue].dl_bandwidth[event.lcid]; + UE_list->UE_sched_ctrl[event.ue].dl_bandwidth[event.lcid] = oai_emulation->mac_config[event.ue].dl_bandwidth[event.lcid]; LOG_I(EMU,"dl_bandwidth UE %d LCID %d:",event.ue, event.lcid); - LOG_I(EMU,"%" PRIu8 "\n",eNB_mac_inst->UE_sched_ctrl[event.ue].dl_bandwidth[event.lcid]); + LOG_I(EMU,"%" PRIu8 "\n",UE_list->UE_sched_ctrl[event.ue].dl_bandwidth[event.lcid]); } } else if(!strcmp((char *) event.key, "min_ul_bandwidth") && event.value!=NULL) @@ -852,7 +857,8 @@ void update_mac(Event_t event) { int j=0; if(event.ue == -1 && event.lcid == -1) { - for(i=0;i<NUMBER_OF_UE_MAX;i++) + UE_list = &eNB_mac_inst->UE_list; + for(i=UE_list->head;i>=0;i=UE_list->next[i]) { @@ -862,9 +868,9 @@ void update_mac(Event_t event) { if(&mac_config[i].min_ul_bandwidth[j]!=NULL) { oai_emulation->mac_config[i].min_ul_bandwidth[j]= mac_config[i].min_ul_bandwidth[j]; - eNB_mac_inst->UE_sched_ctrl[i].min_ul_bandwidth[j] = oai_emulation->mac_config[i].min_ul_bandwidth[j]; + UE_list->UE_sched_ctrl[i].min_ul_bandwidth[j] = oai_emulation->mac_config[i].min_ul_bandwidth[j]; LOG_I(EMU,"min_ul_bandwidth UE %d LCID %d:",i,j); - LOG_I(EMU,"%" PRIu8 "\n",eNB_mac_inst->UE_sched_ctrl[i].min_ul_bandwidth[j]); + LOG_I(EMU,"%" PRIu8 "\n",UE_list->UE_sched_ctrl[i].min_ul_bandwidth[j]); } } @@ -873,9 +879,9 @@ void update_mac(Event_t event) { else { oai_emulation->mac_config[event.ue].min_ul_bandwidth[event.lcid]= mac_config[event.ue].min_ul_bandwidth[event.lcid]; - eNB_mac_inst->UE_sched_ctrl[event.ue].min_ul_bandwidth[event.lcid] = oai_emulation->mac_config[event.ue].min_ul_bandwidth[event.lcid]; + UE_list->UE_sched_ctrl[event.ue].min_ul_bandwidth[event.lcid] = oai_emulation->mac_config[event.ue].min_ul_bandwidth[event.lcid]; LOG_I(EMU,"min_ul_bandwidth UE %d LCID %d:",event.ue, event.lcid); - LOG_I(EMU,"%" PRIu8 "\n",eNB_mac_inst->UE_sched_ctrl[event.ue].min_ul_bandwidth[event.lcid]); + LOG_I(EMU,"%" PRIu8 "\n",UE_list->UE_sched_ctrl[event.ue].min_ul_bandwidth[event.lcid]); } } @@ -887,7 +893,8 @@ void update_mac(Event_t event) { int j=0; if(event.ue == -1 && event.lcid == -1) { - for(i=0;i<NUMBER_OF_UE_MAX;i++) + UE_list = &eNB_mac_inst->UE_list; + for(i=UE_list->head;i>=0;i=UE_list->next[i]) { if(event.value + i !=NULL) { @@ -898,9 +905,9 @@ void update_mac(Event_t event) { if(&mac_config[i].min_dl_bandwidth[j]!=NULL) { oai_emulation->mac_config[i].min_dl_bandwidth[j]= mac_config[i].min_dl_bandwidth[j]; - eNB_mac_inst->UE_sched_ctrl[i].min_dl_bandwidth[j] = oai_emulation->mac_config[i].min_dl_bandwidth[j]; + UE_list->UE_sched_ctrl[i].min_dl_bandwidth[j] = oai_emulation->mac_config[i].min_dl_bandwidth[j]; LOG_I(EMU,"dl_bandwidth UE %d LCID %d:",i,j); - LOG_I(EMU,"%" PRIu8 "\n",eNB_mac_inst->UE_sched_ctrl[i].min_dl_bandwidth[j]); + LOG_I(EMU,"%" PRIu8 "\n",UE_list->UE_sched_ctrl[i].min_dl_bandwidth[j]); } } } @@ -909,9 +916,9 @@ void update_mac(Event_t event) { else { oai_emulation->mac_config[event.ue].min_dl_bandwidth[event.lcid]= mac_config[event.ue].min_dl_bandwidth[event.lcid]; - eNB_mac_inst->UE_sched_ctrl[event.ue].min_dl_bandwidth[event.lcid] = oai_emulation->mac_config[event.ue].min_dl_bandwidth[event.lcid]; + UE_list->UE_sched_ctrl[event.ue].min_dl_bandwidth[event.lcid] = oai_emulation->mac_config[event.ue].min_dl_bandwidth[event.lcid]; LOG_I(EMU,"min_dl_bandwidth UE %d LCID %d:",event.ue, event.lcid); - LOG_I(EMU,"%" PRIu8 "\n",eNB_mac_inst->UE_sched_ctrl[event.ue].min_dl_bandwidth[event.lcid]); + LOG_I(EMU,"%" PRIu8 "\n",UE_list->UE_sched_ctrl[event.ue].min_dl_bandwidth[event.lcid]); } } else if(!strcmp((char *) event.key, "ue_AggregatedMaximumBitrateDL") && event.value!=NULL && validate_mac(event)) @@ -922,20 +929,21 @@ void update_mac(Event_t event) { LOG_I(EMU,"ue_AggregatedMaximumBitrateDL update \n"); if(event.ue == -1) { - for(i=0;i<NUMBER_OF_UE_MAX;i++) + UE_list = &eNB_mac_inst->UE_list; + for(i=UE_list->head;i>=0;i=UE_list->next[i]) { oai_emulation->mac_config[i].ue_AggregatedMaximumBitrateDL= mac_config[i].ue_AggregatedMaximumBitrateDL; - eNB_mac_inst->UE_sched_ctrl[i].ue_AggregatedMaximumBitrateDL = oai_emulation->mac_config[i].ue_AggregatedMaximumBitrateDL; + UE_list->UE_sched_ctrl[i].ue_AggregatedMaximumBitrateDL = oai_emulation->mac_config[i].ue_AggregatedMaximumBitrateDL; LOG_I(EMU,"ue_AggregatedMaximumBitrateDL UE %d:\n",event.ue); - LOG_I(EMU,"%" PRIu64 "\n",eNB_mac_inst->UE_sched_ctrl[i].ue_AggregatedMaximumBitrateDL); + LOG_I(EMU,"%" PRIu64 "\n",UE_list->UE_sched_ctrl[i].ue_AggregatedMaximumBitrateDL); } } else { oai_emulation->mac_config[event.ue].ue_AggregatedMaximumBitrateDL= mac_config[event.ue].ue_AggregatedMaximumBitrateDL; - eNB_mac_inst->UE_sched_ctrl[event.ue].ue_AggregatedMaximumBitrateDL = oai_emulation->mac_config[event.ue].ue_AggregatedMaximumBitrateDL; + UE_list->UE_sched_ctrl[event.ue].ue_AggregatedMaximumBitrateDL = oai_emulation->mac_config[event.ue].ue_AggregatedMaximumBitrateDL; LOG_I(EMU,"ue_AggregatedMaximumBitrateDL UE %d:\n",event.ue); - LOG_I(EMU,"%" PRIu64 "\n",eNB_mac_inst->UE_sched_ctrl[event.ue].ue_AggregatedMaximumBitrateDL); + LOG_I(EMU,"%" PRIu64 "\n",UE_list->UE_sched_ctrl[event.ue].ue_AggregatedMaximumBitrateDL); } } @@ -948,20 +956,21 @@ void update_mac(Event_t event) { LOG_I(EMU,"ue_AggregatedMaximumBitrateUL update \n"); if(event.ue == -1) { - for(i=0;i<NUMBER_OF_UE_MAX;i++) + UE_list = &eNB_mac_inst->UE_list; + for(i=UE_list->head;i>=0;i=UE_list->next[i]) { oai_emulation->mac_config[i].ue_AggregatedMaximumBitrateUL= mac_config[i].ue_AggregatedMaximumBitrateUL; - eNB_mac_inst->UE_sched_ctrl[i].ue_AggregatedMaximumBitrateUL = oai_emulation->mac_config[i].ue_AggregatedMaximumBitrateUL; + UE_list->UE_sched_ctrl[i].ue_AggregatedMaximumBitrateUL = oai_emulation->mac_config[i].ue_AggregatedMaximumBitrateUL; LOG_I(EMU,"ue_AggregatedMaximumBitrateUL UE %d:\n",i); - LOG_I(EMU,"%" PRIu64 "\n",eNB_mac_inst->UE_sched_ctrl[i].ue_AggregatedMaximumBitrateUL); + LOG_I(EMU,"%" PRIu64 "\n",UE_list->UE_sched_ctrl[i].ue_AggregatedMaximumBitrateUL); } } else { oai_emulation->mac_config[event.ue].ue_AggregatedMaximumBitrateUL= mac_config[event.ue].ue_AggregatedMaximumBitrateUL; - eNB_mac_inst->UE_sched_ctrl[event.ue].ue_AggregatedMaximumBitrateUL = oai_emulation->mac_config[event.ue].ue_AggregatedMaximumBitrateUL; + UE_list->UE_sched_ctrl[event.ue].ue_AggregatedMaximumBitrateUL = oai_emulation->mac_config[event.ue].ue_AggregatedMaximumBitrateUL; LOG_I(EMU,"ue_AggregatedMaximumBitrateUL UE %d:\n",event.ue); - LOG_I(EMU,"%" PRIu64 "\n",eNB_mac_inst->UE_sched_ctrl[event.ue].ue_AggregatedMaximumBitrateUL); + LOG_I(EMU,"%" PRIu64 "\n",UE_list->UE_sched_ctrl[event.ue].ue_AggregatedMaximumBitrateUL); } } @@ -973,20 +982,21 @@ void update_mac(Event_t event) { LOG_I(EMU,"cqiSchedInterval update \n"); if(event.ue == -1) { - for(i=0;i<NUMBER_OF_UE_MAX;i++) + UE_list = &eNB_mac_inst->UE_list; + for(i=UE_list->head;i>=0;i=UE_list->next[i]) { oai_emulation->mac_config[i].cqiSchedInterval= mac_config[i].cqiSchedInterval; - eNB_mac_inst->UE_sched_ctrl[i].cqiSchedInterval = oai_emulation->mac_config[i].cqiSchedInterval; + UE_list->UE_sched_ctrl[i].cqiSchedInterval = oai_emulation->mac_config[i].cqiSchedInterval; LOG_I(EMU,"cqiSchedInterval UE :\n", i); - LOG_I(EMU,"%" PRIu16 "\n",eNB_mac_inst->UE_sched_ctrl[i].cqiSchedInterval); + LOG_I(EMU,"%" PRIu16 "\n",UE_list->UE_sched_ctrl[i].cqiSchedInterval); } } else { oai_emulation->mac_config[event.ue].cqiSchedInterval= mac_config[event.ue].cqiSchedInterval; - eNB_mac_inst->UE_sched_ctrl[event.ue].cqiSchedInterval = oai_emulation->mac_config[event.ue].cqiSchedInterval; + UE_list->UE_sched_ctrl[event.ue].cqiSchedInterval = oai_emulation->mac_config[event.ue].cqiSchedInterval; LOG_I(EMU,"cqiSchedInterval UE :\n", event.ue); - LOG_I(EMU,"%" PRIu16 "\n",eNB_mac_inst->UE_sched_ctrl[event.ue].cqiSchedInterval); + LOG_I(EMU,"%" PRIu16 "\n",UE_list->UE_sched_ctrl[event.ue].cqiSchedInterval); } } else if(!strcmp((char *) event.key, "mac_ContentionResolutionTimer") && event.value!=NULL && validate_mac(event)) @@ -996,20 +1006,21 @@ void update_mac(Event_t event) { LOG_I(EMU,"mac_ContentionResolutionTimer update \n"); if(event.ue == -1) { - for(i=0;i<NUMBER_OF_UE_MAX;i++) + UE_list = &eNB_mac_inst->UE_list; + for(i=UE_list->head;i>=0;i=UE_list->next[i]) { oai_emulation->mac_config[i].mac_ContentionResolutionTimer= mac_config[i].mac_ContentionResolutionTimer; - eNB_mac_inst->UE_sched_ctrl[i].mac_ContentionResolutionTimer = oai_emulation->mac_config[i].mac_ContentionResolutionTimer; + UE_list->UE_sched_ctrl[i].mac_ContentionResolutionTimer = oai_emulation->mac_config[i].mac_ContentionResolutionTimer; LOG_I(EMU,"mac_ContentionResolutionTimer UE :\n", i); - LOG_I(EMU,"%" PRIu8 "\n",eNB_mac_inst->UE_sched_ctrl[i].mac_ContentionResolutionTimer); + LOG_I(EMU,"%" PRIu8 "\n",UE_list->UE_sched_ctrl[i].mac_ContentionResolutionTimer); } } else { oai_emulation->mac_config[event.ue].mac_ContentionResolutionTimer= mac_config[event.ue].mac_ContentionResolutionTimer; - eNB_mac_inst->UE_sched_ctrl[event.ue].mac_ContentionResolutionTimer = oai_emulation->mac_config[event.ue].mac_ContentionResolutionTimer; + UE_list->UE_sched_ctrl[event.ue].mac_ContentionResolutionTimer = oai_emulation->mac_config[event.ue].mac_ContentionResolutionTimer; LOG_I(EMU,"mac_ContentionResolutionTimer UE :\n", event.ue); - LOG_I(EMU,"%" PRIu8 "\n",eNB_mac_inst->UE_sched_ctrl[event.ue].mac_ContentionResolutionTimer); + LOG_I(EMU,"%" PRIu8 "\n",UE_list->UE_sched_ctrl[event.ue].mac_ContentionResolutionTimer); } } else if(!strcmp((char *) event.key, "max_allowed_rbs") && event.value!=NULL && validate_mac(event)) @@ -1021,7 +1032,8 @@ void update_mac(Event_t event) { int j=0; if(event.ue == -1 && event.lcid == -1) { - for(i=0;i<NUMBER_OF_UE_MAX;i++) + UE_list = &eNB_mac_inst->UE_list; + for(i=UE_list->head;i>=0;i=UE_list->next[i]) { if(event.value + i !=NULL) { @@ -1032,9 +1044,9 @@ void update_mac(Event_t event) { if(&mac_config[i].max_allowed_rbs[j]!=NULL) { oai_emulation->mac_config[i].max_allowed_rbs[j]= mac_config[i].max_allowed_rbs[j]; - eNB_mac_inst->UE_sched_ctrl[i].max_allowed_rbs[j] = oai_emulation->mac_config[i].max_allowed_rbs[j]; + UE_list->UE_sched_ctrl[i].max_allowed_rbs[j] = oai_emulation->mac_config[i].max_allowed_rbs[j]; LOG_I(EMU,"max_allowed_rbs UE %d LCID %d:",i,j); - LOG_I(EMU,"%" PRIu16 "\n",eNB_mac_inst->UE_sched_ctrl[i].max_allowed_rbs[j]); + LOG_I(EMU,"%" PRIu16 "\n",UE_list->UE_sched_ctrl[i].max_allowed_rbs[j]); } } } @@ -1043,9 +1055,9 @@ void update_mac(Event_t event) { else { oai_emulation->mac_config[event.ue].max_allowed_rbs[event.lcid]= mac_config[event.ue].max_allowed_rbs[event.lcid]; - eNB_mac_inst->UE_sched_ctrl[event.ue].max_allowed_rbs[event.lcid] = oai_emulation->mac_config[event.ue].max_allowed_rbs[event.lcid]; + UE_list->UE_sched_ctrl[event.ue].max_allowed_rbs[event.lcid] = oai_emulation->mac_config[event.ue].max_allowed_rbs[event.lcid]; LOG_I(EMU,"max_allowed_rbs UE %d LCID %d:",event.ue,event.lcid); - LOG_I(EMU,"%" PRIu16 "\n",eNB_mac_inst->UE_sched_ctrl[event.ue].max_allowed_rbs[event.lcid]); + LOG_I(EMU,"%" PRIu16 "\n",UE_list->UE_sched_ctrl[event.ue].max_allowed_rbs[event.lcid]); } } @@ -1059,7 +1071,8 @@ void update_mac(Event_t event) { int j=0; if(event.ue == -1 && event.lcid == -1) { - for(i=0;i<NUMBER_OF_UE_MAX;i++) + UE_list = &eNB_mac_inst->UE_list; + for(i=UE_list->head;i>=0;i=UE_list->next[i]) { for(j=0;j<MAX_NUM_LCID;j++) @@ -1068,9 +1081,9 @@ void update_mac(Event_t event) { if(&mac_config[i].max_mcs[j]!=NULL) { oai_emulation->mac_config[i].max_mcs[j]= mac_config[i].max_mcs[j]; - eNB_mac_inst->UE_sched_ctrl[i].max_mcs[j] = oai_emulation->mac_config[i].max_mcs[j]; + UE_list->UE_sched_ctrl[i].max_mcs[j] = oai_emulation->mac_config[i].max_mcs[j]; LOG_I(EMU,"max_mcs UE %d LCID %d:",i,j); - LOG_I(EMU,"%" PRIu16 "\n",eNB_mac_inst->UE_sched_ctrl[i].max_mcs[j]); + LOG_I(EMU,"%" PRIu16 "\n",UE_list->UE_sched_ctrl[i].max_mcs[j]); } } @@ -1079,9 +1092,9 @@ void update_mac(Event_t event) { else { oai_emulation->mac_config[event.ue].max_mcs[event.lcid]= mac_config[event.ue].max_mcs[event.lcid]; - eNB_mac_inst->UE_sched_ctrl[event.ue].max_mcs[event.lcid] = oai_emulation->mac_config[event.ue].max_mcs[event.lcid]; + UE_list->UE_sched_ctrl[event.ue].max_mcs[event.lcid] = oai_emulation->mac_config[event.ue].max_mcs[event.lcid]; LOG_I(EMU,"max_mcs UE %d LCID %d:",event.ue,event.lcid); - LOG_I(EMU,"%" PRIu16 "\n",eNB_mac_inst->UE_sched_ctrl[event.ue].max_mcs[event.lcid]); + LOG_I(EMU,"%" PRIu16 "\n",UE_list->UE_sched_ctrl[event.ue].max_mcs[event.lcid]); } } } diff --git a/targets/SIMU/USER/init_lte.c b/targets/SIMU/USER/init_lte.c index 422f4c331d..b39b9d8f84 100644 --- a/targets/SIMU/USER/init_lte.c +++ b/targets/SIMU/USER/init_lte.c @@ -169,7 +169,7 @@ void init_lte_vars(LTE_DL_FRAME_PARMS **frame_parms, uint8_t cooperation_flag,uint8_t transmission_mode,uint8_t abstraction_flag, int nb_antennas_rx, uint8_t eMBMS_active_state) { - uint8_t eNB_id,UE_id,RN_id; + uint8_t eNB_id,UE_id,RN_id,CC_id; mac_xface = malloc(sizeof(MAC_xface)); @@ -205,17 +205,27 @@ void init_lte_vars(LTE_DL_FRAME_PARMS **frame_parms, phy_init_lte_top(*frame_parms); - PHY_vars_eNB_g = malloc(NB_eNB_INST*sizeof(PHY_VARS_eNB*)); + PHY_vars_eNB_g = (PHY_VARS_eNB***)malloc(NB_eNB_INST*sizeof(PHY_VARS_eNB**)); for (eNB_id=0; eNB_id<NB_eNB_INST;eNB_id++){ - PHY_vars_eNB_g[eNB_id] = init_lte_eNB(*frame_parms,eNB_id,Nid_cell,cooperation_flag,transmission_mode,abstraction_flag); + PHY_vars_eNB_g[eNB_id] = (PHY_VARS_eNB**) malloc(MAX_NUM_CCs*sizeof(PHY_VARS_eNB*)); + for (CC_id=0; CC_id<MAX_NUM_CCs; CC_id++) { + PHY_vars_eNB_g[eNB_id][CC_id] = init_lte_eNB(*frame_parms,eNB_id,Nid_cell,cooperation_flag,transmission_mode,abstraction_flag); + PHY_vars_eNB_g[eNB_id][CC_id]->Mod_id=eNB_id; + PHY_vars_eNB_g[eNB_id][CC_id]->CC_id=CC_id; + } } (*frame_parms)->nb_antennas_tx = 1; (*frame_parms)->nb_antennas_rx = nb_antennas_rx; - PHY_vars_UE_g = malloc(NB_UE_INST*sizeof(PHY_VARS_UE*)); + PHY_vars_UE_g = (PHY_VARS_UE***)malloc(NB_UE_INST*sizeof(PHY_VARS_UE**)); for (UE_id=0; UE_id<NB_UE_INST;UE_id++){ - PHY_vars_UE_g[UE_id] = init_lte_UE(*frame_parms, UE_id,abstraction_flag,transmission_mode); + PHY_vars_UE_g[UE_id] = (PHY_VARS_UE**) malloc(MAX_NUM_CCs*sizeof(PHY_VARS_UE*)); + for (CC_id=0; CC_id<MAX_NUM_CCs; CC_id++) { + PHY_vars_UE_g[UE_id][CC_id] = init_lte_UE(*frame_parms, UE_id,abstraction_flag,transmission_mode); + PHY_vars_UE_g[UE_id][CC_id]->Mod_id=UE_id; + PHY_vars_UE_g[UE_id][CC_id]->CC_id=CC_id; + } } if (NB_RN_INST > 0) { diff --git a/targets/SIMU/USER/oaisim.c b/targets/SIMU/USER/oaisim.c index 97d472680f..8aaae67eaa 100644 --- a/targets/SIMU/USER/oaisim.c +++ b/targets/SIMU/USER/oaisim.c @@ -133,8 +133,8 @@ char smbv_ip[16]; frame_t frame = 0; char stats_buffer[16384]; -channel_desc_t *eNB2UE[NUMBER_OF_eNB_MAX][NUMBER_OF_UE_MAX]; -channel_desc_t *UE2eNB[NUMBER_OF_UE_MAX][NUMBER_OF_eNB_MAX]; +channel_desc_t *eNB2UE[NUMBER_OF_eNB_MAX][NUMBER_OF_UE_MAX][MAX_NUM_CCs]; +channel_desc_t *UE2eNB[NUMBER_OF_UE_MAX][NUMBER_OF_eNB_MAX][MAX_NUM_CCs]; //Added for PHY abstraction node_desc_t *enb_data[NUMBER_OF_eNB_MAX]; node_desc_t *ue_data[NUMBER_OF_UE_MAX]; @@ -413,6 +413,7 @@ l2l1_task_state_t l2l1_state = L2L1_WAITTING; void *l2l1_task(void *args_p) { clock_t t; + int CC_id; // Framing variables int32_t slot, last_slot, next_slot; @@ -450,16 +451,17 @@ void *l2l1_task(void *args_p) { char eNB_stats_th_filename[255]; #endif - for (eNB_inst=0;eNB_inst<NB_eNB_INST;eNB_inst++) { - for (sf=0;sf<10;sf++) { - PHY_vars_eNB_g[eNB_inst]->proc[sf].frame_tx = 0; - PHY_vars_eNB_g[eNB_inst]->proc[sf].frame_rx = 0; - PHY_vars_eNB_g[eNB_inst]->proc[sf].subframe_tx = (sf+1)%10; - PHY_vars_eNB_g[eNB_inst]->proc[sf].subframe_rx = (sf+9)%10; + for (CC_id = 0;CC_id<MAX_NUM_CCs;CC_id++) + for (eNB_inst=0;eNB_inst<NB_eNB_INST;eNB_inst++) { + for (sf=0;sf<10;sf++) { + PHY_vars_eNB_g[eNB_inst][CC_id]->proc[sf].frame_tx = 0; + PHY_vars_eNB_g[eNB_inst][CC_id]->proc[sf].frame_rx = 0; + PHY_vars_eNB_g[eNB_inst][CC_id]->proc[sf].subframe_tx = (sf+1)%10; + PHY_vars_eNB_g[eNB_inst][CC_id]->proc[sf].subframe_rx = (sf+9)%10; + } + PHY_vars_eNB_g[eNB_inst][CC_id]->proc[0].frame_rx = 1023; + PHY_vars_eNB_g[eNB_inst][CC_id]->proc[9].frame_tx = 1; } - PHY_vars_eNB_g[eNB_inst]->proc[0].frame_rx = 1023; - PHY_vars_eNB_g[eNB_inst]->proc[9].frame_tx = 1; - } #ifdef XFORMS xargv[0] = xname; fl_initialize (&xargc, xargv, NULL, 0, 0); @@ -691,18 +693,18 @@ void *l2l1_task(void *args_p) { clear_eNB_transport_info (oai_emulation.info.nb_enb_local); for (eNB_inst = oai_emulation.info.first_enb_local; (eNB_inst < (oai_emulation.info.first_enb_local + oai_emulation.info.nb_enb_local)); eNB_inst++) { - if (oai_emulation.info.cli_start_enb[eNB_inst] != 0) { - LOG_D( - EMU, - "PHY procedures eNB %d for frame %d, slot %d (subframe TX %d, RX %d) TDD %d/%d Nid_cell %d\n", - eNB_inst, - frame, - slot, - next_slot >> 1, - last_slot>>1, - PHY_vars_eNB_g[eNB_inst]->lte_frame_parms.frame_type, - PHY_vars_eNB_g[eNB_inst]->lte_frame_parms.tdd_config, - PHY_vars_eNB_g[eNB_inst]->lte_frame_parms.Nid_cell); + if (oai_emulation.info.cli_start_enb[eNB_inst] != 0) { + LOG_D( + EMU, + "PHY procedures eNB %d for frame %d, slot %d (subframe TX %d, RX %d) TDD %d/%d Nid_cell %d\n", + eNB_inst, + frame, + slot, + next_slot >> 1, + last_slot>>1, + PHY_vars_eNB_g[eNB_inst][0]->lte_frame_parms.frame_type, + PHY_vars_eNB_g[eNB_inst][0]->lte_frame_parms.tdd_config, + PHY_vars_eNB_g[eNB_inst][0]->lte_frame_parms.Nid_cell); #ifdef OPENAIR2 //Appliation: traffic gen @@ -719,9 +721,9 @@ void *l2l1_task(void *args_p) { #ifdef PRINT_STATS if(last_slot==9 && frame%10==0) if(eNB_avg_thr) - fprintf(eNB_avg_thr,"%d %d\n",PHY_vars_eNB_g[eNB_inst]->frame,(PHY_vars_eNB_g[eNB_inst]->total_system_throughput)/((PHY_vars_eNB_g[eNB_inst]->frame+1)*10)); + fprintf(eNB_avg_thr,"%d %d\n",PHY_vars_eNB_g[eNB_inst][0]->frame,(PHY_vars_eNB_g[eNB_inst][0]->total_system_throughput)/((PHY_vars_eNB_g[eNB_inst][0]->frame+1)*10)); if (eNB_stats[eNB_inst]) { - len = dump_eNB_stats(PHY_vars_eNB_g[eNB_inst], stats_buffer, 0); + len = dump_eNB_stats(PHY_vars_eNB_g[eNB_inst][0], stats_buffer, 0); rewind (eNB_stats[eNB_inst]); fwrite (stats_buffer, 1, len, eNB_stats[eNB_inst]); fflush(eNB_stats[eNB_inst]); @@ -735,8 +737,9 @@ void *l2l1_task(void *args_p) { } #endif #endif - } - } + } + } + // Call ETHERNET emulation here //emu_transport (frame, last_slot, next_slot, direction, oai_emulation.info.frame_type, ethernet_flag); @@ -747,8 +750,8 @@ void *l2l1_task(void *args_p) { if ((next_slot % 2) == 0) clear_UE_transport_info (oai_emulation.info.nb_ue_local); for (UE_inst = oai_emulation.info.first_ue_local; - (UE_inst < (oai_emulation.info.first_ue_local + oai_emulation.info.nb_ue_local)); UE_inst++) { - if (oai_emulation.info.cli_start_ue[UE_inst] != 0) { + (UE_inst < (oai_emulation.info.first_ue_local + oai_emulation.info.nb_ue_local)); UE_inst++) + if (oai_emulation.info.cli_start_ue[UE_inst] != 0) { #if defined(ENABLE_ITTI) && defined(ENABLE_USE_MME) #else @@ -762,9 +765,9 @@ void *l2l1_task(void *args_p) { next_slot >> 1, last_slot>>1); - if (PHY_vars_UE_g[UE_inst]->UE_mode[0] != NOT_SYNCHED) { + if (PHY_vars_UE_g[UE_inst][0]->UE_mode[0] != NOT_SYNCHED) { if (frame > 0) { - PHY_vars_UE_g[UE_inst]->frame = frame; + PHY_vars_UE_g[UE_inst][0]->frame = frame; #ifdef OPENAIR2 //Application @@ -773,21 +776,22 @@ void *l2l1_task(void *args_p) { //Access layer pdcp_run (frame, 0, UE_inst, 0); #endif - - phy_procedures_UE_lte (last_slot, next_slot, PHY_vars_UE_g[UE_inst], 0, abstraction_flag, normal_txrx, - no_relay, NULL); - ue_data[UE_inst]->tx_power_dBm = PHY_vars_UE_g[UE_inst]->tx_power_dBm; + for (CC_id=0;CC_id<MAX_NUM_CCs;CC_id++) { + phy_procedures_UE_lte (last_slot, next_slot, PHY_vars_UE_g[UE_inst][CC_id], 0, abstraction_flag, normal_txrx, + no_relay, NULL); + } + ue_data[UE_inst]->tx_power_dBm = PHY_vars_UE_g[UE_inst][0]->tx_power_dBm; } } else { if (abstraction_flag == 1) { LOG_E( EMU, - "sync not supported in abstraction mode (UE%d,mode%d)\n", UE_inst, PHY_vars_UE_g[UE_inst]->UE_mode[0]); + "sync not supported in abstraction mode (UE%d,mode%d)\n", UE_inst, PHY_vars_UE_g[UE_inst][0]->UE_mode[0]); exit (-1); } if ((frame > 0) && (last_slot == (LTE_SLOTS_PER_FRAME - 2))) { - initial_sync (PHY_vars_UE_g[UE_inst], normal_txrx); + initial_sync (PHY_vars_UE_g[UE_inst][0], normal_txrx); /* write_output("dlchan00.m","dlch00",&(PHY_vars_UE_g[0]->lte_ue_common_vars.dl_ch_estimates[0][0][0]),(6*(PHY_vars_UE_g[0]->lte_frame_parms.ofdm_symbol_size)),1,1); @@ -807,11 +811,11 @@ void *l2l1_task(void *args_p) { #ifdef PRINT_STATS if(last_slot==2 && frame%10==0) { if (UE_stats_th[UE_inst]) { - fprintf(UE_stats_th[UE_inst],"%d %d\n",frame, PHY_vars_UE_g[UE_inst]->bitrate[0]/1000); + fprintf(UE_stats_th[UE_inst],"%d %d\n",frame, PHY_vars_UE_g[UE_inst][0]->bitrate[0]/1000); } } if (UE_stats[UE_inst]) { - len = dump_ue_stats (PHY_vars_UE_g[UE_inst], stats_buffer, 0, normal_txrx, 0); + len = dump_ue_stats (PHY_vars_UE_g[UE_inst][0], stats_buffer, 0, normal_txrx, 0); rewind (UE_stats[UE_inst]); fwrite (stats_buffer, 1, len, UE_stats[UE_inst]); fflush(UE_stats[UE_inst]); @@ -840,21 +844,21 @@ void *l2l1_task(void *args_p) { if ( oai_emulation.info.frame_type == 0) { // RN == UE if (frame>0) { - if (PHY_vars_UE_g[UE_inst]->UE_mode[0] != NOT_SYNCHED) { + if (PHY_vars_UE_g[UE_inst][0]->UE_mode[0] != NOT_SYNCHED) { LOG_D(EMU,"[RN %d] PHY procedures UE %d for frame %d, slot %d (subframe TX %d, RX %d)\n", RN_id, UE_inst, frame, slot, next_slot >> 1,last_slot>>1); - PHY_vars_UE_g[UE_inst]->frame = frame; - phy_procedures_UE_lte (last_slot, next_slot, PHY_vars_UE_g[UE_inst], 0, abstraction_flag,normal_txrx, + PHY_vars_UE_g[UE_inst][0]->frame = frame; + phy_procedures_UE_lte (last_slot, next_slot, PHY_vars_UE_g[UE_inst][0], 0, abstraction_flag,normal_txrx, r_type, PHY_vars_RN_g[RN_id]); } else if (last_slot == (LTE_SLOTS_PER_FRAME-2)) { - initial_sync(PHY_vars_UE_g[UE_inst],normal_txrx); + initial_sync(PHY_vars_UE_g[UE_inst][0],normal_txrx); } } // RN == eNB LOG_D(EMU,"[RN %d] PHY procedures eNB %d for frame %d, slot %d (subframe TX %d, RX %d)\n", RN_id, eNB_inst, frame, slot, next_slot >> 1,last_slot>>1); - phy_procedures_eNB_lte(slot>>1, PHY_vars_eNB_g[eNB_inst], abstraction_flag, + phy_procedures_eNB_lte(slot>>1, PHY_vars_eNB_g[eNB_inst][0], abstraction_flag, r_type, PHY_vars_RN_g[RN_id]); } else { @@ -875,14 +879,17 @@ void *l2l1_task(void *args_p) { } }*/ start_meas(&dl_chan_stats); - for (UE_inst = 0; UE_inst < NB_UE_INST; UE_inst++) { - do_DL_sig (r_re0, r_im0, r_re, r_im, s_re, s_im, eNB2UE, enb_data, ue_data, next_slot, abstraction_flag,frame_parms, UE_inst); - } + for (UE_inst = 0; UE_inst < NB_UE_INST; UE_inst++) + for (CC_id=0;CC_id<MAX_NUM_CCs;CC_id++) { + do_DL_sig (r_re0, r_im0, r_re, r_im, s_re, s_im, eNB2UE, enb_data, ue_data, next_slot, abstraction_flag,frame_parms, UE_inst,CC_id); + } stop_meas(&dl_chan_stats); } if ((direction == SF_UL) || (frame_parms->frame_type == 0)) { //if ((subframe<2) || (subframe>4)) start_meas(&ul_chan_stats); - do_UL_sig (r_re0, r_im0, r_re, r_im, s_re, s_im, UE2eNB, enb_data, ue_data, next_slot, abstraction_flag,frame_parms, frame); + for (CC_id=0;CC_id<MAX_NUM_CCs;CC_id++) { + do_UL_sig (r_re0, r_im0, r_re, r_im, s_re, s_im, UE2eNB, enb_data, ue_data, next_slot, abstraction_flag,frame_parms, frame,CC_id); + } stop_meas(&ul_chan_stats); /* int ccc; @@ -905,9 +912,10 @@ void *l2l1_task(void *args_p) { } }*/ start_meas(&dl_chan_stats); - for (UE_inst = 0; UE_inst < NB_UE_INST; UE_inst++) { - do_DL_sig (r_re0, r_im0, r_re, r_im, s_re, s_im, eNB2UE, enb_data, ue_data, next_slot, abstraction_flag,frame_parms, UE_inst); - } + for (UE_inst = 0; UE_inst < NB_UE_INST; UE_inst++) + for (CC_id=0;CC_id<MAX_NUM_CCs;CC_id++) { + do_DL_sig (r_re0, r_im0, r_re, r_im, s_re, s_im, eNB2UE, enb_data, ue_data, next_slot, abstraction_flag,frame_parms, UE_inst,CC_id); + } stop_meas(&dl_chan_stats); /* for (aarx=0;aarx<UE2eNB[1][0]->nb_rx;aarx++) @@ -918,8 +926,10 @@ void *l2l1_task(void *args_p) { } else { // UL part start_meas(&ul_chan_stats); - do_UL_sig (r_re0, r_im0, r_re, r_im, s_re, s_im, UE2eNB, enb_data, ue_data, next_slot, abstraction_flag,frame_parms, frame); - stop_meas(&ul_chan_stats); + for (CC_id=0;CC_id<MAX_NUM_CCs;CC_id++) { + do_UL_sig (r_re0, r_im0, r_re, r_im, s_re, s_im, UE2eNB, enb_data, ue_data, next_slot, abstraction_flag,frame_parms, frame,CC_id); + } + stop_meas(&ul_chan_stats); /* int ccc; fprintf(SINRpost,"SINRdb For eNB New Subframe : \n "); @@ -933,15 +943,15 @@ void *l2l1_task(void *args_p) { } if ((last_slot == 1) && (frame == 0) && (abstraction_flag == 0) && (oai_emulation.info.n_frames == 1)) { - write_output ("dlchan0.m", "dlch0", &(PHY_vars_UE_g[0]->lte_ue_common_vars.dl_ch_estimates[0][0][0]), - (6 * (PHY_vars_UE_g[0]->lte_frame_parms.ofdm_symbol_size)), 1, 1); - write_output ("dlchan1.m", "dlch1", &(PHY_vars_UE_g[0]->lte_ue_common_vars.dl_ch_estimates[1][0][0]), - (6 * (PHY_vars_UE_g[0]->lte_frame_parms.ofdm_symbol_size)), 1, 1); - write_output ("dlchan2.m", "dlch2", &(PHY_vars_UE_g[0]->lte_ue_common_vars.dl_ch_estimates[2][0][0]), - (6 * (PHY_vars_UE_g[0]->lte_frame_parms.ofdm_symbol_size)), 1, 1); - write_output ("pbch_rxF_comp0.m", "pbch_comp0", PHY_vars_UE_g[0]->lte_ue_pbch_vars[0]->rxdataF_comp[0], + write_output ("dlchan0.m", "dlch0", &(PHY_vars_UE_g[0][0]->lte_ue_common_vars.dl_ch_estimates[0][0][0]), + (6 * (PHY_vars_UE_g[0][0]->lte_frame_parms.ofdm_symbol_size)), 1, 1); + write_output ("dlchan1.m", "dlch1", &(PHY_vars_UE_g[0][0]->lte_ue_common_vars.dl_ch_estimates[1][0][0]), + (6 * (PHY_vars_UE_g[0][0]->lte_frame_parms.ofdm_symbol_size)), 1, 1); + write_output ("dlchan2.m", "dlch2", &(PHY_vars_UE_g[0][0]->lte_ue_common_vars.dl_ch_estimates[2][0][0]), + (6 * (PHY_vars_UE_g[0][0]->lte_frame_parms.ofdm_symbol_size)), 1, 1); + write_output ("pbch_rxF_comp0.m", "pbch_comp0", PHY_vars_UE_g[0][0]->lte_ue_pbch_vars[0]->rxdataF_comp[0], 6 * 12 * 4, 1, 1); - write_output ("pbch_rxF_llr.m", "pbch_llr", PHY_vars_UE_g[0]->lte_ue_pbch_vars[0]->llr, + write_output ("pbch_rxF_llr.m", "pbch_llr", PHY_vars_UE_g[0][0]->lte_ue_pbch_vars[0]->llr, (frame_parms->Ncp == 0) ? 1920 : 1728, 1, 4); } /* @@ -959,20 +969,20 @@ void *l2l1_task(void *args_p) { &&(Channel_Flag==0) #endif ) { - write_output ("UEtxsig0.m", "txs0", PHY_vars_UE_g[0]->lte_ue_common_vars.txdata[0], FRAME_LENGTH_COMPLEX_SAMPLES, + write_output ("UEtxsig0.m", "txs0", PHY_vars_UE_g[0][0]->lte_ue_common_vars.txdata[0], FRAME_LENGTH_COMPLEX_SAMPLES, 1, 1); sprintf (fname, "eNBtxsig%d.m", frame); sprintf (vname, "txs%d", frame); - write_output (fname, vname, PHY_vars_eNB_g[0]->lte_eNB_common_vars.txdata[0][0], FRAME_LENGTH_COMPLEX_SAMPLES, 1, + write_output (fname, vname, PHY_vars_eNB_g[0][0]->lte_eNB_common_vars.txdata[0][0], FRAME_LENGTH_COMPLEX_SAMPLES, 1, 1); write_output ( - "eNBtxsigF0.m", "txsF0", PHY_vars_eNB_g[0]->lte_eNB_common_vars.txdataF[0][0], - PHY_vars_eNB_g[0]->lte_frame_parms.symbols_per_tti * PHY_vars_eNB_g[0]->lte_frame_parms.ofdm_symbol_size, 1, + "eNBtxsigF0.m", "txsF0", PHY_vars_eNB_g[0][0]->lte_eNB_common_vars.txdataF[0][0], + PHY_vars_eNB_g[0][0]->lte_frame_parms.symbols_per_tti * PHY_vars_eNB_g[0][0]->lte_frame_parms.ofdm_symbol_size, 1, 1); - write_output ("UErxsig0.m", "rxs0", PHY_vars_UE_g[0]->lte_ue_common_vars.rxdata[0], FRAME_LENGTH_COMPLEX_SAMPLES, + write_output ("UErxsig0.m", "rxs0", PHY_vars_UE_g[0][0]->lte_ue_common_vars.rxdata[0], FRAME_LENGTH_COMPLEX_SAMPLES, 1, 1); - write_output ("eNBrxsig0.m", "rxs0", PHY_vars_eNB_g[0]->lte_eNB_common_vars.rxdata[0][0], + write_output ("eNBrxsig0.m", "rxs0", PHY_vars_eNB_g[0][0]->lte_eNB_common_vars.rxdata[0][0], FRAME_LENGTH_COMPLEX_SAMPLES, 1, 1); } @@ -980,13 +990,13 @@ void *l2l1_task(void *args_p) { eNB_inst = 0; for (UE_inst = 0; UE_inst < NB_UE_INST; UE_inst++) { phy_scope_UE(form_ue[UE_inst], - PHY_vars_UE_g[UE_inst], + PHY_vars_UE_g[UE_inst][0], eNB_inst, UE_inst, 7); phy_scope_eNB(form_enb[UE_inst], - PHY_vars_eNB_g[eNB_inst], + PHY_vars_eNB_g[eNB_inst][0], UE_inst); } @@ -998,7 +1008,7 @@ void *l2l1_task(void *args_p) { } #endif stop_meas(&oaisim_stats_f); - } //end of frame + //end of frame stop_meas(&oaisim_stats); @@ -1126,7 +1136,7 @@ int main(int argc, char **argv) { #ifdef SMBV smbv_init_config(smbv_fname, smbv_nframes); - smbv_write_config_from_frame_parms(smbv_fname, &PHY_vars_eNB_g[0]->lte_frame_parms); + smbv_write_config_from_frame_parms(smbv_fname, &PHY_vars_eNB_g[0][0]->lte_frame_parms); #endif // add events to future event list: Currently not used //oai_emulation.info.oeh_enabled = 1; @@ -1182,39 +1192,39 @@ void reset_opp_meas(void){ reset_meas(&ul_chan_stats); for (UE_id=0; UE_id<NB_UE_INST; UE_id++) { - reset_meas(&PHY_vars_UE_g[UE_id]->phy_proc); - reset_meas(&PHY_vars_UE_g[UE_id]->phy_proc_rx); - reset_meas(&PHY_vars_UE_g[UE_id]->phy_proc_tx); + reset_meas(&PHY_vars_UE_g[UE_id][0]->phy_proc); + reset_meas(&PHY_vars_UE_g[UE_id][0]->phy_proc_rx); + reset_meas(&PHY_vars_UE_g[UE_id][0]->phy_proc_tx); - reset_meas(&PHY_vars_UE_g[UE_id]->ofdm_demod_stats); - reset_meas(&PHY_vars_UE_g[UE_id]->rx_dft_stats); - reset_meas(&PHY_vars_UE_g[UE_id]->dlsch_channel_estimation_stats); - reset_meas(&PHY_vars_UE_g[UE_id]->dlsch_freq_offset_estimation_stats); - reset_meas(&PHY_vars_UE_g[UE_id]->dlsch_decoding_stats); - reset_meas(&PHY_vars_UE_g[UE_id]->dlsch_rate_unmatching_stats); - reset_meas(&PHY_vars_UE_g[UE_id]->dlsch_turbo_decoding_stats); - reset_meas(&PHY_vars_UE_g[UE_id]->dlsch_deinterleaving_stats); - reset_meas(&PHY_vars_UE_g[UE_id]->dlsch_llr_stats); - reset_meas(&PHY_vars_UE_g[UE_id]->dlsch_unscrambling_stats); + reset_meas(&PHY_vars_UE_g[UE_id][0]->ofdm_demod_stats); + reset_meas(&PHY_vars_UE_g[UE_id][0]->rx_dft_stats); + reset_meas(&PHY_vars_UE_g[UE_id][0]->dlsch_channel_estimation_stats); + reset_meas(&PHY_vars_UE_g[UE_id][0]->dlsch_freq_offset_estimation_stats); + reset_meas(&PHY_vars_UE_g[UE_id][0]->dlsch_decoding_stats); + reset_meas(&PHY_vars_UE_g[UE_id][0]->dlsch_rate_unmatching_stats); + reset_meas(&PHY_vars_UE_g[UE_id][0]->dlsch_turbo_decoding_stats); + reset_meas(&PHY_vars_UE_g[UE_id][0]->dlsch_deinterleaving_stats); + reset_meas(&PHY_vars_UE_g[UE_id][0]->dlsch_llr_stats); + reset_meas(&PHY_vars_UE_g[UE_id][0]->dlsch_unscrambling_stats); - reset_meas(&PHY_vars_UE_g[UE_id]->dlsch_tc_init_stats); - reset_meas(&PHY_vars_UE_g[UE_id]->dlsch_tc_alpha_stats); - reset_meas(&PHY_vars_UE_g[UE_id]->dlsch_tc_beta_stats); - reset_meas(&PHY_vars_UE_g[UE_id]->dlsch_tc_gamma_stats); - reset_meas(&PHY_vars_UE_g[UE_id]->dlsch_tc_ext_stats); - reset_meas(&PHY_vars_UE_g[UE_id]->dlsch_tc_intl1_stats); - reset_meas(&PHY_vars_UE_g[UE_id]->dlsch_tc_intl2_stats); + reset_meas(&PHY_vars_UE_g[UE_id][0]->dlsch_tc_init_stats); + reset_meas(&PHY_vars_UE_g[UE_id][0]->dlsch_tc_alpha_stats); + reset_meas(&PHY_vars_UE_g[UE_id][0]->dlsch_tc_beta_stats); + reset_meas(&PHY_vars_UE_g[UE_id][0]->dlsch_tc_gamma_stats); + reset_meas(&PHY_vars_UE_g[UE_id][0]->dlsch_tc_ext_stats); + reset_meas(&PHY_vars_UE_g[UE_id][0]->dlsch_tc_intl1_stats); + reset_meas(&PHY_vars_UE_g[UE_id][0]->dlsch_tc_intl2_stats); - reset_meas(&PHY_vars_UE_g[UE_id]->tx_prach); + reset_meas(&PHY_vars_UE_g[UE_id][0]->tx_prach); - reset_meas(&PHY_vars_UE_g[UE_id]->ofdm_mod_stats); - reset_meas(&PHY_vars_UE_g[UE_id]->ulsch_encoding_stats); - reset_meas(&PHY_vars_UE_g[UE_id]->ulsch_modulation_stats); - reset_meas(&PHY_vars_UE_g[UE_id]->ulsch_segmentation_stats); - reset_meas(&PHY_vars_UE_g[UE_id]->ulsch_rate_matching_stats); - reset_meas(&PHY_vars_UE_g[UE_id]->ulsch_turbo_encoding_stats); - reset_meas(&PHY_vars_UE_g[UE_id]->ulsch_interleaving_stats); - reset_meas(&PHY_vars_UE_g[UE_id]->ulsch_multiplexing_stats); + reset_meas(&PHY_vars_UE_g[UE_id][0]->ofdm_mod_stats); + reset_meas(&PHY_vars_UE_g[UE_id][0]->ulsch_encoding_stats); + reset_meas(&PHY_vars_UE_g[UE_id][0]->ulsch_modulation_stats); + reset_meas(&PHY_vars_UE_g[UE_id][0]->ulsch_segmentation_stats); + reset_meas(&PHY_vars_UE_g[UE_id][0]->ulsch_rate_matching_stats); + reset_meas(&PHY_vars_UE_g[UE_id][0]->ulsch_turbo_encoding_stats); + reset_meas(&PHY_vars_UE_g[UE_id][0]->ulsch_interleaving_stats); + reset_meas(&PHY_vars_UE_g[UE_id][0]->ulsch_multiplexing_stats); /* * L2 functions */ @@ -1236,46 +1246,46 @@ void reset_opp_meas(void){ reset_meas(&UE_pdcp_stats[UE_id].ip_pdcp); for (eNB_id=0; eNB_id<NB_eNB_INST; eNB_id++) { - reset_meas(&PHY_vars_eNB_g[eNB_id]->phy_proc); - reset_meas(&PHY_vars_eNB_g[eNB_id]->phy_proc_rx); - reset_meas(&PHY_vars_eNB_g[eNB_id]->phy_proc_tx); - reset_meas(&PHY_vars_eNB_g[eNB_id]->rx_prach); + reset_meas(&PHY_vars_eNB_g[eNB_id][0]->phy_proc); + reset_meas(&PHY_vars_eNB_g[eNB_id][0]->phy_proc_rx); + reset_meas(&PHY_vars_eNB_g[eNB_id][0]->phy_proc_tx); + reset_meas(&PHY_vars_eNB_g[eNB_id][0]->rx_prach); - reset_meas(&PHY_vars_eNB_g[eNB_id]->ofdm_mod_stats); - reset_meas(&PHY_vars_eNB_g[eNB_id]->dlsch_encoding_stats); - reset_meas(&PHY_vars_eNB_g[eNB_id]->dlsch_modulation_stats); - reset_meas(&PHY_vars_eNB_g[eNB_id]->dlsch_scrambling_stats); - reset_meas(&PHY_vars_eNB_g[eNB_id]->dlsch_rate_matching_stats); - reset_meas(&PHY_vars_eNB_g[eNB_id]->dlsch_turbo_encoding_stats); - reset_meas(&PHY_vars_eNB_g[eNB_id]->dlsch_interleaving_stats); + reset_meas(&PHY_vars_eNB_g[eNB_id][0]->ofdm_mod_stats); + reset_meas(&PHY_vars_eNB_g[eNB_id][0]->dlsch_encoding_stats); + reset_meas(&PHY_vars_eNB_g[eNB_id][0]->dlsch_modulation_stats); + reset_meas(&PHY_vars_eNB_g[eNB_id][0]->dlsch_scrambling_stats); + reset_meas(&PHY_vars_eNB_g[eNB_id][0]->dlsch_rate_matching_stats); + reset_meas(&PHY_vars_eNB_g[eNB_id][0]->dlsch_turbo_encoding_stats); + reset_meas(&PHY_vars_eNB_g[eNB_id][0]->dlsch_interleaving_stats); - reset_meas(&PHY_vars_eNB_g[eNB_id]->ofdm_demod_stats); + reset_meas(&PHY_vars_eNB_g[eNB_id][0]->ofdm_demod_stats); //reset_meas(&PHY_vars_eNB_g[eNB_id]->rx_dft_stats); //reset_meas(&PHY_vars_eNB_g[eNB_id]->ulsch_channel_estimation_stats); //reset_meas(&PHY_vars_eNB_g[eNB_id]->ulsch_freq_offset_estimation_stats); - reset_meas(&PHY_vars_eNB_g[eNB_id]->ulsch_decoding_stats); - reset_meas(&PHY_vars_eNB_g[eNB_id]->ulsch_demodulation_stats); - reset_meas(&PHY_vars_eNB_g[eNB_id]->ulsch_rate_unmatching_stats); - reset_meas(&PHY_vars_eNB_g[eNB_id]->ulsch_turbo_decoding_stats); - reset_meas(&PHY_vars_eNB_g[eNB_id]->ulsch_deinterleaving_stats); - reset_meas(&PHY_vars_eNB_g[eNB_id]->ulsch_demultiplexing_stats); - reset_meas(&PHY_vars_eNB_g[eNB_id]->ulsch_llr_stats); - reset_meas(&PHY_vars_eNB_g[eNB_id]->ulsch_tc_init_stats); - reset_meas(&PHY_vars_eNB_g[eNB_id]->ulsch_tc_alpha_stats); - reset_meas(&PHY_vars_eNB_g[eNB_id]->ulsch_tc_beta_stats); - reset_meas(&PHY_vars_eNB_g[eNB_id]->ulsch_tc_gamma_stats); - reset_meas(&PHY_vars_eNB_g[eNB_id]->ulsch_tc_ext_stats); - reset_meas(&PHY_vars_eNB_g[eNB_id]->ulsch_tc_intl1_stats); - reset_meas(&PHY_vars_eNB_g[eNB_id]->ulsch_tc_intl2_stats); + reset_meas(&PHY_vars_eNB_g[eNB_id][0]->ulsch_decoding_stats); + reset_meas(&PHY_vars_eNB_g[eNB_id][0]->ulsch_demodulation_stats); + reset_meas(&PHY_vars_eNB_g[eNB_id][0]->ulsch_rate_unmatching_stats); + reset_meas(&PHY_vars_eNB_g[eNB_id][0]->ulsch_turbo_decoding_stats); + reset_meas(&PHY_vars_eNB_g[eNB_id][0]->ulsch_deinterleaving_stats); + reset_meas(&PHY_vars_eNB_g[eNB_id][0]->ulsch_demultiplexing_stats); + reset_meas(&PHY_vars_eNB_g[eNB_id][0]->ulsch_llr_stats); + reset_meas(&PHY_vars_eNB_g[eNB_id][0]->ulsch_tc_init_stats); + reset_meas(&PHY_vars_eNB_g[eNB_id][0]->ulsch_tc_alpha_stats); + reset_meas(&PHY_vars_eNB_g[eNB_id][0]->ulsch_tc_beta_stats); + reset_meas(&PHY_vars_eNB_g[eNB_id][0]->ulsch_tc_gamma_stats); + reset_meas(&PHY_vars_eNB_g[eNB_id][0]->ulsch_tc_ext_stats); + reset_meas(&PHY_vars_eNB_g[eNB_id][0]->ulsch_tc_intl1_stats); + reset_meas(&PHY_vars_eNB_g[eNB_id][0]->ulsch_tc_intl2_stats); - reset_meas(&eNB2UE[eNB_id][UE_id]->random_channel); - reset_meas(&eNB2UE[eNB_id][UE_id]->interp_time); - reset_meas(&eNB2UE[eNB_id][UE_id]->interp_freq); - reset_meas(&eNB2UE[eNB_id][UE_id]->convolution); - reset_meas(&UE2eNB[UE_id][eNB_id]->random_channel); - reset_meas(&UE2eNB[UE_id][eNB_id]->interp_time); - reset_meas(&UE2eNB[UE_id][eNB_id]->interp_freq); - reset_meas(&UE2eNB[UE_id][eNB_id]->convolution); + reset_meas(&eNB2UE[eNB_id][UE_id][0]->random_channel); + reset_meas(&eNB2UE[eNB_id][UE_id][0]->interp_time); + reset_meas(&eNB2UE[eNB_id][UE_id][0]->interp_freq); + reset_meas(&eNB2UE[eNB_id][UE_id][0]->convolution); + reset_meas(&UE2eNB[UE_id][eNB_id][0]->random_channel); + reset_meas(&UE2eNB[UE_id][eNB_id][0]->interp_time); + reset_meas(&UE2eNB[UE_id][eNB_id][0]->interp_freq); + reset_meas(&UE2eNB[UE_id][eNB_id][0]->convolution); /* * L2 functions */ @@ -1313,85 +1323,85 @@ void print_opp_meas(void){ for (UE_id=0; UE_id<NB_UE_INST;UE_id++) { for (eNB_id=0; eNB_id<NB_eNB_INST; eNB_id++) { - print_meas(&eNB2UE[eNB_id][UE_id]->random_channel,"[DL][random_channel]",&oaisim_stats,&oaisim_stats_f); - print_meas(&eNB2UE[eNB_id][UE_id]->interp_time,"[DL][interp_time]",&oaisim_stats,&oaisim_stats_f); - print_meas(&eNB2UE[eNB_id][UE_id]->interp_freq,"[DL][interp_freq]",&oaisim_stats,&oaisim_stats_f); - print_meas(&eNB2UE[eNB_id][UE_id]->convolution,"[DL][convolution]",&oaisim_stats,&oaisim_stats_f); - - print_meas(&UE2eNB[UE_id][eNB_id]->random_channel,"[UL][random_channel]",&oaisim_stats,&oaisim_stats_f); - print_meas(&UE2eNB[UE_id][eNB_id]->interp_time,"[UL][interp_time]",&oaisim_stats,&oaisim_stats_f); - print_meas(&UE2eNB[UE_id][eNB_id]->interp_freq,"[UL][interp_freq]",&oaisim_stats,&oaisim_stats_f); - print_meas(&UE2eNB[UE_id][eNB_id]->convolution,"[UL][convolution]",&oaisim_stats,&oaisim_stats_f); + print_meas(&eNB2UE[eNB_id][UE_id][0]->random_channel,"[DL][random_channel]",&oaisim_stats,&oaisim_stats_f); + print_meas(&eNB2UE[eNB_id][UE_id][0]->interp_time,"[DL][interp_time]",&oaisim_stats,&oaisim_stats_f); + print_meas(&eNB2UE[eNB_id][UE_id][0]->interp_freq,"[DL][interp_freq]",&oaisim_stats,&oaisim_stats_f); + print_meas(&eNB2UE[eNB_id][UE_id][0]->convolution,"[DL][convolution]",&oaisim_stats,&oaisim_stats_f); + + print_meas(&UE2eNB[UE_id][eNB_id][0]->random_channel,"[UL][random_channel]",&oaisim_stats,&oaisim_stats_f); + print_meas(&UE2eNB[UE_id][eNB_id][0]->interp_time,"[UL][interp_time]",&oaisim_stats,&oaisim_stats_f); + print_meas(&UE2eNB[UE_id][eNB_id][0]->interp_freq,"[UL][interp_freq]",&oaisim_stats,&oaisim_stats_f); + print_meas(&UE2eNB[UE_id][eNB_id][0]->convolution,"[UL][convolution]",&oaisim_stats,&oaisim_stats_f); } } for (UE_id=0; UE_id<NB_UE_INST;UE_id++) { - print_meas(&PHY_vars_UE_g[UE_id]->phy_proc,"[UE][total_phy_proc]",&oaisim_stats,&oaisim_stats_f); + print_meas(&PHY_vars_UE_g[UE_id][0]->phy_proc,"[UE][total_phy_proc]",&oaisim_stats,&oaisim_stats_f); - print_meas(&PHY_vars_UE_g[UE_id]->phy_proc_rx,"[UE][total_phy_proc_rx]",&oaisim_stats,&oaisim_stats_f); - print_meas(&PHY_vars_UE_g[UE_id]->ofdm_demod_stats,"[UE][ofdm_demod]",&oaisim_stats,&oaisim_stats_f); - print_meas(&PHY_vars_UE_g[UE_id]->rx_dft_stats,"[UE][rx_dft]",&oaisim_stats,&oaisim_stats_f); - print_meas(&PHY_vars_UE_g[UE_id]->dlsch_channel_estimation_stats,"[UE][channel_est]",&oaisim_stats,&oaisim_stats_f); - print_meas(&PHY_vars_UE_g[UE_id]->dlsch_freq_offset_estimation_stats,"[UE][freq_offset]",&oaisim_stats,&oaisim_stats_f); - print_meas(&PHY_vars_UE_g[UE_id]->dlsch_llr_stats,"[UE][llr]",&oaisim_stats,&oaisim_stats_f); - print_meas(&PHY_vars_UE_g[UE_id]->dlsch_unscrambling_stats,"[UE][unscrambling]",&oaisim_stats,&oaisim_stats_f); - print_meas(&PHY_vars_UE_g[UE_id]->dlsch_decoding_stats,"[UE][decoding]",&oaisim_stats,&oaisim_stats_f); - print_meas(&PHY_vars_UE_g[UE_id]->dlsch_rate_unmatching_stats,"[UE][rate_unmatching]",&oaisim_stats,&oaisim_stats_f); - print_meas(&PHY_vars_UE_g[UE_id]->dlsch_deinterleaving_stats,"[UE][deinterleaving]",&oaisim_stats,&oaisim_stats_f); - print_meas(&PHY_vars_UE_g[UE_id]->dlsch_turbo_decoding_stats,"[UE][turbo_decoding]",&oaisim_stats,&oaisim_stats_f); - print_meas(&PHY_vars_UE_g[UE_id]->dlsch_tc_init_stats,"[UE][ |_tc_init]",&oaisim_stats,&oaisim_stats_f); - print_meas(&PHY_vars_UE_g[UE_id]->dlsch_tc_alpha_stats,"[UE][ |_tc_alpha]",&oaisim_stats,&oaisim_stats_f); - print_meas(&PHY_vars_UE_g[UE_id]->dlsch_tc_beta_stats,"[UE][ |_tc_beta]",&oaisim_stats,&oaisim_stats_f); - print_meas(&PHY_vars_UE_g[UE_id]->dlsch_tc_gamma_stats,"[UE][ |_tc_gamma]",&oaisim_stats,&oaisim_stats_f); - print_meas(&PHY_vars_UE_g[UE_id]->dlsch_tc_ext_stats,"[UE][ |_tc_ext]",&oaisim_stats,&oaisim_stats_f); - print_meas(&PHY_vars_UE_g[UE_id]->dlsch_tc_intl1_stats,"[UE][ |_tc_intl1]",&oaisim_stats,&oaisim_stats_f); - print_meas(&PHY_vars_UE_g[UE_id]->dlsch_tc_intl2_stats,"[UE][ |_tc_intl2]",&oaisim_stats,&oaisim_stats_f); + print_meas(&PHY_vars_UE_g[UE_id][0]->phy_proc_rx,"[UE][total_phy_proc_rx]",&oaisim_stats,&oaisim_stats_f); + print_meas(&PHY_vars_UE_g[UE_id][0]->ofdm_demod_stats,"[UE][ofdm_demod]",&oaisim_stats,&oaisim_stats_f); + print_meas(&PHY_vars_UE_g[UE_id][0]->rx_dft_stats,"[UE][rx_dft]",&oaisim_stats,&oaisim_stats_f); + print_meas(&PHY_vars_UE_g[UE_id][0]->dlsch_channel_estimation_stats,"[UE][channel_est]",&oaisim_stats,&oaisim_stats_f); + print_meas(&PHY_vars_UE_g[UE_id][0]->dlsch_freq_offset_estimation_stats,"[UE][freq_offset]",&oaisim_stats,&oaisim_stats_f); + print_meas(&PHY_vars_UE_g[UE_id][0]->dlsch_llr_stats,"[UE][llr]",&oaisim_stats,&oaisim_stats_f); + print_meas(&PHY_vars_UE_g[UE_id][0]->dlsch_unscrambling_stats,"[UE][unscrambling]",&oaisim_stats,&oaisim_stats_f); + print_meas(&PHY_vars_UE_g[UE_id][0]->dlsch_decoding_stats,"[UE][decoding]",&oaisim_stats,&oaisim_stats_f); + print_meas(&PHY_vars_UE_g[UE_id][0]->dlsch_rate_unmatching_stats,"[UE][rate_unmatching]",&oaisim_stats,&oaisim_stats_f); + print_meas(&PHY_vars_UE_g[UE_id][0]->dlsch_deinterleaving_stats,"[UE][deinterleaving]",&oaisim_stats,&oaisim_stats_f); + print_meas(&PHY_vars_UE_g[UE_id][0]->dlsch_turbo_decoding_stats,"[UE][turbo_decoding]",&oaisim_stats,&oaisim_stats_f); + print_meas(&PHY_vars_UE_g[UE_id][0]->dlsch_tc_init_stats,"[UE][ |_tc_init]",&oaisim_stats,&oaisim_stats_f); + print_meas(&PHY_vars_UE_g[UE_id][0]->dlsch_tc_alpha_stats,"[UE][ |_tc_alpha]",&oaisim_stats,&oaisim_stats_f); + print_meas(&PHY_vars_UE_g[UE_id][0]->dlsch_tc_beta_stats,"[UE][ |_tc_beta]",&oaisim_stats,&oaisim_stats_f); + print_meas(&PHY_vars_UE_g[UE_id][0]->dlsch_tc_gamma_stats,"[UE][ |_tc_gamma]",&oaisim_stats,&oaisim_stats_f); + print_meas(&PHY_vars_UE_g[UE_id][0]->dlsch_tc_ext_stats,"[UE][ |_tc_ext]",&oaisim_stats,&oaisim_stats_f); + print_meas(&PHY_vars_UE_g[UE_id][0]->dlsch_tc_intl1_stats,"[UE][ |_tc_intl1]",&oaisim_stats,&oaisim_stats_f); + print_meas(&PHY_vars_UE_g[UE_id][0]->dlsch_tc_intl2_stats,"[UE][ |_tc_intl2]",&oaisim_stats,&oaisim_stats_f); - print_meas(&PHY_vars_UE_g[UE_id]->phy_proc_tx,"[UE][total_phy_proc_tx]",&oaisim_stats,&oaisim_stats_f); - print_meas(&PHY_vars_UE_g[UE_id]->ofdm_mod_stats,"[UE][ofdm_mod]",&oaisim_stats,&oaisim_stats_f); - print_meas(&PHY_vars_UE_g[UE_id]->ulsch_modulation_stats,"[UE][modulation]",&oaisim_stats,&oaisim_stats_f); - print_meas(&PHY_vars_UE_g[UE_id]->ulsch_encoding_stats,"[UE][encoding]",&oaisim_stats,&oaisim_stats_f); - print_meas(&PHY_vars_UE_g[UE_id]->ulsch_segmentation_stats,"[UE][segmentation]",&oaisim_stats,&oaisim_stats_f); - print_meas(&PHY_vars_UE_g[UE_id]->ulsch_rate_matching_stats,"[UE][rate_matching]",&oaisim_stats,&oaisim_stats_f); - print_meas(&PHY_vars_UE_g[UE_id]->ulsch_turbo_encoding_stats,"[UE][turbo_encoding]",&oaisim_stats,&oaisim_stats_f); - print_meas(&PHY_vars_UE_g[UE_id]->ulsch_interleaving_stats,"[UE][interleaving]",&oaisim_stats,&oaisim_stats_f); - print_meas(&PHY_vars_UE_g[UE_id]->ulsch_multiplexing_stats,"[UE][multiplexing]",&oaisim_stats,&oaisim_stats_f); + print_meas(&PHY_vars_UE_g[UE_id][0]->phy_proc_tx,"[UE][total_phy_proc_tx]",&oaisim_stats,&oaisim_stats_f); + print_meas(&PHY_vars_UE_g[UE_id][0]->ofdm_mod_stats,"[UE][ofdm_mod]",&oaisim_stats,&oaisim_stats_f); + print_meas(&PHY_vars_UE_g[UE_id][0]->ulsch_modulation_stats,"[UE][modulation]",&oaisim_stats,&oaisim_stats_f); + print_meas(&PHY_vars_UE_g[UE_id][0]->ulsch_encoding_stats,"[UE][encoding]",&oaisim_stats,&oaisim_stats_f); + print_meas(&PHY_vars_UE_g[UE_id][0]->ulsch_segmentation_stats,"[UE][segmentation]",&oaisim_stats,&oaisim_stats_f); + print_meas(&PHY_vars_UE_g[UE_id][0]->ulsch_rate_matching_stats,"[UE][rate_matching]",&oaisim_stats,&oaisim_stats_f); + print_meas(&PHY_vars_UE_g[UE_id][0]->ulsch_turbo_encoding_stats,"[UE][turbo_encoding]",&oaisim_stats,&oaisim_stats_f); + print_meas(&PHY_vars_UE_g[UE_id][0]->ulsch_interleaving_stats,"[UE][interleaving]",&oaisim_stats,&oaisim_stats_f); + print_meas(&PHY_vars_UE_g[UE_id][0]->ulsch_multiplexing_stats,"[UE][multiplexing]",&oaisim_stats,&oaisim_stats_f); } for (eNB_id=0; eNB_id<NB_eNB_INST; eNB_id++) { - print_meas(&PHY_vars_eNB_g[eNB_id]->phy_proc,"[eNB][total_phy_proc]",&oaisim_stats,&oaisim_stats_f); - - print_meas(&PHY_vars_eNB_g[eNB_id]->phy_proc_tx,"[eNB][total_phy_proc_tx]",&oaisim_stats,&oaisim_stats_f); - print_meas(&PHY_vars_eNB_g[eNB_id]->ofdm_mod_stats,"[eNB][ofdm_mod]",&oaisim_stats,&oaisim_stats_f); - print_meas(&PHY_vars_eNB_g[eNB_id]->dlsch_modulation_stats,"[eNB][modulation]",&oaisim_stats,&oaisim_stats_f); - print_meas(&PHY_vars_eNB_g[eNB_id]->dlsch_scrambling_stats,"[eNB][scrambling]",&oaisim_stats,&oaisim_stats_f); - print_meas(&PHY_vars_eNB_g[eNB_id]->dlsch_encoding_stats,"[eNB][encoding]",&oaisim_stats,&oaisim_stats_f); - print_meas(&PHY_vars_eNB_g[eNB_id]->dlsch_interleaving_stats,"[eNB][|_interleaving]",&oaisim_stats,&oaisim_stats_f); - print_meas(&PHY_vars_eNB_g[eNB_id]->dlsch_rate_matching_stats,"[eNB][|_rate_matching]",&oaisim_stats,&oaisim_stats_f); - print_meas(&PHY_vars_eNB_g[eNB_id]->dlsch_turbo_encoding_stats,"[eNB][|_turbo_encoding]",&oaisim_stats,&oaisim_stats_f); + print_meas(&PHY_vars_eNB_g[eNB_id][0]->phy_proc,"[eNB][total_phy_proc]",&oaisim_stats,&oaisim_stats_f); + + print_meas(&PHY_vars_eNB_g[eNB_id][0]->phy_proc_tx,"[eNB][total_phy_proc_tx]",&oaisim_stats,&oaisim_stats_f); + print_meas(&PHY_vars_eNB_g[eNB_id][0]->ofdm_mod_stats,"[eNB][ofdm_mod]",&oaisim_stats,&oaisim_stats_f); + print_meas(&PHY_vars_eNB_g[eNB_id][0]->dlsch_modulation_stats,"[eNB][modulation]",&oaisim_stats,&oaisim_stats_f); + print_meas(&PHY_vars_eNB_g[eNB_id][0]->dlsch_scrambling_stats,"[eNB][scrambling]",&oaisim_stats,&oaisim_stats_f); + print_meas(&PHY_vars_eNB_g[eNB_id][0]->dlsch_encoding_stats,"[eNB][encoding]",&oaisim_stats,&oaisim_stats_f); + print_meas(&PHY_vars_eNB_g[eNB_id][0]->dlsch_interleaving_stats,"[eNB][|_interleaving]",&oaisim_stats,&oaisim_stats_f); + print_meas(&PHY_vars_eNB_g[eNB_id][0]->dlsch_rate_matching_stats,"[eNB][|_rate_matching]",&oaisim_stats,&oaisim_stats_f); + print_meas(&PHY_vars_eNB_g[eNB_id][0]->dlsch_turbo_encoding_stats,"[eNB][|_turbo_encoding]",&oaisim_stats,&oaisim_stats_f); - print_meas(&PHY_vars_eNB_g[eNB_id]->phy_proc_rx,"[eNB][total_phy_proc_rx]",&oaisim_stats,&oaisim_stats_f); - print_meas(&PHY_vars_eNB_g[eNB_id]->ofdm_demod_stats,"[eNB][ofdm_demod]",&oaisim_stats,&oaisim_stats_f); - //print_meas(&PHY_vars_eNB_g[eNB_id]->ulsch_channel_estimation_stats,"[eNB][channel_est]"); - //print_meas(&PHY_vars_eNB_g[eNB_id]->ulsch_freq_offset_estimation_stats,"[eNB][freq_offset]"); - //print_meas(&PHY_vars_eNB_g[eNB_id]->rx_dft_stats,"[eNB][rx_dft]"); - print_meas(&PHY_vars_eNB_g[eNB_id]->ulsch_demodulation_stats,"[eNB][demodulation]",&oaisim_stats,&oaisim_stats_f); - print_meas(&PHY_vars_eNB_g[eNB_id]->ulsch_decoding_stats,"[eNB][decoding]",&oaisim_stats,&oaisim_stats_f); - print_meas(&PHY_vars_eNB_g[eNB_id]->ulsch_deinterleaving_stats,"[eNB][|_deinterleaving]",&oaisim_stats,&oaisim_stats_f); - print_meas(&PHY_vars_eNB_g[eNB_id]->ulsch_demultiplexing_stats,"[eNB][|_demultiplexing]",&oaisim_stats,&oaisim_stats_f); - print_meas(&PHY_vars_eNB_g[eNB_id]->ulsch_rate_unmatching_stats,"[eNB][|_rate_unmatching]",&oaisim_stats,&oaisim_stats_f); - print_meas(&PHY_vars_eNB_g[eNB_id]->ulsch_turbo_decoding_stats,"[eNB][|_turbo_decoding]",&oaisim_stats,&oaisim_stats_f); - print_meas(&PHY_vars_eNB_g[eNB_id]->ulsch_tc_init_stats,"[eNB][ |_tc_init]",&oaisim_stats,&oaisim_stats_f); - print_meas(&PHY_vars_eNB_g[eNB_id]->ulsch_tc_alpha_stats,"[eNB][ |_tc_alpha]",&oaisim_stats,&oaisim_stats_f); - print_meas(&PHY_vars_eNB_g[eNB_id]->ulsch_tc_beta_stats,"[eNB][ |_tc_beta]",&oaisim_stats,&oaisim_stats_f); - print_meas(&PHY_vars_eNB_g[eNB_id]->ulsch_tc_gamma_stats,"[eNB][ |_tc_gamma]",&oaisim_stats,&oaisim_stats_f); - print_meas(&PHY_vars_eNB_g[eNB_id]->ulsch_tc_ext_stats,"[eNB][ |_tc_ext]",&oaisim_stats,&oaisim_stats_f); - print_meas(&PHY_vars_eNB_g[eNB_id]->ulsch_tc_intl1_stats,"[eNB][ |_tc_intl1]",&oaisim_stats,&oaisim_stats_f); - print_meas(&PHY_vars_eNB_g[eNB_id]->ulsch_tc_intl2_stats,"[eNB][ |_tc_intl2]",&oaisim_stats,&oaisim_stats_f); + print_meas(&PHY_vars_eNB_g[eNB_id][0]->phy_proc_rx,"[eNB][total_phy_proc_rx]",&oaisim_stats,&oaisim_stats_f); + print_meas(&PHY_vars_eNB_g[eNB_id][0]->ofdm_demod_stats,"[eNB][ofdm_demod]",&oaisim_stats,&oaisim_stats_f); + //print_meas(&PHY_vars_eNB_g[eNB_id][0]->ulsch_channel_estimation_stats,"[eNB][channel_est]"); + //print_meas(&PHY_vars_eNB_g[eNB_id][0]->ulsch_freq_offset_estimation_stats,"[eNB][freq_offset]"); + //print_meas(&PHY_vars_eNB_g[eNB_id][0]->rx_dft_stats,"[eNB][rx_dft]"); + print_meas(&PHY_vars_eNB_g[eNB_id][0]->ulsch_demodulation_stats,"[eNB][demodulation]",&oaisim_stats,&oaisim_stats_f); + print_meas(&PHY_vars_eNB_g[eNB_id][0]->ulsch_decoding_stats,"[eNB][decoding]",&oaisim_stats,&oaisim_stats_f); + print_meas(&PHY_vars_eNB_g[eNB_id][0]->ulsch_deinterleaving_stats,"[eNB][|_deinterleaving]",&oaisim_stats,&oaisim_stats_f); + print_meas(&PHY_vars_eNB_g[eNB_id][0]->ulsch_demultiplexing_stats,"[eNB][|_demultiplexing]",&oaisim_stats,&oaisim_stats_f); + print_meas(&PHY_vars_eNB_g[eNB_id][0]->ulsch_rate_unmatching_stats,"[eNB][|_rate_unmatching]",&oaisim_stats,&oaisim_stats_f); + print_meas(&PHY_vars_eNB_g[eNB_id][0]->ulsch_turbo_decoding_stats,"[eNB][|_turbo_decoding]",&oaisim_stats,&oaisim_stats_f); + print_meas(&PHY_vars_eNB_g[eNB_id][0]->ulsch_tc_init_stats,"[eNB][ |_tc_init]",&oaisim_stats,&oaisim_stats_f); + print_meas(&PHY_vars_eNB_g[eNB_id][0]->ulsch_tc_alpha_stats,"[eNB][ |_tc_alpha]",&oaisim_stats,&oaisim_stats_f); + print_meas(&PHY_vars_eNB_g[eNB_id][0]->ulsch_tc_beta_stats,"[eNB][ |_tc_beta]",&oaisim_stats,&oaisim_stats_f); + print_meas(&PHY_vars_eNB_g[eNB_id][0]->ulsch_tc_gamma_stats,"[eNB][ |_tc_gamma]",&oaisim_stats,&oaisim_stats_f); + print_meas(&PHY_vars_eNB_g[eNB_id][0]->ulsch_tc_ext_stats,"[eNB][ |_tc_ext]",&oaisim_stats,&oaisim_stats_f); + print_meas(&PHY_vars_eNB_g[eNB_id][0]->ulsch_tc_intl1_stats,"[eNB][ |_tc_intl1]",&oaisim_stats,&oaisim_stats_f); + print_meas(&PHY_vars_eNB_g[eNB_id][0]->ulsch_tc_intl2_stats,"[eNB][ |_tc_intl2]",&oaisim_stats,&oaisim_stats_f); - print_meas(&PHY_vars_eNB_g[eNB_id]->rx_prach,"[eNB][rx_prach]",&oaisim_stats,&oaisim_stats_f); + print_meas(&PHY_vars_eNB_g[eNB_id][0]->rx_prach,"[eNB][rx_prach]",&oaisim_stats,&oaisim_stats_f); } diff --git a/targets/SIMU/USER/oaisim.h b/targets/SIMU/USER/oaisim.h index cf3a6e78ef..d36ed7022d 100644 --- a/targets/SIMU/USER/oaisim.h +++ b/targets/SIMU/USER/oaisim.h @@ -21,9 +21,9 @@ eNB_MAC_INST* get_eNB_mac_inst(void); OAI_Emulation* get_OAI_emulation(void); void init_channel_vars(LTE_DL_FRAME_PARMS *frame_parms, double ***s_re,double ***s_im,double ***r_re,double ***r_im,double ***r_re0,double ***r_im0); -void do_UL_sig(double **r_re0,double **r_im0,double **r_re,double **r_im,double **s_re,double **s_im,channel_desc_t *UE2eNB[NUMBER_OF_UE_MAX][NUMBER_OF_eNB_MAX],node_desc_t *enb_data[NUMBER_OF_eNB_MAX],node_desc_t *ue_data[NUMBER_OF_UE_MAX],uint16_t next_slot,uint8_t abstraction_flag,LTE_DL_FRAME_PARMS *frame_parms, uint32_t); +void do_UL_sig(double **r_re0,double **r_im0,double **r_re,double **r_im,double **s_re,double **s_im,channel_desc_t *UE2eNB[NUMBER_OF_UE_MAX][NUMBER_OF_eNB_MAX][MAX_NUM_CCs],node_desc_t *enb_data[NUMBER_OF_eNB_MAX],node_desc_t *ue_data[NUMBER_OF_UE_MAX],uint16_t next_slot,uint8_t abstraction_flag,LTE_DL_FRAME_PARMS *frame_parms, uint32_t,uint8_t); -void do_DL_sig(double **r_re0,double **r_im0,double **r_re,double **r_im,double **s_re,double **s_im,channel_desc_t *eNB2UE[NUMBER_OF_eNB_MAX][NUMBER_OF_UE_MAX],node_desc_t *enb_data[NUMBER_OF_eNB_MAX],node_desc_t *ue_data[NUMBER_OF_UE_MAX],uint16_t next_slot,uint8_t abstraction_flag,LTE_DL_FRAME_PARMS *frame_parms,uint8_t UE_id); +void do_DL_sig(double **r_re0,double **r_im0,double **r_re,double **r_im,double **s_re,double **s_im,channel_desc_t *eNB2UE[NUMBER_OF_eNB_MAX][NUMBER_OF_UE_MAX][MAX_NUM_CCs],node_desc_t *enb_data[NUMBER_OF_eNB_MAX],node_desc_t *ue_data[NUMBER_OF_UE_MAX],uint16_t next_slot,uint8_t abstraction_flag,LTE_DL_FRAME_PARMS *frame_parms,uint8_t UE_id,int CC_id); void init_ue(node_desc_t *ue_data, UE_Antenna ue_ant);//Abstraction changes void init_enb(node_desc_t *enb_data, eNB_Antenna enb_ant);//Abstraction changes diff --git a/targets/SIMU/USER/oaisim_functions.c b/targets/SIMU/USER/oaisim_functions.c index d75f87e80a..36583e067f 100644 --- a/targets/SIMU/USER/oaisim_functions.c +++ b/targets/SIMU/USER/oaisim_functions.c @@ -146,8 +146,8 @@ Packet_OTG_List_t *otg_pdcp_buffer = NULL; extern node_desc_t *enb_data[NUMBER_OF_eNB_MAX]; extern node_desc_t *ue_data[NUMBER_OF_UE_MAX]; -extern channel_desc_t *eNB2UE[NUMBER_OF_eNB_MAX][NUMBER_OF_UE_MAX]; -extern channel_desc_t *UE2eNB[NUMBER_OF_UE_MAX][NUMBER_OF_eNB_MAX]; +extern channel_desc_t *eNB2UE[NUMBER_OF_eNB_MAX][NUMBER_OF_UE_MAX][MAX_NUM_CCs]; +extern channel_desc_t *UE2eNB[NUMBER_OF_UE_MAX][NUMBER_OF_eNB_MAX][MAX_NUM_CCs]; extern mapping small_scale_names[]; #if defined(Rel10) @@ -803,6 +803,7 @@ void init_seed(uint8_t set_seed) { void init_openair1(void) { module_id_t UE_id, eNB_id; + uint8_t CC_id; #if defined(ENABLE_RAL) int list_index; #endif @@ -811,22 +812,23 @@ void init_openair1(void) { for (eNB_id=0; eNB_id<NB_eNB_INST;eNB_id++){ for (UE_id=0; UE_id<NB_UE_INST;UE_id++){ - PHY_vars_eNB_g[eNB_id]->pusch_config_dedicated[UE_id].betaOffset_ACK_Index = beta_ACK; - PHY_vars_eNB_g[eNB_id]->pusch_config_dedicated[UE_id].betaOffset_RI_Index = beta_RI; - PHY_vars_eNB_g[eNB_id]->pusch_config_dedicated[UE_id].betaOffset_CQI_Index = beta_CQI; - PHY_vars_UE_g[UE_id]->pusch_config_dedicated[eNB_id].betaOffset_ACK_Index = beta_ACK; - PHY_vars_UE_g[UE_id]->pusch_config_dedicated[eNB_id].betaOffset_RI_Index = beta_RI; - PHY_vars_UE_g[UE_id]->pusch_config_dedicated[eNB_id].betaOffset_CQI_Index = beta_CQI; - ((PHY_vars_UE_g[UE_id]->lte_frame_parms).pdsch_config_common).p_b = (frame_parms->nb_antennas_tx_eNB>1) ? 1 : 0; // rho_a = rhob - ((PHY_vars_eNB_g[eNB_id]->lte_frame_parms).pdsch_config_common).p_b = (frame_parms->nb_antennas_tx_eNB>1) ? 1 : 0; // rho_a = rhob - + for (CC_id=0;CC_id<MAX_NUM_CCs;CC_id++) { + PHY_vars_eNB_g[eNB_id][CC_id]->pusch_config_dedicated[UE_id].betaOffset_ACK_Index = beta_ACK; + PHY_vars_eNB_g[eNB_id][CC_id]->pusch_config_dedicated[UE_id].betaOffset_RI_Index = beta_RI; + PHY_vars_eNB_g[eNB_id][CC_id]->pusch_config_dedicated[UE_id].betaOffset_CQI_Index = beta_CQI; + ((PHY_vars_eNB_g[eNB_id][CC_id]->lte_frame_parms).pdsch_config_common).p_b = (frame_parms->nb_antennas_tx_eNB>1) ? 1 : 0; // rho_a = rhob + } + PHY_vars_UE_g[UE_id][CC_id]->pusch_config_dedicated[eNB_id].betaOffset_ACK_Index = beta_ACK; + PHY_vars_UE_g[UE_id][CC_id]->pusch_config_dedicated[eNB_id].betaOffset_RI_Index = beta_RI; + PHY_vars_UE_g[UE_id][CC_id]->pusch_config_dedicated[eNB_id].betaOffset_CQI_Index = beta_CQI; + ((PHY_vars_UE_g[UE_id][CC_id]->lte_frame_parms).pdsch_config_common).p_b = (frame_parms->nb_antennas_tx_eNB>1) ? 1 : 0; // rho_a = rhob } } - printf ("AFTER init: Nid_cell %d\n", PHY_vars_eNB_g[0]->lte_frame_parms.Nid_cell); + printf ("AFTER init: Nid_cell %d\n", PHY_vars_eNB_g[0][0]->lte_frame_parms.Nid_cell); printf ("AFTER init: frame_type %d,tdd_config %d\n", - PHY_vars_eNB_g[0]->lte_frame_parms.frame_type, - PHY_vars_eNB_g[0]->lte_frame_parms.tdd_config); + PHY_vars_eNB_g[0][0]->lte_frame_parms.frame_type, + PHY_vars_eNB_g[0][0]->lte_frame_parms.tdd_config); number_of_cards = 1; @@ -844,26 +846,27 @@ void init_openair1(void) { openair_daq_vars.use_ia_receiver = 0; // init_ue_status(); - for (UE_id=0; UE_id<NB_UE_INST;UE_id++) { - PHY_vars_UE_g[UE_id]->rx_total_gain_dB=130; + for (UE_id=0; UE_id<NB_UE_INST;UE_id++) + for (CC_id=0;CC_id<MAX_NUM_CCs;CC_id++){ + PHY_vars_UE_g[UE_id][CC_id]->rx_total_gain_dB=130; // update UE_mode for each eNB_id not just 0 if (abstraction_flag == 0) - PHY_vars_UE_g[UE_id]->UE_mode[0] = NOT_SYNCHED; + PHY_vars_UE_g[UE_id][CC_id]->UE_mode[0] = NOT_SYNCHED; else { // 0 is the index of the connected eNB - PHY_vars_UE_g[UE_id]->UE_mode[0] = PRACH; + PHY_vars_UE_g[UE_id][CC_id]->UE_mode[0] = PRACH; } - PHY_vars_UE_g[UE_id]->lte_ue_pdcch_vars[0]->crnti = 0x1235 + UE_id; - PHY_vars_UE_g[UE_id]->current_dlsch_cqi[0] = 10; + PHY_vars_UE_g[UE_id][CC_id]->lte_ue_pdcch_vars[0]->crnti = 0x1235 + UE_id; + PHY_vars_UE_g[UE_id][CC_id]->current_dlsch_cqi[0] = 10; - LOG_I(EMU, "UE %d mode is initialized to %d\n", UE_id, PHY_vars_UE_g[UE_id]->UE_mode[0] ); + LOG_I(EMU, "UE %d mode is initialized to %d\n", UE_id, PHY_vars_UE_g[UE_id][CC_id]->UE_mode[0] ); #if defined(ENABLE_RAL) - PHY_vars_UE_g[UE_id]->ral_thresholds_timed = hashtable_create (64, NULL, NULL); + PHY_vars_UE_g[UE_id][CC_id]->ral_thresholds_timed = hashtable_create (64, NULL, NULL); for (list_index = 0; list_index < RAL_LINK_PARAM_GEN_MAX; list_index++) { - SLIST_INIT(&PHY_vars_UE_g[UE_id]->ral_thresholds_gen_polled[list_index]); + SLIST_INIT(&PHY_vars_UE_g[UE_id][CC_id]->ral_thresholds_gen_polled[list_index]); } for (list_index = 0; list_index < RAL_LINK_PARAM_LTE_MAX; list_index++) { - SLIST_INIT(&PHY_vars_UE_g[UE_id]->ral_thresholds_lte_polled[list_index]); + SLIST_INIT(&PHY_vars_UE_g[UE_id][CC_id]->ral_thresholds_lte_polled[list_index]); } #endif @@ -874,12 +877,14 @@ void init_openair2(void) { #ifdef OPENAIR2 module_id_t enb_id; module_id_t UE_id; + int CC_id; - l2_init (&PHY_vars_eNB_g[0]->lte_frame_parms, - oai_emulation.info.eMBMS_active_state, - oai_emulation.info.cba_group_active, - oai_emulation.info.handover_active); - + for (CC_id=0;CC_id<MAX_NUM_CCs;CC_id++) + l2_init (&PHY_vars_eNB_g[0][CC_id]->lte_frame_parms, + oai_emulation.info.eMBMS_active_state, + oai_emulation.info.cba_group_active, + oai_emulation.info.handover_active); + for (enb_id = 0; enb_id < NB_eNB_INST; enb_id++) mac_xface->mrbch_phy_sync_failure (enb_id, 0, enb_id); @@ -895,6 +900,7 @@ void init_openair2(void) { void init_ocm(void) { module_id_t UE_id, eNB_id; + int CC_id; /* Added for PHY abstraction */ LOG_I(OCM,"Running with frame_type %d, Nid_cell %d, N_RB_DL %d, EP %d, mode %d, target dl_mcs %d, rate adaptation %d, nframes %d, abstraction %d, channel %s\n", oai_emulation.info.frame_type, Nid_cell, oai_emulation.info.N_RB_DL, oai_emulation.info.extended_prefix_flag, oai_emulation.info.transmission_mode,target_dl_mcs,rate_adaptation_flag,oai_emulation.info.n_frames,abstraction_flag,oai_emulation.environment_system_config.fading.small_scale.selected_option); @@ -940,9 +946,9 @@ void init_ocm(void) { // initialize channel descriptors for (eNB_id = 0; eNB_id < NB_eNB_INST; eNB_id++) { - for (UE_id = 0; UE_id < NB_UE_INST; UE_id++) { - - LOG_D(OCM,"Initializing channel (%s, %d) from eNB %d to UE %d\n", oai_emulation.environment_system_config.fading.small_scale.selected_option, + for (UE_id = 0; UE_id < NB_UE_INST; UE_id++) { + for (CC_id=0;CC_id<MAX_NUM_CCs;CC_id++) { + LOG_D(OCM,"Initializing channel (%s, %d) from eNB %d to UE %d\n", oai_emulation.environment_system_config.fading.small_scale.selected_option, map_str_to_int(small_scale_names,oai_emulation.environment_system_config.fading.small_scale.selected_option), eNB_id, UE_id); /* if (oai_emulation.info.transmission_mode == 5) @@ -957,29 +963,30 @@ void init_ocm(void) { else */ - eNB2UE[eNB_id][UE_id] = new_channel_desc_scm(PHY_vars_eNB_g[eNB_id]->lte_frame_parms.nb_antennas_tx, - PHY_vars_UE_g[UE_id]->lte_frame_parms.nb_antennas_rx, - map_str_to_int(small_scale_names,oai_emulation.environment_system_config.fading.small_scale.selected_option), - oai_emulation.environment_system_config.system_bandwidth_MB, - forgetting_factor, - 0, - 0); - random_channel(eNB2UE[eNB_id][UE_id],abstraction_flag); - LOG_D(OCM,"[SIM] Initializing channel (%s, %d) from UE %d to eNB %d\n", oai_emulation.environment_system_config.fading.small_scale.selected_option, + eNB2UE[eNB_id][UE_id][CC_id] = new_channel_desc_scm(PHY_vars_eNB_g[eNB_id][CC_id]->lte_frame_parms.nb_antennas_tx, + PHY_vars_UE_g[UE_id][CC_id]->lte_frame_parms.nb_antennas_rx, + map_str_to_int(small_scale_names,oai_emulation.environment_system_config.fading.small_scale.selected_option), + oai_emulation.environment_system_config.system_bandwidth_MB, + forgetting_factor, + 0, + 0); + random_channel(eNB2UE[eNB_id][UE_id][CC_id],abstraction_flag); + LOG_D(OCM,"[SIM] Initializing channel (%s, %d) from UE %d to eNB %d\n", oai_emulation.environment_system_config.fading.small_scale.selected_option, map_str_to_int(small_scale_names, oai_emulation.environment_system_config.fading.small_scale.selected_option),UE_id, eNB_id); - - UE2eNB[UE_id][eNB_id] = new_channel_desc_scm(PHY_vars_UE_g[UE_id]->lte_frame_parms.nb_antennas_tx, - PHY_vars_eNB_g[eNB_id]->lte_frame_parms.nb_antennas_rx, - map_str_to_int(small_scale_names, oai_emulation.environment_system_config.fading.small_scale.selected_option), - oai_emulation.environment_system_config.system_bandwidth_MB, - forgetting_factor, - 0, - 0); - - random_channel(UE2eNB[UE_id][eNB_id],abstraction_flag); + + UE2eNB[UE_id][eNB_id][CC_id] = new_channel_desc_scm(PHY_vars_UE_g[UE_id][CC_id]->lte_frame_parms.nb_antennas_tx, + PHY_vars_eNB_g[eNB_id][CC_id]->lte_frame_parms.nb_antennas_rx, + map_str_to_int(small_scale_names, oai_emulation.environment_system_config.fading.small_scale.selected_option), + oai_emulation.environment_system_config.system_bandwidth_MB, + forgetting_factor, + 0, + 0); + + random_channel(UE2eNB[UE_id][eNB_id][CC_id],abstraction_flag); // to make channel reciprocal uncomment following line instead of previous. However this only works for SISO at the moment. For MIMO the channel would need to be transposed. //UE2eNB[UE_id][eNB_id] = eNB2UE[eNB_id][UE_id]; + } } } } @@ -1031,10 +1038,13 @@ void update_omg_ocm() { void update_ocm() { module_id_t UE_id, eNB_id; + int CC_id; + for (eNB_id = 0; eNB_id < NB_eNB_INST; eNB_id++) - enb_data[eNB_id]->tx_power_dBm = PHY_vars_eNB_g[eNB_id]->lte_frame_parms.pdsch_config_common.referenceSignalPower; + enb_data[eNB_id]->tx_power_dBm = PHY_vars_eNB_g[eNB_id][0]->lte_frame_parms.pdsch_config_common.referenceSignalPower; for (UE_id = 0; UE_id < NB_UE_INST; UE_id++) - ue_data[UE_id]->tx_power_dBm = PHY_vars_UE_g[UE_id]->tx_power_dBm; + ue_data[UE_id]->tx_power_dBm = PHY_vars_UE_g[UE_id][0]->tx_power_dBm; + /* check if the openair channel model is activated used for PHY abstraction : path loss*/ if ((oai_emulation.info.ocm_enabled == 1)&& (ethernet_flag == 0 )) { @@ -1045,42 +1055,47 @@ void update_ocm() { //extract_position_fixed_enb(enb_data, NB_eNB_INST,frame); //LOG_D(OMG," extracting position of UE...\n"); // if (oai_emulation.info.omg_model_ue == TRACE) - extract_position(ue_node_list, ue_data, NB_UE_INST); - - /* if (frame % 50 == 0) - LOG_N(OCM,"Path loss for TTI %d : \n", frame); - */ + extract_position(ue_node_list, ue_data, NB_UE_INST); + + /* if (frame % 50 == 0) + LOG_N(OCM,"Path loss for TTI %d : \n", frame); + */ + for (CC_id=0;CC_id<MAX_NUM_CCs;CC_id++) { for (eNB_id = 0; eNB_id < NB_eNB_INST; eNB_id++) { - for (UE_id = 0; UE_id < NB_UE_INST; UE_id++) { - calc_path_loss (enb_data[eNB_id], ue_data[UE_id], eNB2UE[eNB_id][UE_id], oai_emulation.environment_system_config,ShaF); - //calc_path_loss (enb_data[eNB_id], ue_data[UE_id], eNB2UE[eNB_id][UE_id], oai_emulation.environment_system_config,0); - UE2eNB[UE_id][eNB_id]->path_loss_dB = eNB2UE[eNB_id][UE_id]->path_loss_dB; - // if (frame % 50 == 0) - LOG_I(OCM,"Path loss between eNB %d at (%f,%f) and UE %d at (%f,%f) is %f, angle %f\n", - eNB_id,enb_data[eNB_id]->x,enb_data[eNB_id]->y,UE_id,ue_data[UE_id]->x,ue_data[UE_id]->y, - eNB2UE[eNB_id][UE_id]->path_loss_dB, eNB2UE[eNB_id][UE_id]->aoa); - } + for (UE_id = 0; UE_id < NB_UE_INST; UE_id++) { + calc_path_loss (enb_data[eNB_id], ue_data[UE_id], eNB2UE[eNB_id][UE_id][CC_id], oai_emulation.environment_system_config,ShaF); + //calc_path_loss (enb_data[eNB_id], ue_data[UE_id], eNB2UE[eNB_id][UE_id], oai_emulation.environment_system_config,0); + UE2eNB[UE_id][eNB_id][CC_id]->path_loss_dB = eNB2UE[eNB_id][UE_id][CC_id]->path_loss_dB; + // if (frame % 50 == 0) + LOG_I(OCM,"Path loss (CCid %d) between eNB %d at (%f,%f) and UE %d at (%f,%f) is %f, angle %f\n", + CC_id,eNB_id,enb_data[eNB_id]->x,enb_data[eNB_id]->y,UE_id,ue_data[UE_id]->x,ue_data[UE_id]->y, + eNB2UE[eNB_id][UE_id][CC_id]->path_loss_dB, eNB2UE[eNB_id][UE_id][CC_id]->aoa); + } } - } + } + } else { + for (CC_id=0;CC_id<MAX_NUM_CCs;CC_id++) { for (eNB_id = 0; eNB_id < NB_eNB_INST; eNB_id++) { - for (UE_id = 0; UE_id < NB_UE_INST; UE_id++) { - - //UE2eNB[UE_id][eNB_id]->path_loss_dB = -105 + snr_dB; - if (eNB_id == (UE_id % NB_eNB_INST)) { - eNB2UE[eNB_id][UE_id]->path_loss_dB = -105 + snr_dB - PHY_vars_eNB_g[eNB_id]->lte_frame_parms.pdsch_config_common.referenceSignalPower; - UE2eNB[UE_id][eNB_id]->path_loss_dB = -105 + snr_dB - PHY_vars_eNB_g[eNB_id]->lte_frame_parms.pdsch_config_common.referenceSignalPower; //+20 to offset the difference in tx power of the UE wrt eNB - } - else { - eNB2UE[eNB_id][UE_id]->path_loss_dB = -105 + sinr_dB - PHY_vars_eNB_g[eNB_id]->lte_frame_parms.pdsch_config_common.referenceSignalPower; - UE2eNB[UE_id][eNB_id]->path_loss_dB = -105 + sinr_dB - PHY_vars_eNB_g[eNB_id]->lte_frame_parms.pdsch_config_common.referenceSignalPower; - } - LOG_I(OCM,"Path loss from eNB %d to UE %d => %f dB (eNB TX %d)\n",eNB_id,UE_id,eNB2UE[eNB_id][UE_id]->path_loss_dB, - PHY_vars_eNB_g[eNB_id]->lte_frame_parms.pdsch_config_common.referenceSignalPower); - // printf("[SIM] Path loss from UE %d to eNB %d => %f dB\n",UE_id,eNB_id,UE2eNB[UE_id][eNB_id]->path_loss_dB); - } + for (UE_id = 0; UE_id < NB_UE_INST; UE_id++) { + + //UE2eNB[UE_id][eNB_id]->path_loss_dB = -105 + snr_dB; + if (eNB_id == (UE_id % NB_eNB_INST)) { + eNB2UE[eNB_id][UE_id][CC_id]->path_loss_dB = -105 + snr_dB - PHY_vars_eNB_g[eNB_id][CC_id]->lte_frame_parms.pdsch_config_common.referenceSignalPower; + UE2eNB[UE_id][eNB_id][CC_id]->path_loss_dB = -105 + snr_dB - PHY_vars_eNB_g[eNB_id][CC_id]->lte_frame_parms.pdsch_config_common.referenceSignalPower; //+20 to offset the difference in tx power of the UE wrt eNB + } + else { + eNB2UE[eNB_id][UE_id][CC_id]->path_loss_dB = -105 + sinr_dB - PHY_vars_eNB_g[eNB_id][CC_id]->lte_frame_parms.pdsch_config_common.referenceSignalPower; + UE2eNB[UE_id][eNB_id][CC_id]->path_loss_dB = -105 + sinr_dB - PHY_vars_eNB_g[eNB_id][CC_id]->lte_frame_parms.pdsch_config_common.referenceSignalPower; + } + LOG_I(OCM,"Path loss from eNB %d to UE %d (CCid %d)=> %f dB (eNB TX %d)\n",eNB_id,UE_id,CC_id, + eNB2UE[eNB_id][UE_id][CC_id]->path_loss_dB, + PHY_vars_eNB_g[eNB_id][CC_id]->lte_frame_parms.pdsch_config_common.referenceSignalPower); + // printf("[SIM] Path loss from UE %d to eNB %d => %f dB\n",UE_id,eNB_id,UE2eNB[UE_id][eNB_id]->path_loss_dB); + } } + } } } -- GitLab