Merge remote-tracking branch 'origin/develop' into enhancement-10-harmony
Conflicts: targets/RT/USER/lte-enb.c targets/RT/USER/lte-softmodem.c
This commit is contained in:
@@ -876,11 +876,8 @@ int openair0_config(openair0_config_t *openair0_cfg, int UE_flag)
|
||||
|
||||
if (openair0_cfg[card].rx_freq[ant]>0) {
|
||||
p_exmimo_config->rf.rf_mode[ant] += (RXEN + DMAMODE_RX + RXLPFNORM + RXLPFEN + rx_filter);
|
||||
|
||||
p_exmimo_config->rf.rf_freq_rx[ant] = (unsigned int)openair0_cfg[card].rx_freq[ant];
|
||||
|
||||
printf("openair0 : programming card %d RX antenna %d (freq %u, gain %d)\n",card,ant,p_exmimo_config->rf.rf_freq_rx[ant],p_exmimo_config->rf.rx_gain[ant][0]);
|
||||
|
||||
switch (openair0_cfg[card].rxg_mode[ant]) {
|
||||
default:
|
||||
case max_gain:
|
||||
@@ -916,6 +913,8 @@ int openair0_config(openair0_config_t *openair0_cfg, int UE_flag)
|
||||
}
|
||||
break;
|
||||
}
|
||||
printf("openair0 : programming card %d RX antenna %d (freq %u, gain %d)\n",card,ant,p_exmimo_config->rf.rf_freq_rx[ant],p_exmimo_config->rf.rx_gain[ant][0]);
|
||||
|
||||
} else {
|
||||
p_exmimo_config->rf.rf_mode[ant] = 0;
|
||||
p_exmimo_config->rf.do_autocal[ant] = 0;
|
||||
|
||||
Regular → Executable
BIN
Binary file not shown.
Regular → Executable
BIN
Binary file not shown.
@@ -38,8 +38,9 @@ eNBs =
|
||||
Nid_cell_mbsfn = 0;
|
||||
nb_antennas_tx = 1;
|
||||
nb_antennas_rx = 1;
|
||||
tx_gain = 10;//25;
|
||||
rx_gain = 120;
|
||||
nb_antenna_ports = 1;
|
||||
tx_gain = 10; //25;
|
||||
rx_gain = 10; //20;
|
||||
prach_root = 0;
|
||||
prach_config_index = 0;
|
||||
prach_high_speed = "DISABLE";
|
||||
@@ -100,6 +101,8 @@ eNBs =
|
||||
ue_TimersAndConstants_t311 = 10000;
|
||||
ue_TimersAndConstants_n310 = 20;
|
||||
ue_TimersAndConstants_n311 = 1;
|
||||
|
||||
ue_TransmissionMode = 1;
|
||||
}
|
||||
);
|
||||
|
||||
|
||||
@@ -36,6 +36,7 @@ eNBs =
|
||||
Nid_cell = 0;
|
||||
N_RB_DL = 100;
|
||||
Nid_cell_mbsfn = 0;
|
||||
nb_antenna_ports = 1;
|
||||
nb_antennas_tx = 1;
|
||||
nb_antennas_rx = 1;
|
||||
tx_gain = 90;
|
||||
@@ -100,7 +101,7 @@ eNBs =
|
||||
ue_TimersAndConstants_t311 = 10000;
|
||||
ue_TimersAndConstants_n310 = 20;
|
||||
ue_TimersAndConstants_n311 = 1;
|
||||
|
||||
ue_TransmissionMode = 1;
|
||||
}
|
||||
);
|
||||
|
||||
@@ -156,12 +157,12 @@ eNBs =
|
||||
rrh_gw_config = (
|
||||
{
|
||||
local_if_name = "eth0";
|
||||
remote_address = "74:d4:35:cc:8d:15";
|
||||
local_address = "34:e6:d7:3c:ae:fc";
|
||||
remote_address = "10.10.10.60";
|
||||
local_address = "10.10.10.215";
|
||||
local_port = 50000; #for raw option local port must be the same to remote
|
||||
remote_port = 50000;
|
||||
rrh_gw_active = "yes";
|
||||
tr_preference = "raw_if4p5";
|
||||
tr_preference = "udp_if4p5";
|
||||
rf_preference = "usrp_b200";
|
||||
iq_txshift = 4;
|
||||
tx_sample_advance = 80;
|
||||
|
||||
@@ -38,6 +38,7 @@ eNBs =
|
||||
Nid_cell_mbsfn = 0;
|
||||
nb_antennas_tx = 1;
|
||||
nb_antennas_rx = 1;
|
||||
nb_antenna_ports = 1;
|
||||
tx_gain = 90;
|
||||
rx_gain = 125;
|
||||
prach_root = 0;
|
||||
@@ -100,6 +101,7 @@ eNBs =
|
||||
ue_TimersAndConstants_t311 = 10000;
|
||||
ue_TimersAndConstants_n310 = 20;
|
||||
ue_TimersAndConstants_n311 = 1;
|
||||
ue_TransmissionMode = 1;
|
||||
|
||||
}
|
||||
);
|
||||
|
||||
@@ -38,6 +38,7 @@ eNBs =
|
||||
Nid_cell_mbsfn = 0;
|
||||
nb_antennas_tx = 1;
|
||||
nb_antennas_rx = 1;
|
||||
nb_antenna_ports = 1;
|
||||
tx_gain = 90;
|
||||
rx_gain = 125;
|
||||
prach_root = 0;
|
||||
@@ -100,6 +101,7 @@ eNBs =
|
||||
ue_TimersAndConstants_t311 = 10000;
|
||||
ue_TimersAndConstants_n310 = 20;
|
||||
ue_TimersAndConstants_n311 = 1;
|
||||
ue_TransmissionMode = 1;
|
||||
|
||||
}
|
||||
);
|
||||
|
||||
+30
-22
@@ -134,8 +134,8 @@ time_stats_t softmodem_stats_mt; // main thread
|
||||
time_stats_t softmodem_stats_hw; // hw acquisition
|
||||
time_stats_t softmodem_stats_rxtx_sf; // total tx time
|
||||
time_stats_t softmodem_stats_rx_sf; // total rx time
|
||||
int32_t **rxdata;
|
||||
int32_t **txdata;
|
||||
//int32_t **rxdata;
|
||||
//int32_t **txdata;
|
||||
|
||||
uint8_t seqno; //sequence number
|
||||
|
||||
@@ -302,12 +302,13 @@ void do_OFDM_mod_rt(int subframe,PHY_VARS_eNB *phy_vars_eNB) {
|
||||
6,
|
||||
phy_vars_eNB->frame_parms.nb_prefix_samples,
|
||||
CYCLIC_PREFIX);
|
||||
PHY_ofdm_mod(&phy_vars_eNB->common_vars.txdataF[0][aa][slot_offset_F+slot_sizeF],
|
||||
dummy_tx_b+(phy_vars_eNB->frame_parms.samples_per_tti>>1),
|
||||
phy_vars_eNB->frame_parms.ofdm_symbol_size,
|
||||
6,
|
||||
phy_vars_eNB->frame_parms.nb_prefix_samples,
|
||||
CYCLIC_PREFIX);
|
||||
if (subframe_select(&phy_vars_eNB->frame_parms,subframe) == SF_DL)
|
||||
PHY_ofdm_mod(&phy_vars_eNB->common_vars.txdataF[0][aa][slot_offset_F+slot_sizeF],
|
||||
dummy_tx_b+(phy_vars_eNB->frame_parms.samples_per_tti>>1),
|
||||
phy_vars_eNB->frame_parms.ofdm_symbol_size,
|
||||
6,
|
||||
phy_vars_eNB->frame_parms.nb_prefix_samples,
|
||||
CYCLIC_PREFIX);
|
||||
} else {
|
||||
normal_prefix_mod(&phy_vars_eNB->common_vars.txdataF[0][aa][slot_offset_F],
|
||||
dummy_tx_b,
|
||||
@@ -385,7 +386,7 @@ void do_OFDM_mod_rt(int subframe,PHY_VARS_eNB *phy_vars_eNB) {
|
||||
// turn on tx switch N_TA_offset before
|
||||
//LOG_D(HW,"subframe %d, time to switch to tx (N_TA_offset %d, slot_offset %d) \n",subframe,phy_vars_eNB->N_TA_offset,slot_offset);
|
||||
for (i=0; i<phy_vars_eNB->N_TA_offset; i++) {
|
||||
tx_offset = (int)slot_offset+time_offset[aa]+i-phy_vars_eNB->N_TA_offset/2;
|
||||
tx_offset = (int)slot_offset+time_offset[aa]+i-phy_vars_eNB->N_TA_offset;
|
||||
if (tx_offset<0)
|
||||
tx_offset += LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*phy_vars_eNB->frame_parms.samples_per_tti;
|
||||
|
||||
@@ -468,8 +469,16 @@ void proc_tx_full(PHY_VARS_eNB *eNB,
|
||||
// if TX fronthaul go ahead
|
||||
if (eNB->tx_fh) eNB->tx_fh(eNB,proc);
|
||||
|
||||
|
||||
|
||||
/*
|
||||
if (proc->frame_tx>1000) {
|
||||
write_output("/tmp/txsig0.m","txs0", &eNB->common_vars.txdata[eNB->Mod_id][0][0], eNB->frame_parms.samples_per_tti*10,1,1);
|
||||
write_output("/tmp/txsigF0.m","txsF0", &eNB->common_vars.txdataF[eNB->Mod_id][0][0],eNB->frame_parms.symbols_per_tti*eNB->frame_parms.ofdm_symbol_size*10,1,1);
|
||||
write_output("/tmp/txsig1.m","txs1", &eNB->common_vars.txdata[eNB->Mod_id][1][0], eNB->frame_parms.samples_per_tti*10,1,1);
|
||||
write_output("/tmp/txsigF1.m","txsF1", &eNB->common_vars.txdataF[eNB->Mod_id][1][0],eNB->frame_parms.symbols_per_tti*eNB->frame_parms.ofdm_symbol_size*10,1,1);
|
||||
//if (transmission_mode == 7) write_output("/tmp/txsigF5.m","txsF5", &eNB->common_vars.txdataF[eNB->Mod_id][5][0],eNB->frame_parms.symbols_per_tti*eNB->frame_parms.ofdm_symbol_size*10,1,1);
|
||||
exit_fun("");
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
void proc_tx_rru_if4p5(PHY_VARS_eNB *eNB,
|
||||
@@ -1553,7 +1562,7 @@ extern void init_te_thread(PHY_VARS_eNB *, pthread_attr_t *);
|
||||
|
||||
void init_eNB_proc(int inst) {
|
||||
|
||||
int i;
|
||||
int i=0;
|
||||
int CC_id;
|
||||
PHY_VARS_eNB *eNB;
|
||||
eNB_proc_t *proc;
|
||||
@@ -1735,7 +1744,7 @@ int setup_eNB_buffers(PHY_VARS_eNB **phy_vars_eNB, openair0_config_t *openair0_c
|
||||
int i, CC_id;
|
||||
int j;
|
||||
|
||||
uint16_t N_TA_offset = 0;
|
||||
//uint16_t N_TA_offset = 0;
|
||||
|
||||
LTE_DL_FRAME_PARMS *frame_parms;
|
||||
|
||||
@@ -1748,6 +1757,7 @@ int setup_eNB_buffers(PHY_VARS_eNB **phy_vars_eNB, openair0_config_t *openair0_c
|
||||
return(-1);
|
||||
}
|
||||
|
||||
/*
|
||||
if (frame_parms->frame_type == TDD) {
|
||||
if (frame_parms->N_RB_DL == 100)
|
||||
N_TA_offset = 624;
|
||||
@@ -1756,7 +1766,7 @@ int setup_eNB_buffers(PHY_VARS_eNB **phy_vars_eNB, openair0_config_t *openair0_c
|
||||
else if (frame_parms->N_RB_DL == 25)
|
||||
N_TA_offset = 624/4;
|
||||
}
|
||||
|
||||
*/
|
||||
|
||||
|
||||
if (openair0_cfg[CC_id].mmapped_dma == 1) {
|
||||
@@ -1766,11 +1776,8 @@ int setup_eNB_buffers(PHY_VARS_eNB **phy_vars_eNB, openair0_config_t *openair0_c
|
||||
printf("Mapping eNB CC_id %d, rx_ant %d\n",CC_id,i);
|
||||
free(phy_vars_eNB[CC_id]->common_vars.rxdata[0][i]);
|
||||
phy_vars_eNB[CC_id]->common_vars.rxdata[0][i] = openair0_cfg[CC_id].rxbase[i];
|
||||
|
||||
|
||||
|
||||
|
||||
printf("rxdata[%d] @ %p\n",i,phy_vars_eNB[CC_id]->common_vars.rxdata[0][i]);
|
||||
|
||||
for (j=0; j<16; j++) {
|
||||
printf("rxbuffer %d: %x\n",j,phy_vars_eNB[CC_id]->common_vars.rxdata[0][i][j]);
|
||||
phy_vars_eNB[CC_id]->common_vars.rxdata[0][i][j] = 16-j;
|
||||
@@ -1791,15 +1798,15 @@ int setup_eNB_buffers(PHY_VARS_eNB **phy_vars_eNB, openair0_config_t *openair0_c
|
||||
}
|
||||
}
|
||||
else { // not memory-mapped DMA
|
||||
|
||||
|
||||
//nothing to do, everything already allocated in lte_init
|
||||
/*
|
||||
rxdata = (int32_t**)malloc16(frame_parms->nb_antennas_rx*sizeof(int32_t*));
|
||||
txdata = (int32_t**)malloc16(frame_parms->nb_antennas_tx*sizeof(int32_t*));
|
||||
|
||||
for (i=0; i<frame_parms->nb_antennas_rx; i++) {
|
||||
free(phy_vars_eNB[CC_id]->common_vars.rxdata[0][i]);
|
||||
rxdata[i] = (int32_t*)(32 + malloc16(32+frame_parms->samples_per_tti*10*sizeof(int32_t))); // FIXME broken memory allocation
|
||||
phy_vars_eNB[CC_id]->common_vars.rxdata[0][i] = rxdata[i]-N_TA_offset; // N_TA offset for TDD FIXME! N_TA_offset > 16 => access of unallocated memory
|
||||
phy_vars_eNB[CC_id]->common_vars.rxdata[0][i] = rxdata[i]; //-N_TA_offset; // N_TA offset for TDD FIXME! N_TA_offset > 16 => access of unallocated memory
|
||||
memset(rxdata[i], 0, frame_parms->samples_per_tti*10*sizeof(int32_t));
|
||||
printf("rxdata[%d] @ %p (%p) (N_TA_OFFSET %d)\n", i, phy_vars_eNB[CC_id]->common_vars.rxdata[0][i],rxdata[i],N_TA_offset);
|
||||
}
|
||||
@@ -1811,6 +1818,7 @@ int setup_eNB_buffers(PHY_VARS_eNB **phy_vars_eNB, openair0_config_t *openair0_c
|
||||
memset(txdata[i],0, frame_parms->samples_per_tti*10*sizeof(int32_t));
|
||||
printf("txdata[%d] @ %p\n", i, phy_vars_eNB[CC_id]->common_vars.txdata[0][i]);
|
||||
}
|
||||
*/
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2038,7 +2046,7 @@ void init_eNB(eNB_func_t node_function[], eNB_timing_t node_timing[],int nb_inst
|
||||
}
|
||||
}
|
||||
|
||||
if (setup_eNB_buffers(PHY_vars_eNB_g[inst],&openair0_cfg[CC_id])!=0) {
|
||||
if (setup_eNB_buffers(PHY_vars_eNB_g[inst],&openair0_cfg[0])!=0) {
|
||||
printf("Exiting, cannot initialize eNodeB Buffers\n");
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
@@ -1356,12 +1356,6 @@ void init_openair0() {
|
||||
else
|
||||
openair0_cfg[card].rx_freq[i]=0.0;
|
||||
|
||||
printf("Card %d, channel %d, Setting tx_gain %f, rx_gain %f, tx_freq %f, rx_freq %f\n",
|
||||
card,i, openair0_cfg[card].tx_gain[i],
|
||||
openair0_cfg[card].rx_gain[i],
|
||||
openair0_cfg[card].tx_freq[i],
|
||||
openair0_cfg[card].rx_freq[i]);
|
||||
|
||||
openair0_cfg[card].autocal[i] = 1;
|
||||
openair0_cfg[card].tx_gain[i] = tx_gain[0][i];
|
||||
if (UE_flag == 0) {
|
||||
@@ -1371,10 +1365,12 @@ void init_openair0() {
|
||||
openair0_cfg[card].rx_gain[i] = PHY_vars_UE_g[0][0]->rx_total_gain_dB - rx_gain_off;
|
||||
}
|
||||
|
||||
|
||||
printf("Card %d, channel %d, Setting tx_gain %f, rx_gain %f, tx_freq %f, rx_freq %f\n",
|
||||
card,i, openair0_cfg[card].tx_gain[i],
|
||||
openair0_cfg[card].rx_gain[i],
|
||||
openair0_cfg[card].tx_freq[i],
|
||||
openair0_cfg[card].rx_freq[i]);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1604,7 +1600,18 @@ int main( int argc, char **argv )
|
||||
|
||||
UE[CC_id]->rx_total_gain_dB = (int)rx_gain[CC_id][0] + rx_gain_off;
|
||||
UE[CC_id]->tx_power_max_dBm = tx_max_power[CC_id];
|
||||
UE[CC_id]->N_TA_offset = 0;
|
||||
|
||||
if (frame_parms[CC_id]->frame_type==FDD) {
|
||||
UE[CC_id]->N_TA_offset = 0;
|
||||
}
|
||||
else {
|
||||
if (frame_parms[CC_id]->N_RB_DL == 100)
|
||||
UE[CC_id]->N_TA_offset = 624;
|
||||
else if (frame_parms[CC_id]->N_RB_DL == 50)
|
||||
UE[CC_id]->N_TA_offset = 624/2;
|
||||
else if (frame_parms[CC_id]->N_RB_DL == 25)
|
||||
UE[CC_id]->N_TA_offset = 624/4;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1618,6 +1625,11 @@ int main( int argc, char **argv )
|
||||
PHY_vars_eNB_g[0][CC_id] = init_lte_eNB(frame_parms[CC_id],0,frame_parms[CC_id]->Nid_cell,abstraction_flag);
|
||||
PHY_vars_eNB_g[0][CC_id]->CC_id = CC_id;
|
||||
|
||||
PHY_vars_eNB_g[0][CC_id]->ue_dl_rb_alloc=0x1fff;
|
||||
PHY_vars_eNB_g[0][CC_id]->target_ue_dl_mcs=target_dl_mcs;
|
||||
PHY_vars_eNB_g[0][CC_id]->ue_ul_nb_rb=6;
|
||||
PHY_vars_eNB_g[0][CC_id]->target_ue_ul_mcs=target_ul_mcs;
|
||||
|
||||
if (phy_test==1) PHY_vars_eNB_g[0][CC_id]->mac_enabled = 0;
|
||||
else PHY_vars_eNB_g[0][CC_id]->mac_enabled = 1;
|
||||
|
||||
@@ -1639,8 +1651,17 @@ int main( int argc, char **argv )
|
||||
|
||||
PHY_vars_eNB_g[0][CC_id]->rx_total_gain_dB = (int)rx_gain[CC_id][0];
|
||||
|
||||
PHY_vars_eNB_g[0][CC_id]->N_TA_offset = 0;
|
||||
|
||||
if (frame_parms[CC_id]->frame_type==FDD) {
|
||||
PHY_vars_eNB_g[0][CC_id]->N_TA_offset = 0;
|
||||
}
|
||||
else {
|
||||
if (frame_parms[CC_id]->N_RB_DL == 100)
|
||||
PHY_vars_eNB_g[0][CC_id]->N_TA_offset = 624;
|
||||
else if (frame_parms[CC_id]->N_RB_DL == 50)
|
||||
PHY_vars_eNB_g[0][CC_id]->N_TA_offset = 624/2;
|
||||
else if (frame_parms[CC_id]->N_RB_DL == 25)
|
||||
PHY_vars_eNB_g[0][CC_id]->N_TA_offset = 624/4;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1812,10 +1833,17 @@ int main( int argc, char **argv )
|
||||
|
||||
|
||||
// start the main thread
|
||||
if (UE_flag == 1) init_UE(1);
|
||||
if (UE_flag == 1) {
|
||||
init_UE(1);
|
||||
number_of_cards = 1;
|
||||
|
||||
for(CC_id=0; CC_id<MAX_NUM_CCs; CC_id++) {
|
||||
PHY_vars_UE_g[0][CC_id]->rf_map.card=0;
|
||||
PHY_vars_UE_g[0][CC_id]->rf_map.chain=CC_id+chain_offset;
|
||||
}
|
||||
}
|
||||
else {
|
||||
init_eNB(node_function,node_timing,1,eth_params,single_thread_flag,wait_for_sync);
|
||||
// Sleep to allow all threads to setup
|
||||
|
||||
number_of_cards = 1;
|
||||
|
||||
|
||||
+69
-89
@@ -98,8 +98,8 @@ extern uint32_t downlink_frequency[MAX_NUM_CCs][4];
|
||||
extern int32_t uplink_frequency_offset[MAX_NUM_CCs][4];
|
||||
extern int oai_exit;
|
||||
|
||||
extern int32_t **rxdata;
|
||||
extern int32_t **txdata;
|
||||
int32_t **rxdata;
|
||||
int32_t **txdata;
|
||||
|
||||
//extern unsigned int tx_forward_nsamps;
|
||||
//extern int tx_delay;
|
||||
@@ -220,7 +220,7 @@ static void *UE_thread_synch(void *arg)
|
||||
int current_band = 0;
|
||||
int current_offset = 0;
|
||||
sync_mode_t sync_mode = pbch;
|
||||
int card;
|
||||
int CC_id = UE->CC_id;
|
||||
int ind;
|
||||
int found;
|
||||
int freq_offset=0;
|
||||
@@ -312,9 +312,8 @@ static void *UE_thread_synch(void *arg)
|
||||
printf( "Scanning band %d, dl_min %"PRIu32", ul_min %"PRIu32"\n", current_band, eutra_bands[ind].dl_min,eutra_bands[ind].ul_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++)
|
||||
uplink_frequency_offset[card][i] = eutra_bands[ind].ul_min - eutra_bands[ind].dl_min;
|
||||
for (i=0; i<4; i++)
|
||||
uplink_frequency_offset[CC_id][i] = eutra_bands[ind].ul_min - eutra_bands[ind].dl_min;
|
||||
|
||||
found = 1;
|
||||
break;
|
||||
@@ -333,16 +332,16 @@ static void *UE_thread_synch(void *arg)
|
||||
|
||||
|
||||
|
||||
LOG_I( PHY, "[SCHED][UE] Check absolute frequency DL %"PRIu32", UL %"PRIu32" (oai_exit %d)\n", downlink_frequency[0][0], downlink_frequency[0][0]+uplink_frequency_offset[0][0],oai_exit );
|
||||
LOG_I( PHY, "[SCHED][UE] Check absolute frequency DL %"PRIu32", UL %"PRIu32" (oai_exit %d, rx_num_channels %d)\n", downlink_frequency[0][0], downlink_frequency[0][0]+uplink_frequency_offset[0][0],oai_exit, openair0_cfg[0].rx_num_channels);
|
||||
|
||||
for (i=0;i<openair0_cfg[0].rx_num_channels;i++) {
|
||||
openair0_cfg[0].rx_freq[i] = downlink_frequency[0][i];
|
||||
openair0_cfg[0].tx_freq[i] = downlink_frequency[0][i]+uplink_frequency_offset[0][i];
|
||||
openair0_cfg[0].autocal[i] = 1;
|
||||
if (uplink_frequency_offset[0][i] != 0) //
|
||||
openair0_cfg[0].duplex_mode = duplex_mode_FDD;
|
||||
for (i=0;i<openair0_cfg[UE->rf_map.card].rx_num_channels;i++) {
|
||||
openair0_cfg[UE->rf_map.card].rx_freq[UE->rf_map.chain+i] = downlink_frequency[CC_id][i];
|
||||
openair0_cfg[UE->rf_map.card].tx_freq[UE->rf_map.chain+i] = downlink_frequency[CC_id][i]+uplink_frequency_offset[CC_id][i];
|
||||
openair0_cfg[UE->rf_map.card].autocal[UE->rf_map.chain+i] = 1;
|
||||
if (uplink_frequency_offset[CC_id][i] != 0) //
|
||||
openair0_cfg[UE->rf_map.card].duplex_mode = duplex_mode_FDD;
|
||||
else //FDD
|
||||
openair0_cfg[0].duplex_mode = duplex_mode_TDD;
|
||||
openair0_cfg[UE->rf_map.card].duplex_mode = duplex_mode_TDD;
|
||||
}
|
||||
|
||||
sync_mode = pbch;
|
||||
@@ -350,18 +349,14 @@ static void *UE_thread_synch(void *arg)
|
||||
} else if (UE->UE_scan == 1) {
|
||||
current_band=0;
|
||||
|
||||
for (card=0; card<MAX_CARDS; card++) {
|
||||
for (i=0; i<openair0_cfg[card].rx_num_channels; i++) {
|
||||
downlink_frequency[card][i] = bands_to_scan.band_info[0].dl_min;
|
||||
uplink_frequency_offset[card][i] = bands_to_scan.band_info[0].ul_min-bands_to_scan.band_info[0].dl_min;
|
||||
|
||||
openair0_cfg[card].rx_freq[i] = downlink_frequency[card][i];
|
||||
openair0_cfg[card].tx_freq[i] = downlink_frequency[card][i]+uplink_frequency_offset[card][i];
|
||||
openair0_cfg[card].rx_gain[i] = UE->rx_total_gain_dB;
|
||||
printf( "UE synch: setting RX gain (%d,%d) to %f\n", card, i, openair0_cfg[card].rx_gain[i] );
|
||||
}
|
||||
for (i=0; i<openair0_cfg[UE->rf_map.card].rx_num_channels; i++) {
|
||||
downlink_frequency[UE->rf_map.card][UE->rf_map.chain+i] = bands_to_scan.band_info[CC_id].dl_min;
|
||||
uplink_frequency_offset[UE->rf_map.card][UE->rf_map.chain+i] = bands_to_scan.band_info[CC_id].ul_min-bands_to_scan.band_info[CC_id].dl_min;
|
||||
|
||||
openair0_cfg[UE->rf_map.card].rx_freq[UE->rf_map.chain+i] = downlink_frequency[CC_id][i];
|
||||
openair0_cfg[UE->rf_map.card].tx_freq[UE->rf_map.chain+i] = downlink_frequency[CC_id][i]+uplink_frequency_offset[CC_id][i];
|
||||
openair0_cfg[UE->rf_map.card].rx_gain[UE->rf_map.chain+i] = UE->rx_total_gain_dB;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -417,28 +412,19 @@ static void *UE_thread_synch(void *arg)
|
||||
oai_exit=1;
|
||||
}
|
||||
|
||||
for (card=0; card<MAX_CARDS; card++) {
|
||||
for (i=0; i<openair0_cfg[card].rx_num_channels; i++) {
|
||||
downlink_frequency[card][i] = bands_to_scan.band_info[current_band].dl_min+current_offset;
|
||||
uplink_frequency_offset[card][i] = bands_to_scan.band_info[current_band].ul_min-bands_to_scan.band_info[0].dl_min + current_offset;
|
||||
|
||||
|
||||
openair0_cfg[card].rx_freq[i] = downlink_frequency[card][i];
|
||||
openair0_cfg[card].tx_freq[i] = downlink_frequency[card][i]+uplink_frequency_offset[card][i];
|
||||
openair0_cfg[card].rx_gain[i] = UE->rx_total_gain_dB;
|
||||
printf("UE synch: setting RX gain (%d,%d) to %f\n",card,i,openair0_cfg[card].rx_gain[i]);
|
||||
}
|
||||
for (i=0; i<openair0_cfg[UE->rf_map.card].rx_num_channels; i++) {
|
||||
downlink_frequency[UE->rf_map.card][UE->rf_map.chain+i] = bands_to_scan.band_info[current_band].dl_min+current_offset;
|
||||
uplink_frequency_offset[UE->rf_map.card][UE->rf_map.chain+i] = bands_to_scan.band_info[current_band].ul_min-bands_to_scan.band_info[0].dl_min + current_offset;
|
||||
|
||||
openair0_cfg[UE->rf_map.card].rx_freq[UE->rf_map.chain+i] = downlink_frequency[CC_id][i];
|
||||
openair0_cfg[UE->rf_map.card].tx_freq[UE->rf_map.chain+i] = downlink_frequency[CC_id][i]+uplink_frequency_offset[CC_id][i];
|
||||
openair0_cfg[UE->rf_map.card].rx_gain[UE->rf_map.chain+i] = UE->rx_total_gain_dB;
|
||||
if (UE->UE_scan_carrier) {
|
||||
openair0_cfg[UE->rf_map.card].autocal[UE->rf_map.chain+i] = 1;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (UE->UE_scan_carrier) {
|
||||
|
||||
for (i=0;i<openair0_cfg[0].rx_num_channels;i++)
|
||||
openair0_cfg[0].autocal[i] = 1;
|
||||
|
||||
}
|
||||
|
||||
|
||||
break;
|
||||
|
||||
case pbch:
|
||||
@@ -452,42 +438,42 @@ static void *UE_thread_synch(void *arg)
|
||||
|
||||
UE->UE_scan_carrier = 0;
|
||||
// rerun with new cell parameters and frequency-offset
|
||||
for (i=0;i<openair0_cfg[0].rx_num_channels;i++) {
|
||||
openair0_cfg[0].rx_gain[i] = UE->rx_total_gain_dB;//-USRP_GAIN_OFFSET;
|
||||
openair0_cfg[0].rx_freq[i] -= UE->common_vars.freq_offset;
|
||||
openair0_cfg[0].tx_freq[i] = openair0_cfg[0].rx_freq[i]+uplink_frequency_offset[0][i];
|
||||
downlink_frequency[0][i] = openair0_cfg[0].rx_freq[i];
|
||||
for (i=0;i<openair0_cfg[UE->rf_map.card].rx_num_channels;i++) {
|
||||
openair0_cfg[UE->rf_map.card].rx_gain[UE->rf_map.chain+i] = UE->rx_total_gain_dB;//-USRP_GAIN_OFFSET;
|
||||
openair0_cfg[UE->rf_map.card].rx_freq[UE->rf_map.chain+i] -= UE->common_vars.freq_offset;
|
||||
openair0_cfg[UE->rf_map.card].tx_freq[UE->rf_map.chain+i] = openair0_cfg[UE->rf_map.card].rx_freq[UE->rf_map.chain+i]+uplink_frequency_offset[CC_id][i];
|
||||
downlink_frequency[CC_id][i] = openair0_cfg[CC_id].rx_freq[i];
|
||||
freq_offset=0;
|
||||
}
|
||||
|
||||
// reconfigure for potentially different bandwidth
|
||||
switch(UE->frame_parms.N_RB_DL) {
|
||||
case 6:
|
||||
openair0_cfg[0].sample_rate =1.92e6;
|
||||
openair0_cfg[0].rx_bw =.96e6;
|
||||
openair0_cfg[0].tx_bw =.96e6;
|
||||
openair0_cfg[UE->rf_map.card].sample_rate =1.92e6;
|
||||
openair0_cfg[UE->rf_map.card].rx_bw =.96e6;
|
||||
openair0_cfg[UE->rf_map.card].tx_bw =.96e6;
|
||||
// openair0_cfg[0].rx_gain[0] -= 12;
|
||||
break;
|
||||
case 25:
|
||||
openair0_cfg[0].sample_rate =7.68e6;
|
||||
openair0_cfg[0].rx_bw =2.5e6;
|
||||
openair0_cfg[0].tx_bw =2.5e6;
|
||||
openair0_cfg[UE->rf_map.card].sample_rate =7.68e6;
|
||||
openair0_cfg[UE->rf_map.card].rx_bw =2.5e6;
|
||||
openair0_cfg[UE->rf_map.card].tx_bw =2.5e6;
|
||||
// openair0_cfg[0].rx_gain[0] -= 6;
|
||||
break;
|
||||
case 50:
|
||||
openair0_cfg[0].sample_rate =15.36e6;
|
||||
openair0_cfg[0].rx_bw =5.0e6;
|
||||
openair0_cfg[0].tx_bw =5.0e6;
|
||||
openair0_cfg[UE->rf_map.card].sample_rate =15.36e6;
|
||||
openair0_cfg[UE->rf_map.card].rx_bw =5.0e6;
|
||||
openair0_cfg[UE->rf_map.card].tx_bw =5.0e6;
|
||||
// openair0_cfg[0].rx_gain[0] -= 3;
|
||||
break;
|
||||
case 100:
|
||||
openair0_cfg[0].sample_rate=30.72e6;
|
||||
openair0_cfg[0].rx_bw=10.0e6;
|
||||
openair0_cfg[0].tx_bw=10.0e6;
|
||||
openair0_cfg[UE->rf_map.card].sample_rate=30.72e6;
|
||||
openair0_cfg[UE->rf_map.card].rx_bw=10.0e6;
|
||||
openair0_cfg[UE->rf_map.card].tx_bw=10.0e6;
|
||||
// openair0_cfg[0].rx_gain[0] -= 0;
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
UE->rfdevice.trx_set_freq_func(&UE->rfdevice,&openair0_cfg[0],0);
|
||||
//UE->rfdevice.trx_set_gains_func(&openair0,&openair0_cfg[0]);
|
||||
UE->rfdevice.trx_stop_func(&UE->rfdevice);
|
||||
@@ -559,25 +545,19 @@ static void *UE_thread_synch(void *arg)
|
||||
downlink_frequency[0][0]+freq_offset,
|
||||
downlink_frequency[0][0]+uplink_frequency_offset[0][0]+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]+freq_offset;
|
||||
openair0_cfg[card].tx_freq[i] = downlink_frequency[card][i]+uplink_frequency_offset[card][i]+freq_offset;
|
||||
|
||||
|
||||
|
||||
|
||||
openair0_cfg[card].rx_gain[i] = UE->rx_total_gain_dB;//-USRP_GAIN_OFFSET;
|
||||
UE->rfdevice.trx_set_freq_func(&UE->rfdevice,&openair0_cfg[0],0);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
if (UE->UE_scan_carrier==1) {
|
||||
for (i=0;i<openair0_cfg[0].rx_num_channels;i++) {
|
||||
// openair0_cfg[0].autocal[i] = 1;
|
||||
for (i=0; i<openair0_cfg[UE->rf_map.card].rx_num_channels; i++) {
|
||||
openair0_cfg[UE->rf_map.card].rx_freq[UE->rf_map.chain+i] = downlink_frequency[CC_id][i]+freq_offset;
|
||||
openair0_cfg[UE->rf_map.card].tx_freq[UE->rf_map.chain+i] = downlink_frequency[CC_id][i]+uplink_frequency_offset[CC_id][i]+freq_offset;
|
||||
|
||||
openair0_cfg[UE->rf_map.card].rx_gain[UE->rf_map.chain+i] = UE->rx_total_gain_dB;//-USRP_GAIN_OFFSET;
|
||||
|
||||
if (UE->UE_scan_carrier==1) {
|
||||
openair0_cfg[UE->rf_map.card].autocal[UE->rf_map.chain+i] = 1;
|
||||
}
|
||||
}
|
||||
|
||||
UE->rfdevice.trx_set_freq_func(&UE->rfdevice,&openair0_cfg[0],0);
|
||||
|
||||
}// initial_sync=0
|
||||
|
||||
break;
|
||||
@@ -1648,14 +1628,14 @@ int setup_ue_buffers(PHY_VARS_UE **phy_vars_ue, openair0_config_t *openair0_cfg)
|
||||
}
|
||||
|
||||
/*
|
||||
if (frame_parms->frame_type == TDD) {
|
||||
if (frame_parms->frame_type == TDD) {
|
||||
if (frame_parms->N_RB_DL == 100)
|
||||
N_TA_offset = 624;
|
||||
else if (frame_parms->N_RB_DL == 50)
|
||||
N_TA_offset = 624/2;
|
||||
else if (frame_parms->N_RB_DL == 25)
|
||||
N_TA_offset = 624/4;
|
||||
}
|
||||
N_TA_offset = 624;
|
||||
else if (frame_parms->N_RB_DL == 50)
|
||||
N_TA_offset = 624/2;
|
||||
else if (frame_parms->N_RB_DL == 25)
|
||||
N_TA_offset = 624/4;
|
||||
}
|
||||
*/
|
||||
|
||||
// replace RX signal buffers with mmaped HW versions
|
||||
@@ -1665,9 +1645,9 @@ int setup_ue_buffers(PHY_VARS_UE **phy_vars_ue, openair0_config_t *openair0_cfg)
|
||||
for (i=0; i<frame_parms->nb_antennas_rx; i++) {
|
||||
printf( "Mapping UE CC_id %d, rx_ant %d, freq %u on card %d, chain %d\n", CC_id, i, downlink_frequency[CC_id][i], rf_map->card, rf_map->chain+i );
|
||||
free( phy_vars_ue[CC_id]->common_vars.rxdata[i] );
|
||||
rxdata[i] = (int32_t*)malloc16_clear( 307200*sizeof(int32_t) );
|
||||
phy_vars_ue[CC_id]->common_vars.rxdata[i] = rxdata[i]; // what about the "-N_TA_offset" ? // N_TA offset for TDD
|
||||
printf("rxdata[%d] : %p\n",i,rxdata[i]);
|
||||
rxdata[i] = (int32_t*)malloc16_clear( 307200*sizeof(int32_t) );
|
||||
phy_vars_ue[CC_id]->common_vars.rxdata[i] = rxdata[i]; // what about the "-N_TA_offset" ? // N_TA offset for TDD
|
||||
printf("rxdata[%d] : %p\n",i,rxdata[i]);
|
||||
}
|
||||
|
||||
for (i=0; i<frame_parms->nb_antennas_tx; i++) {
|
||||
|
||||
Reference in New Issue
Block a user