diff --git a/targets/RT/USER/lte-softmodem.c b/targets/RT/USER/lte-softmodem.c index b96a7ae5292099fd5bc964e57b2a89e2502699be..f16f0b9eb86bfb79bc996b7c1a1e6d35e9906c2b 100644 --- a/targets/RT/USER/lte-softmodem.c +++ b/targets/RT/USER/lte-softmodem.c @@ -361,12 +361,14 @@ int16_t osa_log_verbosity = LOG_MED; #ifdef ETHERNET -char rrh_eNB_ip[20] = "127.0.0.1"; -int rrh_eNB_port = 50000; -char *rrh_UE_ip = "127.0.0.1"; -int rrh_UE_port = 51000; +//char rrh_eNB_ip[20] = "127.0.0.1"; +//int rrh_eNB_port = 50000; +//char *rrh_UE_ip = "127.0.0.1"; +//int rrh_UE_port = 51000; #endif - +/* flag given in runtime to specify if the RF head is local or remote*/ +uint8_t local_remote_RF; + char uecap_xer[1024],uecap_xer_in=0; extern void *UE_thread(void *arg); extern void init_UE_threads(void); @@ -430,7 +432,7 @@ void help (void) { printf(" -h provides this help message!\n"); printf(" -K Generate ITTI analyzser logs (similar to wireshark logs but with more details)\n"); printf(" -m Set the maximum downlink MCS\n"); - printf(" -M IP address of RRH\n"); + printf(" -M Specify whether RF head is local or remote,valid options: (1: local , 2:remote) \n"); printf(" -O eNB configuration file (located in targets/PROJECTS/GENERIC-LTE-EPC/CONF\n"); printf(" -q Enable processing timing measurement of lte softmodem on per subframe basis \n"); printf(" -r Set the PRB, valid values: 6, 25, 50, 100 \n"); @@ -1818,9 +1820,11 @@ static void* eNB_thread( void* arg ) // USRP_DEBUG is active rt_sleep_ns(1000000); #endif - +/* FT configurable tx lauch delay (in slots )*/ if ((tx_launched == 0) && - (rx_pos >= (((2*hw_subframe)+1)*PHY_vars_eNB_g[0][0]->lte_frame_parms.samples_per_tti>>1))) { + ((openair0_cfg[card].txlaunch_wait == 0) || + ((openair0_cfg[card].txlaunch_wait == 1) && + (rx_pos >= (((2*hw_subframe)+openair0_cfg[card].txlaunch_wait_slotcount)*PHY_vars_eNB_g[0][0]->lte_frame_parms.samples_per_tti>>1))))) { tx_launched = 1; for (CC_id=0; CC_id<MAX_NUM_CCs; CC_id++) { @@ -2112,9 +2116,7 @@ static void get_options (int argc, char **argv) break; case 'M': -#ifdef ETHERNET - strcpy(rrh_eNB_ip,optarg); -#endif + local_remote_RF=atoi(optarg); break; case 'C': @@ -2856,8 +2858,8 @@ int main( int argc, char **argv ) openair0_cfg[card].tx_bw = 10e6; openair0_cfg[card].rx_bw = 10e6; // from usrp_time_offset - openair0_cfg[card].tx_forward_nsamps = 175; - openair0_cfg[card].tx_delay = 8; + //openair0_cfg[card].tx_forward_nsamps = 175; + // openair0_cfg[card].tx_delay = 8; #endif } else if(frame_parms[0]->N_RB_DL == 50) { sample_rate = 15.36e6; @@ -2868,8 +2870,8 @@ int main( int argc, char **argv ) openair0_cfg[card].samples_per_frame = 153600; openair0_cfg[card].tx_bw = 5e6; openair0_cfg[card].rx_bw = 5e6; - openair0_cfg[card].tx_forward_nsamps = 95; - openair0_cfg[card].tx_delay = 5; + //openair0_cfg[card].tx_forward_nsamps = 95; + //openair0_cfg[card].tx_delay = 5; #endif } else if (frame_parms[0]->N_RB_DL == 25) { sample_rate = 7.68e6; @@ -2881,12 +2883,14 @@ int main( int argc, char **argv ) openair0_cfg[card].rx_bw = 2.5e6; openair0_cfg[card].samples_per_packet = 1024; #ifdef OAI_USRP - openair0_cfg[card].tx_forward_nsamps = 70; - openair0_cfg[card].tx_delay = 5; -#elif OAI_BLADERF - openair0_cfg[card].tx_forward_nsamps = 0; - openair0_cfg[card].tx_delay = 8; -#endif + + openair0_cfg[card].tx_forward_nsamps = 70; + openair0_cfg[card].tx_delay = 5; +#endif + //#elif OAI_BLADERF + //openair0_cfg[card].tx_forward_nsamps = 0; + //openair0_cfg[card].tx_delay = 8; + //#endif #endif } else if (frame_parms[0]->N_RB_DL == 6) { sample_rate = 1.92e6; @@ -2897,16 +2901,25 @@ int main( int argc, char **argv ) openair0_cfg[card].samples_per_frame = 19200; openair0_cfg[card].tx_bw = 1.5e6; openair0_cfg[card].rx_bw = 1.5e6; - openair0_cfg[card].tx_forward_nsamps = 40; - openair0_cfg[card].tx_delay = 8; + //openair0_cfg[card].tx_forward_nsamps = 40; + //openair0_cfg[card].tx_delay = 8; #endif } #ifdef ETHERNET - //calib needed - openair0_cfg[card].tx_delay = 0; + openair0_cfg[card].remote_addr = "192.168.12.242"; + //openair0_cfg[card].remote_addr = "127.0.0.1"; +// openair0_cfg[card].remote_addr = "74:d4:35:cc:88:45"; + openair0_cfg[card].remote_port = 50000; + openair0_cfg[card].my_addr = "192.168.12.31"; + //openair0_cfg[card].my_addr = "127.0.0.1"; + //openair0_cfg[card].my_addr = "d4:be:d9:22:0a:ac"; + openair0_cfg[card].my_port = 50001; + openair0_cfg[card].tx_delay = 5; openair0_cfg[card].tx_forward_nsamps = 0; + openair0_cfg[card].txlaunch_wait = 0; + openair0_cfg[card].txlaunch_wait_slotcount = 0; if (frame_parms[0]->N_RB_DL == 6) openair0_cfg[card].samples_per_packet = 256; @@ -2924,17 +2937,18 @@ int main( int argc, char **argv ) ((UE_flag==0) ? PHY_vars_eNB_g[0][0]->lte_frame_parms.nb_antennas_tx : PHY_vars_UE_g[0][0]->lte_frame_parms.nb_antennas_tx), ((UE_flag==0) ? PHY_vars_eNB_g[0][0]->lte_frame_parms.nb_antennas_rx : PHY_vars_UE_g[0][0]->lte_frame_parms.nb_antennas_rx)); openair0_cfg[card].Mod_id = 0; -#ifdef ETHERNET - +#ifdef ETHERNET/*do we need to separate ue and enb????*/ + /* if (UE_flag) { printf("ETHERNET: Configuring UE ETH for %s:%d\n",rrh_UE_ip,rrh_UE_port); - openair0_cfg[card].remote_ip = &rrh_UE_ip[0]; + openair0_cfg[card].remote_addr = &rrh_UE_ip[0]; openair0_cfg[card].remote_port = rrh_UE_port; } else { printf("ETHERNET: Configuring eNB ETH for %s:%d\n",rrh_eNB_ip,rrh_eNB_port); - openair0_cfg[card].remote_ip = &rrh_eNB_ip[0]; - openair0_cfg[card].remote_port = rrh_eNB_port; + openair0_cfg[card].remote_addr =&rrh_eNB_ip[0]; + openair0_cfg[card].remote_port =rrh_eNB_port; } + */ openair0_cfg[card].num_rb_dl=frame_parms[0]->N_RB_DL; #endif openair0_cfg[card].sample_rate = sample_rate; @@ -2988,18 +3002,33 @@ openair0_cfg[card].num_rb_dl=frame_parms[0]->N_RB_DL; #endif } - - openair0.func_type = BBU_FUNC; + /* device host type is set*/ + openair0.host_type = BBU_HOST; + /* device type is initialized NONE_DEV (no RF device) when the RF device will be initiated device type will be set */ + openair0.type = NONE_DEV; + openair0.transp_type = NONE_TP; openair0_cfg[0].log_level = glog_level; - if ((mode!=loop_through_memory) && - (openair0_device_init(&openair0, &openair0_cfg[0]) <0)) { - printf("Exiting, cannot initialize device\n"); - exit(-1); - } - else if (mode==loop_through_memory) { + /* BBU can either have local or remote radio heads */ + if (local_remote_RF == BBU_LOCAL_RF_ENABLED) { /* radio heads are local so the corresponding device is initiated */ + + if ((mode!=loop_through_memory) && + (openair0_device_load(&openair0, &openair0_cfg[0]) <0)) { + printf("Exiting, cannot initialize device\n"); + exit(-1); + } + else if (mode==loop_through_memory) { + } + } else if (local_remote_RF == BBU_REMOTE_RF_ENABLED) {/* radio heads are remote so the trasnsport protocol is initiated */ + if ((mode!=loop_through_memory) && + (openair0_transport_load(&openair0, &openair0_cfg[0]) <0)) { + printf("Exiting, cannot initialize transport protocol\n"); + exit(-1); + } + else if (mode==loop_through_memory) { + } } - + printf("Done\n"); mac_xface = malloc(sizeof(MAC_xface));