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
d0f0c40e
Commit
d0f0c40e
authored
Nov 25, 2016
by
Rohit Gupta
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'develop' of gitlab.eurecom.fr:oai/openairinterface5g into develop
parents
f315bdbe
fc3bbad7
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
283 additions
and
303 deletions
+283
-303
openair1/SCHED/phy_procedures_lte_eNb.c
openair1/SCHED/phy_procedures_lte_eNb.c
+277
-300
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.
openair1/SCHED/phy_procedures_lte_eNb.c
View file @
d0f0c40e
...
@@ -2016,11 +2016,11 @@ void prach_procedures(PHY_VARS_eNB *eNB) {
...
@@ -2016,11 +2016,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
;
...
@@ -2031,352 +2031,329 @@ void pucch_procedures(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,int UE_id,int harq
...
@@ -2031,352 +2031,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
);
}
}
}
}
}
...
...
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band38.tm1.exmimo2.conf
View file @
d0f0c40e
...
@@ -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 @
d0f0c40e
...
@@ -1775,7 +1775,7 @@ void init_eNB(eNB_func_t node_function[], eNB_timing_t node_timing[],int nb_inst
...
@@ -1775,7 +1775,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