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
Michael Black
OpenXG-RAN
Commits
1d331c0b
Commit
1d331c0b
authored
Jan 03, 2017
by
Raymond Knopp
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Changes for 20 MHz RRU (dual-thread mode)
parent
7e4e63ae
Changes
15
Hide whitespace changes
Inline
Side-by-side
Showing
15 changed files
with
142 additions
and
215 deletions
+142
-215
openair1/PHY/INIT/lte_init.c
openair1/PHY/INIT/lte_init.c
+29
-15
openair1/PHY/LTE_TRANSPORT/if4_tools.c
openair1/PHY/LTE_TRANSPORT/if4_tools.c
+9
-5
openair1/PHY/LTE_TRANSPORT/pcfich.c
openair1/PHY/LTE_TRANSPORT/pcfich.c
+1
-1
openair1/PHY/MODULATION/slot_fep_ul.c
openair1/PHY/MODULATION/slot_fep_ul.c
+9
-5
openair1/PHY/defs.h
openair1/PHY/defs.h
+1
-1
openair1/SCHED/defs.h
openair1/SCHED/defs.h
+1
-1
openair1/SCHED/phy_procedures_lte_eNb.c
openair1/SCHED/phy_procedures_lte_eNb.c
+12
-13
targets/ARCH/COMMON/common_lib.h
targets/ARCH/COMMON/common_lib.h
+2
-2
targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp
targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp
+4
-1
targets/PROJECTS/GENERIC-LTE-EPC/CONF/rru.band7.tm1.if4p5.100PRB.usrpb210.conf
...RIC-LTE-EPC/CONF/rru.band7.tm1.if4p5.100PRB.usrpb210.conf
+1
-1
targets/RT/USER/lte-enb.c
targets/RT/USER/lte-enb.c
+18
-10
targets/RT/USER/lte-softmodem.c
targets/RT/USER/lte-softmodem.c
+18
-18
targets/RT/USER/rru_if4p5_usrp.gtkw
targets/RT/USER/rru_if4p5_usrp.gtkw
+5
-119
targets/SIMU/USER/init_lte.c
targets/SIMU/USER/init_lte.c
+31
-23
targets/SIMU/USER/init_lte.h
targets/SIMU/USER/init_lte.h
+1
-0
No files found.
openair1/PHY/INIT/lte_init.c
View file @
1d331c0b
...
...
@@ -29,7 +29,7 @@
#include "LAYER2/MAC/extern.h"
#include "MBSFN-SubframeConfigList.h"
#include "UTIL/LOG/vcd_signal_dumper.h"
//
#define DEBUG_PHY
#define DEBUG_PHY
#include "assertions.h"
#include <math.h>
...
...
@@ -1219,13 +1219,22 @@ int phy_init_lte_eNB(PHY_VARS_eNB *eNB,
for
(
i
=
0
;
i
<
fp
->
nb_antennas_tx
;
i
++
)
{
if
(
eNB
->
node_function
!=
NGFI_RCC_IF4p5
)
// Allocate 10 subframes of I/Q TX signal data (time) if not
common_vars
->
txdata
[
eNB_id
][
i
]
=
(
int32_t
*
)
malloc16_clear
(
fp
->
samples_per_tti
*
10
*
sizeof
(
int32_t
)
);
common_vars
->
txdataF
[
eNB_id
][
i
]
=
(
int32_t
*
)
malloc16_clear
(
fp
->
ofdm_symbol_size
*
fp
->
symbols_per_tti
*
10
*
sizeof
(
int32_t
)
);
if
(
eNB
->
node_function
==
NGFI_RRU_IF4p5
)
// Allocate 2 subframes of I/Q signal data (frequency)
common_vars
->
txdataF
[
eNB_id
][
i
]
=
(
int32_t
*
)
malloc16_clear
(
fp
->
ofdm_symbol_size
*
fp
->
symbols_per_tti
*
2
*
sizeof
(
int32_t
)
);
else
if
(
eNB
->
node_function
!=
NGFI_RRU_IF5
)
// Allocate 10 subframes of I/Q signal data (frequency)
common_vars
->
txdataF
[
eNB_id
][
i
]
=
(
int32_t
*
)
malloc16_clear
(
fp
->
ofdm_symbol_size
*
fp
->
symbols_per_tti
*
10
*
sizeof
(
int32_t
)
);
#ifdef DEBUG_PHY
printf
(
"[openair][LTE_PHY][INIT] common_vars->txdata[%d][%d] = %p
\n
"
,
eNB_id
,
i
,
common_vars
->
txdata
[
eNB_id
][
i
]);
printf
(
"[openair][LTE_PHY][INIT] common_vars->txdataF[%d][%d] = %p (%d bytes)
\n
"
,
eNB_id
,
i
,
common_vars
->
txdataF
[
eNB_id
][
i
],
fp
->
ofdm_symbol_size
*
fp
->
symbols_per_tti
*
10
*
sizeof
(
int32_t
));
printf
(
"[openair][LTE_PHY][INIT] common_vars->txdata[%d][%d] = %p (%lu bytes)
\n
"
,
eNB_id
,
i
,
common_vars
->
txdata
[
eNB_id
][
i
],
fp
->
samples_per_tti
*
10
*
sizeof
(
int32_t
));
if
(
eNB
->
node_function
!=
NGFI_RRU_IF5
)
printf
(
"[openair][LTE_PHY][INIT] common_vars->txdataF[%d][%d] = %p (%lu bytes)
\n
"
,
eNB_id
,
i
,
common_vars
->
txdataF
[
eNB_id
][
i
],
fp
->
ofdm_symbol_size
*
fp
->
symbols_per_tti
*
(
eNB
->
node_function
==
NGFI_RRU_IF4p5
?
2
:
10
)
*
sizeof
(
int32_t
));
#endif
}
...
...
@@ -1238,18 +1247,23 @@ int phy_init_lte_eNB(PHY_VARS_eNB *eNB,
for
(
i
=
0
;
i
<
fp
->
nb_antennas_rx
;
i
++
)
{
if
(
eNB
->
node_function
!=
NGFI_RCC_IF4p5
)
{
// allocate 2 subframes of I/Q signal data (time) if not an RCC (no time-domain signals)
common_vars
->
rxdata
[
eNB_id
][
i
]
=
(
int32_t
*
)
malloc16_clear
(
fp
->
samples_per_tti
*
10
*
sizeof
(
int32_t
)
);
common_vars
->
rxdata_7_5kHz
[
eNB_id
][
i
]
=
(
int32_t
*
)
malloc16_clear
(
fp
->
samples_per_tti
*
sizeof
(
int32_t
)
);
if
(
eNB
->
node_function
!=
NGFI_RRU_IF5
)
// allocate 2 subframes of I/Q signal data (time, 7.5 kHz offset)
common_vars
->
rxdata_7_5kHz
[
eNB_id
][
i
]
=
(
int32_t
*
)
malloc16_clear
(
2
*
fp
->
samples_per_tti
*
2
*
sizeof
(
int32_t
)
);
}
common_vars
->
rxdataF
[
eNB_id
][
i
]
=
(
int32_t
*
)
malloc16_clear
(
sizeof
(
int32_t
)
*
(
fp
->
ofdm_symbol_size
*
fp
->
symbols_per_tti
)
);
if
(
eNB
->
node_function
!=
NGFI_RRU_IF5
)
// allocate 2 subframes of I/Q signal data (frequency)
common_vars
->
rxdataF
[
eNB_id
][
i
]
=
(
int32_t
*
)
malloc16_clear
(
sizeof
(
int32_t
)
*
(
2
*
fp
->
ofdm_symbol_size
*
fp
->
symbols_per_tti
)
);
#ifdef DEBUG_PHY
printf
(
"[openair][LTE_PHY][INIT] common_vars->rxdata[%d][%d] = %p
\n
"
,
eNB_id
,
i
,
common_vars
->
rxdata
[
eNB_id
][
i
]);
printf
(
"[openair][LTE_PHY][INIT] common_vars->rxdata_7_5kHz[%d][%d] = %p
\n
"
,
eNB_id
,
i
,
common_vars
->
rxdata_7_5kHz
[
eNB_id
][
i
]);
printf
(
"[openair][LTE_PHY][INIT] common_vars->rxdata[%d][%d] = %p (%lu bytes)
\n
"
,
eNB_id
,
i
,
common_vars
->
rxdata
[
eNB_id
][
i
],
fp
->
samples_per_tti
*
2
*
sizeof
(
int32_t
));
if
(
eNB
->
node_function
!=
NGFI_RRU_IF5
)
printf
(
"[openair][LTE_PHY][INIT] common_vars->rxdata_7_5kHz[%d][%d] = %p (%lu bytes)
\n
"
,
eNB_id
,
i
,
common_vars
->
rxdata_7_5kHz
[
eNB_id
][
i
],
fp
->
samples_per_tti
*
2
*
sizeof
(
int32_t
));
#endif
}
if
(
eNB
->
node_function
!=
NGFI_RRU_IF4p5
)
{
if
(
(
eNB
->
node_function
!=
NGFI_RRU_IF4p5
)
&&
(
eNB
->
node_function
!=
NGFI_RRU_IF5
)
)
{
// Channel estimates for SRS
for
(
UE_id
=
0
;
UE_id
<
NUMBER_OF_UE_MAX
;
UE_id
++
)
{
...
...
@@ -1272,7 +1286,7 @@ int phy_init_lte_eNB(PHY_VARS_eNB *eNB,
if
(
abstraction_flag
==
0
)
{
if
(
eNB
->
node_function
!=
NGFI_RRU_IF4p5
)
{
if
(
(
eNB
->
node_function
!=
NGFI_RRU_IF4p5
)
&&
(
eNB
->
node_function
!=
NGFI_RRU_IF5
)
)
{
generate_ul_ref_sigs_rx
();
// SRS
...
...
@@ -1286,7 +1300,7 @@ int phy_init_lte_eNB(PHY_VARS_eNB *eNB,
// ULSCH VARS, skip if NFGI_RRU_IF4
if
(
eNB
->
node_function
!=
NGFI_RRU_IF4p5
)
if
(
(
eNB
->
node_function
!=
NGFI_RRU_IF4p5
)
&&
(
eNB
->
node_function
!=
NGFI_RRU_IF5
)
)
prach_vars
->
prachF
=
(
int16_t
*
)
malloc16_clear
(
1024
*
2
*
sizeof
(
int16_t
)
);
/* number of elements of an array X is computed as sizeof(X) / sizeof(X[0]) */
...
...
@@ -1299,7 +1313,7 @@ int phy_init_lte_eNB(PHY_VARS_eNB *eNB,
#endif
}
if
(
eNB
->
node_function
!=
NGFI_RRU_IF4p5
)
{
if
(
(
eNB
->
node_function
!=
NGFI_RRU_IF4p5
)
&&
(
eNB
->
node_function
!=
NGFI_RRU_IF5
)
)
{
AssertFatal
(
fp
->
nb_antennas_rx
<=
sizeof
(
prach_vars
->
prach_ifft
)
/
sizeof
(
prach_vars
->
prach_ifft
[
0
]),
"nb_antennas_rx too large"
);
for
(
i
=
0
;
i
<
fp
->
nb_antennas_rx
;
i
++
)
{
...
...
openair1/PHY/LTE_TRANSPORT/if4_tools.c
View file @
1d331c0b
...
...
@@ -43,7 +43,7 @@ void send_IF4p5(PHY_VARS_eNB *eNB, int frame, int subframe, uint16_t packet_type
int32_t
**
txdataF
=
(
eNB
->
CC_id
==
0
)
?
eNB
->
common_vars
.
txdataF
[
0
]
:
PHY_vars_eNB_g
[
0
][
0
]
->
common_vars
.
txdataF
[
0
];
int32_t
**
rxdataF
=
eNB
->
common_vars
.
rxdataF
[
0
];
int16_t
**
rxsigF
=
eNB
->
prach_vars
.
rxsigF
;
void
*
tx_buffer
=
eNB
->
ifbuffer
.
tx
;
void
*
tx_buffer
=
eNB
->
ifbuffer
.
tx
[
subframe
&
1
]
;
void
*
tx_buffer_prach
=
eNB
->
ifbuffer
.
tx_prach
;
uint16_t
symbol_id
=
0
,
element_id
=
0
;
...
...
@@ -234,7 +234,7 @@ void recv_IF4p5(PHY_VARS_eNB *eNB, int *frame, int *subframe, uint16_t *packet_t
LOG_D
(
PHY
,
"DL_IF4p5: CC_id %d : frame %d, subframe %d, symbol %d
\n
"
,
eNB
->
CC_id
,
*
frame
,
*
subframe
,
*
symbol_number
);
slotoffsetF
=
(
*
symbol_number
)
*
(
fp
->
ofdm_symbol_size
)
+
(
*
subframe
)
*
(
fp
->
ofdm_symbol_size
)
*
((
fp
->
Ncp
==
1
)
?
12
:
14
)
+
1
;
slotoffsetF
=
(
*
symbol_number
)
*
(
fp
->
ofdm_symbol_size
)
+
(
(
*
subframe
)
&
1
)
*
(
fp
->
ofdm_symbol_size
)
*
((
fp
->
Ncp
==
1
)
?
12
:
14
)
+
1
;
blockoffsetF
=
slotoffsetF
+
fp
->
ofdm_symbol_size
-
db_halflength
-
1
;
for
(
element_id
=
0
;
element_id
<
db_halflength
;
element_id
++
)
{
...
...
@@ -331,12 +331,16 @@ void gen_IF4p5_prach_header(IF4p5_header_t *prach_packet, int frame, int subfram
void
malloc_IF4p5_buffer
(
PHY_VARS_eNB
*
eNB
)
{
// Keep the size large enough
eth_state_t
*
eth
=
(
eth_state_t
*
)
(
eNB
->
ifdevice
.
priv
);
int
i
;
if
(
eth
->
flags
==
ETH_RAW_IF4p5_MODE
)
{
eNB
->
ifbuffer
.
tx
=
malloc
(
RAW_IF4p5_PRACH_SIZE_BYTES
);
for
(
i
=
0
;
i
<
10
;
i
++
)
eNB
->
ifbuffer
.
tx
[
i
]
=
malloc
(
RAW_IF4p5_PRACH_SIZE_BYTES
);
eNB
->
ifbuffer
.
tx_prach
=
malloc
(
RAW_IF4p5_PRACH_SIZE_BYTES
);
eNB
->
ifbuffer
.
rx
=
malloc
(
RAW_IF4p5_PRACH_SIZE_BYTES
);
}
else
{
eNB
->
ifbuffer
.
tx
=
malloc
(
UDP_IF4p5_PRACH_SIZE_BYTES
);
}
else
{
for
(
i
=
0
;
i
<
10
;
i
++
)
eNB
->
ifbuffer
.
tx
[
i
]
=
malloc
(
UDP_IF4p5_PRACH_SIZE_BYTES
);
eNB
->
ifbuffer
.
tx_prach
=
malloc
(
UDP_IF4p5_PRACH_SIZE_BYTES
);
eNB
->
ifbuffer
.
rx
=
malloc
(
UDP_IF4p5_PRACH_SIZE_BYTES
);
}
...
...
openair1/PHY/LTE_TRANSPORT/pcfich.c
View file @
1d331c0b
...
...
@@ -191,7 +191,7 @@ void generate_pcfich(uint8_t num_pdcch_symbols,
// mapping
nsymb
=
(
frame_parms
->
Ncp
==
0
)
?
14
:
12
;
symbol_offset
=
(
uint32_t
)
frame_parms
->
ofdm_symbol_size
*
(
(
subframe
*
nsymb
)
);
symbol_offset
=
(
uint32_t
)
frame_parms
->
ofdm_symbol_size
*
(
subframe
*
nsymb
);
re_offset
=
frame_parms
->
first_carrier_offset
;
// loop over 4 quadruplets and lookup REGs
...
...
openair1/PHY/MODULATION/slot_fep_ul.c
View file @
1d331c0b
...
...
@@ -79,10 +79,10 @@ int slot_fep_ul(LTE_DL_FRAME_PARMS *frame_parms,
if
(
no_prefix
)
{
// subframe_offset = frame_parms->ofdm_symbol_size * frame_parms->symbols_per_tti * (Ns>>1);
slot_offset
=
frame_parms
->
ofdm_symbol_size
*
(
frame_parms
->
symbols_per_tti
>>
1
)
*
(
Ns
%
2
);
slot_offset
=
frame_parms
->
ofdm_symbol_size
*
(
frame_parms
->
symbols_per_tti
>>
1
)
*
(
Ns
&
1
);
}
else
{
// subframe_offset = frame_parms->samples_per_tti * (Ns>>1);
slot_offset
=
(
frame_parms
->
samples_per_tti
>>
1
)
*
(
Ns
%
2
);
slot_offset
=
(
frame_parms
->
samples_per_tti
>>
1
)
*
(
Ns
&
1
);
}
if
(
l
<
0
||
l
>=
7
-
frame_parms
->
Ncp
)
{
...
...
@@ -108,18 +108,22 @@ int slot_fep_ul(LTE_DL_FRAME_PARMS *frame_parms,
1
);
}
else
{
rx_offset
+=
(
frame_parms
->
ofdm_symbol_size
+
nb_prefix_samples
)
*
l
;
/* should never happen for eNB
if(rx_offset > (frame_length_samples - frame_parms->ofdm_symbol_size))
{
memcpy((void *)&eNB_common_vars->rxdata_7_5kHz[eNB_id][aa][frame_length_samples],
(void *)&eNB_common_vars->rxdata_7_5kHz[eNB_id][aa][0],
frame_parms->ofdm_symbol_size*sizeof(int));
}
*/
if
(
(
rx_offset
&
7
)
!=
0
){
// check for 256-bit alignment of input buffer and do DFT directly, else do via intermediate buffer
if
(
(
rx_offset
&
15
)
!=
0
){
memcpy
((
void
*
)
&
tmp_dft_in
,
(
void
*
)
&
eNB_common_vars
->
rxdata_7_5kHz
[
eNB_id
][
aa
][(
rx_offset
%
frame_length_samples
)],
frame_parms
->
ofdm_symbol_size
*
sizeof
(
int
));
(
void
*
)
&
eNB_common_vars
->
rxdata_7_5kHz
[
eNB_id
][
aa
][(
rx_offset
%
frame_length_samples
)],
frame_parms
->
ofdm_symbol_size
*
sizeof
(
int
));
dft
(
(
short
*
)
tmp_dft_in
,
(
short
*
)
&
eNB_common_vars
->
rxdataF
[
eNB_id
][
aa
][
frame_parms
->
ofdm_symbol_size
*
symbol
],
1
...
...
openair1/PHY/defs.h
View file @
1d331c0b
...
...
@@ -437,7 +437,7 @@ typedef struct PHY_VARS_eNB_s {
// indicator for master/slave (RRU)
int
is_slave
;
void
(
*
do_prach
)(
struct
PHY_VARS_eNB_s
*
eNB
,
int
frame
,
int
subframe
);
void
(
*
fep
)(
struct
PHY_VARS_eNB_s
*
eNB
);
void
(
*
fep
)(
struct
PHY_VARS_eNB_s
*
eNB
,
eNB_rxtx_proc_t
*
proc
);
int
(
*
td
)(
struct
PHY_VARS_eNB_s
*
eNB
,
int
UE_id
,
int
harq_pid
,
int
llr8_flag
);
int
(
*
te
)(
struct
PHY_VARS_eNB_s
*
,
uint8_t
*
,
uint8_t
,
LTE_eNB_DLSCH_t
*
,
int
,
uint8_t
,
time_stats_t
*
,
time_stats_t
*
,
time_stats_t
*
);
void
(
*
proc_uespec_rx
)(
struct
PHY_VARS_eNB_s
*
eNB
,
eNB_rxtx_proc_t
*
proc
,
const
relaying_type_t
r_type
);
...
...
openair1/SCHED/defs.h
View file @
1d331c0b
...
...
@@ -177,7 +177,7 @@ void phy_procedures_eNB_uespec_RX(PHY_VARS_eNB *phy_vars_eNB,eNB_rxtx_proc_t *pr
@param phy_vars_eNB Pointer to eNB variables on which to act
@param abstraction_flag Indicator of PHY abstraction
*/
void
phy_procedures_eNB_common_RX
(
PHY_VARS_eNB
*
phy_vars_eNB
);
void
phy_procedures_eNB_common_RX
(
PHY_VARS_eNB
*
phy_vars_eNB
,
eNB_rxtx_proc_t
*
proc
);
/*! \brief Scheduling for eNB TX procedures in TDD S-subframes.
@param phy_vars_eNB Pointer to eNB variables on which to act
...
...
openair1/SCHED/phy_procedures_lte_eNb.c
View file @
1d331c0b
...
...
@@ -2623,7 +2623,7 @@ void init_te_thread(PHY_VARS_eNB *eNB,pthread_attr_t *attr_te) {
}
void
eNB_fep_full_2thread
(
PHY_VARS_eNB
*
eNB
)
{
void
eNB_fep_full_2thread
(
PHY_VARS_eNB
*
eNB
,
eNB_rxtx_proc_t
*
proc_rxtx
)
{
eNB_proc_t
*
proc
=
&
eNB
->
proc
;
...
...
@@ -2669,28 +2669,27 @@ void eNB_fep_full_2thread(PHY_VARS_eNB *eNB) {
void
eNB_fep_full
(
PHY_VARS_eNB
*
eNB
)
{
void
eNB_fep_full
(
PHY_VARS_eNB
*
eNB
,
eNB_rxtx_proc_t
*
proc_rxtx
)
{
eNB_proc_t
*
proc
=
&
eNB
->
proc
;
int
l
;
LTE_DL_FRAME_PARMS
*
fp
=&
eNB
->
frame_parms
;
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_ENB_SLOT_FEP
,
1
);
start_meas
(
&
eNB
->
ofdm_demod_stats
);
remove_7_5_kHz
(
eNB
,
proc
->
subframe_rx
<<
1
);
remove_7_5_kHz
(
eNB
,
1
+
(
proc
->
subframe_rx
<<
1
));
remove_7_5_kHz
(
eNB
,
proc
_rxtx
->
subframe_rx
<<
1
);
remove_7_5_kHz
(
eNB
,
1
+
(
proc
_rxtx
->
subframe_rx
<<
1
));
for
(
l
=
0
;
l
<
fp
->
symbols_per_tti
/
2
;
l
++
)
{
slot_fep_ul
(
fp
,
&
eNB
->
common_vars
,
l
,
proc
->
subframe_rx
<<
1
,
(
proc_rxtx
->
subframe_rx
)
<<
1
,
0
,
0
);
slot_fep_ul
(
fp
,
&
eNB
->
common_vars
,
l
,
1
+
(
proc
->
subframe_rx
<<
1
),
1
+
(
(
proc_rxtx
->
subframe_rx
)
<<
1
),
0
,
0
);
...
...
@@ -2701,11 +2700,11 @@ void eNB_fep_full(PHY_VARS_eNB *eNB) {
if
(
eNB
->
node_function
==
NGFI_RRU_IF4p5
)
{
/// **** send_IF4 of rxdataF to RCC (no prach now) **** ///
send_IF4p5
(
eNB
,
proc
->
frame_rx
,
proc
->
subframe_rx
,
IF4p5_PULFFT
,
0
);
send_IF4p5
(
eNB
,
proc
_rxtx
->
frame_rx
,
proc_rxtx
->
subframe_rx
,
IF4p5_PULFFT
,
0
);
}
}
void
eNB_fep_rru_if5
(
PHY_VARS_eNB
*
eNB
)
{
void
eNB_fep_rru_if5
(
PHY_VARS_eNB
*
eNB
,
eNB_rxtx_proc_t
*
proc_rxtx
)
{
eNB_proc_t
*
proc
=&
eNB
->
proc
;
uint8_t
seqno
=
0
;
...
...
@@ -2759,14 +2758,14 @@ void do_prach(PHY_VARS_eNB *eNB,int frame,int subframe) {
}
void
phy_procedures_eNB_common_RX
(
PHY_VARS_eNB
*
eNB
){
void
phy_procedures_eNB_common_RX
(
PHY_VARS_eNB
*
eNB
,
eNB_rxtx_proc_t
*
proc
){
eNB_proc_t
*
proc
=
&
eNB
->
proc
;
//
eNB_proc_t *proc = &eNB->proc;
LTE_DL_FRAME_PARMS
*
fp
=
&
eNB
->
frame_parms
;
const
int
subframe
=
proc
->
subframe_rx
;
const
int
frame
=
proc
->
frame_rx
;
int
offset
=
eNB
->
CC_id
;
//
(eNB->single_thread_flag==1) ? 0 : (subframe&1);
int
offset
=
(
eNB
->
single_thread_flag
==
1
)
?
0
:
(
subframe
&
1
);
if
((
fp
->
frame_type
==
TDD
)
&&
(
subframe_select
(
fp
,
subframe
)
!=
SF_UL
))
return
;
...
...
@@ -2778,7 +2777,7 @@ void phy_procedures_eNB_common_RX(PHY_VARS_eNB *eNB){
LOG_D
(
PHY
,
"[eNB %d] Frame %d: Doing phy_procedures_eNB_common_RX(%d)
\n
"
,
eNB
->
Mod_id
,
frame
,
subframe
);
if
(
eNB
->
fep
)
eNB
->
fep
(
eNB
);
if
(
eNB
->
fep
)
eNB
->
fep
(
eNB
,
proc
);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_ENB_RX_COMMON
+
offset
,
0
);
}
...
...
targets/ARCH/COMMON/common_lib.h
View file @
1d331c0b
...
...
@@ -247,8 +247,8 @@ typedef struct {
typedef
struct
{
//! Tx buffer for if device
void
*
tx
;
//! Tx buffer for if device
, keep one per subframe now to allow multithreading
void
*
tx
[
10
]
;
//! Tx buffer (PRACH) for if device
void
*
tx_prach
;
//! Rx buffer for if device
...
...
targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp
View file @
1d331c0b
...
...
@@ -759,7 +759,10 @@ extern "C" {
// create tx & rx streamer
uhd
::
stream_args_t
stream_args_rx
(
"sc16"
,
"sc16"
);
//stream_args_rx.args["spp"] = str(boost::format("%d") % 2048);//(openair0_cfg[0].rx_num_channels*openair0_cfg[0].samples_per_packet));
int
samples
=
openair0_cfg
[
0
].
sample_rate
;
samples
/=
24000
;
// stream_args_rx.args["spp"] = str(boost::format("%d") % samples);
for
(
i
=
0
;
i
<
openair0_cfg
[
0
].
rx_num_channels
;
i
++
)
stream_args_rx
.
channels
.
push_back
(
i
);
s
->
rx_stream
=
s
->
usrp
->
get_rx_stream
(
stream_args_rx
);
...
...
targets/PROJECTS/GENERIC-LTE-EPC/CONF/rru.band7.tm1.if4p5.100PRB.usrpb210.conf
View file @
1d331c0b
...
...
@@ -159,7 +159,7 @@ eNBs =
rrh_gw_config
= (
{
local_if_name
=
"eth0"
;
remote_address
=
"10.10.10.
15
5"
;
remote_address
=
"10.10.10.
21
5"
;
local_address
=
"10.10.10.60"
;
local_port
=
50000
;
#for raw option local port must be the same to remote
remote_port
=
50000
;
...
...
targets/RT/USER/lte-enb.c
View file @
1d331c0b
...
...
@@ -286,7 +286,8 @@ void do_OFDM_mod_rt(int subframe,PHY_VARS_eNB *phy_vars_eNB) {
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_ENB_SFGEN
,
1
);
slot_offset_F
=
(
subframe
<<
1
)
*
slot_sizeF
;
// compute subframe modulo-2
slot_offset_F
=
((
subframe
&
1
)
<<
1
)
*
slot_sizeF
;
slot_offset
=
subframe
*
phy_vars_eNB
->
frame_parms
.
samples_per_tti
;
...
...
@@ -554,7 +555,7 @@ static inline int rxtx(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc, char *thread_nam
if
((
eNB
->
do_prach
)
&&
((
eNB
->
node_function
!=
NGFI_RCC_IF4p5
)))
eNB
->
do_prach
(
eNB
,
proc
->
frame_rx
,
proc
->
subframe_rx
);
phy_procedures_eNB_common_RX
(
eNB
);
phy_procedures_eNB_common_RX
(
eNB
,
proc
);
// UE-specific RX processing for subframe n
if
(
eNB
->
proc_uespec_rx
)
eNB
->
proc_uespec_rx
(
eNB
,
proc
,
no_relay
);
...
...
@@ -864,7 +865,7 @@ void rx_rf(PHY_VARS_eNB *eNB,int *frame,int *subframe) {
unsigned
int
rxs
,
txs
;
int
i
;
int
tx_sfoffset
=
3
;
//(eNB->single_thread_flag == 1) ? 3 : 3;
openair0_timestamp
old_ts
;
openair0_timestamp
ts
,
old_ts
;
if
(
proc
->
first_rx
==
0
)
{
...
...
@@ -878,7 +879,7 @@ void rx_rf(PHY_VARS_eNB *eNB,int *frame,int *subframe) {
txp
[
i
]
=
(
void
*
)
&
eNB
->
common_vars
.
txdata
[
0
][
i
][((
proc
->
subframe_rx
+
tx_sfoffset
)
%
10
)
*
fp
->
samples_per_tti
];
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
+
eNB
->
ts_offset
+
(
tx_sfoffset
*
fp
->
samples_per_tti
)
-
openair0_cfg
[
0
].
tx_sample_advance
,
txp
,
fp
->
samples_per_tti
,
fp
->
nb_antennas_tx
,
...
...
@@ -902,26 +903,32 @@ void rx_rf(PHY_VARS_eNB *eNB,int *frame,int *subframe) {
old_ts
=
proc
->
timestamp_rx
;
rxs
=
eNB
->
rfdevice
.
trx_read_func
(
&
eNB
->
rfdevice
,
&
(
proc
->
timestamp_rx
)
,
&
ts
,
rxp
,
fp
->
samples_per_tti
,
fp
->
nb_antennas_rx
);
proc
->
timestamp_rx
=
ts
-
eNB
->
ts_offset
;
if
(
rxs
!=
fp
->
samples_per_tti
)
LOG_E
(
PHY
,
"rx_rf: Asked for %d samples, got %d from USRP
\n
"
,
fp
->
samples_per_tti
,
rxs
);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_READ
,
0
);
if
(
proc
->
first_rx
==
1
)
if
(
proc
->
first_rx
==
1
)
{
eNB
->
ts_offset
=
proc
->
timestamp_rx
;
proc
->
timestamp_rx
=
0
;
}
else
{
if
(
proc
->
timestamp_rx
-
old_ts
!=
fp
->
samples_per_tti
)
{
LOG_I
(
PHY
,
"rx_rf: rfdevice timing drift of %d samples
\n
"
,
proc
->
timestamp_rx
-
old_ts
-
fp
->
samples_per_tti
);
eNB
->
ts_offset
+=
(
proc
->
timestamp_rx
-
old_ts
-
fp
->
samples_per_tti
);
proc
->
timestamp_rx
=
ts
-
eNB
->
ts_offset
;
}
}
proc
->
frame_rx
=
(
(
proc
->
timestamp_rx
-
eNB
->
ts_offset
)
/
(
fp
->
samples_per_tti
*
10
))
&
1023
;
proc
->
subframe_rx
=
(
(
proc
->
timestamp_rx
-
eNB
->
ts_offset
)
/
fp
->
samples_per_tti
)
%
10
;
proc
->
frame_rx
=
(
proc
->
timestamp_rx
/
(
fp
->
samples_per_tti
*
10
))
&
1023
;
proc
->
subframe_rx
=
(
proc
->
timestamp_rx
/
fp
->
samples_per_tti
)
%
10
;
proc
->
frame_rx
=
(
proc
->
frame_rx
+
proc
->
frame_offset
)
&
1023
;
proc
->
frame_tx
=
proc
->
frame_rx
;
if
(
proc
->
subframe_rx
>
5
)
proc
->
frame_tx
=
(
proc
->
frame_tx
+
1
)
&
1023
;
...
...
@@ -1860,8 +1867,8 @@ int start_rf(PHY_VARS_eNB *eNB) {
}
extern
void
eNB_fep_rru_if5
(
PHY_VARS_eNB
*
eNB
);
extern
void
eNB_fep_full
(
PHY_VARS_eNB
*
eNB
);
extern
void
eNB_fep_full_2thread
(
PHY_VARS_eNB
*
eNB
);
extern
void
eNB_fep_full
(
PHY_VARS_eNB
*
eNB
,
eNB_rxtx_proc_t
*
proc
);
extern
void
eNB_fep_full_2thread
(
PHY_VARS_eNB
*
eNB
,
eNB_rxtx_proc_t
*
proc
);
extern
void
do_prach
(
PHY_VARS_eNB
*
eNB
,
int
frame
,
int
subframe
);
void
init_eNB
(
eNB_func_t
node_function
[],
eNB_timing_t
node_timing
[],
int
nb_inst
,
eth_params_t
*
eth_params
,
int
single_thread_flag
,
int
wait_for_sync
)
{
...
...
@@ -1933,6 +1940,7 @@ void init_eNB(eNB_func_t node_function[], eNB_timing_t node_timing[],int nb_inst
}
eNB
->
rfdevice
.
host_type
=
RRH_HOST
;
eNB
->
ifdevice
.
host_type
=
RRH_HOST
;
printf
(
"loading transport interface ...
\n
"
);
ret
=
openair0_transport_load
(
&
eNB
->
ifdevice
,
&
openair0_cfg
[
CC_id
],
(
eth_params
+
CC_id
));
printf
(
"openair0_transport_init returns %d for CC_id %d
\n
"
,
ret
,
CC_id
);
if
(
ret
<
0
)
{
...
...
targets/RT/USER/lte-softmodem.c
View file @
1d331c0b
...
...
@@ -1622,35 +1622,34 @@ int main( int argc, char **argv )
PHY_vars_eNB_g
[
0
]
=
malloc
(
sizeof
(
PHY_VARS_eNB
*
));
for
(
CC_id
=
0
;
CC_id
<
MAX_NUM_CCs
;
CC_id
++
)
{
PHY_vars_eNB_g
[
0
][
CC_id
]
=
init_lte_eNB
(
frame_parms
[
CC_id
],
0
,
frame_parms
[
CC_id
]
->
Nid_cell
,
abstraction_flag
);
PHY_vars_eNB_g
[
0
][
CC_id
]
->
CC_id
=
CC_id
;
PHY_vars_eNB_g
[
0
][
CC_id
]
=
init_lte_eNB
(
frame_parms
[
CC_id
],
0
,
frame_parms
[
CC_id
]
->
Nid_cell
,
node_function
[
CC_id
],
abstraction_flag
);
PHY_vars_eNB_g
[
0
][
CC_id
]
->
ue_dl_rb_alloc
=
0x1fff
;
PHY_vars_eNB_g
[
0
][
CC_id
]
->
target_ue_dl_mcs
=
target_dl_mcs
;
PHY_vars_eNB_g
[
0
][
CC_id
]
->
ue_ul_nb_rb
=
6
;
PHY_vars_eNB_g
[
0
][
CC_id
]
->
target_ue_ul_mcs
=
target_ul_mcs
;
if
(
phy_test
==
1
)
PHY_vars_eNB_g
[
0
][
CC_id
]
->
mac_enabled
=
0
;
else
PHY_vars_eNB_g
[
0
][
CC_id
]
->
mac_enabled
=
1
;
if
(
PHY_vars_eNB_g
[
0
][
CC_id
]
->
mac_enabled
==
0
)
{
//set default parameters for testing mode
for
(
i
=
0
;
i
<
NUMBER_OF_UE_MAX
;
i
++
)
{
PHY_vars_eNB_g
[
0
][
CC_id
]
->
pusch_config_dedicated
[
i
].
betaOffset_ACK_Index
=
beta_ACK
;
PHY_vars_eNB_g
[
0
][
CC_id
]
->
pusch_config_dedicated
[
i
].
betaOffset_RI_Index
=
beta_RI
;
PHY_vars_eNB_g
[
0
][
CC_id
]
->
pusch_config_dedicated
[
i
].
betaOffset_CQI_Index
=
beta_CQI
;
PHY_vars_eNB_g
[
0
][
CC_id
]
->
scheduling_request_config
[
i
].
sr_PUCCH_ResourceIndex
=
i
;
PHY_vars_eNB_g
[
0
][
CC_id
]
->
scheduling_request_config
[
i
].
sr_ConfigIndex
=
7
+
(
i
%
3
);
PHY_vars_eNB_g
[
0
][
CC_id
]
->
scheduling_request_config
[
i
].
dsr_TransMax
=
sr_n4
;
PHY_vars_eNB_g
[
0
][
CC_id
]
->
pusch_config_dedicated
[
i
].
betaOffset_ACK_Index
=
beta_ACK
;
PHY_vars_eNB_g
[
0
][
CC_id
]
->
pusch_config_dedicated
[
i
].
betaOffset_RI_Index
=
beta_RI
;
PHY_vars_eNB_g
[
0
][
CC_id
]
->
pusch_config_dedicated
[
i
].
betaOffset_CQI_Index
=
beta_CQI
;
PHY_vars_eNB_g
[
0
][
CC_id
]
->
scheduling_request_config
[
i
].
sr_PUCCH_ResourceIndex
=
i
;
PHY_vars_eNB_g
[
0
][
CC_id
]
->
scheduling_request_config
[
i
].
sr_ConfigIndex
=
7
+
(
i
%
3
);
PHY_vars_eNB_g
[
0
][
CC_id
]
->
scheduling_request_config
[
i
].
dsr_TransMax
=
sr_n4
;
}
}
compute_prach_seq
(
&
PHY_vars_eNB_g
[
0
][
CC_id
]
->
frame_parms
.
prach_config_common
,
PHY_vars_eNB_g
[
0
][
CC_id
]
->
frame_parms
.
frame_type
,
PHY_vars_eNB_g
[
0
][
CC_id
]
->
X_u
);
PHY_vars_eNB_g
[
0
][
CC_id
]
->
frame_parms
.
frame_type
,
PHY_vars_eNB_g
[
0
][
CC_id
]
->
X_u
);
PHY_vars_eNB_g
[
0
][
CC_id
]
->
rx_total_gain_dB
=
(
int
)
rx_gain
[
CC_id
][
0
];
if
(
frame_parms
[
CC_id
]
->
frame_type
==
FDD
)
{
PHY_vars_eNB_g
[
0
][
CC_id
]
->
N_TA_offset
=
0
;
}
...
...
@@ -1663,7 +1662,7 @@ int main( int argc, char **argv )
PHY_vars_eNB_g
[
0
][
CC_id
]
->
N_TA_offset
=
624
/
4
;
}
}
NB_eNB_INST
=
1
;
NB_INST
=
1
;
...
...
@@ -1843,6 +1842,7 @@ int main( int argc, char **argv )
}
}
else
{
printf
(
"Initializing eNB threads
\n
"
);
init_eNB
(
node_function
,
node_timing
,
1
,
eth_params
,
single_thread_flag
,
wait_for_sync
);
number_of_cards
=
1
;
...
...
targets/RT/USER/rru_if4p5_usrp.gtkw
View file @
1d331c0b
[*]
[*] GTKWave Analyzer v3.3.58 (w)1999-2014 BSI
[*]
Mon Aug 1 18:43:22 2016
[*]
Tue Jan 3 00:00:25 2017
[*]
[dumpfile] "/tmp/openair_dump_eNB.vcd"
[dumpfile_mtime] "Mon
Aug 1 18:41:49 2016
"
[dumpfile_size]
22622
[savefile] "/home/
papillon
/openairinterface5g/targets/RT/USER/rru_if4p5_usrp.gtkw"
[timestart] 0
[dumpfile_mtime] "Mon
Jan 2 23:59:11 2017
"
[dumpfile_size]
93728
[savefile] "/home/
uprru1/oai
/openairinterface5g/targets/RT/USER/rru_if4p5_usrp.gtkw"
[timestart]
2349115700
0
[size] 1301 716
[pos] 309 0
*-19.793451 29983948856 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
...
...
@@ -20,7 +20,6 @@ functions.trx_write
functions.trx_write_if
functions.send_if4
functions.trx_read_if
@29
functions.recv_if4
@24
variables.trx_ts[63:0]
...
...
@@ -43,118 +42,5 @@ variables.subframe_number_TX1_eNB[63:0]
functions.phy_enb_sfgen
functions.phy_eNB_slot_fep
functions.phy_enb_prach_rx
@24
variables.dci_info[63:0]
variables.ue0_BO[63:0]
@420
variables.ue0_BSR[63:0]
variables.ue0_timing_advance[63:0]
@28
functions.macxface_initiate_ra_proc
functions.macxface_terminate_ra_proc
functions.phy_enb_ulsch_msg3
functions.macxface_SR_indication
@420
variables.ue0_SR_ENERGY[63:0]
variables.ue0_SR_THRES[63:0]
@28
functions.phy_enb_ulsch_decoding0
@24
variables.ue0_res0[63:0]
@420
variables.ue0_rssi0[63:0]
variables.ue0_MCS0[63:0]
variables.ue0_RB0[63:0]
@24
variables.ue0_ROUND0[63:0]
variables.ue0_SFN0[63:0]
@28
functions.phy_enb_ulsch_decoding1
@24
variables.ue0_res1[63:0]
@420
variables.ue0_rssi1[63:0]
variables.ue0_MCS1[63:0]
variables.ue0_RB1[63:0]
@24
variables.ue0_ROUND1[63:0]
variables.ue0_SFN1[63:0]
@28
functions.phy_enb_ulsch_decoding2
@24
variables.ue0_res2[63:0]
@420
variables.ue0_rssi2[63:0]
variables.ue0_MCS2[63:0]
variables.ue0_RB2[63:0]
@24
variables.ue0_ROUND2[63:0]
variables.ue0_SFN2[63:0]
@28
functions.phy_enb_ulsch_decoding3
@24
variables.ue0_res3[63:0]
@420
variables.ue0_rssi3[63:0]
variables.ue0_MCS3[63:0]
variables.ue0_RB3[63:0]
@24
variables.ue0_ROUND3[63:0]
variables.ue0_SFN3[63:0]
@28
functions.phy_enb_ulsch_decoding4
@420
variables.ue0_rssi4[63:0]
@24
variables.ue0_res4[63:0]
@420
variables.ue0_MCS4[63:0]
variables.ue0_RB4[63:0]
@24
variables.ue0_ROUND4[63:0]
variables.ue0_SFN4[63:0]
@28
functions.phy_enb_ulsch_decoding5
@24
variables.ue0_res5[63:0]
@420
variables.ue0_rssi5[63:0]
variables.ue0_MCS5[63:0]
variables.ue0_RB5[63:0]
@24
variables.ue0_ROUND5[63:0]
variables.ue0_SFN5[63:0]
@28
functions.phy_enb_ulsch_decoding6
@24
variables.ue0_res6[63:0]
@420
variables.ue0_rssi6[63:0]
variables.ue0_MCS6[63:0]
variables.ue0_RB6[63:0]
@24
variables.ue0_ROUND6[63:0]
variables.ue0_SFN6[63:0]
@28
functions.phy_enb_ulsch_decoding7
@24
variables.ue0_res7[63:0]
@420
variables.ue0_rssi7[63:0]
variables.ue0_MCS7[63:0]
variables.ue0_RB7[63:0]
@24
variables.ue0_ROUND7[63:0]
variables.ue0_SFN7[63:0]
@28
functions.phy_enb_prach_rx
functions.phy_eNB_dlsch_encoding
functions.phy_eNB_dlsch_modulation
functions.phy_eNB_dlsch_scrambling
functions.phy_enb_pdcch_tx
functions.phy_enb_rs_tx
functions.rrc_mac_config_req
functions.rlc_data_req
functions.udp_enb_task
[pattern_trace] 1
[pattern_trace] 0
targets/SIMU/USER/init_lte.c
View file @
1d331c0b
...
...
@@ -41,6 +41,7 @@
PHY_VARS_eNB
*
init_lte_eNB
(
LTE_DL_FRAME_PARMS
*
frame_parms
,
uint8_t
eNB_id
,
uint8_t
Nid_cell
,
eNB_func_t
node_function
,
uint8_t
abstraction_flag
)
{
...
...
@@ -54,6 +55,7 @@ PHY_VARS_eNB* init_lte_eNB(LTE_DL_FRAME_PARMS *frame_parms,
PHY_vars_eNB
->
frame_parms
.
nushift
=
PHY_vars_eNB
->
frame_parms
.
Nid_cell
%
6
;
phy_init_lte_eNB
(
PHY_vars_eNB
,
0
,
abstraction_flag
);
LOG_I
(
PHY
,
"init eNB: Node Function %d
\n
"
,
node_function
);
LOG_I
(
PHY
,
"init eNB: Nid_cell %d
\n
"
,
frame_parms
->
Nid_cell
);
LOG_I
(
PHY
,
"init eNB: frame_type %d,tdd_config %d
\n
"
,
frame_parms
->
frame_type
,
frame_parms
->
tdd_config
);
LOG_I
(
PHY
,
"init eNB: number of ue max %d number of enb max %d number of harq pid max %d
\n
"
,
...
...
@@ -61,27 +63,33 @@ PHY_VARS_eNB* init_lte_eNB(LTE_DL_FRAME_PARMS *frame_parms,
LOG_I
(
PHY
,
"init eNB: N_RB_DL %d
\n
"
,
frame_parms
->
N_RB_DL
);
LOG_I
(
PHY
,
"init eNB: prach_config_index %d
\n
"
,
frame_parms
->
prach_config_common
.
prach_ConfigInfo
.
prach_ConfigIndex
);
if
(
node_function
>=
NGFI_RRU_IF5
)
// For RRU, don't allocate DLSCH/ULSCH Transport channel buffers
return
(
PHY_vars_eNB
);
for
(
i
=
0
;
i
<
NUMBER_OF_UE_MAX
;
i
++
)
{
LOG_I
(
PHY
,
"Allocating Transport Channel Buffers for DLSCH, UE %d
\n
"
,
i
);
for
(
j
=
0
;
j
<
2
;
j
++
)
{
PHY_vars_eNB
->
dlsch
[
i
][
j
]
=
new_eNB_dlsch
(
1
,
8
,
NSOFT
,
frame_parms
->
N_RB_DL
,
abstraction_flag
);
if
(
!
PHY_vars_eNB
->
dlsch
[
i
][
j
])
{
LOG_E
(
PHY
,
"Can't get eNB dlsch structures for UE %d
\n
"
,
i
);
exit
(
-
1
);
LOG_E
(
PHY
,
"Can't get eNB dlsch structures for UE %d
\n
"
,
i
);
exit
(
-
1
);
}
else
{
LOG_D
(
PHY
,
"dlsch[%d][%d] => %p
\n
"
,
i
,
j
,
PHY_vars_eNB
->
dlsch
[
i
][
j
]);
PHY_vars_eNB
->
dlsch
[
i
][
j
]
->
rnti
=
0
;
LOG_D
(
PHY
,
"dlsch[%d][%d] => %p
\n
"
,
i
,
j
,
PHY_vars_eNB
->
dlsch
[
i
][
j
]);
PHY_vars_eNB
->
dlsch
[
i
][
j
]
->
rnti
=
0
;
}
}
LOG_I
(
PHY
,
"Allocating Transport Channel Buffer for ULSCH, UE %d
\n
"
);
PHY_vars_eNB
->
ulsch
[
1
+
i
]
=
new_eNB_ulsch
(
MAX_TURBO_ITERATIONS
,
frame_parms
->
N_RB_UL
,
abstraction_flag
);
if
(
!
PHY_vars_eNB
->
ulsch
[
1
+
i
])
{
LOG_E
(
PHY
,
"Can't get eNB ulsch structures
\n
"
);
exit
(
-
1
);
}
// this is the transmission mode for the signalling channels
// this will be overwritten with the real transmission mode by the RRC once the UE is connected
PHY_vars_eNB
->
transmission_mode
[
i
]
=
frame_parms
->
nb_antennas_tx_eNB
==
1
?
1
:
2
;
...
...
@@ -91,7 +99,7 @@ PHY_VARS_eNB* init_lte_eNB(LTE_DL_FRAME_PARMS *frame_parms,
gettimeofday
(
&
ts
,
NULL
);
PHY_vars_eNB
->
ulsch
[
1
+
i
]
->
reference_timestamp_ms
=
ts
.
tv_sec
*
1000
+
ts
.
tv_usec
/
1000
;
int
j
;
for
(
j
=
0
;
j
<
10
;
j
++
)
{
initialize
(
&
PHY_vars_eNB
->
ulsch
[
1
+
i
]
->
loc_rss_list
[
j
]);
initialize
(
&
PHY_vars_eNB
->
ulsch
[
1
+
i
]
->
loc_rssi_list
[
j
]);
...
...
@@ -99,7 +107,7 @@ PHY_VARS_eNB* init_lte_eNB(LTE_DL_FRAME_PARMS *frame_parms,
initialize
(
&
PHY_vars_eNB
->
ulsch
[
1
+
i
]
->
loc_timing_advance_list
[
j
]);
initialize
(
&
PHY_vars_eNB
->
ulsch
[
1
+
i
]
->
loc_timing_update_list
[
j
]);
}
initialize
(
&
PHY_vars_eNB
->
ulsch
[
1
+
i
]
->
tot_loc_rss_list
);
initialize
(
&
PHY_vars_eNB
->
ulsch
[
1
+
i
]
->
tot_loc_rssi_list
);
initialize
(
&
PHY_vars_eNB
->
ulsch
[
1
+
i
]
->
tot_loc_subcarrier_rss_list
);
...
...
@@ -107,37 +115,37 @@ PHY_VARS_eNB* init_lte_eNB(LTE_DL_FRAME_PARMS *frame_parms,
initialize
(
&
PHY_vars_eNB
->
ulsch
[
1
+
i
]
->
tot_loc_timing_update_list
);
#endif
}
// ULSCH for RA
PHY_vars_eNB
->
ulsch
[
0
]
=
new_eNB_ulsch
(
MAX_TURBO_ITERATIONS
,
frame_parms
->
N_RB_UL
,
abstraction_flag
);
if
(
!
PHY_vars_eNB
->
ulsch
[
0
])
{
LOG_E
(
PHY
,
"Can't get eNB ulsch structures
\n
"
);
exit
(
-
1
);
}
PHY_vars_eNB
->
dlsch_SI
=
new_eNB_dlsch
(
1
,
8
,
NSOFT
,
frame_parms
->
N_RB_DL
,
abstraction_flag
);
LOG_D
(
PHY
,
"eNB %d : SI %p
\n
"
,
eNB_id
,
PHY_vars_eNB
->
dlsch_SI
);
PHY_vars_eNB
->
dlsch_ra
=
new_eNB_dlsch
(
1
,
8
,
NSOFT
,
frame_parms
->
N_RB_DL
,
abstraction_flag
);
LOG_D
(
PHY
,
"eNB %d : RA %p
\n
"
,
eNB_id
,
PHY_vars_eNB
->
dlsch_ra
);
PHY_vars_eNB
->
dlsch_MCH
=
new_eNB_dlsch
(
1
,
8
,
NSOFT
,
frame_parms
->
N_RB_DL
,
0
);
LOG_D
(
PHY
,
"eNB %d : MCH %p
\n
"
,
eNB_id
,
PHY_vars_eNB
->
dlsch_MCH
);
PHY_vars_eNB
->
rx_total_gain_dB
=
130
;
for
(
i
=
0
;
i
<
NUMBER_OF_UE_MAX
;
i
++
)
PHY_vars_eNB
->
mu_mimo_mode
[
i
].
dl_pow_off
=
2
;
PHY_vars_eNB
->
check_for_total_transmissions
=
0
;
PHY_vars_eNB
->
check_for_MUMIMO_transmissions
=
0
;
PHY_vars_eNB
->
FULL_MUMIMO_transmissions
=
0
;
PHY_vars_eNB
->
check_for_SUMIMO_transmissions
=
0
;
PHY_vars_eNB
->
frame_parms
.
pucch_config_common
.
deltaPUCCH_Shift
=
1
;
PHY_vars_eNB
->
frame_parms
.
pucch_config_common
.
deltaPUCCH_Shift
=
1
;
return
(
PHY_vars_eNB
);
}
...
...
@@ -271,7 +279,7 @@ void init_lte_vars(LTE_DL_FRAME_PARMS *frame_parms[MAX_NUM_CCs],
PHY_vars_eNB_g
[
eNB_id
]
=
(
PHY_VARS_eNB
**
)
malloc
(
MAX_NUM_CCs
*
sizeof
(
PHY_VARS_eNB
*
));
for
(
CC_id
=
0
;
CC_id
<
MAX_NUM_CCs
;
CC_id
++
)
{
PHY_vars_eNB_g
[
eNB_id
][
CC_id
]
=
init_lte_eNB
(
frame_parms
[
CC_id
],
eNB_id
,
Nid_cell
,
abstraction_flag
);
PHY_vars_eNB_g
[
eNB_id
][
CC_id
]
=
init_lte_eNB
(
frame_parms
[
CC_id
],
eNB_id
,
Nid_cell
,
eNodeB_3GPP
,
abstraction_flag
);
PHY_vars_eNB_g
[
eNB_id
][
CC_id
]
->
Mod_id
=
eNB_id
;
PHY_vars_eNB_g
[
eNB_id
][
CC_id
]
->
CC_id
=
CC_id
;
}
...
...
targets/SIMU/USER/init_lte.h
View file @
1d331c0b
...
...
@@ -25,6 +25,7 @@
PHY_VARS_eNB
*
init_lte_eNB
(
LTE_DL_FRAME_PARMS
*
frame_parms
,
uint8_t
eNB_id
,
uint8_t
Nid_cell
,
eNB_func_t
node_function
,
uint8_t
abstraction_flag
);
PHY_VARS_UE
*
init_lte_UE
(
LTE_DL_FRAME_PARMS
*
frame_parms
,
...
...
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