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
c6753606
Commit
c6753606
authored
Nov 24, 2016
by
Florian Kaltenberger
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'develop' of
https://gitlab.eurecom.fr/oai/openairinterface5g
into develop
parents
933dc966
03231dd1
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
277 additions
and
300 deletions
+277
-300
openair1/SCHED/phy_procedures_lte_eNb.c
openair1/SCHED/phy_procedures_lte_eNb.c
+277
-300
No files found.
openair1/SCHED/phy_procedures_lte_eNb.c
View file @
c6753606
...
@@ -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
;
...
@@ -2089,7 +2089,7 @@ void pucch_procedures(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,int UE_id,int harq
...
@@ -2089,7 +2089,7 @@ void pucch_procedures(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,int UE_id,int harq
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
,
...
@@ -2100,7 +2100,14 @@ void pucch_procedures(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,int UE_id,int harq
...
@@ -2100,7 +2100,14 @@ void pucch_procedures(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,int UE_id,int harq
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
,
...
@@ -2112,43 +2119,17 @@ void pucch_procedures(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,int UE_id,int harq
...
@@ -2112,43 +2119,17 @@ void pucch_procedures(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,int UE_id,int harq
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
,
metric0
=
rx_pucch
(
eNB
,
pucch_format1a
,
pucch_format1a
,
UE_id
,
UE_id
,
...
@@ -2159,53 +2140,26 @@ void pucch_procedures(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,int UE_id,int harq
...
@@ -2159,53 +2140,26 @@ void pucch_procedures(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,int UE_id,int harq
frame
,
frame
,
subframe
,
subframe
,
PUCCH1a_THRES
);
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
);
}
}
#ifdef PHY_ABSTRACTION
else
{
metric0
=
rx_pucch_emul
(
eNB
,
proc
,
UE_id
,
pucch_format1a
,
0
,
pucch_payload0
);
}
}
}
// do_SR==1
#endif
if
((
n1_pucch0
==-
1
)
&&
(
n1_pucch1
==-
1
))
{
// just check for SR
/* cancel SR detection if reception on n1_pucch0 is better than on SR PUCCH resource index */
}
else
if
(
fp
->
frame_type
==
FDD
)
{
// FDD
if
(
do_SR
&&
metric0
>
metric0_SR
)
SR_payload
=
0
;
// 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
(
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
)
{
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
,
metric0
=
rx_pucch
(
eNB
,
pucch_format1a
,
pucch_format1a
,
UE_id
,
UE_id
,
...
@@ -2217,14 +2171,15 @@ void pucch_procedures(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,int UE_id,int harq
...
@@ -2217,14 +2171,15 @@ void pucch_procedures(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,int UE_id,int harq
subframe
,
subframe
,
PUCCH1a_THRES
);
PUCCH1a_THRES
);
}
}
else
{
#ifdef PHY_ABSTRACTION
#ifdef PHY_ABSTRACTION
else
{
metric0
=
rx_pucch_emul
(
eNB
,
metric0
=
rx_pucch_emul
(
eNB
,
proc
,
proc
,
UE_id
,
UE_id
,
pucch_format1a
,
pucch_format1a
,
0
,
0
,
pucch_payload0
);
pucch_payload0
);
}
#endif
#endif
}
}
...
@@ -2241,7 +2196,6 @@ void pucch_procedures(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,int UE_id,int harq
...
@@ -2241,7 +2196,6 @@ void pucch_procedures(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,int UE_id,int harq
pucch_payload0
,
pucch_payload0
,
2
,
2
,
SR_payload
);
SR_payload
);
}
// FDD
}
// FDD
else
{
//TDD
else
{
//TDD
...
@@ -2267,7 +2221,7 @@ void pucch_procedures(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,int UE_id,int harq
...
@@ -2267,7 +2221,7 @@ void pucch_procedures(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,int UE_id,int harq
#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
,
...
@@ -2375,6 +2329,29 @@ void pucch_procedures(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,int UE_id,int harq
...
@@ -2375,6 +2329,29 @@ void pucch_procedures(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,int UE_id,int harq
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
);
}
}
}
}
}
}
}
...
...
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