merge with the develop branch
This commit is contained in:
+47
-29
@@ -113,6 +113,8 @@ char smbv_ip[16];
|
||||
# include "create_tasks.h"
|
||||
#endif
|
||||
|
||||
#include "T.h"
|
||||
|
||||
/*
|
||||
DCI0_5MHz_TDD0_t UL_alloc_pdu;
|
||||
DCI1A_5MHz_TDD_1_6_t CCCH_alloc_pdu;
|
||||
@@ -245,6 +247,11 @@ help (void)
|
||||
printf ("-Y Set the global log verbosity (none, low, medium, high, full) \n");
|
||||
printf ("-z Set the cooperation flag (0 for no cooperation, 1 for delay diversity and 2 for distributed alamouti\n");
|
||||
printf ("-Z Reserved\n");
|
||||
#if T_TRACER
|
||||
printf ("--T_port [port] use given port\n");
|
||||
printf ("--T_nowait don't wait for tracer, start immediately\n");
|
||||
printf ("--T_dont_fork to ease debugging with gdb\n");
|
||||
#endif
|
||||
}
|
||||
|
||||
pthread_t log_thread;
|
||||
@@ -683,7 +690,6 @@ l2l1_task (void *args_p)
|
||||
oai_emulation.info.time_s += 0.01; // emu time in s, each frame lasts for 10 ms // JNote: TODO check the coherency of the time and frame (I corrected it to 10 (instead of 0.01)
|
||||
|
||||
update_omg (frame); // frequency is defined in the omg_global params configurable by the user
|
||||
|
||||
update_omg_ocm ();
|
||||
|
||||
#ifdef OPENAIR2
|
||||
@@ -713,7 +719,7 @@ l2l1_task (void *args_p)
|
||||
wait_for_slot_isr ();
|
||||
|
||||
#if defined(ENABLE_ITTI)
|
||||
itti_update_lte_time(frame%MAX_FRAME_NUMBER, slot);
|
||||
itti_update_lte_time(frame % MAX_FRAME_NUMBER, slot);
|
||||
#endif
|
||||
|
||||
last_slot = (slot - 1) % 20;
|
||||
@@ -749,7 +755,8 @@ l2l1_task (void *args_p)
|
||||
+ oai_emulation.info.nb_enb_local));
|
||||
eNB_inst++) {
|
||||
if (oai_emulation.info.cli_start_enb[eNB_inst] != 0) {
|
||||
if ((slot & 1) == 0)
|
||||
if ((slot & 1) == 0) {
|
||||
T(T_ENB_MASTER_TICK, T_INT(eNB_inst), T_INT(frame % 1024), T_INT(slot/2));
|
||||
LOG_D(EMU,
|
||||
"PHY procedures eNB %d for frame %d, slot %d (subframe TX %d, RX %d) TDD %d/%d Nid_cell %d\n",
|
||||
eNB_inst,
|
||||
@@ -760,6 +767,7 @@ l2l1_task (void *args_p)
|
||||
PHY_vars_eNB_g[eNB_inst][0]->lte_frame_parms.frame_type,
|
||||
PHY_vars_eNB_g[eNB_inst][0]->lte_frame_parms.tdd_config,
|
||||
PHY_vars_eNB_g[eNB_inst][0]->lte_frame_parms.Nid_cell);
|
||||
}
|
||||
|
||||
#ifdef OPENAIR2
|
||||
//Application: traffic gen
|
||||
@@ -828,27 +836,26 @@ l2l1_task (void *args_p)
|
||||
{
|
||||
LOG_D(EMU,
|
||||
"PHY procedures UE %d for frame %d, slot %d (subframe TX %d, RX %d)\n",
|
||||
UE_inst, frame%MAX_FRAME_NUMBER, slot, next_slot >> 1,
|
||||
UE_inst, frame % MAX_FRAME_NUMBER, slot, next_slot >> 1,
|
||||
last_slot >> 1);
|
||||
|
||||
if (PHY_vars_UE_g[UE_inst][0]->UE_mode[0]
|
||||
!= NOT_SYNCHED) {
|
||||
if (frame > 0) {
|
||||
PHY_vars_UE_g[UE_inst][0]->frame_rx = frame%MAX_FRAME_NUMBER;
|
||||
PHY_vars_UE_g[UE_inst][0]->frame_rx = frame % MAX_FRAME_NUMBER;
|
||||
PHY_vars_UE_g[UE_inst][0]->slot_rx = last_slot;
|
||||
PHY_vars_UE_g[UE_inst][0]->slot_tx = next_slot;
|
||||
|
||||
if (next_slot > 1)
|
||||
PHY_vars_UE_g[UE_inst][0]->frame_tx = frame%MAX_FRAME_NUMBER;
|
||||
PHY_vars_UE_g[UE_inst][0]->frame_tx = frame % MAX_FRAME_NUMBER;
|
||||
else
|
||||
PHY_vars_UE_g[UE_inst][0]->frame_tx = (frame + 1)%MAX_FRAME_NUMBER;
|
||||
|
||||
PHY_vars_UE_g[UE_inst][0]->frame_tx = (frame + 1) % MAX_FRAME_NUMBER;
|
||||
#ifdef OPENAIR2
|
||||
//Application
|
||||
update_otg_UE (UE_inst, oai_emulation.info.time_ms);
|
||||
|
||||
//Access layer
|
||||
PROTOCOL_CTXT_SET_BY_MODULE_ID(&ctxt, UE_inst, 0, ENB_FLAG_NO, NOT_A_RNTI, frame%MAX_FRAME_NUMBER, next_slot);
|
||||
PROTOCOL_CTXT_SET_BY_MODULE_ID(&ctxt, UE_inst, 0, ENB_FLAG_NO, NOT_A_RNTI, frame % MAX_FRAME_NUMBER, next_slot);
|
||||
pdcp_run (&ctxt);
|
||||
#endif
|
||||
|
||||
@@ -934,7 +941,7 @@ l2l1_task (void *args_p)
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
PHY_vars_RN_g[RN_id]->frame = frame%MAX_FRAME_NUMBER;
|
||||
PHY_vars_RN_g[RN_id]->frame = frame % MAX_FRAME_NUMBER;
|
||||
|
||||
if ( oai_emulation.info.frame_type == 0) {
|
||||
// RN == UE
|
||||
@@ -942,12 +949,12 @@ l2l1_task (void *args_p)
|
||||
if (PHY_vars_UE_g[UE_inst][0]->UE_mode[0] != NOT_SYNCHED) {
|
||||
LOG_D(EMU,"[RN %d] PHY procedures UE %d for frame %d, slot %d (subframe TX %d, RX %d)\n",
|
||||
RN_id, UE_inst, frame, slot, next_slot >> 1,last_slot>>1);
|
||||
PHY_vars_UE_g[UE_inst][0]->frame_rx = frame%MAX_FRAME_NUMBER;
|
||||
PHY_vars_UE_g[UE_inst][0]->frame_rx = frame % MAX_FRAME_NUMBER;
|
||||
PHY_vars_UE_g[UE_inst][0]->slot_rx = last_slot;
|
||||
PHY_vars_UE_g[UE_inst][0]->slot_tx = next_slot;
|
||||
|
||||
if (next_slot>1) PHY_vars_UE_g[UE_inst][0]->frame_tx = frame%MAX_FRAME_NUMBER;
|
||||
else PHY_vars_UE_g[UE_inst][0]->frame_tx = (frame+1)%MAX_FRAME_NUMBER;
|
||||
if (next_slot>1) PHY_vars_UE_g[UE_inst][0]->frame_tx = frame % MAX_FRAME_NUMBER;
|
||||
else PHY_vars_UE_g[UE_inst][0]->frame_tx = (frame+1) % MAX_FRAME_NUMBER;
|
||||
|
||||
phy_procedures_UE_lte (PHY_vars_UE_g[UE_inst][0], 0, abstraction_flag,normal_txrx,
|
||||
r_type, PHY_vars_RN_g[RN_id]);
|
||||
@@ -958,7 +965,7 @@ l2l1_task (void *args_p)
|
||||
|
||||
// RN == eNB
|
||||
LOG_D(EMU,"[RN %d] PHY procedures eNB %d for frame %d, slot %d (subframe TX %d, RX %d)\n",
|
||||
RN_id, eNB_inst, frame%MAX_FRAME_NUMBER, slot, next_slot >> 1,last_slot>>1);
|
||||
RN_id, eNB_inst, frame % MAX_FRAME_NUMBER, slot, next_slot >> 1,last_slot>>1);
|
||||
phy_procedures_eNB_lte(slot>>1, PHY_vars_eNB_g[eNB_inst], abstraction_flag,
|
||||
r_type, PHY_vars_RN_g[RN_id]);
|
||||
} else {
|
||||
@@ -968,7 +975,7 @@ l2l1_task (void *args_p)
|
||||
}
|
||||
|
||||
#endif
|
||||
emu_transport (frame%MAX_FRAME_NUMBER, last_slot, next_slot, direction,
|
||||
emu_transport (frame % MAX_FRAME_NUMBER, last_slot, next_slot, direction,
|
||||
oai_emulation.info.frame_type[0], ethernet_flag);
|
||||
|
||||
if ((direction == SF_DL)
|
||||
@@ -1014,7 +1021,7 @@ l2l1_task (void *args_p)
|
||||
enb_data, ue_data, next_slot,
|
||||
abstraction_flag,
|
||||
&PHY_vars_eNB_g[0][CC_id]->lte_frame_parms,
|
||||
frame%MAX_FRAME_NUMBER, CC_id);
|
||||
frame % MAX_FRAME_NUMBER, CC_id);
|
||||
}
|
||||
|
||||
stop_meas (&ul_chan_stats);
|
||||
@@ -1083,7 +1090,7 @@ l2l1_task (void *args_p)
|
||||
next_slot,
|
||||
abstraction_flag,
|
||||
&PHY_vars_eNB_g[0][CC_id]->lte_frame_parms,
|
||||
frame%MAX_FRAME_NUMBER, CC_id);
|
||||
frame % MAX_FRAME_NUMBER, CC_id);
|
||||
}
|
||||
|
||||
stop_meas (&ul_chan_stats);
|
||||
@@ -1100,7 +1107,7 @@ l2l1_task (void *args_p)
|
||||
}
|
||||
}
|
||||
|
||||
if ((last_slot == 1) && ((frame%MAX_FRAME_NUMBER) == 0) && (abstraction_flag == 0)
|
||||
if ((last_slot == 1) && ((frame % MAX_FRAME_NUMBER) == 0) && (abstraction_flag == 0)
|
||||
&& (oai_emulation.info.n_frames == 1)) {
|
||||
|
||||
write_output ("dlchan0.m",
|
||||
@@ -1148,40 +1155,40 @@ l2l1_task (void *args_p)
|
||||
&&(Channel_Flag==0)
|
||||
#endif
|
||||
) {
|
||||
sprintf (fname, "UEtxsig%d.m", frame%MAX_FRAME_NUMBER);
|
||||
sprintf (vname, "txs%d", frame%MAX_FRAME_NUMBER);
|
||||
sprintf (fname, "UEtxsig%d.m", frame % MAX_FRAME_NUMBER);
|
||||
sprintf (vname, "txs%d", frame % MAX_FRAME_NUMBER);
|
||||
write_output (fname,
|
||||
vname,
|
||||
PHY_vars_UE_g[0][0]->lte_ue_common_vars.txdata[0],
|
||||
PHY_vars_UE_g[0][0]->lte_frame_parms.samples_per_tti
|
||||
* 10,
|
||||
1, 1);
|
||||
sprintf (fname, "eNBtxsig%d.m", frame%MAX_FRAME_NUMBER);
|
||||
sprintf (vname, "txs%d", frame%MAX_FRAME_NUMBER);
|
||||
sprintf (fname, "eNBtxsig%d.m", frame % MAX_FRAME_NUMBER);
|
||||
sprintf (vname, "txs%d", frame % MAX_FRAME_NUMBER);
|
||||
write_output (fname,
|
||||
vname,
|
||||
PHY_vars_eNB_g[0][0]->lte_eNB_common_vars.txdata[0][0],
|
||||
PHY_vars_UE_g[0][0]->lte_frame_parms.samples_per_tti
|
||||
* 10,
|
||||
1, 1);
|
||||
sprintf (fname, "eNBtxsigF%d.m", frame%MAX_FRAME_NUMBER);
|
||||
sprintf (vname, "txsF%d", frame%MAX_FRAME_NUMBER);
|
||||
sprintf (fname, "eNBtxsigF%d.m", frame % MAX_FRAME_NUMBER);
|
||||
sprintf (vname, "txsF%d", frame % MAX_FRAME_NUMBER);
|
||||
write_output (fname,
|
||||
vname,
|
||||
PHY_vars_eNB_g[0][0]->lte_eNB_common_vars.txdataF[0][0],
|
||||
PHY_vars_eNB_g[0][0]->lte_frame_parms.symbols_per_tti
|
||||
* PHY_vars_eNB_g[0][0]->lte_frame_parms.ofdm_symbol_size,
|
||||
1, 1);
|
||||
sprintf (fname, "UErxsig%d.m", frame%MAX_FRAME_NUMBER);
|
||||
sprintf (vname, "rxs%d", frame%MAX_FRAME_NUMBER);
|
||||
sprintf (fname, "UErxsig%d.m", frame % MAX_FRAME_NUMBER);
|
||||
sprintf (vname, "rxs%d", frame % MAX_FRAME_NUMBER);
|
||||
write_output (fname,
|
||||
vname,
|
||||
PHY_vars_UE_g[0][0]->lte_ue_common_vars.rxdata[0],
|
||||
PHY_vars_UE_g[0][0]->lte_frame_parms.samples_per_tti
|
||||
* 10,
|
||||
1, 1);
|
||||
sprintf (fname, "eNBrxsig%d.m", frame%MAX_FRAME_NUMBER);
|
||||
sprintf (vname, "rxs%d", frame%MAX_FRAME_NUMBER);
|
||||
sprintf (fname, "eNBrxsig%d.m", frame % MAX_FRAME_NUMBER);
|
||||
sprintf (vname, "rxs%d", frame % MAX_FRAME_NUMBER);
|
||||
write_output (fname,
|
||||
vname,
|
||||
PHY_vars_eNB_g[0][0]->lte_eNB_common_vars.rxdata[0][0],
|
||||
@@ -1214,7 +1221,7 @@ l2l1_task (void *args_p)
|
||||
#ifdef SMBV
|
||||
|
||||
// Rohde&Schwarz SMBV100A vector signal generator
|
||||
if ((frame%MAX_FRAME_NUMBER == config_frames[0]) || (frame%MAX_FRAME_NUMBER == config_frames[1]) || (frame%MAX_FRAME_NUMBER == config_frames[2]) || (frame%MAX_FRAME_NUMBER == config_frames[3])) {
|
||||
if ((frame % MAX_FRAME_NUMBER == config_frames[0]) || (frame % MAX_FRAME_NUMBER == config_frames[1]) || (frame % MAX_FRAME_NUMBER == config_frames[2]) || (frame % MAX_FRAME_NUMBER == config_frames[3])) {
|
||||
smbv_frame_cnt++;
|
||||
}
|
||||
|
||||
@@ -1257,6 +1264,12 @@ l2l1_task (void *args_p)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
#if T_TRACER
|
||||
int T_wait = 1; /* by default we wait for the tracer */
|
||||
int T_port = 2021; /* default port to listen to to wait for the tracer */
|
||||
int T_dont_fork = 0; /* default is to fork, see 'T_init' to understand */
|
||||
#endif
|
||||
|
||||
/*------------------------------------------------------------------------------*/
|
||||
int
|
||||
main (int argc, char **argv)
|
||||
@@ -1273,6 +1286,7 @@ main (int argc, char **argv)
|
||||
int node_id;
|
||||
int port,Process_Flag=0,wgt,Channel_Flag=0,temp;
|
||||
#endif
|
||||
|
||||
//default parameters
|
||||
oai_emulation.info.n_frames = MAX_FRAME_NUMBER; //1024; //10;
|
||||
oai_emulation.info.n_frames_flag = 0; //fixme
|
||||
@@ -1289,6 +1303,10 @@ main (int argc, char **argv)
|
||||
// get command-line options
|
||||
get_simulation_options (argc, argv); //Command-line options
|
||||
|
||||
#if T_TRACER
|
||||
T_init(T_port, T_wait, T_dont_fork);
|
||||
#endif
|
||||
|
||||
// Initialize VCD LOG module
|
||||
VCD_SIGNAL_DUMPER_INIT (oai_emulation.info.vcd_file);
|
||||
|
||||
|
||||
@@ -212,6 +212,12 @@ void get_simulation_options(int argc, char *argv[])
|
||||
|
||||
LONG_OPTION_PHYTEST,
|
||||
LONG_OPTION_XFORMS,
|
||||
|
||||
#if T_TRACER
|
||||
LONG_OPTION_T_PORT,
|
||||
LONG_OPTION_T_NOWAIT,
|
||||
LONG_OPTION_T_DONT_FORK,
|
||||
#endif
|
||||
};
|
||||
|
||||
static struct option long_options[] = {
|
||||
@@ -246,6 +252,12 @@ void get_simulation_options(int argc, char *argv[])
|
||||
{"phy-test", no_argument, NULL, LONG_OPTION_PHYTEST},
|
||||
{"xforms", no_argument, 0, LONG_OPTION_XFORMS},
|
||||
|
||||
#if T_TRACER
|
||||
{"T_port", required_argument, 0, LONG_OPTION_T_PORT},
|
||||
{"T_nowait", no_argument, 0, LONG_OPTION_T_NOWAIT},
|
||||
{"T_dont_fork", no_argument, 0, LONG_OPTION_T_DONT_FORK},
|
||||
#endif
|
||||
|
||||
{NULL, 0, NULL, 0}
|
||||
};
|
||||
|
||||
@@ -413,6 +425,27 @@ void get_simulation_options(int argc, char *argv[])
|
||||
xforms=1;
|
||||
break;
|
||||
|
||||
#if T_TRACER
|
||||
case LONG_OPTION_T_PORT: {
|
||||
extern int T_port;
|
||||
if (optarg == NULL) abort(); /* should not happen */
|
||||
T_port = atoi(optarg);
|
||||
break;
|
||||
}
|
||||
|
||||
case LONG_OPTION_T_NOWAIT: {
|
||||
extern int T_wait;
|
||||
T_wait = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
case LONG_OPTION_T_DONT_FORK: {
|
||||
extern int T_dont_fork;
|
||||
T_dont_fork = 1;
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
|
||||
case 'a':
|
||||
abstraction_flag = 1;
|
||||
break;
|
||||
|
||||
Reference in New Issue
Block a user