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
lizhongxiao
OpenXG-RAN
Commits
a7b53a25
Commit
a7b53a25
authored
May 14, 2019
by
Raymond Knopp
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
handling of joint legacy UE and SL procedures, modifications to antenna mappings in USRP for SL
parent
09ff2087
Changes
6
Show whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
75 additions
and
21 deletions
+75
-21
openair1/PHY/LTE_UE_TRANSPORT/slbch.c
openair1/PHY/LTE_UE_TRANSPORT/slbch.c
+4
-1
openair1/PHY/LTE_UE_TRANSPORT/sldch.c
openair1/PHY/LTE_UE_TRANSPORT/sldch.c
+11
-1
openair1/PHY/LTE_UE_TRANSPORT/slsch.c
openair1/PHY/LTE_UE_TRANSPORT/slsch.c
+25
-4
targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp
targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp
+8
-3
targets/RT/USER/lte-ue.c
targets/RT/USER/lte-ue.c
+6
-4
targets/RT/USER/lte-uesoftmodem.c
targets/RT/USER/lte-uesoftmodem.c
+21
-8
No files found.
openair1/PHY/LTE_UE_TRANSPORT/slbch.c
View file @
a7b53a25
...
...
@@ -177,10 +177,13 @@ int rx_psbch(PHY_VARS_UE *ue,int frame_rx,int subframe_rx) {
ru_tmp
.
common
.
rxdataF
=
(
int32_t
**
)
rxdataF
;
ru_tmp
.
nb_rx
=
ue
->
frame_parms
.
nb_antennas_rx
;
int
SLaoffset
=
0
;
if
(
ue
->
SLonly
==
0
)
SLaoffset
=
1
;
// if SLonly then all antennas are SL only, else they are inteleaved with legacy RX antennas
if
(
ue
->
is_synchronizedSL
==
1
)
{
// Run front-end processing
ru_tmp
.
common
.
rxdata
=
(
int32_t
**
)
malloc16
(
ue
->
frame_parms
.
nb_antennas_rx
*
sizeof
(
int32_t
*
));
for
(
int
aa
=
0
;
aa
<
ue
->
frame_parms
.
nb_antennas_rx
;
aa
++
)
{
for
(
int
aa
=
SLaoffset
;
aa
<
(
ue
->
frame_parms
.
nb_antennas_rx
<<
SLaoffset
);
aa
+=
(
1
<<
SLaoffset
)
)
{
ru_tmp
.
common
.
rxdata
[
aa
]
=
(
int32_t
*
)
&
ue
->
common_vars
.
rxdata
[
aa
][
0
];
}
...
...
openair1/PHY/LTE_UE_TRANSPORT/sldch.c
View file @
a7b53a25
...
...
@@ -81,6 +81,9 @@ void sldch_decoding(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,int frame_rx,int subfra
if
(
ue
->
sldch_received
[
npsdch
]
>
0
)
return
;
int
SLaoffset
=
0
;
if
(
ue
->
SLonly
==
0
)
SLaoffset
=
1
;
// slot FEP
if
(
proc
->
sl_fep_done
==
0
)
{
proc
->
sl_fep_done
=
1
;
...
...
@@ -89,7 +92,12 @@ void sldch_decoding(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,int frame_rx,int subfra
memcpy
((
void
*
)
&
ru_tmp
.
frame_parms
,(
void
*
)
&
ue
->
frame_parms
,
sizeof
(
LTE_DL_FRAME_PARMS
));
ru_tmp
.
N_TA_offset
=
0
;
ru_tmp
.
common
.
rxdata
=
ue
->
common_vars
.
rxdata
;
// ru_tmp.common.rxdata = ue->common_vars.rxdata;
ru_tmp
.
common
.
rxdata
=
(
int32_t
**
)
malloc16
(
ue
->
frame_parms
.
nb_antennas_rx
*
sizeof
(
int32_t
*
));
for
(
int
aa
=
SLaoffset
;
aa
<
(
ue
->
frame_parms
.
nb_antennas_rx
<<
SLaoffset
);
aa
+=
(
1
<<
SLaoffset
))
{
ru_tmp
.
common
.
rxdata
[
aa
]
=
(
int32_t
*
)
&
ue
->
common_vars
.
rxdata
[
aa
][
0
];
}
ru_tmp
.
common
.
rxdata_7_5kHz
=
(
int32_t
**
)
rxdata_7_5kHz
;
ru_tmp
.
common
.
rxdataF
=
(
int32_t
**
)
rxdataF
;
ru_tmp
.
nb_rx
=
ue
->
frame_parms
.
nb_antennas_rx
;
...
...
@@ -97,6 +105,8 @@ void sldch_decoding(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,int frame_rx,int subfra
remove_7_5_kHz
(
&
ru_tmp
,(
subframe_rx
<<
1
));
remove_7_5_kHz
(
&
ru_tmp
,(
subframe_rx
<<
1
)
+
1
);
free
(
ru_tmp
.
common
.
rxdata
);
// extract symbols from slot
for
(
int
l
=
0
;
l
<
Nsymb
;
l
++
)
{
slot_fep_ul
(
&
ru_tmp
,
l
,(
subframe_rx
<<
1
),
0
);
...
...
openair1/PHY/LTE_UE_TRANSPORT/slsch.c
View file @
a7b53a25
...
...
@@ -874,25 +874,37 @@ void pscch_decoding(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,int frame_rx,int subfra
if
(
frame_rx
<
100
)
LOG_D
(
PHY
,
"%d.%d: Running pscch decoding slot %d, nprb %d, a %d, amod %d,N_SL_RB_SC %d
\n
"
,
frame_rx
,
subframe_rx
,
slot
,
nprb
,
a
,
amod
,
slsch
->
N_SL_RB_SC
);
// slot FEP
int
SLaoffset
=
0
;
if
(
ue
->
SLonly
==
0
)
SLaoffset
=
1
;
if
(
proc
->
sl_fep_done
==
0
)
{
RU_t
ru_tmp
;
memset
((
void
*
)
&
ru_tmp
,
0
,
sizeof
(
RU_t
));
memcpy
((
void
*
)
&
ru_tmp
.
frame_parms
,(
void
*
)
&
ue
->
frame_parms
,
sizeof
(
LTE_DL_FRAME_PARMS
));
ru_tmp
.
N_TA_offset
=
0
;
ru_tmp
.
common
.
rxdata
=
ue
->
common_vars
.
rxdata
;
// ru_tmp.common.rxdata = ue->common_vars.rxdata;
for
(
int
aa
=
SLaoffset
;
aa
<
(
ue
->
frame_parms
.
nb_antennas_rx
<<
SLaoffset
);
aa
+=
(
1
<<
SLaoffset
))
{
ru_tmp
.
common
.
rxdata
[
aa
]
=
(
int32_t
*
)
&
ue
->
common_vars
.
rxdata
[
aa
][
0
];
}
ru_tmp
.
common
.
rxdata_7_5kHz
=
(
int32_t
**
)
rxdata_7_5kHz
;
ru_tmp
.
common
.
rxdataF
=
(
int32_t
**
)
rxdataF
;
ru_tmp
.
nb_rx
=
ue
->
frame_parms
.
nb_antennas_rx
;
remove_7_5_kHz
(
&
ru_tmp
,(
subframe_rx
<<
1
)
+
slot
);
remove_7_5_kHz
(
&
ru_tmp
,(
subframe_rx
<<
1
));
remove_7_5_kHz
(
&
ru_tmp
,(
subframe_rx
<<
1
)
+
1
);
free
(
ru_tmp
.
common
.
rxdata
);
#ifdef PSCCH_DEBUG
write_output
(
"rxsig0_input.m"
,
"rxs0_in"
,
&
ue
->
common_vars
.
rxdata
[
0
][((
subframe_rx
<<
1
)
+
slot
)
*
ue
->
frame_parms
.
samples_per_tti
>>
1
],
ue
->
frame_parms
.
samples_per_tti
>>
1
,
1
,
1
);
write_output
(
"rxsig0_7_5kHz.m"
,
"rxs0_7_5kHz"
,
rxdata_7_5kHz
[
0
],
ue
->
frame_parms
.
samples_per_tti
,
1
,
1
);
#endif
for
(
int
l
=
0
;
l
<
Nsymb
;
l
++
)
slot_fep_ul
(
&
ru_tmp
,
l
,(
subframe_rx
<<
1
)
+
slot
,
0
);
for
(
int
l
=
0
;
l
<
Nsymb
;
l
++
)
{
slot_fep_ul
(
&
ru_tmp
,
l
,(
subframe_rx
<<
1
),
0
);
slot_fep_ul
(
&
ru_tmp
,
l
,(
subframe_rx
<<
1
)
+
1
,
0
);
}
proc
->
sl_fep_done
=
1
;
}
// extract symbols from slot
...
...
@@ -1240,6 +1252,9 @@ void slsch_decoding(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,int frame_rx,int subfra
LOG_D
(
PHY
,
"slsch_decoding %d.%d => lmod10 %d
\n
"
,
frame_rx
,
subframe_rx
,
ljmod10
);
int
SLaoffset
=
0
;
if
(
ue
->
SLonly
==
0
)
SLaoffset
=
1
;
// slot FEP
if
(
proc
->
sl_fep_done
==
0
)
{
proc
->
sl_fep_done
=
1
;
...
...
@@ -1248,7 +1263,11 @@ void slsch_decoding(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,int frame_rx,int subfra
memcpy
((
void
*
)
&
ru_tmp
.
frame_parms
,(
void
*
)
&
ue
->
frame_parms
,
sizeof
(
LTE_DL_FRAME_PARMS
));
ru_tmp
.
N_TA_offset
=
0
;
ru_tmp
.
common
.
rxdata
=
ue
->
common_vars
.
rxdata
;
// ru_tmp.common.rxdata = ue->common_vars.rxdata;
ru_tmp
.
common
.
rxdata
=
(
int32_t
**
)
malloc16
(
ue
->
frame_parms
.
nb_antennas_rx
*
sizeof
(
int32_t
*
));
for
(
int
aa
=
SLaoffset
;
aa
<
(
ue
->
frame_parms
.
nb_antennas_rx
<<
SLaoffset
);
aa
+=
(
1
<<
SLaoffset
))
{
ru_tmp
.
common
.
rxdata
[
aa
]
=
(
int32_t
*
)
&
ue
->
common_vars
.
rxdata
[
aa
][
0
];
}
ru_tmp
.
common
.
rxdata_7_5kHz
=
(
int32_t
**
)
rxdata_7_5kHz
;
ru_tmp
.
common
.
rxdataF
=
(
int32_t
**
)
rxdataF
;
ru_tmp
.
nb_rx
=
ue
->
frame_parms
.
nb_antennas_rx
;
...
...
@@ -1256,6 +1275,8 @@ void slsch_decoding(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,int frame_rx,int subfra
remove_7_5_kHz
(
&
ru_tmp
,(
subframe_rx
<<
1
));
remove_7_5_kHz
(
&
ru_tmp
,(
subframe_rx
<<
1
)
+
1
);
free
(
ru_tmp
.
common
.
rxdata
);
for
(
int
l
=
0
;
l
<
Nsymb
;
l
++
)
{
slot_fep_ul
(
&
ru_tmp
,
l
,(
subframe_rx
<<
1
),
0
);
if
(
l
<
Nsymb
-
1
)
// skip last symbol in second slot
...
...
targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp
View file @
a7b53a25
...
...
@@ -746,8 +746,10 @@ int trx_usrp_set_freq(openair0_device *device, openair0_config_t *openair0_cfg,
if
(
dont_block
==
1
)
pthread_create
(
&
f_thread
,
NULL
,
freq_thread
,(
void
*
)
device
);
else
{
s
->
usrp
->
set_tx_freq
(
device
->
openair0_cfg
[
0
].
tx_freq
[
0
]);
s
->
usrp
->
set_rx_freq
(
device
->
openair0_cfg
[
0
].
rx_freq
[
0
]);
for
(
int
i
=
0
;
i
<
device
->
openair0_cfg
[
0
].
tx_num_channels
;
i
++
)
s
->
usrp
->
set_tx_freq
(
device
->
openair0_cfg
[
0
].
tx_freq
[
i
],
i
);
for
(
int
i
=
0
;
i
<
device
->
openair0_cfg
[
0
].
rx_num_channels
;
i
++
)
s
->
usrp
->
set_rx_freq
(
device
->
openair0_cfg
[
0
].
rx_freq
[
i
],
i
);
}
return
(
0
);
...
...
@@ -1123,9 +1125,12 @@ extern "C" {
// lock mboard clocks
if
(
openair0_cfg
[
0
].
clock_source
==
internal
&&
device_adds
.
size
()
==
1
)
s
->
usrp
->
set_clock_source
(
"internal"
);
else
else
// if we set to external or if we have more than 1 USRP
s
->
usrp
->
set_clock_source
(
"external"
);
// if we have more than 1 USRP require PPS source
if
(
device_adds
.
size
()
>
1
)
s
->
usrp
->
set_time_source
(
"external"
);
if
(
device
->
type
==
USRP_X300_DEV
)
{
openair0_cfg
[
0
].
rx_gain_calib_table
=
calib_table_x310
;
#if defined(USRP_REC_PLAY)
...
...
targets/RT/USER/lte-ue.c
View file @
a7b53a25
...
...
@@ -528,6 +528,8 @@ static void *UE_thread_synch(void *arg)
ind
=
0
;
found
=
0
;
// this is number of RX antennas for legacy LTE operation (i.e. not sidelink)
int
nb_rx
=
UE
->
sidelink_active
==
1
?
openair0_cfg
[
UE
->
rf_map
.
card
].
rx_num_channels
:
openair0_cfg
[
UE
->
rf_map
.
card
].
rx_num_channels
>>
1
;
if
(
UE
->
UE_scan
==
0
)
{
do
{
...
...
@@ -554,7 +556,7 @@ static void *UE_thread_synch(void *arg)
LOG_I
(
PHY
,
"[SCHED][UE] Check absolute frequency DL %"
PRIu32
", UL %"
PRIu32
" (oai_exit %d, rx_num_channels %d)
\n
"
,
UE
->
frame_parms
.
dl_CarrierFreq
,
UE
->
frame_parms
.
ul_CarrierFreq
,
oai_exit
,
openair0_cfg
[
0
].
rx_num_channels
);
for
(
i
=
0
;
i
<
openair0_cfg
[
UE
->
rf_map
.
card
].
rx_num_channels
;
i
++
)
{
for
(
i
=
0
;
i
<
nb_rx
;
i
++
)
{
openair0_cfg
[
UE
->
rf_map
.
card
].
rx_freq
[
UE
->
rf_map
.
chain
+
i
]
=
UE
->
frame_parms
.
dl_CarrierFreq
;
openair0_cfg
[
UE
->
rf_map
.
card
].
tx_freq
[
UE
->
rf_map
.
chain
+
i
]
=
UE
->
frame_parms
.
ul_CarrierFreq
;
openair0_cfg
[
UE
->
rf_map
.
card
].
autocal
[
UE
->
rf_map
.
chain
+
i
]
=
1
;
...
...
@@ -569,7 +571,7 @@ static void *UE_thread_synch(void *arg)
}
else
if
(
UE
->
UE_scan
==
1
)
{
current_band
=
0
;
for
(
i
=
0
;
i
<
openair0_cfg
[
UE
->
rf_map
.
card
].
rx_num_channels
;
i
++
)
{
for
(
i
=
0
;
i
<
nb_rx
;
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
;
...
...
@@ -612,7 +614,7 @@ static void *UE_thread_synch(void *arg)
oai_exit
=
1
;
}
for
(
i
=
0
;
i
<
openair0_cfg
[
UE
->
rf_map
.
card
].
rx_num_channels
;
i
++
)
{
for
(
i
=
0
;
i
<
nb_rx
;
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
;
...
...
@@ -1094,7 +1096,7 @@ static void *UE_thread_rxn_txnp4(void *arg) {
LOG_E
(
PHY
,
"[UE %"
PRIu8
"] Frame %"
PRIu32
", subframe %u %s
\n
"
,
UE
->
Mod_id
,
proc
->
frame_rx
,
proc
->
subframe_tx
,
txt
);
}
}
}
// SLonly==1 && mac_enabled == 1
phy_procedures_UE_SL_TX
(
UE
,
proc
);
}
...
...
targets/RT/USER/lte-uesoftmodem.c
View file @
a7b53a25
...
...
@@ -552,10 +552,13 @@ void set_default_frame_parms(LTE_DL_FRAME_PARMS *frame_parms[MAX_NUM_CCs]) {
}
}
void
init_openair0
(
LTE_DL_FRAME_PARMS
*
frame_parms
,
int
rxgain
)
{
void
init_openair0
(
LTE_DL_FRAME_PARMS
*
frame_parms
,
int
rxgain
,
int
SLactive
)
{
int
card
;
int
i
;
AssertFatal
(
frame_parms
!=
NULL
,
"frame_parms is null
\n
"
);
AssertFatal
(
SLactive
==
0
||
SLactive
==
1
,
"Illegal SLactive %d
\n
"
,
SLactive
);
for
(
card
=
0
;
card
<
MAX_CARDS
;
card
++
)
{
openair0_cfg
[
card
].
mmapped_dma
=
mmapped_dma
;
openair0_cfg
[
card
].
configFilename
=
NULL
;
...
...
@@ -597,8 +600,8 @@ void init_openair0(LTE_DL_FRAME_PARMS *frame_parms,int rxgain) {
openair0_cfg
[
card
].
Mod_id
=
0
;
openair0_cfg
[
card
].
num_rb_dl
=
frame_parms
->
N_RB_DL
;
openair0_cfg
[
card
].
clock_source
=
clock_source
;
openair0_cfg
[
card
].
tx_num_channels
=
min
(
2
,
frame_parms
->
nb_antennas_tx
);
openair0_cfg
[
card
].
rx_num_channels
=
min
(
2
,
frame_parms
->
nb_antennas_rx
);
openair0_cfg
[
card
].
tx_num_channels
=
min
(
2
,
frame_parms
->
nb_antennas_tx
)
<<
SLactive
;
openair0_cfg
[
card
].
rx_num_channels
=
min
(
2
,
frame_parms
->
nb_antennas_rx
)
<<
SLactive
;
for
(
i
=
0
;
i
<
4
;
i
++
)
{
if
(
i
<
openair0_cfg
[
card
].
tx_num_channels
)
...
...
@@ -606,11 +609,20 @@ void init_openair0(LTE_DL_FRAME_PARMS *frame_parms,int rxgain) {
else
openair0_cfg
[
card
].
tx_freq
[
i
]
=
0
.
0
;
if
(
SLactive
==
0
)
{
if
(
i
<
openair0_cfg
[
card
].
rx_num_channels
)
openair0_cfg
[
card
].
rx_freq
[
i
]
=
downlink_frequency
[
0
][
i
];
else
openair0_cfg
[
card
].
rx_freq
[
i
]
=
0
.
0
;
}
else
{
// assign DL and UL frequency alternately on antenna ports if SL is active
if
(
i
<
openair0_cfg
[
card
].
rx_num_channels
)
{
if
((
i
&
2
)
==
0
)
openair0_cfg
[
card
].
rx_freq
[
i
]
=
downlink_frequency
[
0
][
i
/
2
];
else
openair0_cfg
[
card
].
rx_freq
[
i
]
=
downlink_frequency
[
0
][
i
/
2
]
+
uplink_frequency_offset
[
0
][
i
];
}
else
openair0_cfg
[
card
].
rx_freq
[
i
]
=
0
.
0
;
}
openair0_cfg
[
card
].
autocal
[
i
]
=
1
;
openair0_cfg
[
card
].
tx_gain
[
i
]
=
tx_gain
[
0
][
i
];
openair0_cfg
[
card
].
rx_gain
[
i
]
=
rxgain
-
rx_gain_off
;
...
...
@@ -728,6 +740,7 @@ int main( int argc, char **argv ) {
if
(
SLonly
==
1
||
synchRef
==
1
)
sidelink_active
=
1
;
printf
(
"Running with %d UE instances
\n
"
,
NB_UE_INST
);
if
(
NB_UE_INST
>
1
&&
simL1flag
!=
1
&&
nfapi_mode
!=
3
)
{
...
...
@@ -830,7 +843,7 @@ int main( int argc, char **argv ) {
}
}
}
else
init_openair0
(
frame_parms
[
0
],(
int
)
rx_gain
[
0
][
0
]);
else
init_openair0
(
frame_parms
[
0
],(
int
)
rx_gain
[
0
][
0
]
,(
PHY_vars_UE_g
[
0
][
0
]
->
sidelink_active
==
1
&&
PHY_vars_UE_g
[
0
][
0
]
->
SLonly
==
0
)
?
1
:
0
);
if
(
simL1flag
==
1
)
{
RCConfig_sim
();
...
...
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