Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
OpenXG UE
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 UE
Commits
00923d58
Commit
00923d58
authored
Nov 24, 2016
by
Xiwen JIANG
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'develop' into feature-21-TM7
parents
92249df2
fc3bbad7
Changes
8
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
801 additions
and
667 deletions
+801
-667
cmake_targets/autotests/README.txt
cmake_targets/autotests/README.txt
+3
-3
cmake_targets/autotests/run_exec_lte-softmodem_tests.py
cmake_targets/autotests/run_exec_lte-softmodem_tests.py
+2
-0
cmake_targets/autotests/test_case_list.xml
cmake_targets/autotests/test_case_list.xml
+509
-357
common/utils/T/tracer/enb.c
common/utils/T/tracer/enb.c
+3
-3
openair1/SCHED/phy_procedures_lte_eNb.c
openair1/SCHED/phy_procedures_lte_eNb.c
+277
-300
openair1/SIMULATION/LTE_PHY/dlsim.c
openair1/SIMULATION/LTE_PHY/dlsim.c
+1
-1
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band38.tm1.exmimo2.conf
...PROJECTS/GENERIC-LTE-EPC/CONF/enb.band38.tm1.exmimo2.conf
+5
-2
targets/RT/USER/lte-enb.c
targets/RT/USER/lte-enb.c
+1
-1
No files found.
cmake_targets/autotests/README.txt
View file @
00923d58
...
@@ -218,7 +218,7 @@ Obj.# Case# Test# Description
...
@@ -218,7 +218,7 @@ Obj.# Case# Test# Description
01 70 05 Band 7 FDD 20MHz DL Throughput for 300 sec for 1TX/1RX
01 70 05 Band 7 FDD 20MHz DL Throughput for 300 sec for 1TX/1RX
01 75 00 lte-softmodem + RR
H
tests with B210 RF as eNB and ALU EPC w/ Bandrich COTS UE for TX/1RX
01 75 00 lte-softmodem + RR
U (NGFI IF4P5, RAW)
tests with B210 RF as eNB and ALU EPC w/ Bandrich COTS UE for TX/1RX
01 75 00 Band 7 FDD 5MHz UL Throughput for 300 sec for 1TX/1RX
01 75 00 Band 7 FDD 5MHz UL Throughput for 300 sec for 1TX/1RX
01 75 01 Band 7 FDD 10MHz UL Throughput for 300 sec for 1TX/1RX
01 75 01 Band 7 FDD 10MHz UL Throughput for 300 sec for 1TX/1RX
01 75 02 Band 7 FDD 20MHz UL Throughput for 300 sec for 1TX/1RX
01 75 02 Band 7 FDD 20MHz UL Throughput for 300 sec for 1TX/1RX
...
@@ -226,7 +226,7 @@ Obj.# Case# Test# Description
...
@@ -226,7 +226,7 @@ Obj.# Case# Test# Description
01 75 04 Band 7 FDD 10MHz DL Throughput for 300 sec for 1TX/1RX
01 75 04 Band 7 FDD 10MHz DL Throughput for 300 sec for 1TX/1RX
01 75 05 Band 7 FDD 20MHz DL Throughput for 300 sec for 1TX/1RX
01 75 05 Band 7 FDD 20MHz DL Throughput for 300 sec for 1TX/1RX
01 80 00 lte-softmodem + RR
H
tests with BladeRF RF as eNB and ALU EPC w/ Bandrich COTS UE for TX/1RX
01 80 00 lte-softmodem + RR
U (NGFI)
tests with BladeRF RF as eNB and ALU EPC w/ Bandrich COTS UE for TX/1RX
01 80 00 Band 7 FDD 5MHz UL Throughput for 300 sec for 1TX/1RX
01 80 00 Band 7 FDD 5MHz UL Throughput for 300 sec for 1TX/1RX
01 80 01 Band 7 FDD 10MHz UL Throughput for 300 sec for 1TX/1RX
01 80 01 Band 7 FDD 10MHz UL Throughput for 300 sec for 1TX/1RX
01 80 02 Band 7 FDD 20MHz UL Throughput for 300 sec for 1TX/1RX
01 80 02 Band 7 FDD 20MHz UL Throughput for 300 sec for 1TX/1RX
...
@@ -234,7 +234,7 @@ Obj.# Case# Test# Description
...
@@ -234,7 +234,7 @@ Obj.# Case# Test# Description
01 80 04 Band 7 FDD 10MHz DL Throughput for 300 sec for 1TX/1RX
01 80 04 Band 7 FDD 10MHz DL Throughput for 300 sec for 1TX/1RX
01 80 05 Band 7 FDD 20MHz DL Throughput for 300 sec for 1TX/1RX
01 80 05 Band 7 FDD 20MHz DL Throughput for 300 sec for 1TX/1RX
01 85 00 lte-softmodem + RR
H
tests with USRP X310 RF as eNB and ALU EPC w/ Bandrich COTS UE for TX/1RX
01 85 00 lte-softmodem + RR
U (NGFI)
tests with USRP X310 RF as eNB and ALU EPC w/ Bandrich COTS UE for TX/1RX
01 85 00 Band 7 FDD 5MHz UL Throughput for 300 sec for 1TX/1RX
01 85 00 Band 7 FDD 5MHz UL Throughput for 300 sec for 1TX/1RX
01 85 01 Band 7 FDD 10MHz UL Throughput for 300 sec for 1TX/1RX
01 85 01 Band 7 FDD 10MHz UL Throughput for 300 sec for 1TX/1RX
01 85 02 Band 7 FDD 20MHz UL Throughput for 300 sec for 1TX/1RX
01 85 02 Band 7 FDD 20MHz UL Throughput for 300 sec for 1TX/1RX
...
...
cmake_targets/autotests/run_exec_lte-softmodem_tests.py
View file @
00923d58
...
@@ -575,6 +575,7 @@ def handle_testcaseclass_softmodem (testcase, oldprogramList, logdirOAI5GRepo ,
...
@@ -575,6 +575,7 @@ def handle_testcaseclass_softmodem (testcase, oldprogramList, logdirOAI5GRepo ,
tags
=
testcase
.
findtext
(
'tags'
,
default
=
''
)
tags
=
testcase
.
findtext
(
'tags'
,
default
=
''
)
RRHMachine
=
testcase
.
findtext
(
'RRH'
,
default
=
''
)
RRHMachine
=
testcase
.
findtext
(
'RRH'
,
default
=
''
)
RRH_config_file
=
testcase
.
findtext
(
'RRH_config_file'
,
default
=
''
)
RRH_compile_prog
=
testcase
.
findtext
(
'RRH_compile_prog'
,
default
=
''
)
RRH_compile_prog
=
testcase
.
findtext
(
'RRH_compile_prog'
,
default
=
''
)
RRH_compile_prog_args
=
testcase
.
findtext
(
'RRH_compile_prog_args'
,
default
=
''
)
RRH_compile_prog_args
=
testcase
.
findtext
(
'RRH_compile_prog_args'
,
default
=
''
)
RRH_pre_exec
=
testcase
.
findtext
(
'RRH_pre_exec'
,
default
=
''
)
RRH_pre_exec
=
testcase
.
findtext
(
'RRH_pre_exec'
,
default
=
''
)
...
@@ -710,6 +711,7 @@ def handle_testcaseclass_softmodem (testcase, oldprogramList, logdirOAI5GRepo ,
...
@@ -710,6 +711,7 @@ def handle_testcaseclass_softmodem (testcase, oldprogramList, logdirOAI5GRepo ,
task_RRH_compile
=
' ( uname -a ; date
\n
'
task_RRH_compile
=
' ( uname -a ; date
\n
'
task_RRH_compile
=
task_RRH_compile
+
'cd '
+
logdirOAI5GRepo
+
' ; source oaienv ; source cmake_targets/tools/build_helper
\n
'
task_RRH_compile
=
task_RRH_compile
+
'cd '
+
logdirOAI5GRepo
+
' ; source oaienv ; source cmake_targets/tools/build_helper
\n
'
task_RRH_compile
=
task_RRH_compile
+
'env |grep OPENAIR
\n
'
task_RRH_compile
=
task_RRH_compile
+
'env |grep OPENAIR
\n
'
task_RRH_compile
=
task_RRH_compile
+
update_config_file
(
oai_RRH
,
RRH_config_file
,
logdirOAI5GRepo
,
'$OPENAIR_DIR/cmake_targets/autotests/tools/search_repl.py'
)
+
'
\n
'
if
RRH_compile_prog
!=
""
:
if
RRH_compile_prog
!=
""
:
task_RRH_compile
=
task_RRH_compile
+
' ( '
+
RRH_compile_prog
+
' '
+
RRH_compile_prog_args
+
' ) > '
+
logfile_compile_RRH
+
' 2>&1
\n
'
task_RRH_compile
=
task_RRH_compile
+
' ( '
+
RRH_compile_prog
+
' '
+
RRH_compile_prog_args
+
' ) > '
+
logfile_compile_RRH
+
' 2>&1
\n
'
task_RRH_compile
=
task_RRH_compile
+
' date ) > '
+
logfile_task_RRH_compile_out
+
' 2>&1 '
task_RRH_compile
=
task_RRH_compile
+
' date ) > '
+
logfile_task_RRH_compile_out
+
' 2>&1 '
...
...
cmake_targets/autotests/test_case_list.xml
View file @
00923d58
This source diff could not be displayed because it is too large. You can
view the blob
instead.
common/utils/T/tracer/enb.c
View file @
00923d58
...
@@ -525,9 +525,9 @@ int main(int n, char **v)
...
@@ -525,9 +525,9 @@ int main(int n, char **v)
on_off
(
database
,
"ENB_PHY_PUCCH_1_ENERGY"
,
is_on
,
1
);
on_off
(
database
,
"ENB_PHY_PUCCH_1_ENERGY"
,
is_on
,
1
);
on_off
(
database
,
"ENB_PHY_PUCCH_1AB_IQ"
,
is_on
,
1
);
on_off
(
database
,
"ENB_PHY_PUCCH_1AB_IQ"
,
is_on
,
1
);
on_off
(
database
,
"LEGACY_
RRC
_INFO"
,
is_on
,
1
);
on_off
(
database
,
"LEGACY_
GROUP
_INFO"
,
is_on
,
1
);
on_off
(
database
,
"LEGACY_
RRC
_ERROR"
,
is_on
,
1
);
on_off
(
database
,
"LEGACY_
GROUP
_ERROR"
,
is_on
,
1
);
on_off
(
database
,
"LEGACY_
RRC
_WARNING"
,
is_on
,
1
);
on_off
(
database
,
"LEGACY_
GROUP
_WARNING"
,
is_on
,
1
);
view_add_log
(
eg
.
phyview
,
"ENB_PHY_DLSCH_UE_DCI"
,
h
,
database
,
is_on
);
view_add_log
(
eg
.
phyview
,
"ENB_PHY_DLSCH_UE_DCI"
,
h
,
database
,
is_on
);
view_add_log
(
eg
.
phyview
,
"ENB_PHY_DLSCH_UE_ACK"
,
h
,
database
,
is_on
);
view_add_log
(
eg
.
phyview
,
"ENB_PHY_DLSCH_UE_ACK"
,
h
,
database
,
is_on
);
...
...
openair1/SCHED/phy_procedures_lte_eNb.c
View file @
00923d58
...
@@ -2027,11 +2027,11 @@ void prach_procedures(PHY_VARS_eNB *eNB) {
...
@@ -2027,11 +2027,11 @@ void prach_procedures(PHY_VARS_eNB *eNB) {
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_ENB_PRACH_RX
,
0
);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_ENB_PRACH_RX
,
0
);
}
}
void
pucch_procedures
(
PHY_VARS_eNB
*
eNB
,
eNB_rxtx_proc_t
*
proc
,
int
UE_id
,
int
harq_pid
)
{
void
pucch_procedures
(
PHY_VARS_eNB
*
eNB
,
eNB_rxtx_proc_t
*
proc
,
int
UE_id
,
int
harq_pid
)
{
LTE_DL_FRAME_PARMS
*
fp
=&
eNB
->
frame_parms
;
LTE_DL_FRAME_PARMS
*
fp
=&
eNB
->
frame_parms
;
uint8_t
SR_payload
=
0
,
*
pucch_payload
=
NULL
,
pucch_payload0
[
2
]
=
{
0
,
0
},
pucch_payload1
[
2
]
=
{
0
,
0
};
uint8_t
SR_payload
=
0
,
*
pucch_payload
=
NULL
,
pucch_payload0
[
2
]
=
{
0
,
0
},
pucch_payload1
[
2
]
=
{
0
,
0
};
int16_t
n1_pucch0
,
n1_pucch1
,
n1_pucch2
,
n1_pucch3
;
int16_t
n1_pucch0
=
-
1
,
n1_pucch1
=
-
1
,
n1_pucch2
=
-
1
,
n1_pucch3
=
-
1
;
uint8_t
do_SR
=
0
;
uint8_t
do_SR
=
0
;
uint8_t
pucch_sel
=
0
;
uint8_t
pucch_sel
=
0
;
int32_t
metric0
=
0
,
metric1
=
0
,
metric0_SR
=
0
;
int32_t
metric0
=
0
,
metric1
=
0
,
metric0_SR
=
0
;
...
@@ -2042,352 +2042,329 @@ void pucch_procedures(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,int UE_id,int harq
...
@@ -2042,352 +2042,329 @@ void pucch_procedures(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,int UE_id,int harq
if
((
eNB
->
dlsch
[
UE_id
][
0
])
&&
if
((
eNB
->
dlsch
[
UE_id
][
0
])
&&
(
eNB
->
dlsch
[
UE_id
][
0
]
->
rnti
>
0
)
&&
(
eNB
->
dlsch
[
UE_id
][
0
]
->
rnti
>
0
)
&&
(
eNB
->
ulsch
[
UE_id
]
->
harq_processes
[
harq_pid
]
->
subframe_scheduling_flag
==
0
))
{
(
eNB
->
ulsch
[
UE_id
]
->
harq_processes
[
harq_pid
]
->
subframe_scheduling_flag
==
0
))
{
// check SR availability
// check SR availability
do_SR
=
is_SR_subframe
(
eNB
,
proc
,
UE_id
);
do_SR
=
is_SR_subframe
(
eNB
,
proc
,
UE_id
);
// do_SR = 0;
// do_SR = 0;
// Now ACK/NAK
// Now ACK/NAK
// First check subframe_tx flag for earlier subframes
// First check subframe_tx flag for earlier subframes
get_n1_pucch_eNB
(
eNB
,
get_n1_pucch_eNB
(
eNB
,
proc
,
proc
,
UE_id
,
UE_id
,
&
n1_pucch0
,
&
n1_pucch0
,
&
n1_pucch1
,
&
n1_pucch1
,
&
n1_pucch2
,
&
n1_pucch2
,
&
n1_pucch3
);
&
n1_pucch3
);
LOG_D
(
PHY
,
"[eNB %d][PDSCH %x] Frame %d, subframe %d Checking for PUCCH (%d,%d,%d,%d) SR %d
\n
"
,
LOG_D
(
PHY
,
"[eNB %d][PDSCH %x] Frame %d, subframe %d Checking for PUCCH (%d,%d,%d,%d) SR %d
\n
"
,
eNB
->
Mod_id
,
eNB
->
dlsch
[
UE_id
][
0
]
->
rnti
,
eNB
->
Mod_id
,
eNB
->
dlsch
[
UE_id
][
0
]
->
rnti
,
frame
,
subframe
,
frame
,
subframe
,
n1_pucch0
,
n1_pucch1
,
n1_pucch2
,
n1_pucch3
,
do_SR
);
n1_pucch0
,
n1_pucch1
,
n1_pucch2
,
n1_pucch3
,
do_SR
);
if
((
n1_pucch0
==-
1
)
&&
(
n1_pucch1
==-
1
)
&&
(
do_SR
==
0
))
{
// no TX PDSCH that have to be checked and no SR for this UE_id
if
((
n1_pucch0
==-
1
)
&&
(
n1_pucch1
==-
1
)
&&
(
do_SR
==
0
))
{
// no TX PDSCH that have to be checked and no SR for this UE_id
}
else
{
}
else
{
// otherwise we have some PUCCH detection to do
// otherwise we have some PUCCH detection to do
// Null out PUCCH PRBs for noise measurement
// Null out PUCCH PRBs for noise measurement
switch
(
fp
->
N_RB_UL
)
{
switch
(
fp
->
N_RB_UL
)
{
case
6
:
case
6
:
eNB
->
rb_mask_ul
[
0
]
|=
(
0x1
|
(
1
<<
5
));
//position 5
eNB
->
rb_mask_ul
[
0
]
|=
(
0x1
|
(
1
<<
5
));
//position 5
break
;
break
;
case
15
:
case
15
:
eNB
->
rb_mask_ul
[
0
]
|=
(
0x1
|
(
1
<<
14
));
// position 14
eNB
->
rb_mask_ul
[
0
]
|=
(
0x1
|
(
1
<<
14
));
// position 14
break
;
break
;
case
25
:
case
25
:
eNB
->
rb_mask_ul
[
0
]
|=
(
0x1
|
(
1
<<
24
));
// position 24
eNB
->
rb_mask_ul
[
0
]
|=
(
0x1
|
(
1
<<
24
));
// position 24
break
;
break
;
case
50
:
case
50
:
eNB
->
rb_mask_ul
[
0
]
|=
0x1
;
eNB
->
rb_mask_ul
[
0
]
|=
0x1
;
eNB
->
rb_mask_ul
[
1
]
|=
(
1
<<
17
);
// position 49 (49-32)
eNB
->
rb_mask_ul
[
1
]
|=
(
1
<<
17
);
// position 49 (49-32)
break
;
break
;
case
75
:
case
75
:
eNB
->
rb_mask_ul
[
0
]
|=
0x1
;
eNB
->
rb_mask_ul
[
0
]
|=
0x1
;
eNB
->
rb_mask_ul
[
2
]
|=
(
1
<<
10
);
// position 74 (74-64)
eNB
->
rb_mask_ul
[
2
]
|=
(
1
<<
10
);
// position 74 (74-64)
break
;
break
;
case
100
:
case
100
:
eNB
->
rb_mask_ul
[
0
]
|=
0x1
;
eNB
->
rb_mask_ul
[
0
]
|=
0x1
;
eNB
->
rb_mask_ul
[
3
]
|=
(
1
<<
3
);
// position 99 (99-96)
eNB
->
rb_mask_ul
[
3
]
|=
(
1
<<
3
);
// position 99 (99-96)
break
;
break
;
default:
default:
LOG_E
(
PHY
,
"Unknown number for N_RB_UL %d
\n
"
,
fp
->
N_RB_UL
);
LOG_E
(
PHY
,
"Unknown number for N_RB_UL %d
\n
"
,
fp
->
N_RB_UL
);
break
;
break
;
}
}
if
(
do_SR
==
1
)
{
if
(
do_SR
==
1
)
{
eNB
->
UE_stats
[
UE_id
].
sr_total
++
;
eNB
->
UE_stats
[
UE_id
].
sr_total
++
;
if
(
eNB
->
abstraction_flag
==
0
)
if
(
eNB
->
abstraction_flag
==
0
)
{
metric0_SR
=
rx_pucch
(
eNB
,
metric0_SR
=
rx_pucch
(
eNB
,
pucch_format1
,
pucch_format1
,
UE_id
,
UE_id
,
eNB
->
scheduling_request_config
[
UE_id
].
sr_PUCCH_ResourceIndex
,
eNB
->
scheduling_request_config
[
UE_id
].
sr_PUCCH_ResourceIndex
,
0
,
// n2_pucch
0
,
// n2_pucch
0
,
// shortened format, should be use_srs flag, later
0
,
// shortened format, should be use_srs flag, later
&
SR_payload
,
&
SR_payload
,
frame
,
frame
,
subframe
,
subframe
,
PUCCH1_THRES
);
PUCCH1_THRES
);
LOG_D
(
PHY
,
"[eNB %d][SR %x] Frame %d subframe %d Checking SR is %d (SR n1pucch is %d)
\n
"
,
eNB
->
Mod_id
,
eNB
->
ulsch
[
UE_id
]
->
rnti
,
frame
,
subframe
,
SR_payload
,
eNB
->
scheduling_request_config
[
UE_id
].
sr_PUCCH_ResourceIndex
);
}
#ifdef PHY_ABSTRACTION
#ifdef PHY_ABSTRACTION
else
{
else
{
metric0_SR
=
rx_pucch_emul
(
eNB
,
metric0_SR
=
rx_pucch_emul
(
eNB
,
proc
,
proc
,
UE_id
,
UE_id
,
pucch_format1
,
pucch_format1
,
0
,
0
,
&
SR_payload
);
&
SR_payload
);
LOG_D
(
PHY
,
"[eNB %d][SR %x] Frame %d subframe %d Checking SR (UE SR %d/%d)
\n
"
,
eNB
->
Mod_id
,
LOG_D
(
PHY
,
"[eNB %d][SR %x] Frame %d subframe %d Checking SR (UE SR %d/%d)
\n
"
,
eNB
->
Mod_id
,
eNB
->
ulsch
[
UE_id
]
->
rnti
,
frame
,
subframe
,
SR_payload
,
eNB
->
scheduling_request_config
[
UE_id
].
sr_PUCCH_ResourceIndex
);
eNB
->
ulsch
[
UE_id
]
->
rnti
,
frame
,
subframe
,
SR_payload
,
eNB
->
scheduling_request_config
[
UE_id
].
sr_PUCCH_ResourceIndex
);
}
}
#endif
#endif
if
(
SR_payload
==
1
)
{
LOG_D
(
PHY
,
"[eNB %d][SR %x] Frame %d subframe %d Got SR for PUSCH, transmitting to MAC
\n
"
,
eNB
->
Mod_id
,
eNB
->
ulsch
[
UE_id
]
->
rnti
,
frame
,
subframe
);
eNB
->
UE_stats
[
UE_id
].
sr_received
++
;
if
(
eNB
->
first_sr
[
UE_id
]
==
1
)
{
// this is the first request for uplink after Connection Setup, so clear HARQ process 0 use for Msg4
eNB
->
first_sr
[
UE_id
]
=
0
;
eNB
->
dlsch
[
UE_id
][
0
]
->
harq_processes
[
0
]
->
round
=
0
;
eNB
->
dlsch
[
UE_id
][
0
]
->
harq_processes
[
0
]
->
status
=
SCH_IDLE
;
LOG_D
(
PHY
,
"[eNB %d][SR %x] Frame %d subframe %d First SR
\n
"
,
eNB
->
Mod_id
,
eNB
->
ulsch
[
UE_id
]
->
rnti
,
frame
,
subframe
);
}
if
(
eNB
->
mac_enabled
==
1
)
{
mac_xface
->
SR_indication
(
eNB
->
Mod_id
,
eNB
->
CC_id
,
frame
,
eNB
->
dlsch
[
UE_id
][
0
]
->
rnti
,
subframe
);
}
}
}
// do_SR==1
}
// do_SR==1
if
((
n1_pucch0
==-
1
)
&&
(
n1_pucch1
==-
1
))
{
// just check for SR
if
((
n1_pucch0
==-
1
)
&&
(
n1_pucch1
==-
1
))
{
// just check for SR
}
else
if
(
eNB
->
frame_parms
.
frame_type
==
FDD
)
{
// FDD
}
else
if
(
fp
->
frame_type
==
FDD
)
{
// FDD
// if SR was detected, use the n1_pucch from SR, else use n1_pucch0
// if SR was detected, use the n1_pucch from SR, else use n1_pucch0
// n1_pucch0 = (SR_payload==1) ? eNB->scheduling_request_config[UE_id].sr_PUCCH_ResourceIndex:n1_pucch0;
// n1_pucch0 = (SR_payload==1) ? eNB->scheduling_request_config[UE_id].sr_PUCCH_ResourceIndex:n1_pucch0;
LOG_D
(
PHY
,
"Demodulating PUCCH for ACK/NAK: n1_pucch0 %d (%d), SR_payload %d
\n
"
,
n1_pucch0
,
eNB
->
scheduling_request_config
[
UE_id
].
sr_PUCCH_ResourceIndex
,
SR_payload
);
LOG_D
(
PHY
,
"Demodulating PUCCH for ACK/NAK: n1_pucch0 %d (%d), SR_payload %d
\n
"
,
n1_pucch0
,
eNB
->
scheduling_request_config
[
UE_id
].
sr_PUCCH_ResourceIndex
,
SR_payload
);
if
(
eNB
->
abstraction_flag
==
0
)
{
if
(
eNB
->
abstraction_flag
==
0
)
{
metric0
=
rx_pucch
(
eNB
,
pucch_format1a
,
UE_id
,
metric0
=
rx_pucch
(
eNB
,
(
uint16_t
)
n1_pucch0
,
pucch_format1a
,
0
,
//n2_pucch
UE_id
,
0
,
// shortened format
(
uint16_t
)
n1_pucch0
,
pucch_payload0
,
0
,
//n2_pucch
frame
,
0
,
// shortened format
subframe
,
pucch_payload0
,
PUCCH1a_THRES
);
frame
,
}
subframe
,
PUCCH1a_THRES
);
if
(
metric0
<
metric0_SR
)
metric0
=
rx_pucch
(
eNB
,
pucch_format1a
,
UE_id
,
eNB
->
scheduling_request_config
[
UE_id
].
sr_PUCCH_ResourceIndex
,
0
,
//n2_pucch
0
,
// shortened format
pucch_payload0
,
frame
,
subframe
,
PUCCH1a_THRES
);
}
if
(
eNB
->
mac_enabled
==
1
)
{
mac_xface
->
SR_indication
(
eNB
->
Mod_id
,
eNB
->
CC_id
,
frame
,
eNB
->
dlsch
[
UE_id
][
0
]
->
rnti
,
subframe
);
}
}
}
// do_SR==1
if
((
n1_pucch0
==-
1
)
&&
(
n1_pucch1
==-
1
))
{
// just check for SR
}
else
if
(
fp
->
frame_type
==
FDD
)
{
// FDD
// if SR was detected, use the n1_pucch from SR, else use n1_pucch0
// n1_pucch0 = (SR_payload==1) ? eNB->scheduling_request_config[UE_id].sr_PUCCH_ResourceIndex:n1_pucch0;
LOG_D
(
PHY
,
"Demodulating PUCCH for ACK/NAK: n1_pucch0 %d (%d), SR_payload %d
\n
"
,
n1_pucch0
,
eNB
->
scheduling_request_config
[
UE_id
].
sr_PUCCH_ResourceIndex
,
SR_payload
);
if
(
eNB
->
abstraction_flag
==
0
)
{
metric0
=
rx_pucch
(
eNB
,
pucch_format1a
,
UE_id
,
(
uint16_t
)
n1_pucch0
,
0
,
//n2_pucch
0
,
// shortened format
pucch_payload0
,
frame
,
subframe
,
PUCCH1a_THRES
);
if
(
metric0
<
metric0_SR
)
metric0
=
rx_pucch
(
eNB
,
pucch_format1a
,
UE_id
,
eNB
->
scheduling_request_config
[
UE_id
].
sr_PUCCH_ResourceIndex
,
0
,
//n2_pucch
0
,
// shortened format
pucch_payload0
,
frame
,
subframe
,
PUCCH1a_THRES
);
}
else
{
#ifdef PHY_ABSTRACTION
#ifdef PHY_ABSTRACTION
metric0
=
rx_pucch_emul
(
eNB
,
else
{
proc
,
metric0
=
rx_pucch_emul
(
eNB
,
UE_id
,
proc
,
pucch_format1a
,
UE_id
,
0
,
pucch_format1a
,
pucch_payload0
);
0
,
pucch_payload0
);
}
#endif
#endif
}
/* cancel SR detection if reception on n1_pucch0 is better than on SR PUCCH resource index */
if
(
do_SR
&&
metric0
>
metric0_SR
)
SR_payload
=
0
;
if
(
do_SR
&&
metric0
<=
metric0_SR
)
{
/* when transmitting ACK/NACK on SR PUCCH resource index, SR payload is always 1 */
SR_payload
=
1
;
if
(
eNB
->
abstraction_flag
==
0
)
{
metric0
=
rx_pucch
(
eNB
,
pucch_format1a
,
UE_id
,
eNB
->
scheduling_request_config
[
UE_id
].
sr_PUCCH_ResourceIndex
,
0
,
//n2_pucch
0
,
// shortened format
pucch_payload0
,
frame
,
subframe
,
PUCCH1a_THRES
);
}
#ifdef PHY_ABSTRACTION
else
{
metric0
=
rx_pucch_emul
(
eNB
,
proc
,
UE_id
,
pucch_format1a
,
0
,
pucch_payload0
);
}
#endif
}
#ifdef DEBUG_PHY_PROC
#ifdef DEBUG_PHY_PROC
LOG_D
(
PHY
,
"[eNB %d][PDSCH %x] Frame %d subframe %d pucch1a (FDD) payload %d (metric %d)
\n
"
,
LOG_D
(
PHY
,
"[eNB %d][PDSCH %x] Frame %d subframe %d pucch1a (FDD) payload %d (metric %d)
\n
"
,
eNB
->
Mod_id
,
eNB
->
Mod_id
,
eNB
->
dlsch
[
UE_id
][
0
]
->
rnti
,
eNB
->
dlsch
[
UE_id
][
0
]
->
rnti
,
frame
,
subframe
,
frame
,
subframe
,
pucch_payload0
[
0
],
metric0
);
pucch_payload0
[
0
],
metric0
);
#endif
#endif
process_HARQ_feedback
(
UE_id
,
eNB
,
proc
,
0
,
// pusch_flag
pucch_payload0
,
2
,
SR_payload
);
}
// FDD
process_HARQ_feedback
(
UE_id
,
eNB
,
proc
,
else
{
//TDD
0
,
// pusch_flag
pucch_payload0
,
2
,
SR_payload
);
}
// FDD
else
{
//TDD
bundling_flag
=
eNB
->
pucch_config_dedicated
[
UE_id
].
tdd_AckNackFeedbackMode
;
bundling_flag
=
eNB
->
pucch_config_dedicated
[
UE_id
].
tdd_AckNackFeedbackMode
;
// fix later for 2 TB case and format1b
// fix later for 2 TB case and format1b
if
((
fp
->
frame_type
==
FDD
)
||
if
((
fp
->
frame_type
==
FDD
)
||
(
bundling_flag
==
bundling
)
||
(
bundling_flag
==
bundling
)
||
((
fp
->
frame_type
==
TDD
)
&&
(
fp
->
tdd_config
==
1
)
&&
((
subframe
!=
2
)
||
(
subframe
!=
7
))))
{
((
fp
->
frame_type
==
TDD
)
&&
(
fp
->
tdd_config
==
1
)
&&
((
subframe
!=
2
)
||
(
subframe
!=
7
))))
{
format
=
pucch_format1a
;
format
=
pucch_format1a
;
}
else
{
}
else
{
format
=
pucch_format1b
;
format
=
pucch_format1b
;
}
}
// if SR was detected, use the n1_pucch from SR
// if SR was detected, use the n1_pucch from SR
if
(
SR_payload
==
1
)
{
if
(
SR_payload
==
1
)
{
#ifdef DEBUG_PHY_PROC
#ifdef DEBUG_PHY_PROC
LOG_D
(
PHY
,
"[eNB %d][PDSCH %x] Frame %d subframe %d Checking ACK/NAK (%d,%d,%d,%d) format %d with SR
\n
"
,
eNB
->
Mod_id
,
LOG_D
(
PHY
,
"[eNB %d][PDSCH %x] Frame %d subframe %d Checking ACK/NAK (%d,%d,%d,%d) format %d with SR
\n
"
,
eNB
->
Mod_id
,
eNB
->
dlsch
[
UE_id
][
0
]
->
rnti
,
eNB
->
dlsch
[
UE_id
][
0
]
->
rnti
,
frame
,
subframe
,
frame
,
subframe
,
n1_pucch0
,
n1_pucch1
,
n1_pucch2
,
n1_pucch3
,
format
);
n1_pucch0
,
n1_pucch1
,
n1_pucch2
,
n1_pucch3
,
format
);
#endif
#endif
if
(
eNB
->
abstraction_flag
==
0
)
if
(
eNB
->
abstraction_flag
==
0
)
metric0_SR
=
rx_pucch
(
eNB
,
metric0
=
rx_pucch
(
eNB
,
format
,
format
,
UE_id
,
UE_id
,
eNB
->
scheduling_request_config
[
UE_id
].
sr_PUCCH_ResourceIndex
,
eNB
->
scheduling_request_config
[
UE_id
].
sr_PUCCH_ResourceIndex
,
0
,
//n2_pucch
0
,
//n2_pucch
0
,
// shortened format
0
,
// shortened format
pucch_payload0
,
pucch_payload0
,
frame
,
frame
,
subframe
,
subframe
,
PUCCH1a_THRES
);
PUCCH1a_THRES
);
else
{
else
{
#ifdef PHY_ABSTRACTION
#ifdef PHY_ABSTRACTION
metric0
=
rx_pucch_emul
(
eNB
,
proc
,
metric0
=
rx_pucch_emul
(
eNB
,
proc
,
UE_id
,
UE_id
,
format
,
format
,
0
,
0
,
pucch_payload0
);
pucch_payload0
);
#endif
#endif
}
}
}
else
{
//using n1_pucch0/n1_pucch1 resources
}
else
{
//using n1_pucch0/n1_pucch1 resources
#ifdef DEBUG_PHY_PROC
#ifdef DEBUG_PHY_PROC
LOG_D
(
PHY
,
"[eNB %d][PDSCH %x] Frame %d subframe %d Checking ACK/NAK (%d,%d,%d,%d) format %d
\n
"
,
eNB
->
Mod_id
,
LOG_D
(
PHY
,
"[eNB %d][PDSCH %x] Frame %d subframe %d Checking ACK/NAK (%d,%d,%d,%d) format %d
\n
"
,
eNB
->
Mod_id
,
eNB
->
dlsch
[
UE_id
][
0
]
->
rnti
,
eNB
->
dlsch
[
UE_id
][
0
]
->
rnti
,
frame
,
subframe
,
frame
,
subframe
,
n1_pucch0
,
n1_pucch1
,
n1_pucch2
,
n1_pucch3
,
format
);
n1_pucch0
,
n1_pucch1
,
n1_pucch2
,
n1_pucch3
,
format
);
#endif
#endif
metric0
=
0
;
metric0
=
0
;
metric1
=
0
;
metric1
=
0
;
// Check n1_pucch0 metric
// Check n1_pucch0 metric
if
(
n1_pucch0
!=
-
1
)
{
if
(
n1_pucch0
!=
-
1
)
{
if
(
eNB
->
abstraction_flag
==
0
)
if
(
eNB
->
abstraction_flag
==
0
)
metric0
=
rx_pucch
(
eNB
,
metric0
=
rx_pucch
(
eNB
,
format
,
format
,
UE_id
,
UE_id
,
(
uint16_t
)
n1_pucch0
,
(
uint16_t
)
n1_pucch0
,
0
,
// n2_pucch
0
,
// n2_pucch
0
,
// shortened format
0
,
// shortened format
pucch_payload0
,
pucch_payload0
,
frame
,
frame
,
subframe
,
subframe
,
PUCCH1a_THRES
);
PUCCH1a_THRES
);
else
{
else
{
#ifdef PHY_ABSTRACTION
#ifdef PHY_ABSTRACTION
metric0
=
rx_pucch_emul
(
eNB
,
metric0
=
rx_pucch_emul
(
eNB
,
proc
,
proc
,
UE_id
,
UE_id
,
format
,
format
,
0
,
0
,
pucch_payload0
);
pucch_payload0
);
#endif
#endif
}
}
}
}
// Check n1_pucch1 metric
// Check n1_pucch1 metric
if
(
n1_pucch1
!=
-
1
)
{
if
(
n1_pucch1
!=
-
1
)
{
if
(
eNB
->
abstraction_flag
==
0
)
if
(
eNB
->
abstraction_flag
==
0
)
metric1
=
rx_pucch
(
eNB
,
metric1
=
rx_pucch
(
eNB
,
format
,
format
,
UE_id
,
UE_id
,
(
uint16_t
)
n1_pucch1
,
(
uint16_t
)
n1_pucch1
,
0
,
//n2_pucch
0
,
//n2_pucch
0
,
// shortened format
0
,
// shortened format
pucch_payload1
,
pucch_payload1
,
frame
,
frame
,
subframe
,
subframe
,
PUCCH1a_THRES
);
PUCCH1a_THRES
);
else
{
else
{
#ifdef PHY_ABSTRACTION
#ifdef PHY_ABSTRACTION
metric1
=
rx_pucch_emul
(
eNB
,
metric1
=
rx_pucch_emul
(
eNB
,
proc
,
proc
,
UE_id
,
UE_id
,
format
,
format
,
1
,
1
,
pucch_payload1
);
pucch_payload1
);
#endif
#endif
}
}
}
}
}
}
if
(
SR_payload
==
1
)
{
if
(
SR_payload
==
1
)
{
pucch_payload
=
pucch_payload0
;
pucch_payload
=
pucch_payload0
;
if
(
bundling_flag
==
bundling
)
if
(
bundling_flag
==
bundling
)
pucch_sel
=
2
;
pucch_sel
=
2
;
}
else
if
(
bundling_flag
==
multiplexing
)
{
// multiplexing + no SR
}
else
if
(
bundling_flag
==
multiplexing
)
{
// multiplexing + no SR
pucch_payload
=
(
metric1
>
metric0
)
?
pucch_payload1
:
pucch_payload0
;
pucch_payload
=
(
metric1
>
metric0
)
?
pucch_payload1
:
pucch_payload0
;
pucch_sel
=
(
metric1
>
metric0
)
?
1
:
0
;
pucch_sel
=
(
metric1
>
metric0
)
?
1
:
0
;
}
else
{
// bundling + no SR
}
else
{
// bundling + no SR
if
(
n1_pucch1
!=
-
1
)
if
(
n1_pucch1
!=
-
1
)
pucch_payload
=
pucch_payload1
;
pucch_payload
=
pucch_payload1
;
else
if
(
n1_pucch0
!=
-
1
)
else
if
(
n1_pucch0
!=
-
1
)
pucch_payload
=
pucch_payload0
;
pucch_payload
=
pucch_payload0
;
pucch_sel
=
2
;
// indicate that this is a bundled ACK/NAK
pucch_sel
=
2
;
// indicate that this is a bundled ACK/NAK
}
}
#ifdef DEBUG_PHY_PROC
#ifdef DEBUG_PHY_PROC
LOG_D
(
PHY
,
"[eNB %d][PDSCH %x] Frame %d subframe %d ACK/NAK metric 0 %d, metric 1 %d, sel %d, (%d,%d)
\n
"
,
eNB
->
Mod_id
,
LOG_D
(
PHY
,
"[eNB %d][PDSCH %x] Frame %d subframe %d ACK/NAK metric 0 %d, metric 1 %d, sel %d, (%d,%d)
\n
"
,
eNB
->
Mod_id
,
eNB
->
dlsch
[
UE_id
][
0
]
->
rnti
,
eNB
->
dlsch
[
UE_id
][
0
]
->
rnti
,
frame
,
subframe
,
frame
,
subframe
,
metric0
,
metric1
,
pucch_sel
,
pucch_payload
[
0
],
pucch_payload
[
1
]);
metric0
,
metric1
,
pucch_sel
,
pucch_payload
[
0
],
pucch_payload
[
1
]);
#endif
#endif
process_HARQ_feedback
(
UE_id
,
eNB
,
proc
,
process_HARQ_feedback
(
UE_id
,
eNB
,
proc
,
0
,
// pusch_flag
0
,
// pusch_flag
pucch_payload
,
pucch_payload
,
pucch_sel
,
pucch_sel
,
SR_payload
);
SR_payload
);
}
// TDD
}
}
}
if
(
SR_payload
==
1
)
{
LOG_D
(
PHY
,
"[eNB %d][SR %x] Frame %d subframe %d Got SR for PUSCH, transmitting to MAC
\n
"
,
eNB
->
Mod_id
,
eNB
->
ulsch
[
UE_id
]
->
rnti
,
frame
,
subframe
);
eNB
->
UE_stats
[
UE_id
].
sr_received
++
;
if
(
eNB
->
first_sr
[
UE_id
]
==
1
)
{
// this is the first request for uplink after Connection Setup, so clear HARQ process 0 use for Msg4
eNB
->
first_sr
[
UE_id
]
=
0
;
eNB
->
dlsch
[
UE_id
][
0
]
->
harq_processes
[
0
]
->
round
=
0
;
eNB
->
dlsch
[
UE_id
][
0
]
->
harq_processes
[
0
]
->
status
=
SCH_IDLE
;
LOG_D
(
PHY
,
"[eNB %d][SR %x] Frame %d subframe %d First SR
\n
"
,
eNB
->
Mod_id
,
eNB
->
ulsch
[
UE_id
]
->
rnti
,
frame
,
subframe
);
}
if
(
eNB
->
mac_enabled
==
1
)
{
mac_xface
->
SR_indication
(
eNB
->
Mod_id
,
eNB
->
CC_id
,
frame
,
eNB
->
dlsch
[
UE_id
][
0
]
->
rnti
,
subframe
);
}
}
}
}
}
...
...
openair1/SIMULATION/LTE_PHY/dlsim.c
View file @
00923d58
...
@@ -2477,7 +2477,7 @@ int main(int argc, char **argv)
...
@@ -2477,7 +2477,7 @@ int main(int argc, char **argv)
phy_procedures_UE_RX
(
UE
,
proc
,
0
,
0
,
normal_txrx
,
no_relay
,
NULL
);
phy_procedures_UE_RX
(
UE
,
proc
,
0
,
0
,
normal_txrx
,
no_relay
,
NULL
);
if
(
UE
->
dlsch
[
0
][
0
]
->
active
==
0
)
{
if
(
UE
->
dlsch
[
0
][
0
]
->
active
==
0
)
{
printf
(
"DCI not received
\n
"
);
//
printf("DCI not received\n");
/*
/*
write_output("pdcchF0_ext.m","pdcchF_ext", UE->pdcch_vars[eNB_id]->rxdataF_ext[0],2*3*UE->frame_parms.ofdm_symbol_size,1,1);
write_output("pdcchF0_ext.m","pdcchF_ext", UE->pdcch_vars[eNB_id]->rxdataF_ext[0],2*3*UE->frame_parms.ofdm_symbol_size,1,1);
write_output("pdcch00_ch0_ext.m","pdcch00_ch0_ext",UE->pdcch_vars[eNB_id]->dl_ch_estimates_ext[0],12*UE->frame_parms.N_RB_DL*3,1,1);
write_output("pdcch00_ch0_ext.m","pdcch00_ch0_ext",UE->pdcch_vars[eNB_id]->dl_ch_estimates_ext[0],12*UE->frame_parms.N_RB_DL*3,1,1);
...
...
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band38.tm1.exmimo2.conf
View file @
00923d58
...
@@ -38,8 +38,9 @@ eNBs =
...
@@ -38,8 +38,9 @@ eNBs =
Nid_cell_mbsfn
=
0
;
Nid_cell_mbsfn
=
0
;
nb_antennas_tx
=
1
;
nb_antennas_tx
=
1
;
nb_antennas_rx
=
1
;
nb_antennas_rx
=
1
;
tx_gain
=
10
;//
25
;
nb_antenna_ports
=
1
;
rx_gain
=
120
;
tx_gain
=
10
; //
25
;
rx_gain
=
10
; //
20
;
prach_root
=
0
;
prach_root
=
0
;
prach_config_index
=
0
;
prach_config_index
=
0
;
prach_high_speed
=
"DISABLE"
;
prach_high_speed
=
"DISABLE"
;
...
@@ -100,6 +101,8 @@ eNBs =
...
@@ -100,6 +101,8 @@ eNBs =
ue_TimersAndConstants_t311
=
10000
;
ue_TimersAndConstants_t311
=
10000
;
ue_TimersAndConstants_n310
=
20
;
ue_TimersAndConstants_n310
=
20
;
ue_TimersAndConstants_n311
=
1
;
ue_TimersAndConstants_n311
=
1
;
ue_TransmissionMode
=
1
;
}
}
);
);
...
...
targets/RT/USER/lte-enb.c
View file @
00923d58
...
@@ -1787,7 +1787,7 @@ void init_eNB(eNB_func_t node_function[], eNB_timing_t node_timing[],int nb_inst
...
@@ -1787,7 +1787,7 @@ void init_eNB(eNB_func_t node_function[], eNB_timing_t node_timing[],int nb_inst
}
}
}
}
if
(
setup_eNB_buffers
(
PHY_vars_eNB_g
[
inst
],
&
openair0_cfg
[
CC_id
])
!=
0
)
{
if
(
setup_eNB_buffers
(
PHY_vars_eNB_g
[
inst
],
&
openair0_cfg
[
0
])
!=
0
)
{
printf
(
"Exiting, cannot initialize eNodeB Buffers
\n
"
);
printf
(
"Exiting, cannot initialize eNodeB Buffers
\n
"
);
exit
(
-
1
);
exit
(
-
1
);
}
}
...
...
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