Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
OpenXG-RAN
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wangjie
OpenXG-RAN
Commits
7f067959
Commit
7f067959
authored
Nov 25, 2016
by
Florian Kaltenberger
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/develop' into feature-21-TM7
parents
f8aea618
c4405d6c
Changes
8
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
803 additions
and
668 deletions
+803
-668
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
+4
-1
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 @
7f067959
...
...
@@ -218,7 +218,7 @@ Obj.# Case# Test# Description
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 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
...
...
@@ -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 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 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
...
...
@@ -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 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 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
...
...
cmake_targets/autotests/run_exec_lte-softmodem_tests.py
View file @
7f067959
...
...
@@ -575,6 +575,7 @@ def handle_testcaseclass_softmodem (testcase, oldprogramList, logdirOAI5GRepo ,
tags
=
testcase
.
findtext
(
'tags'
,
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_args
=
testcase
.
findtext
(
'RRH_compile_prog_args'
,
default
=
''
)
RRH_pre_exec
=
testcase
.
findtext
(
'RRH_pre_exec'
,
default
=
''
)
...
...
@@ -710,6 +711,7 @@ def handle_testcaseclass_softmodem (testcase, oldprogramList, logdirOAI5GRepo ,
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
+
'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
!=
""
:
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 '
...
...
@@ -2188,6 +2190,8 @@ for testcase in testcaseList:
#print "Machine list top level = " + ','.join(MachineList)
if
search_test_case_group
(
testcasename
,
testcasegroup
,
TestCaseExclusionList
)
==
True
:
if
testcaseclass
==
'lte-softmodem'
:
#First we wait for all the test cases in generic test case class to finish as they are running in parallel
threadListGlobal
=
wait_testcaseclass_generic_threads
(
threadListGlobal
,
Timeout_execution
)
eNBMachine
=
testcase
.
findtext
(
'eNB'
,
default
=
''
)
UEMachine
=
testcase
.
findtext
(
'UE'
,
default
=
''
)
EPCMachine
=
testcase
.
findtext
(
'EPC'
,
default
=
''
)
...
...
@@ -2198,7 +2202,6 @@ for testcase in testcaseList:
print
"One of the machines is not in the machine list"
print
"eNBMachine : "
+
eNBMachine
+
"UEMachine : "
+
UEMachine
+
"EPCMachine : "
+
EPCMachine
+
"MachineList : "
+
','
.
join
(
MachineList
)
print
"testcasename = "
+
testcasename
+
" class = "
+
testcaseclass
threadListGlobal
=
wait_testcaseclass_generic_threads
(
threadListGlobal
,
Timeout_execution
)
#cleanOldProgramsAllMachines(oai_list, CleanUpOldProgs, CleanUpAluLteBox, ExmimoRfStop)
handle_testcaseclass_softmodem
(
testcase
,
CleanUpOldProgs
,
logdirOAI5GRepo
,
logdirOpenaircnRepo
,
MachineList
,
user
,
pw
,
CleanUpAluLteBox
,
ExmimoRfStop
,
nruns_lte_softmodem
,
Timeout_cmd
)
...
...
cmake_targets/autotests/test_case_list.xml
View file @
7f067959
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 @
7f067959
...
...
@@ -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_1AB_IQ"
,
is_on
,
1
);
on_off
(
database
,
"LEGACY_
RRC
_INFO"
,
is_on
,
1
);
on_off
(
database
,
"LEGACY_
RRC
_ERROR"
,
is_on
,
1
);
on_off
(
database
,
"LEGACY_
RRC
_WARNING"
,
is_on
,
1
);
on_off
(
database
,
"LEGACY_
GROUP
_INFO"
,
is_on
,
1
);
on_off
(
database
,
"LEGACY_
GROUP
_ERROR"
,
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_ACK"
,
h
,
database
,
is_on
);
...
...
openair1/SCHED/phy_procedures_lte_eNb.c
View file @
7f067959
...
...
@@ -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
);
}
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
;
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
pucch_sel
=
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
if
((
eNB
->
dlsch
[
UE_id
][
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
do_SR
=
is_SR_subframe
(
eNB
,
proc
,
UE_id
);
// do_SR = 0;
// Now ACK/NAK
// First check subframe_tx flag for earlier subframes
get_n1_pucch_eNB
(
eNB
,
proc
,
UE_id
,
&
n1_pucch0
,
&
n1_pucch1
,
&
n1_pucch2
,
&
n1_pucch3
);
proc
,
UE_id
,
&
n1_pucch0
,
&
n1_pucch1
,
&
n1_pucch2
,
&
n1_pucch3
);
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
,
frame
,
subframe
,
n1_pucch0
,
n1_pucch1
,
n1_pucch2
,
n1_pucch3
,
do_SR
);
eNB
->
Mod_id
,
eNB
->
dlsch
[
UE_id
][
0
]
->
rnti
,
frame
,
subframe
,
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
}
else
{
// otherwise we have some PUCCH detection to do
// Null out PUCCH PRBs for noise measurement
switch
(
fp
->
N_RB_UL
)
{
case
6
:
eNB
->
rb_mask_ul
[
0
]
|=
(
0x1
|
(
1
<<
5
));
//position 5
break
;
eNB
->
rb_mask_ul
[
0
]
|=
(
0x1
|
(
1
<<
5
));
//position 5
break
;
case
15
:
eNB
->
rb_mask_ul
[
0
]
|=
(
0x1
|
(
1
<<
14
));
// position 14
break
;
eNB
->
rb_mask_ul
[
0
]
|=
(
0x1
|
(
1
<<
14
));
// position 14
break
;
case
25
:
eNB
->
rb_mask_ul
[
0
]
|=
(
0x1
|
(
1
<<
24
));
// position 24
break
;
eNB
->
rb_mask_ul
[
0
]
|=
(
0x1
|
(
1
<<
24
));
// position 24
break
;
case
50
:
eNB
->
rb_mask_ul
[
0
]
|=
0x1
;
eNB
->
rb_mask_ul
[
1
]
|=
(
1
<<
17
);
// position 49 (49-32)
break
;
eNB
->
rb_mask_ul
[
0
]
|=
0x1
;
eNB
->
rb_mask_ul
[
1
]
|=
(
1
<<
17
);
// position 49 (49-32)
break
;
case
75
:
eNB
->
rb_mask_ul
[
0
]
|=
0x1
;
eNB
->
rb_mask_ul
[
2
]
|=
(
1
<<
10
);
// position 74 (74-64)
break
;
eNB
->
rb_mask_ul
[
0
]
|=
0x1
;
eNB
->
rb_mask_ul
[
2
]
|=
(
1
<<
10
);
// position 74 (74-64)
break
;
case
100
:
eNB
->
rb_mask_ul
[
0
]
|=
0x1
;
eNB
->
rb_mask_ul
[
3
]
|=
(
1
<<
3
);
// position 99 (99-96)
break
;
eNB
->
rb_mask_ul
[
0
]
|=
0x1
;
eNB
->
rb_mask_ul
[
3
]
|=
(
1
<<
3
);
// position 99 (99-96)
break
;
default:
LOG_E
(
PHY
,
"Unknown number for N_RB_UL %d
\n
"
,
fp
->
N_RB_UL
);
break
;
LOG_E
(
PHY
,
"Unknown number for N_RB_UL %d
\n
"
,
fp
->
N_RB_UL
);
break
;
}
if
(
do_SR
==
1
)
{
eNB
->
UE_stats
[
UE_id
].
sr_total
++
;
eNB
->
UE_stats
[
UE_id
].
sr_total
++
;
if
(
eNB
->
abstraction_flag
==
0
)
metric0_SR
=
rx_pucch
(
eNB
,
pucch_format1
,
UE_id
,
eNB
->
scheduling_request_config
[
UE_id
].
sr_PUCCH_ResourceIndex
,
0
,
// n2_pucch
0
,
// shortened format, should be use_srs flag, later
&
SR_payload
,
frame
,
subframe
,
PUCCH1_THRES
);
if
(
eNB
->
abstraction_flag
==
0
)
{
metric0_SR
=
rx_pucch
(
eNB
,
pucch_format1
,
UE_id
,
eNB
->
scheduling_request_config
[
UE_id
].
sr_PUCCH_ResourceIndex
,
0
,
// n2_pucch
0
,
// shortened format, should be use_srs flag, later
&
SR_payload
,
frame
,
subframe
,
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
else
{
metric0_SR
=
rx_pucch_emul
(
eNB
,
proc
,
UE_id
,
pucch_format1
,
0
,
&
SR_payload
);
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
);
}
else
{
metric0_SR
=
rx_pucch_emul
(
eNB
,
proc
,
UE_id
,
pucch_format1
,
0
,
&
SR_payload
);
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
);
}
#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
if
((
n1_pucch0
==-
1
)
&&
(
n1_pucch1
==-
1
))
{
// just check for SR
}
else
if
(
eNB
->
frame_parms
.
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
);
}
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
{
}
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
);
}
#ifdef PHY_ABSTRACTION
metric0
=
rx_pucch_emul
(
eNB
,
proc
,
UE_id
,
pucch_format1a
,
0
,
pucch_payload0
);
else
{
metric0
=
rx_pucch_emul
(
eNB
,
proc
,
UE_id
,
pucch_format1a
,
0
,
pucch_payload0
);
}
#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
LOG_D
(
PHY
,
"[eNB %d][PDSCH %x] Frame %d subframe %d pucch1a (FDD) payload %d (metric %d)
\n
"
,
eNB
->
Mod_id
,
eNB
->
dlsch
[
UE_id
][
0
]
->
rnti
,
frame
,
subframe
,
pucch_payload0
[
0
],
metric0
);
LOG_D
(
PHY
,
"[eNB %d][PDSCH %x] Frame %d subframe %d pucch1a (FDD) payload %d (metric %d)
\n
"
,
eNB
->
Mod_id
,
eNB
->
dlsch
[
UE_id
][
0
]
->
rnti
,
frame
,
subframe
,
pucch_payload0
[
0
],
metric0
);
#endif
process_HARQ_feedback
(
UE_id
,
eNB
,
proc
,
0
,
// pusch_flag
pucch_payload0
,
2
,
SR_payload
);
}
// FDD
else
{
//TDD
process_HARQ_feedback
(
UE_id
,
eNB
,
proc
,
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
)
||
(
bundling_flag
==
bundling
)
||
((
fp
->
frame_type
==
TDD
)
&&
(
fp
->
tdd_config
==
1
)
&&
((
subframe
!=
2
)
||
(
subframe
!=
7
))))
{
format
=
pucch_format1a
;
}
else
{
format
=
pucch_format1b
;
}
if
((
fp
->
frame_type
==
FDD
)
||
(
bundling_flag
==
bundling
)
||
((
fp
->
frame_type
==
TDD
)
&&
(
fp
->
tdd_config
==
1
)
&&
((
subframe
!=
2
)
||
(
subframe
!=
7
))))
{
format
=
pucch_format1a
;
}
else
{
format
=
pucch_format1b
;
}
// if SR was detected, use the n1_pucch from SR
if
(
SR_payload
==
1
)
{
// if SR was detected, use the n1_pucch from SR
if
(
SR_payload
==
1
)
{
#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
,
eNB
->
dlsch
[
UE_id
][
0
]
->
rnti
,
frame
,
subframe
,
n1_pucch0
,
n1_pucch1
,
n1_pucch2
,
n1_pucch3
,
format
);
#endif
if
(
eNB
->
abstraction_flag
==
0
)
metric0_SR
=
rx_pucch
(
eNB
,
format
,
UE_id
,
eNB
->
scheduling_request_config
[
UE_id
].
sr_PUCCH_ResourceIndex
,
0
,
//n2_pucch
0
,
// shortened format
pucch_payload0
,
frame
,
subframe
,
PUCCH1a_THRES
);
else
{
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
,
frame
,
subframe
,
n1_pucch0
,
n1_pucch1
,
n1_pucch2
,
n1_pucch3
,
format
);
#endif
if
(
eNB
->
abstraction_flag
==
0
)
metric0
=
rx_pucch
(
eNB
,
format
,
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
metric0
=
rx_pucch_emul
(
eNB
,
proc
,
UE_id
,
format
,
0
,
pucch_payload0
);
metric0
=
rx_pucch_emul
(
eNB
,
proc
,
UE_id
,
format
,
0
,
pucch_payload0
);
#endif
}
}
else
{
//using n1_pucch0/n1_pucch1 resources
}
}
else
{
//using n1_pucch0/n1_pucch1 resources
#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
,
eNB
->
dlsch
[
UE_id
][
0
]
->
rnti
,
frame
,
subframe
,
n1_pucch0
,
n1_pucch1
,
n1_pucch2
,
n1_pucch3
,
format
);
#endif
metric0
=
0
;
metric1
=
0
;
// Check n1_pucch0 metric
if
(
n1_pucch0
!=
-
1
)
{
if
(
eNB
->
abstraction_flag
==
0
)
metric0
=
rx_pucch
(
eNB
,
format
,
UE_id
,
(
uint16_t
)
n1_pucch0
,
0
,
// n2_pucch
0
,
// shortened format
pucch_payload0
,
frame
,
subframe
,
PUCCH1a_THRES
);
else
{
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
,
frame
,
subframe
,
n1_pucch0
,
n1_pucch1
,
n1_pucch2
,
n1_pucch3
,
format
);
#endif
metric0
=
0
;
metric1
=
0
;
// Check n1_pucch0 metric
if
(
n1_pucch0
!=
-
1
)
{
if
(
eNB
->
abstraction_flag
==
0
)
metric0
=
rx_pucch
(
eNB
,
format
,
UE_id
,
(
uint16_t
)
n1_pucch0
,
0
,
// n2_pucch
0
,
// shortened format
pucch_payload0
,
frame
,
subframe
,
PUCCH1a_THRES
);
else
{
#ifdef PHY_ABSTRACTION
metric0
=
rx_pucch_emul
(
eNB
,
proc
,
UE_id
,
format
,
0
,
pucch_payload0
);
#endif
}
}
metric0
=
rx_pucch_emul
(
eNB
,
proc
,
UE_id
,
format
,
0
,
pucch_payload0
);
#endif
}
}
// Check n1_pucch1 metric
if
(
n1_pucch1
!=
-
1
)
{
if
(
eNB
->
abstraction_flag
==
0
)
metric1
=
rx_pucch
(
eNB
,
format
,
UE_id
,
(
uint16_t
)
n1_pucch1
,
0
,
//n2_pucch
0
,
// shortened format
pucch_payload1
,
frame
,
subframe
,
PUCCH1a_THRES
);
else
{
// Check n1_pucch1 metric
if
(
n1_pucch1
!=
-
1
)
{
if
(
eNB
->
abstraction_flag
==
0
)
metric1
=
rx_pucch
(
eNB
,
format
,
UE_id
,
(
uint16_t
)
n1_pucch1
,
0
,
//n2_pucch
0
,
// shortened format
pucch_payload1
,
frame
,
subframe
,
PUCCH1a_THRES
);
else
{
#ifdef PHY_ABSTRACTION
metric1
=
rx_pucch_emul
(
eNB
,
proc
,
UE_id
,
format
,
1
,
pucch_payload1
);
#endif
}
}
}
metric1
=
rx_pucch_emul
(
eNB
,
proc
,
UE_id
,
format
,
1
,
pucch_payload1
);
#endif
}
}
}
if
(
SR_payload
==
1
)
{
pucch_payload
=
pucch_payload0
;
if
(
bundling_flag
==
bundling
)
pucch_sel
=
2
;
}
else
if
(
bundling_flag
==
multiplexing
)
{
// multiplexing + no SR
pucch_payload
=
(
metric1
>
metric0
)
?
pucch_payload1
:
pucch_payload0
;
pucch_sel
=
(
metric1
>
metric0
)
?
1
:
0
;
}
else
{
// bundling + no SR
if
(
n1_pucch1
!=
-
1
)
pucch_payload
=
pucch_payload1
;
else
if
(
n1_pucch0
!=
-
1
)
pucch_payload
=
pucch_payload0
;
pucch_sel
=
2
;
// indicate that this is a bundled ACK/NAK
}
if
(
SR_payload
==
1
)
{
pucch_payload
=
pucch_payload0
;
if
(
bundling_flag
==
bundling
)
pucch_sel
=
2
;
}
else
if
(
bundling_flag
==
multiplexing
)
{
// multiplexing + no SR
pucch_payload
=
(
metric1
>
metric0
)
?
pucch_payload1
:
pucch_payload0
;
pucch_sel
=
(
metric1
>
metric0
)
?
1
:
0
;
}
else
{
// bundling + no SR
if
(
n1_pucch1
!=
-
1
)
pucch_payload
=
pucch_payload1
;
else
if
(
n1_pucch0
!=
-
1
)
pucch_payload
=
pucch_payload0
;
pucch_sel
=
2
;
// indicate that this is a bundled ACK/NAK
}
#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
,
eNB
->
dlsch
[
UE_id
][
0
]
->
rnti
,
frame
,
subframe
,
metric0
,
metric1
,
pucch_sel
,
pucch_payload
[
0
],
pucch_payload
[
1
]);
#endif
process_HARQ_feedback
(
UE_id
,
eNB
,
proc
,
0
,
// pusch_flag
pucch_payload
,
pucch_sel
,
SR_payload
);
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
,
frame
,
subframe
,
metric0
,
metric1
,
pucch_sel
,
pucch_payload
[
0
],
pucch_payload
[
1
]);
#endif
process_HARQ_feedback
(
UE_id
,
eNB
,
proc
,
0
,
// pusch_flag
pucch_payload
,
pucch_sel
,
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 @
7f067959
...
...
@@ -2473,7 +2473,7 @@ int main(int argc, char **argv)
phy_procedures_UE_RX
(
UE
,
proc
,
0
,
0
,
normal_txrx
,
no_relay
,
NULL
);
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("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 @
7f067959
...
...
@@ -38,8 +38,9 @@ eNBs =
Nid_cell_mbsfn
=
0
;
nb_antennas_tx
=
1
;
nb_antennas_rx
=
1
;
tx_gain
=
10
;//
25
;
rx_gain
=
120
;
nb_antenna_ports
=
1
;
tx_gain
=
10
; //
25
;
rx_gain
=
10
; //
20
;
prach_root
=
0
;
prach_config_index
=
0
;
prach_high_speed
=
"DISABLE"
;
...
...
@@ -100,6 +101,8 @@ eNBs =
ue_TimersAndConstants_t311
=
10000
;
ue_TimersAndConstants_n310
=
20
;
ue_TimersAndConstants_n311
=
1
;
ue_TransmissionMode
=
1
;
}
);
...
...
targets/RT/USER/lte-enb.c
View file @
7f067959
...
...
@@ -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
"
);
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