added USRP X310 interface handling
This commit is contained in:
@@ -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 {
|
|||||||
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
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/*
|
if (device->type == USRP_B200_IF) {
|
||||||
if (cc>1) {
|
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_tmp[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_tmp[0], nsamps, s->rx_md);
|
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)
|
|
||||||
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);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
// 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_
|
|||||||
// 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) {
|
|||||||
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) {
|
|||||||
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 @@
|
|||||||
|
|
||||||
/*! \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 */
|
||||||
|
|||||||
Reference in New Issue
Block a user