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
alex037yang
OpenXG-RAN
Commits
8f730d40
Commit
8f730d40
authored
Aug 22, 2018
by
ISIP CS/NCTU
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
ISIP PCIe library for xillybus
parent
9927838e
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
55 additions
and
17 deletions
+55
-17
targets/RT/USER/lte-enb.c
targets/RT/USER/lte-enb.c
+55
-17
No files found.
targets/RT/USER/lte-enb.c
View file @
8f730d40
...
@@ -830,13 +830,39 @@ static void* eNB_thread_asynch_rxtx( void* param ) {
...
@@ -830,13 +830,39 @@ static void* eNB_thread_asynch_rxtx( void* param ) {
void
rx_rf
(
PHY_VARS_eNB
*
eNB
,
int
*
frame
,
int
*
subframe
)
{
void
rx_rf
(
PHY_VARS_eNB
*
eNB
,
int
*
frame
,
int
*
subframe
)
{
//printf("rx_rf ... \n");
eNB_proc_t
*
proc
=
&
eNB
->
proc
;
eNB_proc_t
*
proc
=
&
eNB
->
proc
;
LTE_DL_FRAME_PARMS
*
fp
=
&
eNB
->
frame_parms
;
LTE_DL_FRAME_PARMS
*
fp
=
&
eNB
->
frame_parms
;
void
*
rxp
[
fp
->
nb_antennas_rx
],
*
txp
[
fp
->
nb_antennas_tx
];
void
*
rxp
[
fp
->
nb_antennas_rx
],
*
txp
[
fp
->
nb_antennas_tx
];
unsigned
int
rxs
,
txs
;
unsigned
int
rxs
,
txs
;
int
i
;
int
i
;
int
tx_sfoffset
=
3
;
//(eNB->single_thread_flag == 1) ? 3 : 3;
int
tx_sfoffset
=
3
;
//(eNB->single_thread_flag == 1) ? 3 : 3;
#ifdef ISIP_HW
for
(
i
=
0
;
i
<
fp
->
nb_antennas_tx
;
i
++
)
txp
[
i
]
=
(
void
*
)
&
eNB
->
common_vars
.
txdata
[
0
][
i
][((
proc
->
subframe_rx
+
tx_sfoffset
)
%
10
)
*
fp
->
samples_per_tti
];
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_WRITE
,
1
);
txs
=
trx_ISIP_HW_write
(
txp
,
fp
->
samples_per_tti
,
fp
->
nb_antennas_tx
);
if
(
txs
!=
fp
->
samples_per_tti
)
{
LOG_E
(
PHY
,
"TX : Timeout (sent %d/%d)
\n
"
,
txs
,
fp
->
samples_per_tti
);
exit_fun
(
"problem transmitting samples"
);
}
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_WRITE
,
0
);
for
(
i
=
0
;
i
<
fp
->
nb_antennas_rx
;
i
++
)
rxp
[
i
]
=
(
void
*
)
&
eNB
->
common_vars
.
rxdata
[
0
][
i
][
*
subframe
*
fp
->
samples_per_tti
];
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_READ
,
1
);
rxs
=
trx_ISIP_HW_read
(
rxp
,
fp
->
samples_per_tti
,
fp
->
nb_antennas_rx
);
if
(
proc
->
first_rx
)
proc
->
timestamp_rx
=
0
;
else
proc
->
timestamp_rx
+=
fp
->
samples_per_tti
;
//get_usrp_time(&eNB->rfdevice);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_READ
,
0
);
#else
if
(
proc
->
first_rx
==
0
)
{
if
(
proc
->
first_rx
==
0
)
{
// Transmit TX buffer based on timestamp from RX
// Transmit TX buffer based on timestamp from RX
...
@@ -847,6 +873,7 @@ void rx_rf(PHY_VARS_eNB *eNB,int *frame,int *subframe) {
...
@@ -847,6 +873,7 @@ void rx_rf(PHY_VARS_eNB *eNB,int *frame,int *subframe) {
for
(
i
=
0
;
i
<
fp
->
nb_antennas_tx
;
i
++
)
for
(
i
=
0
;
i
<
fp
->
nb_antennas_tx
;
i
++
)
txp
[
i
]
=
(
void
*
)
&
eNB
->
common_vars
.
txdata
[
0
][
i
][((
proc
->
subframe_rx
+
tx_sfoffset
)
%
10
)
*
fp
->
samples_per_tti
];
txp
[
i
]
=
(
void
*
)
&
eNB
->
common_vars
.
txdata
[
0
][
i
][((
proc
->
subframe_rx
+
tx_sfoffset
)
%
10
)
*
fp
->
samples_per_tti
];
//txs = trx_ISIP_HW_write(txp,fp->samples_per_tti,fp->nb_antennas_tx);
txs
=
eNB
->
rfdevice
.
trx_write_func
(
&
eNB
->
rfdevice
,
txs
=
eNB
->
rfdevice
.
trx_write_func
(
&
eNB
->
rfdevice
,
proc
->
timestamp_rx
+
(
tx_sfoffset
*
fp
->
samples_per_tti
)
-
openair0_cfg
[
0
].
tx_sample_advance
,
proc
->
timestamp_rx
+
(
tx_sfoffset
*
fp
->
samples_per_tti
)
-
openair0_cfg
[
0
].
tx_sample_advance
,
...
@@ -865,23 +892,34 @@ void rx_rf(PHY_VARS_eNB *eNB,int *frame,int *subframe) {
...
@@ -865,23 +892,34 @@ void rx_rf(PHY_VARS_eNB *eNB,int *frame,int *subframe) {
}
}
}
}
for
(
i
=
0
;
i
<
fp
->
nb_antennas_rx
;
i
++
)
for
(
i
=
0
;
i
<
fp
->
nb_antennas_rx
;
i
++
)
rxp
[
i
]
=
(
void
*
)
&
eNB
->
common_vars
.
rxdata
[
0
][
i
][
*
subframe
*
fp
->
samples_per_tti
];
rxp
[
i
]
=
(
void
*
)
&
eNB
->
common_vars
.
rxdata
[
0
][
i
][
*
subframe
*
fp
->
samples_per_tti
];
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_READ
,
1
);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_READ
,
1
);
rxs
=
eNB
->
rfdevice
.
trx_read_func
(
&
eNB
->
rfdevice
,
rxs
=
eNB
->
rfdevice
.
trx_read_func
(
&
eNB
->
rfdevice
,
&
(
proc
->
timestamp_rx
),
&
(
proc
->
timestamp_rx
),
rxp
,
rxp
,
fp
->
samples_per_tti
,
fp
->
samples_per_tti
,
fp
->
nb_antennas_rx
);
fp
->
nb_antennas_rx
);
/*
txs = trx_ISIP_HW_write(txp,fp->samples_per_tti,fp->nb_antennas_tx);
rxs = trx_ISIP_HW_read(rxp,fp->samples_per_tti,fp->nb_antennas_rx);
*/
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_READ
,
0
);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_READ
,
0
);
#endif
#ifdef ISIP_HW
proc
->
frame_rx
=
(
proc
->
timestamp_rx
/
(
fp
->
samples_per_tti
*
10
))
&
1023
;
proc
->
frame_rx
=
(
proc
->
timestamp_rx
/
(
fp
->
samples_per_tti
*
10
))
&
1023
;
proc
->
subframe_rx
=
(
proc
->
timestamp_rx
/
fp
->
samples_per_tti
)
%
10
;
proc
->
subframe_rx
=
(
proc
->
timestamp_rx
/
fp
->
samples_per_tti
)
%
10
;
proc
->
timestamp_tx
=
proc
->
timestamp_rx
+
(
4
*
fp
->
samples_per_tti
);
proc
->
timestamp_tx
=
proc
->
timestamp_rx
+
(
3
*
fp
->
samples_per_tti
);
//proc->timestamp_rx+(4*fp->samples_per_tti);
//printf("\033[35m[ISIP_DEBUG] proc->timestamp_rx = %llu, proc->subframe_rx = %d\033[0m\n",proc->timestamp_rx,proc->subframe_rx);
// printf("trx_read <- USRP TS %llu (sf %d, first_rx %d)\n", proc->timestamp_rx,proc->subframe_rx,proc->first_rx);
// printf("trx_read <- USRP TS %llu (sf %d, first_rx %d)\n", proc->timestamp_rx,proc->subframe_rx,proc->first_rx);
#else
proc
->
frame_rx
=
(
proc
->
timestamp_rx
/
(
fp
->
samples_per_tti
*
10
))
&
1023
;
proc
->
subframe_rx
=
(
proc
->
timestamp_rx
/
fp
->
samples_per_tti
)
%
10
;
proc
->
timestamp_tx
=
proc
->
timestamp_rx
+
(
4
*
fp
->
samples_per_tti
);
//proc->timestamp_rx+(4*fp->samples_per_tti);
#endif
if
(
proc
->
first_rx
==
0
)
{
if
(
proc
->
first_rx
==
0
)
{
if
(
proc
->
subframe_rx
!=
*
subframe
){
if
(
proc
->
subframe_rx
!=
*
subframe
){
...
@@ -1240,7 +1278,7 @@ static void* eNB_thread_single( void* param ) {
...
@@ -1240,7 +1278,7 @@ static void* eNB_thread_single( void* param ) {
if
(
eNB
->
node_function
<
NGFI_RRU_IF5
)
if
(
eNB
->
node_function
<
NGFI_RRU_IF5
)
wait_system_ready
(
"Waiting for eNB application to be ready %s
\r
"
,
&
start_eNB
);
wait_system_ready
(
"Waiting for eNB application to be ready %s
\r
"
,
&
start_eNB
);
#endif
#endif
#ifndef ISIP_HW
// Start IF device if any
// Start IF device if any
if
(
eNB
->
start_if
)
if
(
eNB
->
start_if
)
if
(
eNB
->
start_if
(
eNB
)
!=
0
)
if
(
eNB
->
start_if
(
eNB
)
!=
0
)
...
@@ -1250,7 +1288,7 @@ static void* eNB_thread_single( void* param ) {
...
@@ -1250,7 +1288,7 @@ static void* eNB_thread_single( void* param ) {
if
(
eNB
->
start_rf
)
if
(
eNB
->
start_rf
)
if
(
eNB
->
start_rf
(
eNB
)
!=
0
)
if
(
eNB
->
start_rf
(
eNB
)
!=
0
)
LOG_E
(
HW
,
"Could not start the RF device
\n
"
);
LOG_E
(
HW
,
"Could not start the RF device
\n
"
);
#endif
// wakeup asnych_rxtx thread because the devices are ready at this point
// wakeup asnych_rxtx thread because the devices are ready at this point
pthread_mutex_lock
(
&
proc
->
mutex_asynch_rxtx
);
pthread_mutex_lock
(
&
proc
->
mutex_asynch_rxtx
);
proc
->
instance_cnt_asynch_rxtx
=
0
;
proc
->
instance_cnt_asynch_rxtx
=
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