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
20fd3906
Commit
20fd3906
authored
Jun 20, 2018
by
Rajeev Gangula
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
UAV BS TDD old version.
parent
1fcf4479
Changes
17
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
17 changed files
with
920 additions
and
369 deletions
+920
-369
common/utils/T/T_messages.txt
common/utils/T/T_messages.txt
+19
-0
openair1/PHY/LTE_ESTIMATION/lte_eNB_measurements.c
openair1/PHY/LTE_ESTIMATION/lte_eNB_measurements.c
+4
-4
openair1/PHY/LTE_TRANSPORT/dci.c
openair1/PHY/LTE_TRANSPORT/dci.c
+1
-0
openair1/PHY/LTE_TRANSPORT/dci_tools.c
openair1/PHY/LTE_TRANSPORT/dci_tools.c
+11
-0
openair1/PHY/LTE_TRANSPORT/ulsch_decoding.c
openair1/PHY/LTE_TRANSPORT/ulsch_decoding.c
+5
-4
openair1/PHY/MODULATION/ofdm_mod.c
openair1/PHY/MODULATION/ofdm_mod.c
+1
-1
openair1/PHY/defs.h
openair1/PHY/defs.h
+20
-1
openair1/PHY/vars.h
openair1/PHY/vars.h
+2
-1
openair1/SCHED/phy_procedures_lte_eNb.c
openair1/SCHED/phy_procedures_lte_eNb.c
+31
-8
openair2/LAYER2/MAC/eNB_scheduler_dlsch.c
openair2/LAYER2/MAC/eNB_scheduler_dlsch.c
+2
-0
openair2/LAYER2/MAC/eNB_scheduler_primitives.c
openair2/LAYER2/MAC/eNB_scheduler_primitives.c
+1
-0
openair2/LAYER2/MAC/eNB_scheduler_ulsch.c
openair2/LAYER2/MAC/eNB_scheduler_ulsch.c
+11
-1
openair2/LAYER2/MAC/pre_processor.c
openair2/LAYER2/MAC/pre_processor.c
+9
-3
openair2/RRC/LITE/rrc_eNB.c
openair2/RRC/LITE/rrc_eNB.c
+372
-309
targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp
targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp
+85
-11
targets/RT/USER/lte-enb.c
targets/RT/USER/lte-enb.c
+344
-24
targets/RT/USER/lte-softmodem.c
targets/RT/USER/lte-softmodem.c
+2
-2
No files found.
common/utils/T/T_messages.txt
View file @
20fd3906
...
@@ -111,6 +111,20 @@ ID = ENB_MAC_UE_DL_PDU_WITH_DATA
...
@@ -111,6 +111,20 @@ ID = ENB_MAC_UE_DL_PDU_WITH_DATA
DESC = MAC downlink PDU for an UE
DESC = MAC downlink PDU for an UE
GROUP = ALL:MAC:ENB
GROUP = ALL:MAC:ENB
FORMAT = int,eNB_ID : int,CC_id : int,rnti : int,frame : int,subframe : int,harq_pid : buffer,data
FORMAT = int,eNB_ID : int,CC_id : int,rnti : int,frame : int,subframe : int,harq_pid : buffer,data
ID = ENB_TPC_DLSCH
DESC = MAC TPC PUCCH command
GROUP = ALL:MAC:ENB
FORMAT = int,frame : int,subframe : int,rnti : int,tpc : int,tpc_accumulated : int,normalized_rx_power : int,target_rx_power
ID = ENB_TPC_ULSCH
DESC = MAC TPC PUSCH command
GROUP = ALL:MAC:ENB
FORMAT = int,frame : int,subframe : int,rnti : int,tpc : int,tpc_accumulated : int,normalized_rx_power : int,target_rx_power
ID = ENB_TPC_ULSCH_PHR
DESC = MAC PHR Report
GROUP = ALL:MAC:ENB
FORMAT = int,UE_id : int,PHR
#RLC logs
#RLC logs
ID = ENB_RLC_DL
ID = ENB_RLC_DL
...
@@ -253,6 +267,11 @@ ID = ENB_RRC_UNKNOW_MESSAGE
...
@@ -253,6 +267,11 @@ ID = ENB_RRC_UNKNOW_MESSAGE
DESC = RRC unknown message
DESC = RRC unknown message
GROUP = ALL:RRC:ENB
GROUP = ALL:RRC:ENB
FORMAT = int,eNB_ID : int,frame : int,subframe : int,rnti
FORMAT = int,eNB_ID : int,frame : int,subframe : int,rnti
ID = ENB_RRC_RSRP
DESC = RSRP Measurements
GROUP = ALL:RRC:ENB
FORMAT = int,rnti : int,RSRP
#legacy logs
#legacy logs
ID = LEGACY_MAC_INFO
ID = LEGACY_MAC_INFO
...
...
openair1/PHY/LTE_ESTIMATION/lte_eNB_measurements.c
View file @
20fd3906
...
@@ -120,7 +120,7 @@ void lte_eNB_srs_measurements(PHY_VARS_eNB *eNB,
...
@@ -120,7 +120,7 @@ void lte_eNB_srs_measurements(PHY_VARS_eNB *eNB,
PHY_MEASUREMENTS_eNB
*
measurements
=
&
eNB
->
measurements
[
eNB_id
];
PHY_MEASUREMENTS_eNB
*
measurements
=
&
eNB
->
measurements
[
eNB_id
];
LTE_eNB_SRS
*
srs_vars
=
&
eNB
->
srs_vars
[
UE_id
];
LTE_eNB_SRS
*
srs_vars
=
&
eNB
->
srs_vars
[
UE_id
];
int32_t
aarx
,
rx_power_correction
;
int32_t
aarx
,
rx_power_correction
=
1
;
int32_t
rx_power
;
int32_t
rx_power
;
uint32_t
rb
;
uint32_t
rb
;
int32_t
*
ul_ch
;
int32_t
*
ul_ch
;
...
@@ -132,13 +132,13 @@ void lte_eNB_srs_measurements(PHY_VARS_eNB *eNB,
...
@@ -132,13 +132,13 @@ void lte_eNB_srs_measurements(PHY_VARS_eNB *eNB,
rx_power
=
0
;
rx_power
=
0
;
/*
if ( (frame_parms->ofdm_symbol_size == 128) ||
if ( (frame_parms->ofdm_symbol_size == 128) ||
(frame_parms->ofdm_symbol_size == 512) )
(frame_parms->ofdm_symbol_size == 512) )
rx_power_correction = 2;
rx_power_correction = 2;
else
else
rx_power_correction = 1;
rx_power_correction = 1;
*/
for
(
aarx
=
0
;
aarx
<
frame_parms
->
nb_antennas_rx
;
aarx
++
)
{
for
(
aarx
=
0
;
aarx
<
frame_parms
->
nb_antennas_rx
;
aarx
++
)
{
...
@@ -157,7 +157,7 @@ void lte_eNB_srs_measurements(PHY_VARS_eNB *eNB,
...
@@ -157,7 +157,7 @@ void lte_eNB_srs_measurements(PHY_VARS_eNB *eNB,
measurements
->
wideband_cqi
[
UE_id
][
aarx
]
=
measurements
->
rx_spatial_power
[
UE_id
][
0
][
aarx
];
measurements
->
wideband_cqi
[
UE_id
][
aarx
]
=
measurements
->
rx_spatial_power
[
UE_id
][
0
][
aarx
];
//LOG_I(PHY,"lte_eNB_srs_measurements: UE %d, ant %d, CQI %d dB\n",UE_id,aarx,measurements->wideband_cqi[UE_id][aarx]);
// measurements->rx_power[UE_id][aarx]/=frame_parms->nb_antennas_tx;
// measurements->rx_power[UE_id][aarx]/=frame_parms->nb_antennas_tx;
measurements
->
wideband_cqi_dB
[
UE_id
][
aarx
]
=
(
unsigned
short
)
dB_fixed
(
measurements
->
wideband_cqi
[
UE_id
][
aarx
]);
measurements
->
wideband_cqi_dB
[
UE_id
][
aarx
]
=
(
unsigned
short
)
dB_fixed
(
measurements
->
wideband_cqi
[
UE_id
][
aarx
]);
...
...
openair1/PHY/LTE_TRANSPORT/dci.c
View file @
20fd3906
...
@@ -2149,6 +2149,7 @@ uint8_t generate_dci_top(uint8_t num_ue_spec_dci,
...
@@ -2149,6 +2149,7 @@ uint8_t generate_dci_top(uint8_t num_ue_spec_dci,
dci_alloc
[
i
].
dci_pdu
);
dci_alloc
[
i
].
dci_pdu
);
dump_dci
(
frame_parms
,
&
dci_alloc
[
i
]);
dump_dci
(
frame_parms
,
&
dci_alloc
[
i
]);
#endif
#endif
dump_dci
(
frame_parms
,
&
dci_alloc
[
i
]);
if
(
dci_alloc
[
i
].
firstCCE
>=
0
)
{
if
(
dci_alloc
[
i
].
firstCCE
>=
0
)
{
e_ptr
=
generate_dci0
(
dci_alloc
[
i
].
dci_pdu
,
e_ptr
=
generate_dci0
(
dci_alloc
[
i
].
dci_pdu
,
...
...
openair1/PHY/LTE_TRANSPORT/dci_tools.c
View file @
20fd3906
...
@@ -2852,6 +2852,17 @@ int dump_dci(LTE_DL_FRAME_PARMS *frame_parms, DCI_ALLOC_t *dci)
...
@@ -2852,6 +2852,17 @@ int dump_dci(LTE_DL_FRAME_PARMS *frame_parms, DCI_ALLOC_t *dci)
break
;
break
;
case
25
:
case
25
:
/*printf("DCI format0 (TDD1-6, 5MHz), rnti %x (%x): hopping %d, rb_alloc %x, mcs %d, ndi %d, TPC %d, cshift %d, dai %d, cqi_req %d\n",
dci->rnti,
((uint32_t*)&dci->dci_pdu[0])[0],
((DCI0_5MHz_TDD_1_6_t *)&dci->dci_pdu[0])->hopping,
((DCI0_5MHz_TDD_1_6_t *)&dci->dci_pdu[0])->rballoc,
((DCI0_5MHz_TDD_1_6_t *)&dci->dci_pdu[0])->mcs,
((DCI0_5MHz_TDD_1_6_t *)&dci->dci_pdu[0])->ndi,
((DCI0_5MHz_TDD_1_6_t *)&dci->dci_pdu[0])->TPC,
((DCI0_5MHz_TDD_1_6_t *)&dci->dci_pdu[0])->cshift,
((DCI0_5MHz_TDD_1_6_t *)&dci->dci_pdu[0])->dai,
((DCI0_5MHz_TDD_1_6_t *)&dci->dci_pdu[0])->cqi_req);*/
LOG_D
(
PHY
,
"DCI format0 (TDD1-6, 5MHz), rnti %x (%x): hopping %d, rb_alloc %x, mcs %d, ndi %d, TPC %d, cshift %d, dai %d, cqi_req %d
\n
"
,
LOG_D
(
PHY
,
"DCI format0 (TDD1-6, 5MHz), rnti %x (%x): hopping %d, rb_alloc %x, mcs %d, ndi %d, TPC %d, cshift %d, dai %d, cqi_req %d
\n
"
,
dci
->
rnti
,
dci
->
rnti
,
((
uint32_t
*
)
&
dci
->
dci_pdu
[
0
])[
0
],
((
uint32_t
*
)
&
dci
->
dci_pdu
[
0
])[
0
],
...
...
openair1/PHY/LTE_TRANSPORT/ulsch_decoding.c
View file @
20fd3906
...
@@ -914,8 +914,9 @@ unsigned int ulsch_decoding(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,
...
@@ -914,8 +914,9 @@ unsigned int ulsch_decoding(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,
G
=
nb_rb
*
(
12
*
Q_m
)
*
ulsch_harq
->
Nsymb_pusch
;
G
=
nb_rb
*
(
12
*
Q_m
)
*
ulsch_harq
->
Nsymb_pusch
;
#ifdef DEBUG_ULSCH_DECODING
//#ifdef DEBUG_ULSCH_DECODING
printf
(
"ulsch_decoding (Nid_cell %d, rnti %x, x2 %x): round %d, RV %d, mcs %d, O_RI %d, O_ACK %d, G %d, subframe %d
\n
"
,
if
(
ulsch_harq
->
mcs
>
4
)
printf
(
"ulsch_decoding (Nid_cell %d, rnti %x, x2 %x): round %d, RV %d, mcs %d, O_RI %d, O_ACK %d, G %d, %d.%d harq %d Or1 %d nb_rb %d
\n
"
,
frame_parms
->
Nid_cell
,
ulsch
->
rnti
,
x2
,
frame_parms
->
Nid_cell
,
ulsch
->
rnti
,
x2
,
ulsch_harq
->
round
,
ulsch_harq
->
round
,
ulsch_harq
->
rvidx
,
ulsch_harq
->
rvidx
,
...
@@ -923,8 +924,8 @@ unsigned int ulsch_decoding(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,
...
@@ -923,8 +924,8 @@ unsigned int ulsch_decoding(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,
ulsch_harq
->
O_RI
,
ulsch_harq
->
O_RI
,
ulsch_harq
->
O_ACK
,
ulsch_harq
->
O_ACK
,
G
,
G
,
subframe
);
proc
->
frame_rx
,
subframe
,
harq_pid
,
ulsch_harq
->
Or1
,
nb_rb
);
#endif
//
#endif
if
(
ulsch_harq
->
round
==
0
)
{
if
(
ulsch_harq
->
round
==
0
)
{
// This is a new packet, so compute quantities regarding segmentation
// This is a new packet, so compute quantities regarding segmentation
...
...
openair1/PHY/MODULATION/ofdm_mod.c
View file @
20fd3906
...
@@ -297,7 +297,7 @@ void do_OFDM_mod_symbol(LTE_eNB_COMMON *eNB_common_vars, int eNB_id, uint16_t ne
...
@@ -297,7 +297,7 @@ void do_OFDM_mod_symbol(LTE_eNB_COMMON *eNB_common_vars, int eNB_id, uint16_t ne
slot_offsetF
=
(
next_slot
)
*
(
frame_parms
->
ofdm_symbol_size
)
*
((
frame_parms
->
Ncp
==
EXTENDED
)
?
6
:
7
);
slot_offsetF
=
(
next_slot
)
*
(
frame_parms
->
ofdm_symbol_size
)
*
((
frame_parms
->
Ncp
==
EXTENDED
)
?
6
:
7
);
//printf("Thread %d starting ... aa %d (%llu)\n",omp_get_thread_num(),aa,rdtsc());
//printf("Thread %d starting ... aa %d (%llu)\n",omp_get_thread_num(),aa,rdtsc());
for
(
l
=
0
;
l
<
frame_parms
->
symbols_per_tti
>>
1
;
l
++
)
{
for
(
l
=
0
;
l
<
frame_parms
->
symbols_per_tti
>>
1
;
l
++
)
{
if
(
PHY_vars_eNB_g
[
0
][
0
]
->
proc
.
frame_tx
==
0
)
LOG_I
(
PHY
,
"Generating symbol %d for slot %d
\n
"
,
l
,
next_slot
);
//
if (PHY_vars_eNB_g[0][0]->proc.frame_tx==0) LOG_I(PHY,"Generating symbol %d for slot %d\n",l,next_slot);
for
(
aa
=
0
;
aa
<
frame_parms
->
nb_antennas_tx
;
aa
++
)
{
for
(
aa
=
0
;
aa
<
frame_parms
->
nb_antennas_tx
;
aa
++
)
{
//printf("do_OFDM_mod_l, slot=%d, l=%d, NUMBER_OF_OFDM_CARRIERS=%d,OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES=%d\n",next_slot, l,NUMBER_OF_OFDM_CARRIERS,OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES);
//printf("do_OFDM_mod_l, slot=%d, l=%d, NUMBER_OF_OFDM_CARRIERS=%d,OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES=%d\n",next_slot, l,NUMBER_OF_OFDM_CARRIERS,OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES);
...
...
openair1/PHY/defs.h
View file @
20fd3906
...
@@ -188,11 +188,15 @@ typedef struct {
...
@@ -188,11 +188,15 @@ typedef struct {
}
PHY_VARS_RN
;
}
PHY_VARS_RN
;
/// Context data structure for RX/TX portion of subframe processing
/// Context data structure for RX/TX portion of subframe processing
typedef
struct
{
typedef
struct
eNB_rxtx_proc_t_s
{
/// Component Carrier index
/// Component Carrier index
uint8_t
CC_id
;
uint8_t
CC_id
;
/// timestamp transmitted to HW
/// timestamp transmitted to HW
openair0_timestamp
timestamp_tx
;
openair0_timestamp
timestamp_tx
;
//Now timestamp_rx is stored in proc, before it was a common variable in eNB struct
openair0_timestamp
timestamp_rx
;
//Now offset is stored in proc, before it was a common variable in eNB struct
openair0_timestamp
ts_offset
;
/// subframe to act upon for transmission
/// subframe to act upon for transmission
int
subframe_tx
;
int
subframe_tx
;
/// subframe to act upon for reception
/// subframe to act upon for reception
...
@@ -216,6 +220,11 @@ typedef struct {
...
@@ -216,6 +220,11 @@ typedef struct {
struct
sched_param
sched_param_rxtx
;
struct
sched_param
sched_param_rxtx
;
}
eNB_rxtx_proc_t
;
}
eNB_rxtx_proc_t
;
typedef
struct
{
struct
eNB_proc_t_s
*
argeNBProc
;
struct
eNB_rxtx_proc_t_s
*
argeNBproc_rxtx
;
}
enB_thread_params
;
typedef
struct
{
typedef
struct
{
struct
PHY_VARS_eNB_s
*
eNB
;
struct
PHY_VARS_eNB_s
*
eNB
;
int
UE_id
;
int
UE_id
;
...
@@ -240,6 +249,8 @@ typedef struct eNB_proc_t_s {
...
@@ -240,6 +249,8 @@ typedef struct eNB_proc_t_s {
openair0_timestamp
timestamp_rx
;
openair0_timestamp
timestamp_rx
;
/// timestamp to send to "slave rru"
/// timestamp to send to "slave rru"
openair0_timestamp
timestamp_tx
;
openair0_timestamp
timestamp_tx
;
//Now offset is stored in proc, before it was a common variable in eNB struct
openair0_timestamp
ts_offset
;
/// subframe to act upon for reception
/// subframe to act upon for reception
int
subframe_rx
;
int
subframe_rx
;
/// subframe to act upon for transmission
/// subframe to act upon for transmission
...
@@ -278,6 +289,9 @@ typedef struct eNB_proc_t_s {
...
@@ -278,6 +289,9 @@ typedef struct eNB_proc_t_s {
pthread_t
pthread_FH
;
pthread_t
pthread_FH
;
/// pthread structure for eNB single processing thread
/// pthread structure for eNB single processing thread
pthread_t
pthread_single
;
pthread_t
pthread_single
;
/// pthread structure for eNB two threads
pthread_t
pthread_odd
;
pthread_t
pthread_even
;
/// pthread structure for asychronous RX/TX processing thread
/// pthread structure for asychronous RX/TX processing thread
pthread_t
pthread_asynch_rxtx
;
pthread_t
pthread_asynch_rxtx
;
/// flag to indicate first RX acquisition
/// flag to indicate first RX acquisition
...
@@ -342,6 +356,10 @@ typedef struct eNB_proc_t_s {
...
@@ -342,6 +356,10 @@ typedef struct eNB_proc_t_s {
pthread_cond_t
cond_asynch_rxtx
;
pthread_cond_t
cond_asynch_rxtx
;
/// mutex for parallel fep thread
/// mutex for parallel fep thread
pthread_mutex_t
mutex_fep
;
pthread_mutex_t
mutex_fep
;
/// Mutex locks for rf read, enb RX func, Tx process+write
pthread_mutex_t
mutex_rxRf
;
pthread_mutex_t
mutex_rxnew
;
pthread_mutex_t
mutex_txnew
;
/// mutex for parallel turbo-decoder thread
/// mutex for parallel turbo-decoder thread
pthread_mutex_t
mutex_td
;
pthread_mutex_t
mutex_td
;
/// mutex for parallel turbo-encoder thread
/// mutex for parallel turbo-encoder thread
...
@@ -436,6 +454,7 @@ typedef struct PHY_VARS_eNB_s {
...
@@ -436,6 +454,7 @@ typedef struct PHY_VARS_eNB_s {
module_id_t
Mod_id
;
module_id_t
Mod_id
;
uint8_t
CC_id
;
uint8_t
CC_id
;
eNB_proc_t
proc
;
eNB_proc_t
proc
;
eNB_proc_t
proc_new
[
2
];
eNB_func_t
node_function
;
eNB_func_t
node_function
;
eNB_timing_t
node_timing
;
eNB_timing_t
node_timing
;
eth_params_t
*
eth_params
;
eth_params_t
*
eth_params
;
...
...
openair1/PHY/vars.h
View file @
20fd3906
...
@@ -102,7 +102,8 @@ double sinr_to_cqi[4][16]= { {-2.5051, -2.5051, -1.7451, -0.3655, 1.0812, 2.4012
...
@@ -102,7 +102,8 @@ double sinr_to_cqi[4][16]= { {-2.5051, -2.5051, -1.7451, -0.3655, 1.0812, 2.4012
};
};
//int cqi_to_mcs[16]={0, 0, 1, 3, 5, 7, 9, 13, 15, 16, 20, 23, 25, 27, 27, 27};
//int cqi_to_mcs[16]={0, 0, 1, 3, 5, 7, 9, 13, 15, 16, 20, 23, 25, 27, 27, 27};
int
cqi_to_mcs
[
16
]
=
{
0
,
0
,
1
,
2
,
4
,
6
,
8
,
11
,
13
,
16
,
18
,
20
,
23
,
25
,
27
,
28
};
//int cqi_to_mcs[16]= {0, 0, 1, 2, 4, 6, 8, 11, 13, 16, 18, 20, 23, 25, 27, 28};
int
cqi_to_mcs
[
16
]
=
{
0
,
0
,
1
,
2
,
4
,
6
,
8
,
11
,
13
,
16
,
18
,
20
,
23
,
25
,
25
,
25
};
//for SNR to MI conversion 7 th order Polynomial coeff
//for SNR to MI conversion 7 th order Polynomial coeff
double
q_qam16
[
8
]
=
{
3.21151853033897e-10
,
5.55435952230651e-09
,
-
2.30760065362117e-07
,
-
6.25587743817859e-06
,
4.62251036452795e-06
,
0
.
00224150
813158937
,
0
.
03
93723140344367
,
0
.
245486379182639
};
double
q_qam16
[
8
]
=
{
3.21151853033897e-10
,
5.55435952230651e-09
,
-
2.30760065362117e-07
,
-
6.25587743817859e-06
,
4.62251036452795e-06
,
0
.
00224150
813158937
,
0
.
03
93723140344367
,
0
.
245486379182639
};
...
...
openair1/SCHED/phy_procedures_lte_eNb.c
View file @
20fd3906
...
@@ -497,7 +497,7 @@ void common_signal_procedures (PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc) {
...
@@ -497,7 +497,7 @@ void common_signal_procedures (PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc) {
// generate Cell-Specific Reference Signals for both slots
// generate Cell-Specific Reference Signals for both slots
if
(
eNB
->
abstraction_flag
==
0
)
{
if
(
eNB
->
abstraction_flag
==
0
)
{
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_ENB_RS_TX
,
1
);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_ENB_RS_TX
,
1
);
if
(
frame
==
0
)
LOG_I
(
PHY
,
"Generating RS for slot %d
\n
"
,
subframe
<<
1
);
//
if (frame==0) LOG_I(PHY,"Generating RS for slot %d\n",subframe<<1);
generate_pilots_slot
(
eNB
,
generate_pilots_slot
(
eNB
,
txdataF
,
txdataF
,
AMP
,
AMP
,
...
@@ -599,7 +599,7 @@ void common_signal_procedures (PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc) {
...
@@ -599,7 +599,7 @@ void common_signal_procedures (PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc) {
if
((
fp
->
frame_type
==
TDD
)
&&
if
((
fp
->
frame_type
==
TDD
)
&&
(
eNB
->
abstraction_flag
==
0
)){
(
eNB
->
abstraction_flag
==
0
)){
if
(
frame
==
0
)
LOG_I
(
PHY
,
"Generating SSS for slot %d
\n
"
,
1
+
(
subframe
<<
1
));
//
if (frame==0) LOG_I(PHY,"Generating SSS for slot %d\n",1+(subframe<<1));
generate_sss
(
txdataF
,
generate_sss
(
txdataF
,
AMP
,
AMP
,
fp
,
fp
,
...
@@ -626,7 +626,7 @@ void common_signal_procedures (PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc) {
...
@@ -626,7 +626,7 @@ void common_signal_procedures (PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc) {
else
if
((
subframe
==
1
)
&&
else
if
((
subframe
==
1
)
&&
(
fp
->
frame_type
==
TDD
)
&&
(
fp
->
frame_type
==
TDD
)
&&
(
eNB
->
abstraction_flag
==
0
))
{
(
eNB
->
abstraction_flag
==
0
))
{
if
(
frame
==
0
)
LOG_I
(
PHY
,
"Generating PSS for slot %d
\n
"
,
subframe
<<
1
);
//
if (frame==0) LOG_I(PHY,"Generating PSS for slot %d\n",subframe<<1);
generate_pss
(
txdataF
,
generate_pss
(
txdataF
,
AMP
,
AMP
,
fp
,
fp
,
...
@@ -1360,9 +1360,9 @@ void phy_procedures_eNB_TX(PHY_VARS_eNB *eNB,
...
@@ -1360,9 +1360,9 @@ void phy_procedures_eNB_TX(PHY_VARS_eNB *eNB,
if
(
UE_id
<
0
)
{
// should not happen, log an error and exit, this is a fatal error
if
(
UE_id
<
0
)
{
// should not happen, log an error and exit, this is a fatal error
LOG_E
(
PHY
,
"[eNB %"
PRIu8
"] Frame %d: Unknown UE_id for rnti %"
PRIx16
"
\n
"
,
eNB
->
Mod_id
,
frame
,
dci_alloc
->
rnti
);
LOG_E
(
PHY
,
"[eNB %"
PRIu8
"] Frame %d: Unknown UE_id for rnti %"
PRIx16
"
\n
"
,
eNB
->
Mod_id
,
frame
,
dci_alloc
->
rnti
);
mac_xface
->
macphy_exit
(
"FATAL
\n
"
);
//mac_xface->macphy_exit("FATAL\n");
}
}
generate_eNB_ulsch_params
(
eNB
,
proc
,
dci_alloc
,
UE_id
);
if
(
UE_id
>=
0
)
generate_eNB_ulsch_params
(
eNB
,
proc
,
dci_alloc
,
UE_id
);
}
}
}
}
...
@@ -1386,7 +1386,7 @@ void phy_procedures_eNB_TX(PHY_VARS_eNB *eNB,
...
@@ -1386,7 +1386,7 @@ void phy_procedures_eNB_TX(PHY_VARS_eNB *eNB,
LOG_D
(
PHY
,
"[eNB %"
PRIu8
"] Frame %d, subframe %d: Calling generate_dci_top (pdcch) (common %"
PRIu8
",ue_spec %"
PRIu8
")
\n
"
,
eNB
->
Mod_id
,
frame
,
subframe
,
LOG_D
(
PHY
,
"[eNB %"
PRIu8
"] Frame %d, subframe %d: Calling generate_dci_top (pdcch) (common %"
PRIu8
",ue_spec %"
PRIu8
")
\n
"
,
eNB
->
Mod_id
,
frame
,
subframe
,
DCI_pdu
->
Num_common_dci
,
DCI_pdu
->
Num_ue_spec_dci
);
DCI_pdu
->
Num_common_dci
,
DCI_pdu
->
Num_ue_spec_dci
);
}
}
if
(
frame
==
0
)
LOG_I
(
PHY
,
"Generating PDCCCH/PCFICH for slot %d
\n
"
,
subframe
<<
1
);
//
if (frame==0) LOG_I(PHY,"Generating PDCCCH/PCFICH for slot %d\n",subframe<<1);
num_pdcch_symbols
=
generate_dci_top
(
DCI_pdu
->
Num_ue_spec_dci
,
num_pdcch_symbols
=
generate_dci_top
(
DCI_pdu
->
Num_ue_spec_dci
,
DCI_pdu
->
Num_common_dci
,
DCI_pdu
->
Num_common_dci
,
DCI_pdu
->
dci_alloc
,
DCI_pdu
->
dci_alloc
,
...
@@ -2869,6 +2869,7 @@ void phy_procedures_eNB_common_RX(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc){
...
@@ -2869,6 +2869,7 @@ void phy_procedures_eNB_common_RX(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc){
}
}
static
char
subframe_null
[
7680
*
4
*
4
];
void
phy_procedures_eNB_uespec_RX
(
PHY_VARS_eNB
*
eNB
,
eNB_rxtx_proc_t
*
proc
,
const
relaying_type_t
r_type
)
void
phy_procedures_eNB_uespec_RX
(
PHY_VARS_eNB
*
eNB
,
eNB_rxtx_proc_t
*
proc
,
const
relaying_type_t
r_type
)
{
{
//RX processing for ue-specific resources (i
//RX processing for ue-specific resources (i
...
@@ -2892,6 +2893,13 @@ void phy_procedures_eNB_uespec_RX(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,const
...
@@ -2892,6 +2893,13 @@ void phy_procedures_eNB_uespec_RX(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,const
T
(
T_ENB_PHY_UL_TICK
,
T_INT
(
eNB
->
Mod_id
),
T_INT
(
frame
),
T_INT
(
subframe
));
T
(
T_ENB_PHY_UL_TICK
,
T_INT
(
eNB
->
Mod_id
),
T_INT
(
frame
),
T_INT
(
subframe
));
/* if ((fp->frame_type == TDD) && (subframe_select(fp,subframe)!=SF_UL)) {
T(T_ENB_PHY_INPUT_SIGNAL, T_INT(eNB->Mod_id), T_INT(frame), T_INT(subframe), T_INT(0),
T_BUFFER(subframe_null,
eNB->frame_parms.samples_per_tti * 4));
return;
}*/
T
(
T_ENB_PHY_INPUT_SIGNAL
,
T_INT
(
eNB
->
Mod_id
),
T_INT
(
frame
),
T_INT
(
subframe
),
T_INT
(
0
),
T
(
T_ENB_PHY_INPUT_SIGNAL
,
T_INT
(
eNB
->
Mod_id
),
T_INT
(
frame
),
T_INT
(
subframe
),
T_INT
(
0
),
T_BUFFER
(
&
eNB
->
common_vars
.
rxdata
[
0
][
0
][
subframe
*
eNB
->
frame_parms
.
samples_per_tti
],
T_BUFFER
(
&
eNB
->
common_vars
.
rxdata
[
0
][
0
][
subframe
*
eNB
->
frame_parms
.
samples_per_tti
],
eNB
->
frame_parms
.
samples_per_tti
*
4
));
eNB
->
frame_parms
.
samples_per_tti
*
4
));
...
@@ -2941,8 +2949,10 @@ void phy_procedures_eNB_uespec_RX(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,const
...
@@ -2941,8 +2949,10 @@ void phy_procedures_eNB_uespec_RX(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,const
&
eNB
->
soundingrs_ul_config_dedicated
[
i
],
&
eNB
->
soundingrs_ul_config_dedicated
[
i
],
subframe
,
subframe
,
0
/*eNB_id*/
))
{
0
/*eNB_id*/
))
{
LOG_E
(
PHY
,
"problem processing SRS
\n
"
);
LOG_E
(
PHY
,
"problem processing SRS
\n
"
);
}
}
lte_eNB_srs_measurements
(
eNB
,
0
/*eNB_id*/
,
i
,
0
/*init_averaging*/
);
}
}
// Do PUCCH processing
// Do PUCCH processing
...
@@ -3083,6 +3093,19 @@ void phy_procedures_eNB_uespec_RX(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,const
...
@@ -3083,6 +3093,19 @@ void phy_procedures_eNB_uespec_RX(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,const
eNB
->
ulsch
[
i
]
->
harq_processes
[
harq_pid
]
->
o_ACK
[
0
],
eNB
->
ulsch
[
i
]
->
harq_processes
[
harq_pid
]
->
o_ACK
[
0
],
eNB
->
ulsch
[
i
]
->
harq_processes
[
harq_pid
]
->
o_ACK
[
1
],
eNB
->
ulsch
[
i
]
->
harq_processes
[
harq_pid
]
->
o_ACK
[
1
],
ret
);
ret
);
/*printf("[eNB %d][PUSCH %d] frame %d subframe %d RNTI %x RX power (%d,%d) RSSI (%d,%d) N0 (%d,%d) dB ACK (%d,%d), decoding iter %d\n",
eNB->Mod_id,harq_pid,
frame,subframe,
eNB->ulsch[i]->rnti,
dB_fixed(eNB->pusch_vars[i]->ulsch_power[0]),
dB_fixed(eNB->pusch_vars[i]->ulsch_power[1]),
eNB->UE_stats[i].UL_rssi[0],
eNB->UE_stats[i].UL_rssi[1],
eNB->measurements->n0_power_dB[0],
eNB->measurements->n0_power_dB[1],
eNB->ulsch[i]->harq_processes[harq_pid]->o_ACK[0],
eNB->ulsch[i]->harq_processes[harq_pid]->o_ACK[1],
ret);*/
//compute the expected ULSCH RX power (for the stats)
//compute the expected ULSCH RX power (for the stats)
eNB
->
ulsch
[(
uint32_t
)
i
]
->
harq_processes
[
harq_pid
]
->
delta_TF
=
eNB
->
ulsch
[(
uint32_t
)
i
]
->
harq_processes
[
harq_pid
]
->
delta_TF
=
...
@@ -3474,7 +3497,7 @@ void phy_procedures_eNB_uespec_RX(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,const
...
@@ -3474,7 +3497,7 @@ void phy_procedures_eNB_uespec_RX(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,const
0
,
0
,
eNB
->
first_run_I0_measurements
);
eNB
->
first_run_I0_measurements
);
eNB
->
first_run_I0_measurements
=
0
;
eNB
->
first_run_I0_measurements
=
0
;
}
}
#ifdef PHY_ABSTRACTION
#ifdef PHY_ABSTRACTION
else
{
else
{
...
...
openair2/LAYER2/MAC/eNB_scheduler_dlsch.c
View file @
20fd3906
...
@@ -1196,6 +1196,8 @@ schedule_ue_spec(
...
@@ -1196,6 +1196,8 @@ schedule_ue_spec(
}
else
{
}
else
{
tpc
=
1
;
//0
tpc
=
1
;
//0
}
}
//if (tpc != 1)
T
(
T_ENB_TPC_DLSCH
,
T_INT
(
frameP
),
T_INT
(
subframeP
),
T_INT
(
rnti
),
T_INT
(
tpc
),
T_INT
(
tpc_accumulated
),
T_INT
(
normalized_rx_power
),
T_INT
(
target_rx_power
));
/*
/*
LOG_I(MAC,"[eNB %d] DLSCH scheduler: frame %d, subframe %d, harq_pid %d, tpc %d, accumulated %d, normalized/target rx power %d/%d\n",
LOG_I(MAC,"[eNB %d] DLSCH scheduler: frame %d, subframe %d, harq_pid %d, tpc %d, accumulated %d, normalized/target rx power %d/%d\n",
module_idP,frameP, subframeP,harq_pid,tpc,
module_idP,frameP, subframeP,harq_pid,tpc,
...
...
openair2/LAYER2/MAC/eNB_scheduler_primitives.c
View file @
20fd3906
...
@@ -317,6 +317,7 @@ int rrc_mac_remove_ue(module_id_t mod_idP,rnti_t rntiP)
...
@@ -317,6 +317,7 @@ int rrc_mac_remove_ue(module_id_t mod_idP,rnti_t rntiP)
printf
(
"MAC: cannot remove UE rnti %x
\n
"
,
rntiP
);
printf
(
"MAC: cannot remove UE rnti %x
\n
"
,
rntiP
);
LOG_W
(
MAC
,
"rrc_mac_remove_ue: UE %x not found
\n
"
,
rntiP
);
LOG_W
(
MAC
,
"rrc_mac_remove_ue: UE %x not found
\n
"
,
rntiP
);
mac_phy_remove_ue
(
mod_idP
,
rntiP
);
mac_phy_remove_ue
(
mod_idP
,
rntiP
);
printf
(
"in rrc_mac_remove_ue %d
\n
"
,
UE_id
);
return
0
;
return
0
;
}
}
...
...
openair2/LAYER2/MAC/eNB_scheduler_ulsch.c
View file @
20fd3906
...
@@ -139,6 +139,10 @@ void rx_sdu(const module_id_t enb_mod_idP,
...
@@ -139,6 +139,10 @@ void rx_sdu(const module_id_t enb_mod_idP,
UE_list
->
UE_template
[
CC_idP
][
UE_id
].
phr_info
=
(
payload_ptr
[
0
]
&
0x3f
)
-
PHR_MAPPING_OFFSET
;
UE_list
->
UE_template
[
CC_idP
][
UE_id
].
phr_info
=
(
payload_ptr
[
0
]
&
0x3f
)
-
PHR_MAPPING_OFFSET
;
LOG_D
(
MAC
,
"[eNB %d] CC_id %d MAC CE_LCID %d : Received PHR PH = %d (db)
\n
"
,
LOG_D
(
MAC
,
"[eNB %d] CC_id %d MAC CE_LCID %d : Received PHR PH = %d (db)
\n
"
,
enb_mod_idP
,
CC_idP
,
rx_ces
[
i
],
UE_list
->
UE_template
[
CC_idP
][
UE_id
].
phr_info
);
enb_mod_idP
,
CC_idP
,
rx_ces
[
i
],
UE_list
->
UE_template
[
CC_idP
][
UE_id
].
phr_info
);
T
(
T_ENB_TPC_ULSCH_PHR
,
T_INT
(
UE_id
),
T_INT
(
UE_list
->
UE_template
[
CC_idP
][
UE_id
].
phr_info
));
UE_list
->
UE_template
[
CC_idP
][
UE_id
].
phr_info_configured
=
1
;
UE_list
->
UE_template
[
CC_idP
][
UE_id
].
phr_info_configured
=
1
;
UE_list
->
UE_sched_ctrl
[
UE_id
].
phr_received
=
1
;
UE_list
->
UE_sched_ctrl
[
UE_id
].
phr_received
=
1
;
}
}
...
@@ -726,6 +730,8 @@ void schedule_ulsch_rnti(module_id_t module_idP,
...
@@ -726,6 +730,8 @@ void schedule_ulsch_rnti(module_id_t module_idP,
// LOG_I(MAC,"entering ulsch preprocesor\n");
// LOG_I(MAC,"entering ulsch preprocesor\n");
//if (subframeP == 0) return;
ulsch_scheduler_pre_processor
(
module_idP
,
ulsch_scheduler_pre_processor
(
module_idP
,
frameP
,
frameP
,
subframeP
,
subframeP
,
...
@@ -871,6 +877,10 @@ abort();
...
@@ -871,6 +877,10 @@ abort();
module_idP
,
frameP
,
subframeP
,
harq_pid
,
tpc
,
module_idP
,
frameP
,
subframeP
,
harq_pid
,
tpc
,
tpc_accumulated
,
normalized_rx_power
,
target_rx_power
);
tpc_accumulated
,
normalized_rx_power
,
target_rx_power
);
}
}
//if (tpc != 1)
T
(
T_ENB_TPC_ULSCH
,
T_INT
(
frameP
),
T_INT
(
subframeP
),
T_INT
(
rnti
),
T_INT
(
tpc
),
T_INT
(
tpc_accumulated
),
T_INT
(
normalized_rx_power
),
T_INT
(
target_rx_power
));
// new transmission
// new transmission
if
(
round
==
0
)
{
if
(
round
==
0
)
{
...
@@ -884,7 +894,7 @@ abort();
...
@@ -884,7 +894,7 @@ abort();
if
(
UE_template
->
pre_allocated_rb_table_index_ul
>=
0
)
{
if
(
UE_template
->
pre_allocated_rb_table_index_ul
>=
0
)
{
rb_table_index
=
UE_template
->
pre_allocated_rb_table_index_ul
;
rb_table_index
=
UE_template
->
pre_allocated_rb_table_index_ul
;
}
else
{
}
else
{
mcs
=
10
;
//cmin (10, openair_daq_vars.target_ue_ul_mcs);
mcs
=
4
;
//cmin (10, openair_daq_vars.target_ue_ul_mcs);
rb_table_index
=
5
;
// for PHR
rb_table_index
=
5
;
// for PHR
}
}
...
...
openair2/LAYER2/MAC/pre_processor.c
View file @
20fd3906
...
@@ -1304,9 +1304,9 @@ void assign_max_mcs_min_rb(module_id_t module_idP,int frameP, sub_frame_t subfra
...
@@ -1304,9 +1304,9 @@ void assign_max_mcs_min_rb(module_id_t module_idP,int frameP, sub_frame_t subfra
continue
;
continue
;
if
(
UE_list
->
UE_sched_ctrl
[
i
].
phr_received
==
1
)
if
(
UE_list
->
UE_sched_ctrl
[
i
].
phr_received
==
1
)
mcs
=
20
;
// if we've received the power headroom information the UE, we can go to maximum mcs
mcs
=
20
;
//
20 before //
if we've received the power headroom information the UE, we can go to maximum mcs
else
else
mcs
=
10
;
// otherwise, limit to QPSK PUSCH
mcs
=
10
;
//
10 before //
otherwise, limit to QPSK PUSCH
UE_id
=
i
;
UE_id
=
i
;
...
@@ -1339,7 +1339,7 @@ void assign_max_mcs_min_rb(module_id_t module_idP,int frameP, sub_frame_t subfra
...
@@ -1339,7 +1339,7 @@ void assign_max_mcs_min_rb(module_id_t module_idP,int frameP, sub_frame_t subfra
// fixme: set use_srs flag
// fixme: set use_srs flag
tx_power
=
mac_xface
->
estimate_ue_tx_power
(
tbs
,
rb_table
[
rb_table_index
],
0
,
frame_parms
->
Ncp
,
0
);
tx_power
=
mac_xface
->
estimate_ue_tx_power
(
tbs
,
rb_table
[
rb_table_index
],
0
,
frame_parms
->
Ncp
,
0
);
while
((((
UE_template
->
phr_info
-
tx_power
)
<
0
)
||
(
tbs
>
UE_template
->
ul_total_buffer
))
&&
while
((((
UE_template
->
phr_info
-
tx_power
)
<
-
5
)
||
(
tbs
>
UE_template
->
ul_total_buffer
))
&&
(
mcs
>
3
))
{
(
mcs
>
3
))
{
// LOG_I(MAC,"UE_template->phr_info %d tx_power %d mcs %d\n", UE_template->phr_info,tx_power, mcs);
// LOG_I(MAC,"UE_template->phr_info %d tx_power %d mcs %d\n", UE_template->phr_info,tx_power, mcs);
mcs
--
;
mcs
--
;
...
@@ -1377,6 +1377,12 @@ void assign_max_mcs_min_rb(module_id_t module_idP,int frameP, sub_frame_t subfra
...
@@ -1377,6 +1377,12 @@ void assign_max_mcs_min_rb(module_id_t module_idP,int frameP, sub_frame_t subfra
UE_template
->
pre_allocated_rb_table_index_ul
,
UE_template
->
pre_allocated_rb_table_index_ul
,
UE_template
->
pre_allocated_nb_rb_ul
,
UE_template
->
pre_allocated_nb_rb_ul
,
UE_template
->
phr_info
,
tx_power
);
UE_template
->
phr_info
,
tx_power
);
printf
(
"[eNB %d] frame %d subframe %d: for UE %d CC %d: pre-assigned mcs %d, pre-allocated rb_table[%d]=%d RBs (phr %d, tx power %d)
\n
"
,
module_idP
,
frameP
,
subframeP
,
UE_id
,
CC_id
,
UE_template
->
pre_assigned_mcs_ul
,
UE_template
->
pre_allocated_rb_table_index_ul
,
UE_template
->
pre_allocated_nb_rb_ul
,
UE_template
->
phr_info
,
tx_power
);
}
else
{
}
else
{
UE_template
->
pre_allocated_rb_table_index_ul
=-
1
;
UE_template
->
pre_allocated_rb_table_index_ul
=-
1
;
UE_template
->
pre_allocated_nb_rb_ul
=
0
;
UE_template
->
pre_allocated_nb_rb_ul
=
0
;
...
...
openair2/RRC/LITE/rrc_eNB.c
View file @
20fd3906
This diff is collapsed.
Click to expand it.
targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp
View file @
20fd3906
...
@@ -42,6 +42,8 @@
...
@@ -42,6 +42,8 @@
#include "common_lib.h"
#include "common_lib.h"
#include "assertions.h"
#include "assertions.h"
#include <uhd/types/tune_request.hpp>
#ifdef __SSE4_1__
#ifdef __SSE4_1__
# include <smmintrin.h>
# include <smmintrin.h>
#endif
#endif
...
@@ -78,6 +80,9 @@ typedef struct {
...
@@ -78,6 +80,9 @@ typedef struct {
//! USRP RX Metadata
//! USRP RX Metadata
uhd
::
rx_metadata_t
rx_md
;
uhd
::
rx_metadata_t
rx_md
;
uhd
::
tune_request_t
tu_req
;
//! Sampling rate
//! Sampling rate
double
sample_rate
;
double
sample_rate
;
...
@@ -106,16 +111,33 @@ static int trx_usrp_start(openair0_device *device) {
...
@@ -106,16 +111,33 @@ static int trx_usrp_start(openair0_device *device) {
usrp_state_t
*
s
=
(
usrp_state_t
*
)
device
->
priv
;
usrp_state_t
*
s
=
(
usrp_state_t
*
)
device
->
priv
;
//uint8_t mask=0x0f;
// uint8_t ddr=0x07;
// uint8_t ctrlm=0x07;
// uint8_t atr_r=0x03;
// uint8_t atr_t=0x04;
//
// s->usrp->set_gpio_attr("FP0", "DDR", ddr, 0x1f);
// s->usrp->set_gpio_attr("FP0", "CTRL", ctrlm,0x1f);
// s->usrp->set_gpio_attr("FP0", "ATR_RX", atr_r, 0x1f);
// s->usrp->set_gpio_attr("FP0", "ATR_XX", atr_t, 0x1f);
// setup GPIO for TDD, GPIO(4) = ATR_RX
// setup GPIO for TDD, GPIO(4) = ATR_RX
//set data direction register (DDR) to output
//set data direction register (DDR) to output
s
->
usrp
->
set_gpio_attr
(
"FP0"
,
"DDR"
,
0x1f
,
0x1f
);
s
->
usrp
->
set_gpio_attr
(
"FP0"
,
"DDR"
,
0x1f
,
0x1f
);
//set control register to ATR
//set control register to ATR
s
->
usrp
->
set_gpio_attr
(
"FP0"
,
"CTRL"
,
0x1f
,
0x1f
);
s
->
usrp
->
set_gpio_attr
(
"FP0"
,
"CTRL"
,
0x1f
,
0x1f
);
//set ATR register
//set ATR register
s
->
usrp
->
set_gpio_attr
(
"FP0"
,
"ATR_RX"
,
1
<<
4
,
0x1f
);
s
->
usrp
->
set_gpio_attr
(
"FP0"
,
"ATR_RX"
,
(
1
<<
4
),
0x1f
);
// init recv and send streaming
// init recv and send streaming
uhd
::
stream_cmd_t
cmd
(
uhd
::
stream_cmd_t
::
STREAM_MODE_START_CONTINUOUS
);
uhd
::
stream_cmd_t
cmd
(
uhd
::
stream_cmd_t
::
STREAM_MODE_START_CONTINUOUS
);
...
@@ -156,7 +178,20 @@ static void trx_usrp_end(openair0_device *device) {
...
@@ -156,7 +178,20 @@ static void trx_usrp_end(openair0_device *device) {
@param flags flags must be set to TRUE if timestamp parameter needs to be applied
@param flags flags must be set to TRUE if timestamp parameter needs to be applied
*/
*/
static
int
trx_usrp_write
(
openair0_device
*
device
,
openair0_timestamp
timestamp
,
void
**
buff
,
int
nsamps
,
int
cc
,
int
flags
)
{
static
int
trx_usrp_write
(
openair0_device
*
device
,
openair0_timestamp
timestamp
,
void
**
buff
,
int
nsamps
,
int
cc
,
int
flags
)
{
int
ret
=
0
;
int
ret
=
0
,
nsamps2
;
#if defined(__x86_64) || defined(__i386__)
#ifdef __AVX2__
nsamps2
=
(
nsamps
+
7
)
>>
3
;
#else
nsamps2
=
(
nsamps
+
3
)
>>
2
;
#endif
#elif defined(__arm__)
nsamps2
=
(
nsamps
+
3
)
>>
2
;
#endif
uint32_t
tx_buff
[
nsamps
]
__attribute__
((
aligned
(
32
)));
usrp_state_t
*
s
=
(
usrp_state_t
*
)
device
->
priv
;
usrp_state_t
*
s
=
(
usrp_state_t
*
)
device
->
priv
;
s
->
tx_md
.
time_spec
=
uhd
::
time_spec_t
::
from_ticks
(
timestamp
,
s
->
sample_rate
);
s
->
tx_md
.
time_spec
=
uhd
::
time_spec_t
::
from_ticks
(
timestamp
,
s
->
sample_rate
);
...
@@ -182,13 +217,28 @@ static int trx_usrp_write(openair0_device *device, openair0_timestamp timestamp,
...
@@ -182,13 +217,28 @@ static int trx_usrp_write(openair0_device *device, openair0_timestamp timestamp,
s
->
tx_md
.
end_of_burst
=
false
;
s
->
tx_md
.
end_of_burst
=
false
;
}
}
// bring RX data into 12 MSBs for USRP::Shift by 4 bits to left
for
(
int
i
=
0
;
i
<
cc
;
i
++
)
{
for
(
int
j
=
0
;
j
<
nsamps2
;
j
++
)
{
#if defined(__x86_64__) || defined(__i386__)
#ifdef __AVX2__
((
__m256i
*
)
tx_buff
)[
j
]
=
_mm256_slli_epi16
(((
__m256i
*
)
buff
[
i
])[
j
],
4
);
#else
((
__m128i
*
)
tx_buff
)[
j
]
=
_mm_slli_epi16
(((
__m128i
*
)
buff
[
i
])[
j
],
4
);
#endif
#elif defined(__arm__)
((
int16x8_t
*
)
tx_buff
)[
j
]
=
vshrq_n_s16
(
buff
[
i
][
j
],
4
);
#endif
}
}
if
(
cc
>
1
)
{
if
(
cc
>
1
)
{
std
::
vector
<
void
*>
buff_ptrs
;
std
::
vector
<
void
*>
buff_ptrs
;
for
(
int
i
=
0
;
i
<
cc
;
i
++
)
for
(
int
i
=
0
;
i
<
cc
;
i
++
)
buff_ptrs
.
push_back
(
buff
[
i
]
);
buff_ptrs
.
push_back
(
tx_buff
);
ret
=
(
int
)
s
->
tx_stream
->
send
(
buff_ptrs
,
nsamps
,
s
->
tx_md
,
1e-3
);
ret
=
(
int
)
s
->
tx_stream
->
send
(
buff_ptrs
,
nsamps
,
s
->
tx_md
,
1e-3
);
}
else
}
else
ret
=
(
int
)
s
->
tx_stream
->
send
(
buff
[
0
]
,
nsamps
,
s
->
tx_md
,
1e-3
);
ret
=
(
int
)
s
->
tx_stream
->
send
(
tx_buff
,
nsamps
,
s
->
tx_md
,
1e-3
);
...
@@ -292,9 +342,17 @@ void *freq_thread(void *arg) {
...
@@ -292,9 +342,17 @@ void *freq_thread(void *arg) {
openair0_device
*
device
=
(
openair0_device
*
)
arg
;
openair0_device
*
device
=
(
openair0_device
*
)
arg
;
usrp_state_t
*
s
=
(
usrp_state_t
*
)
device
->
priv
;
usrp_state_t
*
s
=
(
usrp_state_t
*
)
device
->
priv
;
printf
(
"Setting USRP TX Freq %f, RX Freq %f
\n
"
,
device
->
openair0_cfg
[
0
].
tx_freq
[
0
],
device
->
openair0_cfg
[
0
].
rx_freq
[
0
]);
s
->
usrp
->
set_tx_freq
(
device
->
openair0_cfg
[
0
].
tx_freq
[
0
]);
s
->
usrp
->
set_tx_freq
(
device
->
openair0_cfg
[
0
].
tx_freq
[
0
]);
s
->
usrp
->
set_rx_freq
(
device
->
openair0_cfg
[
0
].
rx_freq
[
0
]);
s
->
usrp
->
set_rx_freq
(
device
->
openair0_cfg
[
0
].
rx_freq
[
0
]);
// change to advanced lo offset from above line
//uhd::tune_request_t rx_tune_req(device->openair0_cfg[0].rx_freq[0],(double)20000000);
//rx_tune_req.rf_freq_policy=uhd::tune_request_t::POLICY_MANUAL;
//rx_tune_req.rf_freq=device->openair0_cfg[0].rx_freq[0]-(double)20000000;
//s->usrp->set_rx_freq(rx_tune_req);
//printf("Actual USRP RX Freq %f\n",s->usrp->get_rx_freq(0));
}
}
/*! \brief Set frequencies (TX/RX). Spawns a thread to handle the frequency change to not block the calling thread
/*! \brief Set frequencies (TX/RX). Spawns a thread to handle the frequency change to not block the calling thread
* \param device the hardware to use
* \param device the hardware to use
...
@@ -315,6 +373,12 @@ int trx_usrp_set_freq(openair0_device* device, openair0_config_t *openair0_cfg,
...
@@ -315,6 +373,12 @@ int trx_usrp_set_freq(openair0_device* device, openair0_config_t *openair0_cfg,
else
{
else
{
s
->
usrp
->
set_tx_freq
(
device
->
openair0_cfg
[
0
].
tx_freq
[
0
]);
s
->
usrp
->
set_tx_freq
(
device
->
openair0_cfg
[
0
].
tx_freq
[
0
]);
s
->
usrp
->
set_rx_freq
(
device
->
openair0_cfg
[
0
].
rx_freq
[
0
]);
s
->
usrp
->
set_rx_freq
(
device
->
openair0_cfg
[
0
].
rx_freq
[
0
]);
// change to advanced lo offset from above line
//uhd::tune_request_t rx_tune_req(device->openair0_cfg[0].rx_freq[0],(double)20000000);
//rx_tune_req.rf_freq_policy=uhd::tune_request_t::POLICY_MANUAL;
//rx_tune_req.rf_freq=device->openair0_cfg[0].rx_freq[0]-(double)20000000;
//s->usrp->set_rx_freq(rx_tune_req);
//printf("Actual USRP RX Freq %f\n",s->usrp->get_rx_freq(0));
}
}
return
(
0
);
return
(
0
);
...
@@ -331,14 +395,15 @@ int openair0_set_rx_frequencies(openair0_device* device, openair0_config_t *open
...
@@ -331,14 +395,15 @@ int openair0_set_rx_frequencies(openair0_device* device, openair0_config_t *open
usrp_state_t
*
s
=
(
usrp_state_t
*
)
device
->
priv
;
usrp_state_t
*
s
=
(
usrp_state_t
*
)
device
->
priv
;
static
int
first_call
=
1
;
static
int
first_call
=
1
;
static
double
rf_freq
,
diff
;
static
double
rf_freq
,
diff
;
printf
(
"Setting USRP TX RX Freq %f
\n
"
,
openair0_cfg
[
0
].
rx_freq
[
0
]);
uhd
::
tune_request_t
rx_tune_req
(
openair0_cfg
[
0
].
rx_freq
[
0
]
);
uhd
::
tune_request_t
rx_tune_req
(
device
->
openair0_cfg
[
0
].
rx_freq
[
0
],(
double
)
20000000
);
rx_tune_req
.
rf_freq_policy
=
uhd
::
tune_request_t
::
POLICY_MANUAL
;
rx_tune_req
.
rf_freq_policy
=
uhd
::
tune_request_t
::
POLICY_MANUAL
;
rx_tune_req
.
rf_freq
=
openair0_cfg
[
0
].
rx_freq
[
0
];
//
rx_tune_req.rf_freq = openair0_cfg[0].rx_freq[0];
rf_freq
=
openair0_cfg
[
0
].
rx_freq
[
0
];
//
rf_freq=openair0_cfg[0].rx_freq[0];
s
->
usrp
->
set_rx_freq
(
rx_tune_req
);
s
->
usrp
->
set_rx_freq
(
rx_tune_req
);
printf
(
"Actual USRP RX Freq %f
\n
"
,
s
->
usrp
->
get_rx_freq
(
0
));
return
(
0
);
return
(
0
);
}
}
...
@@ -638,7 +703,16 @@ extern "C" {
...
@@ -638,7 +703,16 @@ extern "C" {
for
(
int
i
=
0
;
i
<
s
->
usrp
->
get_rx_num_channels
();
i
++
)
{
for
(
int
i
=
0
;
i
<
s
->
usrp
->
get_rx_num_channels
();
i
++
)
{
if
(
i
<
openair0_cfg
[
0
].
rx_num_channels
)
{
if
(
i
<
openair0_cfg
[
0
].
rx_num_channels
)
{
s
->
usrp
->
set_rx_rate
(
openair0_cfg
[
0
].
sample_rate
,
i
);
s
->
usrp
->
set_rx_rate
(
openair0_cfg
[
0
].
sample_rate
,
i
);
s
->
usrp
->
set_rx_freq
(
openair0_cfg
[
0
].
rx_freq
[
i
],
i
);
s
->
usrp
->
set_rx_freq
(
openair0_cfg
[
0
].
rx_freq
[
i
],
i
);
// uhd::tune_request_t rx_tune_req(openair0_cfg[0].rx_freq[0],(double)12000000);
//rx_tune_req.rf_freq_policy=uhd::tune_request_t::POLICY_MANUAL;
//rx_tune_req.rf_freq=device->openair0_cfg[0].rx_freq[0]-(double)20000000;
//s->usrp->set_rx_freq(rx_tune_req);
//printf("\n*****\n Desired USRP RX Freq %f\n",openair0_cfg[0].rx_freq[0]);
//printf("\n*****\n Actual USRP RX Freq %f\n",s->usrp->get_rx_freq(0));
set_rx_gain_offset
(
&
openair0_cfg
[
0
],
i
,
bw_gain_adjust
);
set_rx_gain_offset
(
&
openair0_cfg
[
0
],
i
,
bw_gain_adjust
);
::
uhd
::
gain_range_t
gain_range
=
s
->
usrp
->
get_rx_gain_range
(
i
);
::
uhd
::
gain_range_t
gain_range
=
s
->
usrp
->
get_rx_gain_range
(
i
);
...
...
targets/RT/USER/lte-enb.c
View file @
20fd3906
This diff is collapsed.
Click to expand it.
targets/RT/USER/lte-softmodem.c
View file @
20fd3906
...
@@ -1344,7 +1344,7 @@ void init_openair0() {
...
@@ -1344,7 +1344,7 @@ void init_openair0() {
openair0_cfg
[
card
].
autocal
[
i
]
=
1
;
openair0_cfg
[
card
].
autocal
[
i
]
=
1
;
openair0_cfg
[
card
].
tx_gain
[
i
]
=
tx_gain
[
0
][
i
];
openair0_cfg
[
card
].
tx_gain
[
i
]
=
tx_gain
[
0
][
i
];
if
(
UE_flag
==
0
)
{
if
(
UE_flag
==
0
)
{
openair0_cfg
[
card
].
rx_gain
[
i
]
=
PHY_vars_eNB_g
[
0
][
0
]
->
rx_total_gain_dB
;
openair0_cfg
[
card
].
rx_gain
[
i
]
=
PHY_vars_eNB_g
[
0
][
0
]
->
rx_total_gain_dB
-
rx_gain_off
;
}
}
else
{
else
{
openair0_cfg
[
card
].
rx_gain
[
i
]
=
PHY_vars_UE_g
[
0
][
0
]
->
rx_total_gain_dB
-
rx_gain_off
;
openair0_cfg
[
card
].
rx_gain
[
i
]
=
PHY_vars_UE_g
[
0
][
0
]
->
rx_total_gain_dB
-
rx_gain_off
;
...
@@ -1661,7 +1661,7 @@ int main( int argc, char **argv ) {
...
@@ -1661,7 +1661,7 @@ int main( int argc, char **argv ) {
PHY_vars_eNB_g
[
0
][
CC_id
]
->
X_u
);
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
];
PHY_vars_eNB_g
[
0
][
CC_id
]
->
rx_total_gain_dB
=
(
int
)
rx_gain
[
CC_id
][
0
]
+
rx_gain_off
;
if
(
frame_parms
[
CC_id
]
->
frame_type
==
FDD
)
{
if
(
frame_parms
[
CC_id
]
->
frame_type
==
FDD
)
{
PHY_vars_eNB_g
[
0
][
CC_id
]
->
N_TA_offset
=
0
;
PHY_vars_eNB_g
[
0
][
CC_id
]
->
N_TA_offset
=
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