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
wangjie
OpenXG-RAN
Commits
03ba5582
Commit
03ba5582
authored
5 years ago
by
ivan
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
successful testing of RX path of DL and SL reception with 2 B210
parent
01913855
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
51 additions
and
31 deletions
+51
-31
openair1/PHY/LTE_UE_TRANSPORT/sldch.c
openair1/PHY/LTE_UE_TRANSPORT/sldch.c
+1
-1
openair1/PHY/LTE_UE_TRANSPORT/slsch.c
openair1/PHY/LTE_UE_TRANSPORT/slsch.c
+2
-1
targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp
targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp
+48
-29
No files found.
openair1/PHY/LTE_UE_TRANSPORT/sldch.c
View file @
03ba5582
...
...
@@ -96,7 +96,7 @@ void sldch_decoding(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,int frame_rx,int subfra
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
[
aa
>>
1
]
=
(
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
;
...
...
This diff is collapsed.
Click to expand it.
openair1/PHY/LTE_UE_TRANSPORT/slsch.c
View file @
03ba5582
...
...
@@ -885,8 +885,9 @@ void pscch_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
=
(
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
[
aa
>>
1
]
=
(
int32_t
*
)
&
ue
->
common_vars
.
rxdata
[
aa
][
0
];
}
ru_tmp
.
common
.
rxdata_7_5kHz
=
(
int32_t
**
)
rxdata_7_5kHz
;
...
...
This diff is collapsed.
Click to expand it.
targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp
View file @
03ba5582
...
...
@@ -314,32 +314,53 @@ static int trx_usrp_start(openair0_device *device) {
s
->
usrp
->
set_gpio_attr
(
"FP0"
,
"CTRL"
,
0x1f
,
0x1f
);
//set ATR register
s
->
usrp
->
set_gpio_attr
(
"FP0"
,
"ATR_RX"
,
1
<<
4
,
0x1f
);
// init recv and send streaming
uhd
::
stream_cmd_t
cmd
(
uhd
::
stream_cmd_t
::
STREAM_MODE_START_CONTINUOUS
);
LOG_I
(
PHY
,
"USRP %p: Time in secs now: %llu
\n
"
,
s
,
s
->
usrp
->
get_time_now
().
to_ticks
(
s
->
sample_rate
));
LOG_I
(
PHY
,
"USRP %p: Time in secs last pps: %llu
\n
"
,
s
,
s
->
usrp
->
get_time_last_pps
().
to_ticks
(
s
->
sample_rate
));
if
(
s
->
use_gps
==
1
||
s
->
external_time_source
==
1
)
{
s
->
wait_for_first_pps
=
1
;
cmd
.
time_spec
=
s
->
usrp
->
get_time_last_pps
()
+
uhd
::
time_spec_t
(
1.0
);
}
else
{
s
->
wait_for_first_pps
=
0
;
cmd
.
time_spec
=
s
->
usrp
->
get_time_now
()
+
uhd
::
time_spec_t
(
0.05
);
}
LOG_I
(
PHY
,
"USRP %p: Time to wakeups: %llu
\n
"
,
s
,
cmd
.
time_spec
.
to_ticks
(
s
->
sample_rate
));
cmd
.
stream_now
=
false
;
// start at constant delay
s
->
rx_stream
->
issue_stream_cmd
(
cmd
);
s
->
tx_md
.
time_spec
=
cmd
.
time_spec
+
uhd
::
time_spec_t
(
1
-
(
double
)
s
->
tx_forward_nsamps
/
s
->
sample_rate
);
s
->
tx_md
.
has_time_spec
=
true
;
s
->
tx_md
.
start_of_burst
=
true
;
s
->
tx_md
.
end_of_burst
=
false
;
s
->
rx_count
=
0
;
s
->
tx_count
=
0
;
s
->
rx_timestamp
=
0
;
// init recv and send streaming
if
(
s
==
(
usrp_state_t
*
)
device
->
priv2
)
break
;
}
uhd
::
stream_cmd_t
cmd
(
uhd
::
stream_cmd_t
::
STREAM_MODE_START_CONTINUOUS
);
cmd
.
stream_now
=
false
;
// start at constant delay
s
=
(
usrp_state_t
*
)
device
->
priv
;
if
(
s
->
use_gps
==
1
||
s
->
external_time_source
==
1
)
{
s
->
wait_for_first_pps
=
1
;
s
->
usrp
->
set_time_next_pps
(
uhd
::
time_spec_t
(
0.0
));
if
(
device
->
priv2
!=
NULL
)
{
usrp_state_t
*
s2
=
(
usrp_state_t
*
)
device
->
priv2
;
s2
->
wait_for_first_pps
=
1
;
s2
->
usrp
->
set_time_next_pps
(
uhd
::
time_spec_t
(
0.0
));
}
sleep
(
1
);
cmd
.
time_spec
=
s
->
usrp
->
get_time_last_pps
()
+
uhd
::
time_spec_t
(
1.0
);
s
->
tx_md
.
time_spec
=
cmd
.
time_spec
+
uhd
::
time_spec_t
(
1
-
(
double
)
s
->
tx_forward_nsamps
/
s
->
sample_rate
);
s
->
rx_stream
->
issue_stream_cmd
(
cmd
);
LOG_I
(
PHY
,
"USRP %p: Time to wakeups: %llu
\n
"
,
s
,
cmd
.
time_spec
.
to_ticks
(
s
->
sample_rate
));
if
(
device
->
priv2
!=
NULL
)
{
usrp_state_t
*
s2
=
(
usrp_state_t
*
)
device
->
priv2
;
uhd
::
stream_cmd_t
cmd2
(
uhd
::
stream_cmd_t
::
STREAM_MODE_START_CONTINUOUS
);
cmd2
.
stream_now
=
false
;
// start at constant delay
cmd2
.
time_spec
=
s2
->
usrp
->
get_time_last_pps
()
+
uhd
::
time_spec_t
(
1.0
);
s2
->
rx_stream
->
issue_stream_cmd
(
cmd2
);
LOG_I
(
PHY
,
"USRP %p: Time to wakeups: %llu
\n
"
,
s2
,
cmd
.
time_spec
.
to_ticks
(
s2
->
sample_rate
));
}
}
else
{
s
->
wait_for_first_pps
=
0
;
cmd
.
time_spec
=
s
->
usrp
->
get_time_now
()
+
uhd
::
time_spec_t
(
0.05
);
s
->
tx_md
.
time_spec
=
cmd
.
time_spec
+
uhd
::
time_spec_t
(
1
-
(
double
)
s
->
tx_forward_nsamps
/
s
->
sample_rate
);
s
->
rx_stream
->
issue_stream_cmd
(
cmd
);
}
#if defined(USRP_REC_PLAY)
}
#endif
...
...
@@ -582,11 +603,9 @@ static int trx_usrp_read(openair0_device *device, openair0_timestamp *ptimestamp
samples_received
=
0
;
while
(
samples_received
!=
nsamps
)
{
LOG_I
(
HW
,
"USRP %p: Receiving %d samples
\n
"
,
s
,
nsamps
);
samples_received
+=
s
->
rx_stream
->
recv
(
buff_tmp
[
board
]
+
samples_received
,
nsamps
-
samples_received
,
s
->
rx_md
);
LOG_I
(
HW
,
"USRP %p: Got %d samples @ %llu
\n
"
,
s
,
samples_received
,
s
->
rx_md
.
time_spec
.
to_ticks
(
s
->
sample_rate
));
if
((
s
->
wait_for_first_pps
==
0
)
&&
(
s
->
rx_md
.
error_code
!=
uhd
::
rx_metadata_t
::
ERROR_CODE_NONE
))
break
;
/*
...
...
@@ -1116,13 +1135,13 @@ extern "C" {
return
(
-
1
);
}
LOG_I
(
HW
,
"Found %lu USRP of type %s
\n
"
,
device_adds
.
size
(),
device_adds
[
0
].
get
(
"type"
).
c_str
());
for
(
int
i
=
0
;
i
<
device_adds
.
size
();
i
++
)
LOG_I
(
HW
,
"USRP %d: %s
\n
"
,
i
,
device_adds
[
i
].
get
(
"serial"
).
c_str
());
if
(
device_adds
[
0
].
get
(
"type"
)
==
"b200"
)
{
device
->
type
=
USRP_B200_DEV
;
usrp_master_clock
=
30.72e6
;
AssertFatal
(
device_adds
.
size
()
<
3
,
"Number of B2x0 USRP must be 1 or 2
\n
"
);
args
+=
boost
::
str
(
boost
::
format
(
",master_clock_rate=%f"
)
%
usrp_master_clock
);
args
+=
",num_send_frames=256,num_recv_frames=256, send_frame_size=7680, recv_frame_size=7680"
;
args
+=
",num_send_frames=256,num_recv_frames=256, send_frame_size=7680, recv_frame_size=7680
,serial=
"
;
}
if
(
device_adds
[
0
].
get
(
"type"
)
==
"n3xx"
)
{
...
...
@@ -1139,10 +1158,10 @@ extern "C" {
args
+=
boost
::
str
(
boost
::
format
(
",master_clock_rate=%f"
)
%
usrp_master_clock
);
}
s
->
usrp
=
uhd
::
usrp
::
multi_usrp
::
make
(
args
);
s
->
usrp
=
uhd
::
usrp
::
multi_usrp
::
make
(
args
+
device_adds
[
1
].
get
(
"serial"
).
c_str
()
);
if
(
device_adds
.
size
()
==
2
&&
device
->
type
==
USRP_B200_DEV
)
{
//allow for second instance of UHD with B2x0
s2
=
(
usrp_state_t
*
)
calloc
(
sizeof
(
usrp_state_t
),
1
);
s2
->
usrp
=
uhd
::
usrp
::
multi_usrp
::
make
(
args
);
s2
->
usrp
=
uhd
::
usrp
::
multi_usrp
::
make
(
args
+
device_adds
[
0
].
get
(
"serial"
).
c_str
()
);
}
// lock mboard clocks
if
(
openair0_cfg
[
0
].
clock_source
==
internal
&&
device_adds
.
size
()
==
1
)
{
...
...
@@ -1151,7 +1170,7 @@ extern "C" {
}
else
{
// if we set to external or if we have more than 1 USRP
s
->
usrp
->
set_clock_source
(
"external"
);
if
(
device_adds
.
size
()
==
2
&&
device
->
type
==
USRP_B200_DEV
)
s2
->
usrp
->
set_clock_source
(
"
in
ternal"
);
if
(
device_adds
.
size
()
==
2
&&
device
->
type
==
USRP_B200_DEV
)
s2
->
usrp
->
set_clock_source
(
"
ex
ternal"
);
LOG_I
(
HW
,
"Setting clock source to external
\n
"
);
}
// if we have more than 1 USRP require PPS source
...
...
@@ -1244,7 +1263,7 @@ extern "C" {
switch
((
int
)
openair0_cfg
[
0
].
sample_rate
)
{
case
30720000
:
s
->
usrp
->
set_master_clock_rate
(
30.72e6
);
if
(
device_adds
.
size
()
==
2
&&
device
->
type
==
USRP_B200_DEV
)
s
->
usrp
->
set_master_clock_rate
(
30.72e6
);
if
(
device_adds
.
size
()
==
2
&&
device
->
type
==
USRP_B200_DEV
)
s
2
->
usrp
->
set_master_clock_rate
(
30.72e6
);
//openair0_cfg[0].samples_per_packet = 1024;
openair0_cfg
[
0
].
tx_sample_advance
=
115
;
openair0_cfg
[
0
].
tx_bw
=
20e6
;
...
...
@@ -1305,8 +1324,8 @@ extern "C" {
s
->
usrp
->
set_rx_rate
(
openair0_cfg
[
0
].
sample_rate
,
i
);
s
->
usrp
->
set_rx_freq
(
openair0_cfg
[
0
].
rx_freq
[
i
],
i
);
if
(
device_adds
.
size
()
==
2
&&
device
->
type
==
USRP_B200_DEV
)
{
s
->
usrp
->
set_rx_rate
(
openair0_cfg
[
0
].
sample_rate
,
i
);
s
->
usrp
->
set_rx_freq
(
openair0_cfg
[
0
].
rx_freq
[
i
],
i
);
s
2
->
usrp
->
set_rx_rate
(
openair0_cfg
[
0
].
sample_rate
,
i
);
s
2
->
usrp
->
set_rx_freq
(
openair0_cfg
[
0
].
rx_freq
[
i
],
i
);
}
set_rx_gain_offset
(
&
openair0_cfg
[
0
],
i
,
bw_gain_adjust
);
::
uhd
::
gain_range_t
gain_range
=
s
->
usrp
->
get_rx_gain_range
(
i
);
...
...
@@ -1364,14 +1383,14 @@ extern "C" {
stream_args_rx
.
channels
.
push_back
(
i
);
s
->
rx_stream
=
s
->
usrp
->
get_rx_stream
(
stream_args_rx
);
if
(
device_adds
.
size
()
==
2
&&
device
->
type
==
USRP_B200_DEV
)
s2
->
rx_stream
=
s
->
usrp
->
get_rx_stream
(
stream_args_rx
);
if
(
device_adds
.
size
()
==
2
&&
device
->
type
==
USRP_B200_DEV
)
s2
->
rx_stream
=
s
2
->
usrp
->
get_rx_stream
(
stream_args_rx
);
uhd
::
stream_args_t
stream_args_tx
(
"sc16"
,
"sc16"
);
for
(
int
i
=
0
;
i
<
openair0_cfg
[
0
].
tx_num_channels
;
i
++
)
stream_args_tx
.
channels
.
push_back
(
i
);
s
->
tx_stream
=
s
->
usrp
->
get_tx_stream
(
stream_args_tx
);
if
(
device_adds
.
size
()
==
2
&&
device
->
type
==
USRP_B200_DEV
)
s2
->
tx_stream
=
s
->
usrp
->
get_tx_stream
(
stream_args_tx
);
if
(
device_adds
.
size
()
==
2
&&
device
->
type
==
USRP_B200_DEV
)
s2
->
tx_stream
=
s
2
->
usrp
->
get_tx_stream
(
stream_args_tx
);
/* Setting TX/RX BW after streamers are created due to USRP calibration issue */
for
(
int
i
=
0
;
i
<
s
->
usrp
->
get_tx_num_channels
()
&&
i
<
openair0_cfg
[
0
].
tx_num_channels
;
i
++
)
{
s
->
usrp
->
set_tx_bandwidth
(
openair0_cfg
[
0
].
tx_bw
,
i
);
...
...
This diff is collapsed.
Click to expand it.
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