Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
OpenXG-RAN
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
canghaiwuhen
OpenXG-RAN
Commits
a3c40dc3
Commit
a3c40dc3
authored
Feb 02, 2016
by
Aikaterini
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
revert lte-softmodem to previous version
parent
9b68212e
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
141 additions
and
65 deletions
+141
-65
targets/RT/USER/lte-softmodem.c
targets/RT/USER/lte-softmodem.c
+141
-65
No files found.
targets/RT/USER/lte-softmodem.c
View file @
a3c40dc3
...
...
@@ -329,7 +329,15 @@ time_stats_t softmodem_stats_rx_sf[10]; // total rx time
void
reset_opp_meas
(
void
);
void
print_opp_meas
(
void
);
int
transmission_mode
=
1
;
/*
FT: not a very clean way of managing the rescale of iqs in rx path, but this is done in
openair1/PHY/MODULATION/ul_7_5_kHz.c which doesn't have access to config parameters
to re-worked later.....
RX_IQRESCALELEN is setup in device libraries for all non expressmimo targets and acessed as an
external variable in ul_7_5_kHz.c. For expressmimo it is a macro (openair1/PHY/defs.h)
Regarding the value of this variable or macro: 18 is for 15 bits iqs, 15 is used for USRP, EXMIMO
*/
//int rxrescale;
int16_t
glog_level
=
LOG_INFO
;
int16_t
glog_verbosity
=
LOG_MED
;
...
...
@@ -361,16 +369,57 @@ int16_t osa_log_verbosity = LOG_MED;
#ifdef ETHERNET
char
rrh_eNB_ip
[
20
]
=
"127.0.0.1"
;
int
rrh_eNB_port
=
50000
;
char
*
rrh_UE_ip
=
"127.0.0.1"
;
int
rrh_UE_port
=
51000
;
#endif
/* flag given in runtime to specify if the RF head is local or remote (default option is local RF)*/
uint8_t
local_remote_RF
=
BBU_LOCAL_RF_ENABLED
;
char
uecap_xer
[
1024
],
uecap_xer_in
=
0
;
extern
void
*
UE_thread
(
void
*
arg
);
extern
void
init_UE_threads
(
void
);
/*---------------------BMC: timespec helpers -----------------------------*/
struct
timespec
min_diff_time
=
{
.
tv_sec
=
0
,
.
tv_nsec
=
0
};
struct
timespec
max_diff_time
=
{
.
tv_sec
=
0
,
.
tv_nsec
=
0
};
struct
timespec
clock_difftime
(
struct
timespec
start
,
struct
timespec
end
)
{
struct
timespec
temp
;
if
((
end
.
tv_nsec
-
start
.
tv_nsec
)
<
0
)
{
temp
.
tv_sec
=
end
.
tv_sec
-
start
.
tv_sec
-
1
;
temp
.
tv_nsec
=
1000000000
+
end
.
tv_nsec
-
start
.
tv_nsec
;
}
else
{
temp
.
tv_sec
=
end
.
tv_sec
-
start
.
tv_sec
;
temp
.
tv_nsec
=
end
.
tv_nsec
-
start
.
tv_nsec
;
}
return
temp
;
}
void
print_difftimes
()
{
#ifdef DEBUG
printf
(
"difftimes min = %lu ns ; max = %lu ns
\n
"
,
min_diff_time
.
tv_nsec
,
max_diff_time
.
tv_nsec
);
#else
LOG_I
(
HW
,
"difftimes min = %lu ns ; max = %lu ns
\n
"
,
min_diff_time
.
tv_nsec
,
max_diff_time
.
tv_nsec
);
#endif
}
void
update_difftimes
(
struct
timespec
start
,
struct
timespec
end
)
{
struct
timespec
diff_time
=
{
.
tv_sec
=
0
,
.
tv_nsec
=
0
};
int
changed
=
0
;
diff_time
=
clock_difftime
(
start
,
end
);
if
((
min_diff_time
.
tv_nsec
==
0
)
||
(
diff_time
.
tv_nsec
<
min_diff_time
.
tv_nsec
))
{
min_diff_time
.
tv_nsec
=
diff_time
.
tv_nsec
;
changed
=
1
;
}
if
((
max_diff_time
.
tv_nsec
==
0
)
||
(
diff_time
.
tv_nsec
>
max_diff_time
.
tv_nsec
))
{
max_diff_time
.
tv_nsec
=
diff_time
.
tv_nsec
;
changed
=
1
;
}
#if 1
if
(
changed
)
print_difftimes
();
#endif
}
/*------------------------------------------------------------------------*/
unsigned
int
build_rflocal
(
int
txi
,
int
txq
,
int
rxi
,
int
rxq
)
{
return
(
txi
+
(
txq
<<
6
)
+
(
rxi
<<
12
)
+
(
rxq
<<
18
));
...
...
@@ -430,7 +479,7 @@ void help (void) {
printf
(
" -h provides this help message!
\n
"
);
printf
(
" -K Generate ITTI analyzser logs (similar to wireshark logs but with more details)
\n
"
);
printf
(
" -m Set the maximum downlink MCS
\n
"
);
printf
(
" -M
IP address of RRH
\n
"
);
printf
(
" -M
Specify whether RF head is local or remote,valid options: (1: local , 2:remote)
\n
"
);
printf
(
" -O eNB configuration file (located in targets/PROJECTS/GENERIC-LTE-EPC/CONF
\n
"
);
printf
(
" -q Enable processing timing measurement of lte softmodem on per subframe basis
\n
"
);
printf
(
" -r Set the PRB, valid values: 6, 25, 50, 100
\n
"
);
...
...
@@ -947,6 +996,12 @@ void do_OFDM_mod_rt(int subframe,PHY_VARS_eNB *phy_vars_eNB)
if
(
tx_offset
>=
(
LTE_NUMBER_OF_SUBFRAMES_PER_FRAME
*
phy_vars_eNB
->
lte_frame_parms
.
samples_per_tti
))
tx_offset
-=
LTE_NUMBER_OF_SUBFRAMES_PER_FRAME
*
phy_vars_eNB
->
lte_frame_parms
.
samples_per_tti
;
((
short
*
)
&
phy_vars_eNB
->
lte_eNB_common_vars
.
txdata
[
0
][
aa
][
tx_offset
])[
0
]
=
((
short
*
)
dummy_tx_b
)[
2
*
i
]
<<
openair0_cfg
[
0
].
iq_txshift
;
((
short
*
)
&
phy_vars_eNB
->
lte_eNB_common_vars
.
txdata
[
0
][
aa
][
tx_offset
])[
1
]
=
((
short
*
)
dummy_tx_b
)[
2
*
i
+
1
]
<<
openair0_cfg
[
0
].
iq_txshift
;
/*
((short*)&phy_vars_eNB->lte_eNB_common_vars.txdata[0][aa][tx_offset])[0]=
#ifdef EXMIMO
((short*)dummy_tx_b)[2*i]<<4;
...
...
@@ -963,6 +1018,7 @@ void do_OFDM_mod_rt(int subframe,PHY_VARS_eNB *phy_vars_eNB)
#else
((short*)dummy_tx_b)[2*i+1]<<4;
#endif
*/
}
// if S-subframe switch to RX in second subframe
if
(
subframe_select
(
&
phy_vars_eNB
->
lte_frame_parms
,
subframe
)
==
SF_S
)
{
...
...
@@ -1780,7 +1836,9 @@ static void* eNB_thread( void* arg )
PHY_vars_eNB_g
[
0
][
0
]
->
lte_frame_parms
.
nb_antennas_rx
);
stop_meas
(
&
softmodem_stats_hw
);
if
(
frame
>
50
)
{
clock_gettime
(
CLOCK_MONOTONIC
,
&
trx_time1
);
}
if
(
frame
>
20
){
if
(
rxs
!=
spp
)
...
...
@@ -1790,8 +1848,6 @@ static void* eNB_thread( void* arg )
// Transmit TX buffer based on timestamp from RX
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_WRITE
,
1
);
// prepare tx buffer pointers
for
(
i
=
0
;
i
<
PHY_vars_eNB_g
[
0
][
0
]
->
lte_frame_parms
.
nb_antennas_tx
;
i
++
)
...
...
@@ -1811,16 +1867,23 @@ static void* eNB_thread( void* arg )
VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME
(
VCD_SIGNAL_DUMPER_VARIABLES_TRX_TST
,
(
timestamp
+
(
openair0_cfg
[
card
].
tx_delay
*
spp
)
-
openair0_cfg
[
card
].
tx_forward_nsamps
)
&
0xffffffff
);
stop_meas
(
&
softmodem_stats_mt
);
if
(
frame
>
50
)
{
clock_gettime
(
CLOCK_MONOTONIC
,
&
trx_time2
);
// BMC: compute time between rx and tx
update_difftimes
(
trx_time1
,
trx_time2
);
}
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_WRITE
,
0
);
#else
// USRP_DEBUG is active
rt_sleep_ns
(
1000000
);
#endif
/* FT configurable tx lauch delay (in slots )*/
if
((
tx_launched
==
0
)
&&
(
rx_pos
>=
(((
2
*
hw_subframe
)
+
1
)
*
PHY_vars_eNB_g
[
0
][
0
]
->
lte_frame_parms
.
samples_per_tti
>>
1
)))
{
((
openair0_cfg
[
card
].
txlaunch_wait
==
0
)
||
((
openair0_cfg
[
card
].
txlaunch_wait
==
1
)
&&
(
rx_pos
>=
(((
2
*
hw_subframe
)
+
openair0_cfg
[
card
].
txlaunch_wait_slotcount
)
*
PHY_vars_eNB_g
[
0
][
0
]
->
lte_frame_parms
.
samples_per_tti
>>
1
)))))
{
tx_launched
=
1
;
for
(
CC_id
=
0
;
CC_id
<
MAX_NUM_CCs
;
CC_id
++
)
{
...
...
@@ -1981,6 +2044,9 @@ eNB_thread_cleanup:
#endif
eNB_thread_status
=
0
;
print_difftimes
();
return
&
eNB_thread_status
;
}
...
...
@@ -1992,8 +2058,8 @@ static void get_options (int argc, char **argv)
int
c
;
// char line[1000];
// int l;
int
k
,
i
,
j
;
//,j,k;
#if defined(OAI_USRP) || defined(CPRIGW)
int
k
,
i
;
//,j,k;
#if defined(OAI_USRP) || defined(CPRIGW)
//#ifndef EXMIMO?
int
clock_src
;
#endif
int
CC_id
;
...
...
@@ -2112,9 +2178,7 @@ static void get_options (int argc, char **argv)
break
;
case
'M'
:
#ifdef ETHERNET
strcpy
(
rrh_eNB_ip
,
optarg
);
#endif
local_remote_RF
=
atoi
(
optarg
);
break
;
case
'C'
:
...
...
@@ -2243,7 +2307,7 @@ static void get_options (int argc, char **argv)
break
;
case
's'
:
#if defined(OAI_USRP) || defined(CPRIGW)
#if defined(OAI_USRP) || defined(CPRIGW)
//#ifndef EXMIMO
clock_src
=
atoi
(
optarg
);
...
...
@@ -2342,21 +2406,6 @@ static void get_options (int argc, char **argv)
"lte-softmodem compiled with MAX_NUM_CCs=%d, but only %d CCs configured for eNB %d!"
,
MAX_NUM_CCs
,
enb_properties
->
properties
[
i
]
->
nb_cc
,
i
);
for
(
j
=
0
;
j
<
enb_properties
->
properties
[
i
]
->
nb_rrh_gw
;
j
++
)
{
if
(
enb_properties
->
properties
[
i
]
->
rrh_gw_config
[
j
].
active
==
1
){
// replace printf by setting
printf
(
"
\n\t
RRH GW %d config for eNB %u:
\n\n
"
,
j
,
i
);
printf
(
"
\t
interface name :
\t
%s:
\n
"
,
enb_properties
->
properties
[
i
]
->
rrh_gw_if_name
);
printf
(
"
\t
local address :
\t
%s:
\n
"
,
enb_properties
->
properties
[
i
]
->
rrh_gw_config
[
j
].
local_address
);
printf
(
"
\t
local port :
\t
%d:
\n
"
,
enb_properties
->
properties
[
i
]
->
rrh_gw_config
[
j
].
local_port
);
printf
(
"
\t
remote address :
\t
%s:
\n
"
,
enb_properties
->
properties
[
i
]
->
rrh_gw_config
[
j
].
remote_address
);
printf
(
"
\t
remote port :
\t
%d:
\n
"
,
enb_properties
->
properties
[
i
]
->
rrh_gw_config
[
j
].
remote_port
);
printf
(
"
\t
transport :
\t
%s Ethernet:
\n\n
"
,(
enb_properties
->
properties
[
i
]
->
rrh_gw_config
[
j
].
raw
==
1
)
?
"RAW"
:
"UDP"
);
}
}
for
(
CC_id
=
0
;
CC_id
<
MAX_NUM_CCs
;
CC_id
++
)
{
frame_parms
[
CC_id
]
->
frame_type
=
enb_properties
->
properties
[
i
]
->
frame_type
[
CC_id
];
frame_parms
[
CC_id
]
->
tdd_config
=
enb_properties
->
properties
[
i
]
->
tdd_config
[
CC_id
];
...
...
@@ -2861,6 +2910,11 @@ int main( int argc, char **argv )
for
(
card
=
0
;
card
<
MAX_CARDS
;
card
++
)
{
#ifdef EXMIMO
/* FT: for all other devices the iq_txshift value is setup in the device library */
openair0_cfg
[
card
].
iq_txshift
=
4
;
#endif
if
(
frame_parms
[
0
]
->
N_RB_DL
==
100
)
{
sample_rate
=
30.72e6
;
bw
=
10.0e6
;
...
...
@@ -2871,8 +2925,8 @@ int main( int argc, char **argv )
openair0_cfg
[
card
].
tx_bw
=
10e6
;
openair0_cfg
[
card
].
rx_bw
=
10e6
;
// from usrp_time_offset
openair0_cfg
[
card
].
tx_forward_nsamps
=
175
;
openair0_cfg
[
card
].
tx_delay
=
8
;
//
openair0_cfg[card].tx_forward_nsamps = 175;
//
openair0_cfg[card].tx_delay = 8;
#endif
}
else
if
(
frame_parms
[
0
]
->
N_RB_DL
==
50
)
{
sample_rate
=
15.36e6
;
...
...
@@ -2883,8 +2937,8 @@ int main( int argc, char **argv )
openair0_cfg
[
card
].
samples_per_frame
=
153600
;
openair0_cfg
[
card
].
tx_bw
=
5e6
;
openair0_cfg
[
card
].
rx_bw
=
5e6
;
openair0_cfg
[
card
].
tx_forward_nsamps
=
95
;
openair0_cfg
[
card
].
tx_delay
=
5
;
//
openair0_cfg[card].tx_forward_nsamps = 95;
//
openair0_cfg[card].tx_delay = 5;
#endif
}
else
if
(
frame_parms
[
0
]
->
N_RB_DL
==
25
)
{
sample_rate
=
7.68e6
;
...
...
@@ -2896,12 +2950,14 @@ int main( int argc, char **argv )
openair0_cfg
[
card
].
rx_bw
=
2.5e6
;
openair0_cfg
[
card
].
samples_per_packet
=
1024
;
#ifdef OAI_USRP
openair0_cfg
[
card
].
tx_forward_nsamps
=
70
;
openair0_cfg
[
card
].
tx_delay
=
5
;
#elif OAI_BLADERF
openair0_cfg
[
card
].
tx_forward_nsamps
=
0
;
openair0_cfg
[
card
].
tx_delay
=
8
;
// openair0_cfg[card].tx_forward_nsamps = 70;
//openair0_cfg[card].tx_delay = 5;
#endif
//#elif OAI_BLADERF
//openair0_cfg[card].tx_forward_nsamps = 0;
//openair0_cfg[card].tx_delay = 8;
//#endif
#endif
}
else
if
(
frame_parms
[
0
]
->
N_RB_DL
==
6
)
{
sample_rate
=
1.92e6
;
...
...
@@ -2912,16 +2968,26 @@ int main( int argc, char **argv )
openair0_cfg
[
card
].
samples_per_frame
=
19200
;
openair0_cfg
[
card
].
tx_bw
=
1.5e6
;
openair0_cfg
[
card
].
rx_bw
=
1.5e6
;
openair0_cfg
[
card
].
tx_forward_nsamps
=
40
;
openair0_cfg
[
card
].
tx_delay
=
8
;
//
openair0_cfg[card].tx_forward_nsamps = 40;
//
openair0_cfg[card].tx_delay = 8;
#endif
}
#ifdef ETHERNET
//calib needed
openair0_cfg
[
card
].
tx_delay
=
0
;
//openair0_cfg[card].remote_addr = "192.168.12.242";
//openair0_cfg[card].remote_addr = "127.0.0.1";
openair0_cfg
[
card
].
remote_addr
=
"74:d4:35:cc:88:45"
;
openair0_cfg
[
card
].
remote_port
=
50000
;
//openair0_cfg[card].my_addr = "192.168.12.31";
//openair0_cfg[card].my_addr = "127.0.0.1";
openair0_cfg
[
card
].
my_addr
=
"d4:be:d9:22:0a:ac"
;
openair0_cfg
[
card
].
my_port
=
50000
;
//openair0_cfg[card].my_port = 50001;
openair0_cfg
[
card
].
tx_delay
=
10
;
openair0_cfg
[
card
].
tx_forward_nsamps
=
0
;
openair0_cfg
[
card
].
txlaunch_wait
=
0
;
openair0_cfg
[
card
].
txlaunch_wait_slotcount
=
0
;
if
(
frame_parms
[
0
]
->
N_RB_DL
==
6
)
openair0_cfg
[
card
].
samples_per_packet
=
256
;
...
...
@@ -2934,23 +3000,20 @@ int main( int argc, char **argv )
#ifndef EXMIMO
openair0_cfg
[
card
].
samples_per_packet
=
openair0_cfg
[
0
].
samples_per_packet
;
openair0_cfg
[
card
].
num_rb_dl
=
frame_parms
[
0
]
->
N_RB_DL
;
#endif
printf
(
"HW: Configuring card %d, nb_antennas_tx/rx %d/%d
\n
"
,
card
,
((
UE_flag
==
0
)
?
PHY_vars_eNB_g
[
0
][
0
]
->
lte_frame_parms
.
nb_antennas_tx
:
PHY_vars_UE_g
[
0
][
0
]
->
lte_frame_parms
.
nb_antennas_tx
),
((
UE_flag
==
0
)
?
PHY_vars_eNB_g
[
0
][
0
]
->
lte_frame_parms
.
nb_antennas_rx
:
PHY_vars_UE_g
[
0
][
0
]
->
lte_frame_parms
.
nb_antennas_rx
));
openair0_cfg
[
card
].
Mod_id
=
0
;
#ifdef ETHERNET
#ifdef ETHERNET
/*do we need to separate ue and enb????*/
if
(
UE_flag
)
{
printf
(
"ETHERNET: Configuring UE ETH for %s:%d
\n
"
,
rrh_UE_ip
,
rrh_UE_port
);
openair0_cfg
[
card
].
remote_
ip
=
&
rrh_UE_ip
[
0
];
openair0_cfg
[
card
].
remote_
addr
=
&
rrh_UE_ip
[
0
];
openair0_cfg
[
card
].
remote_port
=
rrh_UE_port
;
}
else
{
printf
(
"ETHERNET: Configuring eNB ETH for %s:%d
\n
"
,
rrh_eNB_ip
,
rrh_eNB_port
);
openair0_cfg
[
card
].
remote_ip
=
&
rrh_eNB_ip
[
0
];
openair0_cfg
[
card
].
remote_port
=
rrh_eNB_port
;
}
openair0_cfg
[
card
].
num_rb_dl
=
frame_parms
[
0
]
->
N_RB_DL
;
#endif
openair0_cfg
[
card
].
sample_rate
=
sample_rate
;
openair0_cfg
[
card
].
tx_bw
=
bw
;
...
...
@@ -3003,17 +3066,35 @@ openair0_cfg[card].num_rb_dl=frame_parms[0]->N_RB_DL;
#endif
}
openair0
.
func_type
=
BBU_FUNC
;
/* device host type is set*/
openair0
.
host_type
=
BBU_HOST
;
/* device type is initialized NONE_DEV (no RF device) when the RF device will be initiated device type will be set */
openair0
.
type
=
NONE_DEV
;
/* transport type is initialized NONE_TP (no transport protocol) when the transport protocol will be initiated transport protocol type will be set */
openair0
.
transp_type
=
NONE_TP
;
openair0_cfg
[
0
].
log_level
=
glog_level
;
/* BBU can either have local or remote radio heads - local radio head option is set by default so the corresponding device is initiated */
if
((
mode
!=
loop_through_memory
)
&&
(
openair0_device_
init
(
&
openair0
,
&
openair0_cfg
[
0
])
<
0
))
{
(
openair0_device_
load
(
&
openair0
,
&
openair0_cfg
[
0
])
<
0
))
{
printf
(
"Exiting, cannot initialize device
\n
"
);
exit
(
-
1
);
}
else
if
(
mode
==
loop_through_memory
)
{
}
/* radio heads are remote so the trasnsport protocol is initiated */
if
(
local_remote_RF
==
BBU_REMOTE_RF_ENABLED
)
{
if
((
mode
!=
loop_through_memory
)
&&
(
openair0_transport_load
(
&
openair0
,
&
openair0_cfg
[
0
])
<
0
))
{
printf
(
"Exiting, cannot initialize transport protocol
\n
"
);
exit
(
-
1
);
}
else
if
(
mode
==
loop_through_memory
)
{
}
}
//for EXMIMO
//openair0_cfg[0].iq_rxrescale=15; /* default value if build with EXMIMO */
//rxrescale=openair0_cfg[0].iq_rxrescale; /* see comments near RX_IQRESCALELEN definition */
printf
(
"Done
\n
"
);
...
...
@@ -3432,7 +3513,6 @@ openair0_cfg[card].num_rb_dl=frame_parms[0]->N_RB_DL;
if
(
multi_thread
>
0
)
{
printf
(
"Killing eNB processing threads
\n
"
);
kill_eNB_proc
();
}
}
...
...
@@ -3524,10 +3604,6 @@ int setup_eNB_buffers(PHY_VARS_eNB **phy_vars_eNB, openair0_config_t *openair0_c
#endif
// replace RX signal buffers with mmaped HW versions
#ifdef EXMIMO
openair0_cfg
[
CC_id
].
tx_num_channels
=
0
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment