diff --git a/targets/ARCH/COMMON/common_lib.h b/targets/ARCH/COMMON/common_lib.h index ccd1ce6a9ccbb2585f854fca2f2ec069a3d156aa..c6ab458dc8577359687acabcbfaf4d1a493bfdf6 100644 --- a/targets/ARCH/COMMON/common_lib.h +++ b/targets/ARCH/COMMON/common_lib.h @@ -44,7 +44,7 @@ typedef struct openair0_device_t openair0_device; #define MAX_CARDS 1 #endif -#define USRP_GAIN_OFFSET (82.0) // 82 calibrated for USRP B210 @ 2.6 GHz +#define USRP_GAIN_OFFSET (65.0) // 82 calibrated for USRP B210 @ 2.6 GHz typedef enum { max_gain=0,med_gain,byp_gain diff --git a/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp b/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp index 42ab4b8dabc53e82e992a58d45e60a0969525745..d81e83164bbedf6b24e85504831a56294dd134af 100644 --- a/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp +++ b/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp @@ -93,11 +93,11 @@ static int trx_usrp_start(openair0_device *device) // init recv and send streaming uhd::stream_cmd_t cmd(uhd::stream_cmd_t::STREAM_MODE_START_CONTINUOUS); - cmd.time_spec = s->usrp->get_time_now() + uhd::time_spec_t(0.01); + cmd.time_spec = s->usrp->get_time_now() + uhd::time_spec_t(0.05); cmd.stream_now = false; // start at constant delay s->rx_stream->issue_stream_cmd(cmd); - s->tx_md.time_spec = s->usrp->get_time_now() + uhd::time_spec_t(1-(double)s->tx_forward_nsamps/s->sample_rate); + s->tx_md.time_spec = cmd.time_spec + uhd::time_spec_t(1-(double)s->tx_forward_nsamps/s->sample_rate); s->tx_md.has_time_spec = true; s->tx_md.start_of_burst = true; s->tx_md.end_of_burst = false; @@ -144,7 +144,7 @@ static int trx_usrp_read(openair0_device *device, openair0_timestamp *ptimestamp usrp_state_t *s = (usrp_state_t*)device->priv; - int samples_received,i; + int samples_received=0,i; if (cc>1) { std::vector<void *> buff_ptrs; @@ -154,6 +154,10 @@ static int trx_usrp_read(openair0_device *device, openair0_timestamp *ptimestamp else samples_received = s->rx_stream->recv(buff[0], nsamps, s->rx_md); + if (samples_received < nsamps) { + printf("[recv] received %d samples out of %d\n",samples_received,nsamps); + + } //handle the error code switch(s->rx_md.error_code){ case uhd::rx_metadata_t::ERROR_CODE_NONE: @@ -232,12 +236,9 @@ int openair0_device_init(openair0_device* device, openair0_config_t *openair0_cf memset(s, 0, sizeof(usrp_state_t)); // Initialize USRP device -/* thomas 26.01.205*/ -// std::string args = "type=b200"; + std::string args = "type=b200"; - /* std::string rx_subdev = "A:A A:B"; - std::string tx_subdev = "A:A A:B";*/ uhd::device_addrs_t device_adds = uhd::device::find(args); size_t i; @@ -309,25 +310,31 @@ int openair0_device_init(openair0_device* device, openair0_config_t *openair0_cf } + // display USRP settings + std::cout << boost::format("Actual master clock: %fMHz...") % (s->usrp->get_master_clock_rate()/1e6) << std::endl; // create tx & rx streamer uhd::stream_args_t stream_args_rx("sc16", "sc16"); - //stream_args_rx.args["spp"] = str(boost::format("%d") % (openair0_cfg[0].samples_per_packet)); - - uhd::stream_args_t stream_args_tx("sc16", "sc16"); - //stream_args_tx.args["spp"] = str(boost::format("%d") % (openair0_cfg[0].samples_per_packet)); + //stream_args_rx.args["spp"] = str(boost::format("%d") % 2048);//(openair0_cfg[0].rx_num_channels*openair0_cfg[0].samples_per_packet)); for (i = 0; i<openair0_cfg[0].rx_num_channels; i++) - stream_args_rx.channels.push_back(i); + stream_args_rx.channels.push_back(i); + s->rx_stream = s->usrp->get_rx_stream(stream_args_rx); + std::cout << boost::format("rx_max_num_samps %u") % (s->rx_stream->get_max_num_samps()) << std::endl; + //openair0_cfg[0].samples_per_packet = s->rx_stream->get_max_num_samps(); + + uhd::stream_args_t stream_args_tx("sc16", "sc16"); + //stream_args_tx.args["spp"] = str(boost::format("%d") % 2048);//(openair0_cfg[0].tx_num_channels*openair0_cfg[0].samples_per_packet)); for (i = 0; i<openair0_cfg[0].tx_num_channels; i++) stream_args_tx.channels.push_back(i); - s->tx_stream = s->usrp->get_tx_stream(stream_args_tx); - s->rx_stream = s->usrp->get_rx_stream(stream_args_rx); + std::cout << boost::format("tx_max_num_samps %u") % (s->tx_stream->get_max_num_samps()) << std::endl; + s->usrp->set_time_now(uhd::time_spec_t(0.0)); - // display USRP settings - std::cout << boost::format("Actual master clock: %fMHz...") % (s->usrp->get_master_clock_rate()/1e6) << std::endl << std::endl; + + + for (i=0;i<openair0_cfg[0].rx_num_channels;i++) { if (i<openair0_cfg[0].rx_num_channels) { diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band39.tm1.usrpb210.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band39.tm1.usrpb210.conf index 52cae1023ff281ef30162bc0298e9fd18892459d..5f3af031ca05f59a207e98b0469bd46853a85740 100755 --- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band39.tm1.usrpb210.conf +++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band39.tm1.usrpb210.conf @@ -43,7 +43,7 @@ eNBs = uplink_frequency_offset = 0; Nid_cell = 0; - N_RB_DL = 50; + N_RB_DL = 25; Nid_cell_mbsfn = 0; nb_antennas_tx = 1; nb_antennas_rx = 1; @@ -132,12 +132,12 @@ eNBs = log_config : { - global_log_level ="info"; - global_log_verbosity ="medium"; + global_log_level ="debug"; + global_log_verbosity ="high"; hw_log_level ="info"; hw_log_verbosity ="medium"; - phy_log_level ="info"; - phy_log_verbosity ="medium"; + phy_log_level ="debug"; + phy_log_verbosity ="high"; mac_log_level ="info"; mac_log_verbosity ="high"; rlc_log_level ="info"; diff --git a/targets/RT/USER/Makefile b/targets/RT/USER/Makefile index 17aff695468165feb62f205552a7bde5e5a2474c..174c48a324768fee25e6cfd33604d51e59ea1ffa 100644 --- a/targets/RT/USER/Makefile +++ b/targets/RT/USER/Makefile @@ -24,7 +24,7 @@ ifndef USRP USRP=0 endif -CFLAGS += -DDRIVER2013 -I$(OPENAIR_TARGETS)/ARCH/COMMON -I. +CFLAGS += -DDRIVER2013 -I$(OPENAIR_TARGETS)/ARCH/COMMON -I. ifndef OPENAIR2 OPENAIR2=1 @@ -35,6 +35,10 @@ DISABLE_XER_PRINT=0 MSG_PRINT=1 endif +ifdef Rel10 +CFLAGS += -DRel10 +endif + ifeq ($(EXMIMO),1) CFLAGS += -I$(OPENAIR_TARGETS)/ARCH/EXMIMO/USERSPACE/LIB/ -I$(OPENAIR_TARGETS)/ARCH/EXMIMO/DEFS -DENABLE_VCD_FIFO endif diff --git a/targets/RT/USER/lte-softmodem.c b/targets/RT/USER/lte-softmodem.c index b72b15fe84bd630f7f1e29cc19e013102ac8fc73..bac451acd502016d07177bba53167f2bec4fbe6a 100644 --- a/targets/RT/USER/lte-softmodem.c +++ b/targets/RT/USER/lte-softmodem.c @@ -328,7 +328,7 @@ int16_t rlc_log_level = LOG_INFO; int16_t rlc_log_verbosity = LOG_MED; int16_t pdcp_log_level = LOG_INFO; int16_t pdcp_log_verbosity = LOG_MED; -int16_t rrc_log_level = LOG_INFO; +int16_t rrc_log_level = LOG_DEBUG; int16_t rrc_log_verbosity = LOG_MED; # if defined(ENABLE_USE_MME) int16_t gtpu_log_level = LOG_DEBUG; diff --git a/targets/RT/USER/lte-ue.c b/targets/RT/USER/lte-ue.c index 1e99f791a80c895be55807892466e705401d989a..335527e870369f7e31804d52d5c7ecdb57d985de 100644 --- a/targets/RT/USER/lte-ue.c +++ b/targets/RT/USER/lte-ue.c @@ -186,7 +186,7 @@ static const eutra_band_t eutra_bands[] = {14, 788 * MHz, 798 * MHz, 758 * MHz, 768 * MHz, FDD}, {17, 704 * MHz, 716 * MHz, 734 * MHz, 746 * MHz, FDD}, - + {20, 832 * MHz, 862 * MHz, 791 * MHz, 821 * MHz, FDD}, {33, 1900 * MHz, 1920 * MHz, 1900 * MHz, 1920 * MHz, TDD}, {34, 2010 * MHz, 2025 * MHz, 2010 * MHz, 2025 * MHz, TDD}, {35, 1850 * MHz, 1910 * MHz, 1850 * MHz, 1910 * MHz, TDD}, @@ -231,6 +231,7 @@ static void *UE_thread_synch(void *arg) { found = 0; current_band = eutra_bands[ind].band; do { + printf("Scanning band %d, dl_min %u\n",current_band,eutra_bands[ind].dl_min); if ((eutra_bands[ind].dl_min <= downlink_frequency[0][0]) && (eutra_bands[ind].dl_max>= downlink_frequency[0][0])) { for (card=0;card<MAX_NUM_CCs;card++) for (i=0; i<4; i++) @@ -239,7 +240,7 @@ static void *UE_thread_synch(void *arg) { break; } ind++; - current_band = eutra_bands[++ind].band; + current_band = eutra_bands[ind].band; } while (current_band < 44); if (found == 0) { @@ -374,8 +375,10 @@ static void *UE_thread_synch(void *arg) { mac_xface->macphy_exit("No cell synchronization found, abandoning"); } else { - LOG_I(PHY,"[initial_sync] trying carrier off %d Hz, rxgain %d\n",openair_daq_vars.freq_offset, - UE->rx_total_gain_dB); + LOG_I(PHY,"[initial_sync] trying carrier off %d Hz, rxgain %d (DL %u, UL %u)\n",openair_daq_vars.freq_offset, + UE->rx_total_gain_dB, + downlink_frequency[0][0]+openair_daq_vars.freq_offset, + downlink_frequency[0][0]+uplink_frequency_offset[0][0]+openair_daq_vars.freq_offset); for (card=0;card<MAX_CARDS;card++) { for (i=0; i<openair0_cfg[card].rx_num_channels; i++) { openair0_cfg[card].rx_freq[i] = downlink_frequency[card][i]+openair_daq_vars.freq_offset; @@ -802,7 +805,6 @@ void *UE_thread(void *arg) { for (i=0;i<UE->lte_frame_parms.nb_antennas_rx;i++) rxp[i] = (dummy_dump==0) ? (void*)&rxdata[i][rxpos] : (void*)dummy[i]; - // printf("rxpos %d, hw_subframe %d, dummy_dump %d (asking %d)\n",rxpos,hw_subframe,dummy_dump,spp - ((first_rx==1) ? rx_off_diff : 0)); rxs = openair0.trx_read_func(&openair0, ×tamp, rxp, @@ -945,8 +947,9 @@ void *UE_thread(void *arg) { #endif UE->rx_offset=0; } - else if ((UE->rx_offset < RX_OFF_MIN)&&(start_rx_stream==1)) { - // rx_off_diff = -UE->rx_offset + RX_OFF_MIN; + else if ((UE->rx_offset < RX_OFF_MIN)&&(start_rx_stream==1) && (rx_correction_timer == 0)) { + rx_off_diff = -UE->rx_offset + RX_OFF_MIN; + rx_correction_timer = 5; } else if ((UE->rx_offset > (FRAME_LENGTH_COMPLEX_SAMPLES-RX_OFF_MAX)) &&(start_rx_stream==1) && (rx_correction_timer == 0)) { rx_off_diff = FRAME_LENGTH_COMPLEX_SAMPLES-UE->rx_offset; @@ -954,7 +957,7 @@ void *UE_thread(void *arg) { } if (rx_correction_timer>0) rx_correction_timer--; - // LOG_D(PHY,"HW RESYNC: hw_frame %d: Correction: rx_off_diff %d (timer %d)\n",frame,rx_off_diff,rx_correction_timer); + // LOG_D(PHY,"HW RESYNC: hw_frame %d: (rx_offset %d) Correction: rx_off_diff %d (timer %d)\n",frame,UE->rx_offset,rx_off_diff,rx_correction_timer); } dummy_dump=0; }