Commit ebbdf1e4 authored by Rohit Gupta's avatar Rohit Gupta

added USRP X310 interface handling

parent 0870e4bf
...@@ -52,7 +52,7 @@ int openair0_device_init(openair0_device *device, openair0_config_t *openair0_cf ...@@ -52,7 +52,7 @@ int openair0_device_init(openair0_device *device, openair0_config_t *openair0_cf
openair0_dev_init_exmimo(device, openair0_cfg); openair0_dev_init_exmimo(device, openair0_cfg);
printf("openair0_dev_init_exmimo...\n"); printf("openair0_dev_init_exmimo...\n");
#elif OAI_USRP #elif OAI_USRP
device->type=USRP_IF; device->type=USRP_B200_IF;
openair0_dev_init_usrp(device, openair0_cfg); openair0_dev_init_usrp(device, openair0_cfg);
printf("openair0_dev_init_usrp ...\n"); printf("openair0_dev_init_usrp ...\n");
#elif OAI_BLADERF #elif OAI_BLADERF
......
...@@ -151,8 +151,10 @@ typedef enum { ...@@ -151,8 +151,10 @@ typedef enum {
ETH_IF, ETH_IF,
/*!\brief device is ExpressMIMO */ /*!\brief device is ExpressMIMO */
EXMIMO_IF, EXMIMO_IF,
/*!\brief device is USRP*/ /*!\brief device is USRP B200/B210*/
USRP_IF, USRP_B200_IF,
/*!\brief device is USRP X300/X310*/
USRP_X300_IF,
/*!\brief device is BLADE RF*/ /*!\brief device is BLADE RF*/
BLADERF_IF, BLADERF_IF,
/*!\brief device is NONE*/ /*!\brief device is NONE*/
......
...@@ -171,45 +171,44 @@ static int trx_usrp_read(openair0_device *device, openair0_timestamp *ptimestamp ...@@ -171,45 +171,44 @@ static int trx_usrp_read(openair0_device *device, openair0_timestamp *ptimestamp
#endif #endif
/* if (device->type == USRP_B200_IF) {
if (cc>1) { if (cc>1) {
// receive multiple channels (e.g. RF A and RF B)
std::vector<void *> buff_ptrs;
for (int i=0;i<cc;i++) buff_ptrs.push_back(buff_tmp[i]);
samples_received = s->rx_stream->recv(buff_ptrs, nsamps, s->rx_md);
} else {
// receive a single channel (e.g. from connector RF A)
samples_received = s->rx_stream->recv(buff_tmp[0], nsamps, s->rx_md);
}*/
if (cc>1) {
// receive multiple channels (e.g. RF A and RF B) // receive multiple channels (e.g. RF A and RF B)
std::vector<void *> buff_ptrs; std::vector<void *> buff_ptrs;
for (int i=0;i<cc;i++) buff_ptrs.push_back(buff[i]); for (int i=0;i<cc;i++) buff_ptrs.push_back(buff_tmp[i]);
samples_received = s->rx_stream->recv(buff_ptrs, nsamps, s->rx_md); samples_received = s->rx_stream->recv(buff_ptrs, nsamps, s->rx_md);
} else { } else {
// receive a single channel (e.g. from connector RF A) // receive a single channel (e.g. from connector RF A)
samples_received = s->rx_stream->recv(buff[0], nsamps, s->rx_md); samples_received = s->rx_stream->recv(buff_tmp[0], nsamps, s->rx_md);
} }
/*
// bring RX data into 12 LSBs for softmodem RX // bring RX data into 12 LSBs for softmodem RX
for (int i=0;i<cc;i++) { for (int i=0;i<cc;i++) {
for (int j=0; j<nsamps2; j++) { for (int j=0; j<nsamps2; j++) {
#if defined(__x86_64__) || defined(__i386__) #if defined(__x86_64__) || defined(__i386__)
#ifdef __AVX2__ #ifdef __AVX2__
((__m256i *)buff[i])[j] = _mm256_srai_epi16(buff_tmp[i][j],4); ((__m256i *)buff[i])[j] = _mm256_srai_epi16(buff_tmp[i][j],4);
#else #else
((__m128i *)buff[i])[j] = _mm_srai_epi16(buff_tmp[i][j],4); ((__m128i *)buff[i])[j] = _mm_srai_epi16(buff_tmp[i][j],4);
#endif #endif
#elif defined(__arm__) #elif defined(__arm__)
((int16x8_t*)buff[i])[j] = vshrq_n_s16(buff_tmp[i][j],4); ((int16x8_t*)buff[i])[j] = vshrq_n_s16(buff_tmp[i][j],4);
#endif #endif
}
} }
} else if (device->type == USRP_X300_IF) {
if (cc>1) {
// receive multiple channels (e.g. RF A and RF B)
std::vector<void *> buff_ptrs;
for (int i=0;i<cc;i++) buff_ptrs.push_back(buff[i]);
samples_received = s->rx_stream->recv(buff_ptrs, nsamps, s->rx_md);
} else {
// receive a single channel (e.g. from connector RF A)
samples_received = s->rx_stream->recv(buff[0], nsamps, s->rx_md);
} }
*/ }
if (samples_received < nsamps) { if (samples_received < nsamps) {
printf("[recv] received %d samples out of %d\n",samples_received,nsamps); printf("[recv] received %d samples out of %d\n",samples_received,nsamps);
...@@ -397,6 +396,9 @@ int openair0_dev_init_usrp(openair0_device* device, openair0_config_t *openair0_ ...@@ -397,6 +396,9 @@ int openair0_dev_init_usrp(openair0_device* device, openair0_config_t *openair0_
// lock mboard clocks // lock mboard clocks
s->usrp->set_clock_source("internal"); s->usrp->set_clock_source("internal");
//Setting device type to USRP X300/X310
device->type=USRP_X300_IF;
// this is not working yet, master clock has to be set via constructor // this is not working yet, master clock has to be set via constructor
// set master clock rate and sample rate for tx & rx for streaming // set master clock rate and sample rate for tx & rx for streaming
//s->usrp->set_master_clock_rate(usrp_master_clock); //s->usrp->set_master_clock_rate(usrp_master_clock);
......
...@@ -172,7 +172,7 @@ void config_BBU_mod( rrh_module_t *mod_enb, uint8_t RT_flag, uint8_t NRT_flag) { ...@@ -172,7 +172,7 @@ void config_BBU_mod( rrh_module_t *mod_enb, uint8_t RT_flag, uint8_t NRT_flag) {
mod_enb->devs->openair0_cfg.tx_delay = 8; mod_enb->devs->openair0_cfg.tx_delay = 8;
} }
} }
else if (mod_enb->devs->type == USRP_IF) { else if ((mod_enb->devs->type == USRP_B200_IF )||(mod_enb->devs->type == USRP_X300_IF )) {
if ( mod_enb->devs->openair0_cfg.num_rb_dl == 100 ) { if ( mod_enb->devs->openair0_cfg.num_rb_dl == 100 ) {
mod_enb->devs->openair0_cfg.samples_per_packet = 2048; mod_enb->devs->openair0_cfg.samples_per_packet = 2048;
mod_enb->devs->openair0_cfg.tx_forward_nsamps = 175; mod_enb->devs->openair0_cfg.tx_forward_nsamps = 175;
......
...@@ -216,7 +216,7 @@ static rrh_module_t new_module (unsigned int id) { ...@@ -216,7 +216,7 @@ static rrh_module_t new_module (unsigned int id) {
LOG_I(RRH,"Setting RF device to EXMIMO\n"); LOG_I(RRH,"Setting RF device to EXMIMO\n");
#elif OAI_USRP #elif OAI_USRP
rrh_mod.devs=oai_dv; rrh_mod.devs=oai_dv;
rrh_mod.devs->type=USRP_IF; rrh_mod.devs->type=USRP_B200_IF;
LOG_I(RRH,"Setting RF device to USRP\n"); LOG_I(RRH,"Setting RF device to USRP\n");
#elif OAI_BLADERF #elif OAI_BLADERF
rrh_mod.devs=oai_dv; rrh_mod.devs=oai_dv;
......
...@@ -51,7 +51,7 @@ ...@@ -51,7 +51,7 @@
/*! \brief RRH supports two types of modules: eNB and UE /*! \brief RRH supports two types of modules: eNB and UE
each module is associated with an ethernet device (device of ETH_IF) each module is associated with an ethernet device (device of ETH_IF)
and optionally with a RF device (device type can be USRP_IF/BLADERF_IF/EXMIMO_IF/NONE_IF) and optionally with a RF device (device type can be USRP_B200/USRP_X300/BLADERF_IF/EXMIMO_IF/NONE_IF)
UE modules will always have RF device type NONE_IF */ UE modules will always have RF device type NONE_IF */
typedef struct { typedef struct {
/*! \brief module id */ /*! \brief module id */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment