#####################################################################
#                   srsUE configuration file
#####################################################################

[rf]
% if int(ue.tx_gain) > 0:
tx_gain = ${ue.tx_gain}
% endif
% if int(ue.rx_gain) > 0:
rx_gain = ${ue.rx_gain}
% endif

freq_offset = ${ue.freq_offset}

nof_antennas = ${ue.num_antennas}

% if "x300" in ue.rf_dev_args:
srate = 23.04e6
% endif

device_name = ${ue.rf_dev_type}
device_args = ${ue.rf_dev_args},${ue.rf_dev_sync}

[rat.eutra]

% if ue.get('dl_earfcn', None) != None:
dl_earfcn = ${ue.dl_earfcn}

% else:
  % if int(ue.num_carriers) == 4:
  dl_earfcn = 2850,3050,3250,3350
  % elif int(ue.num_carriers) == 2:
  dl_earfcn = 2850,3050
  % else:
  dl_earfcn = 2850
  % endif
% endif

% if float(ue.get('dl_freq', -1)) != -1:
dl_freq = ${ue.dl_freq}
% endif
% if float(ue.get('ul_freq', -1)) != -1:
ul_freq = ${ue.ul_freq}
% endif
nof_carriers = ${ue.num_carriers}

[rat.nr]
nof_carriers = ${ue.num_nr_carriers}

[pcap]
enable = ${'mac' if ue.enable_pcap else 'none'}
mac_filename = ${ue.pcap_filename}
mac_nr_filename = /tmp/ue_mac_nr.pcap
nas_filename = /tmp/ue_nas.pcap


[log]
all_level = ${ue.log_all_level}
phy_lib_level = none
all_hex_limit = 32
filename = ${ue.log_filename}
file_max_size = -1
nas_level = ${ue.log_nas_level}


[usim]
mode = soft
algo = ${ue.auth_algo}
% if ue.opc is not None:
opc  = ${ue.opc}
% endif
k    = ${ue.ki}
imsi = ${ue.imsi}
imei = 353490069873319

[rrc]
% if ue.get('rrc_release', None) != None:
release = ${ue.rrc_release}
% endif
% if ue.get('ue_category', None) != None:
ue_category = ${ue.ue_category}
% endif
% if ue.get('ue_category_dl', None) != None:
ue_category_dl = ${ue.ue_category_dl}
% endif
% if ue.get('ue_category_ul', None) != None:
ue_category_ul = ${ue.ue_category_ul}
% endif


[phy]
% if ue.rf_dev_type == 'zmq':
nof_phy_threads     = 2
% endif
% if float(ue.force_ul_amplitude) > 0:
force_ul_amplitude = ${ue.force_ul_amplitude}
% endif


[sim]
airplane_t_on_ms  = ${ue.airplane_t_on_ms}
airplane_t_off_ms = ${ue.airplane_t_off_ms}


[general]
metrics_csv_enable  = true
metrics_csv_filename = ${ue.metrics_filename}

% if ue.rf_dev_type == 'zmq':
[stack]
have_tti_time_stats = false
% endif