# OGT templated configuration file for srsUE

[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