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
wangwenhui
OpenXG-RAN
Commits
d8defff0
Commit
d8defff0
authored
Oct 20, 2016
by
Raymond Knopp
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
periodic cqi procedures
parent
2e688c69
Changes
8
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
317 additions
and
12 deletions
+317
-12
openair1/PHY/INIT/lte_init.c
openair1/PHY/INIT/lte_init.c
+30
-1
openair1/PHY/LTE_TRANSPORT/proto.h
openair1/PHY/LTE_TRANSPORT/proto.h
+18
-0
openair1/PHY/LTE_TRANSPORT/pucch.c
openair1/PHY/LTE_TRANSPORT/pucch.c
+12
-2
openair1/PHY/LTE_TRANSPORT/uci_tools.c
openair1/PHY/LTE_TRANSPORT/uci_tools.c
+2
-0
openair1/PHY/impl_defs_lte.h
openair1/PHY/impl_defs_lte.h
+9
-5
openair1/SCHED/defs.h
openair1/SCHED/defs.h
+4
-0
openair1/SCHED/phy_procedures_lte_ue.c
openair1/SCHED/phy_procedures_lte_ue.c
+241
-3
openair2/LAYER2/MAC/eNB_scheduler_primitives.c
openair2/LAYER2/MAC/eNB_scheduler_primitives.c
+1
-1
No files found.
openair1/PHY/INIT/lte_init.c
View file @
d8defff0
...
...
@@ -742,7 +742,8 @@ void phy_config_dedicated_ue(uint8_t Mod_id,int CC_id,uint8_t eNB_id,
phy_vars_ue
->
dlsch_received_last
[
eNB_id
]
=
0
;
phy_vars_ue
->
dlsch_fer
[
eNB_id
]
=
0
;
phy_vars_ue
->
cqi_report_config
[
eNB_id
].
CQI_ReportPeriodic
.
ri_ConfigIndex
=
-
1
;
phy_vars_ue
->
cqi_report_config
[
eNB_id
].
CQI_ReportPeriodic
.
cqi_PMI_ConfigIndex
=
-
1
;
if
(
physicalConfigDedicated
)
{
LOG_D
(
PHY
,
"[UE %d] Received physicalConfigDedicated from eNB %d
\n
"
,
Mod_id
,
eNB_id
);
...
...
@@ -852,6 +853,31 @@ void phy_config_dedicated_ue(uint8_t Mod_id,int CC_id,uint8_t eNB_id,
}
if
(
physicalConfigDedicated
->
cqi_ReportConfig
)
{
if
(
physicalConfigDedicated
->
cqi_ReportConfig
->
cqi_ReportModeAperiodic
)
{
// configure PUSCH CQI reporting
phy_vars_ue
->
cqi_report_config
[
eNB_id
].
cqi_ReportModeAperiodic
=
*
physicalConfigDedicated
->
cqi_ReportConfig
->
cqi_ReportModeAperiodic
;
if
((
phy_vars_ue
->
cqi_report_config
[
eNB_id
].
cqi_ReportModeAperiodic
!=
rm12
)
&&
(
phy_vars_ue
->
cqi_report_config
[
eNB_id
].
cqi_ReportModeAperiodic
!=
rm30
)
&&
(
phy_vars_ue
->
cqi_report_config
[
eNB_id
].
cqi_ReportModeAperiodic
!=
rm31
))
LOG_E
(
PHY
,
"Unsupported Aperiodic CQI Feedback Mode : %d
\n
"
,
phy_vars_ue
->
cqi_report_config
[
eNB_id
].
cqi_ReportModeAperiodic
);
}
if
(
physicalConfigDedicated
->
cqi_ReportConfig
->
cqi_ReportPeriodic
)
{
if
(
physicalConfigDedicated
->
cqi_ReportConfig
->
cqi_ReportPeriodic
->
present
==
CQI_ReportPeriodic_PR_setup
)
{
// configure PUCCH CQI reporting
phy_vars_ue
->
cqi_report_config
[
eNB_id
].
CQI_ReportPeriodic
.
cqi_PUCCH_ResourceIndex
=
physicalConfigDedicated
->
cqi_ReportConfig
->
cqi_ReportPeriodic
->
choice
.
setup
.
cqi_PUCCH_ResourceIndex
;
phy_vars_ue
->
cqi_report_config
[
eNB_id
].
CQI_ReportPeriodic
.
cqi_PMI_ConfigIndex
=
physicalConfigDedicated
->
cqi_ReportConfig
->
cqi_ReportPeriodic
->
choice
.
setup
.
cqi_pmi_ConfigIndex
;
if
(
physicalConfigDedicated
->
cqi_ReportConfig
->
cqi_ReportPeriodic
->
choice
.
setup
.
ri_ConfigIndex
)
phy_vars_ue
->
cqi_report_config
[
eNB_id
].
CQI_ReportPeriodic
.
ri_ConfigIndex
=
*
physicalConfigDedicated
->
cqi_ReportConfig
->
cqi_ReportPeriodic
->
choice
.
setup
.
ri_ConfigIndex
;
}
else
if
(
physicalConfigDedicated
->
cqi_ReportConfig
->
cqi_ReportPeriodic
->
present
==
CQI_ReportPeriodic_PR_release
)
{
// handle release
phy_vars_ue
->
cqi_report_config
[
eNB_id
].
CQI_ReportPeriodic
.
ri_ConfigIndex
=
-
1
;
phy_vars_ue
->
cqi_report_config
[
eNB_id
].
CQI_ReportPeriodic
.
cqi_PMI_ConfigIndex
=
-
1
;
}
}
}
#ifdef CBA
if
(
physicalConfigDedicated
->
pusch_CBAConfigDedicated_vlola
)
{
...
...
@@ -868,6 +894,9 @@ void phy_config_dedicated_ue(uint8_t Mod_id,int CC_id,uint8_t eNB_id,
return
;
}
// fill cqi parameters for periodic CQI reporting
get_cqipmiri_params
(
phy_vars_ue
,
eNB_id
);
}
void
phy_config_cba_rnti
(
module_id_t
Mod_id
,
int
CC_id
,
eNB_flag_t
eNB_flag
,
uint8_t
index
,
rnti_t
cba_rnti
,
uint8_t
cba_group_id
,
uint8_t
num_active_cba_groups
)
...
...
openair1/PHY/LTE_TRANSPORT/proto.h
View file @
d8defff0
...
...
@@ -1445,6 +1445,9 @@ int32_t generate_ue_ulsch_params_from_rar(PHY_VARS_UE *phy_vars_ue,
uint8_t
eNB_id
);
double
sinr_eff_cqi_calc
(
PHY_VARS_UE
*
phy_vars_ue
,
uint8_t
eNB_id
);
uint8_t
sinr2cqi
(
double
sinr
,
uint8_t
trans_mode
);
int
generate_eNB_ulsch_params_from_dci
(
PHY_VARS_eNB
*
PHY_vars_eNB
,
eNB_rxtx_proc_t
*
proc
,
void
*
dci_pdu
,
...
...
@@ -1712,6 +1715,21 @@ void generate_pucch1x(int32_t **txdataF,
int16_t
amp
,
uint8_t
subframe
);
void
generate_pucch2x
(
int32_t
**
txdataF
,
LTE_DL_FRAME_PARMS
*
fp
,
uint8_t
ncs_cell
[
20
][
7
],
PUCCH_FMT_t
fmt
,
PUCCH_CONFIG_DEDICATED
*
pucch_config_dedicated
,
uint16_t
n2_pucch
,
uint8_t
shortened_format
,
uint16_t
*
payload
,
int
A
,
int
B2
,
int16_t
amp
,
uint8_t
subframe
,
uint16_t
rnti
);
void
generate_pucch_emul
(
PHY_VARS_UE
*
phy_vars_ue
,
UE_rxtx_proc_t
*
proc
,
PUCCH_FMT_t
format
,
...
...
openair1/PHY/LTE_TRANSPORT/pucch.c
View file @
d8defff0
...
...
@@ -460,10 +460,13 @@ inline void pucch2x_modulation(uint8_t *btilde,int16_t *d,int16_t amp) {
}
uint32_t
pucch_code
[
13
]
=
{
0xFFFFF
,
0x5A933
,
0x10E5A
,
0x6339C
,
0x73CE0
,
0xFFC00
,
0xD8E64
,
0x4F6B0
,
0x218EC
,
0x1B746
,
0x0FFFF
,
0x33FFF
,
0x3FFFC
};
void
generate_pucch2x
(
int32_t
**
txdataF
,
LTE_DL_FRAME_PARMS
*
fp
,
uint8_t
ncs_cell
[
20
][
7
],
...
...
@@ -471,7 +474,7 @@ void generate_pucch2x(int32_t **txdataF,
PUCCH_CONFIG_DEDICATED
*
pucch_config_dedicated
,
uint16_t
n2_pucch
,
uint8_t
shortened_format
,
uint
32
_t
*
payload
,
uint
16
_t
*
payload
,
int
A
,
int
B2
,
int16_t
amp
,
...
...
@@ -559,10 +562,13 @@ void generate_pucch2x(int32_t **txdataF,
nprime
=
(
n2_pucch
<
12
*
NRB2
)
?
n2_pucch
%
12
:
(
n2_pucch
+
Ncs1
+
1
)
%
12
;
else
else
{
nprime
=
(
n2_pucch
<
12
*
NRB2
)
?
((
12
*
(
nprime
+
1
))
%
13
)
-
1
:
(
10
-
n2_pucch
)
%
12
;
if
(
shortened_format
==
1
)
N_UL_symb
--
;
}
//loop over symbols in slot
for
(
l
=
0
;
l
<
N_UL_symb
;
l
++
)
{
...
...
@@ -631,6 +637,10 @@ void generate_pucch2x(int32_t **txdataF,
}
//#define Amax 13
//void init_pucch2x_rx() {};
uint32_t
rx_pucch
(
PHY_VARS_eNB
*
eNB
,
PUCCH_FMT_t
fmt
,
uint8_t
UE_id
,
...
...
openair1/PHY/LTE_TRANSPORT/uci_tools.c
View file @
d8defff0
...
...
@@ -836,3 +836,5 @@ void print_CQI(void *o,UCI_format_t uci_format,unsigned char eNB_id,int N_RB_DL)
}
openair1/PHY/impl_defs_lte.h
View file @
d8defff0
...
...
@@ -418,16 +418,20 @@ typedef struct {
/// CQI-ReportPeriodic
typedef
struct
{
/// Parameter: \f$n^{(2)}_\text{PUCCH}\f$, see TS 36.213 (7.2). \vr{[0..1185]}
u
int16_t
cqi_PUCCH_ResourceIndex
;
/// Parameter: \f$n^{(2)}_\text{PUCCH}\f$, see TS 36.213 (7.2). \vr{[0..1185]}
, -1 indicates inactivity
int16_t
cqi_PUCCH_ResourceIndex
;
/// Parameter: CQI/PMI Periodicity and Offset Configuration Index \f$I_\text{CQI/PMI}\f$, see TS 36.213 (tables 7.2.2-1A and 7.2.2-1C). \vr{[0..1023]}
u
int16_t
cqi_PMI_ConfigIndex
;
int16_t
cqi_PMI_ConfigIndex
;
/// Parameter: K, see 36.213 (4.2.2). \vr{[1..4]}
uint8_t
K
;
/// Parameter: RI Config Index \f$I_\text{RI}\f$, see TS 36.213 (7.2.2-1B). \vr{[0..1023]}
u
int16_t
ri_ConfigIndex
;
/// Parameter: RI Config Index \f$I_\text{RI}\f$, see TS 36.213 (7.2.2-1B). \vr{[0..1023]}
, -1 indicates inactivity
int16_t
ri_ConfigIndex
;
/// Parameter: Simultaneous-AN-and-CQI, see TS 36.213 (10.1). \vr{[0..1]} 1 indicates that simultaneous transmission of ACK/NACK and CQI is allowed.
uint8_t
simultaneousAckNackAndCQI
;
/// parameter computed from Tables 7.2.2-1A and 7.2.2-1C
uint16_t
Npd
;
/// parameter computed from Tables 7.2.2-1A and 7.2.2-1C
uint16_t
N_OFFSET_CQI
;
}
CQI_REPORTPERIODIC
;
/// Enumeration for parameter reporting mode \ref CQI_REPORT_CONFIG::cqi_ReportModeAperiodic.
...
...
openair1/SCHED/defs.h
View file @
d8defff0
...
...
@@ -437,6 +437,8 @@ int8_t pucch_power_cntl(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t subframe,ui
*/
void
pusch_power_cntl
(
PHY_VARS_UE
*
phy_vars_ue
,
UE_rxtx_proc_t
*
proc
,
uint8_t
eNB_id
,
uint8_t
j
,
uint8_t
abstraction_flag
);
void
get_cqipmiri_params
(
PHY_VARS_UE
*
ue
,
uint8_t
eNB_id
);
int8_t
get_PHR
(
uint8_t
Mod_id
,
uint8_t
CC_id
,
uint8_t
eNB_index
);
#ifdef LOCALIZATION
...
...
@@ -452,6 +454,8 @@ double aggregate_eNB_UE_localization_stats(PHY_VARS_eNB *phy_vars_eNB, int8_t UE
#endif
LTE_eNB_UE_stats
*
get_UE_stats
(
uint8_t
Mod_id
,
uint8_t
CC_id
,
uint16_t
rnti
);
LTE_DL_FRAME_PARMS
*
get_lte_frame_parms
(
module_id_t
Mod_id
,
uint8_t
CC_id
);
MU_MIMO_mode
*
get_mu_mimo_mode
(
module_id_t
Mod_id
,
uint8_t
CC_id
,
rnti_t
rnti
);
...
...
openair1/SCHED/phy_procedures_lte_ue.c
View file @
d8defff0
...
...
@@ -377,6 +377,112 @@ uint8_t is_SR_TXOp(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id)
return
(
0
);
}
void
get_cqipmiri_params
(
PHY_VARS_UE
*
ue
,
uint8_t
eNB_id
)
{
CQI_REPORTPERIODIC
*
cqirep
=
&
ue
->
cqi_report_config
[
eNB_id
].
CQI_ReportPeriodic
;
int
cqi_PMI_ConfigIndex
=
cqirep
->
cqi_PMI_ConfigIndex
;
if
(
ue
->
frame_parms
.
frame_type
==
FDD
)
{
if
(
cqi_PMI_ConfigIndex
<=
1
)
{
// 2 ms CQI_PMI period
cqirep
->
Npd
=
2
;
cqirep
->
N_OFFSET_CQI
=
cqi_PMI_ConfigIndex
;
}
else
if
(
cqi_PMI_ConfigIndex
<=
6
)
{
// 5 ms CQI_PMI period
cqirep
->
Npd
=
5
;
cqirep
->
N_OFFSET_CQI
=
cqi_PMI_ConfigIndex
-
1
;
}
else
if
(
cqi_PMI_ConfigIndex
<=
16
)
{
// 10ms CQI_PMI period
cqirep
->
Npd
=
10
;
cqirep
->
N_OFFSET_CQI
=
cqi_PMI_ConfigIndex
-
6
;
}
else
if
(
cqi_PMI_ConfigIndex
<=
36
)
{
// 20 ms CQI_PMI period
cqirep
->
Npd
=
20
;
cqirep
->
N_OFFSET_CQI
=
cqi_PMI_ConfigIndex
-
16
;
}
else
if
(
cqi_PMI_ConfigIndex
<=
76
)
{
// 40 ms CQI_PMI period
cqirep
->
Npd
=
40
;
cqirep
->
N_OFFSET_CQI
=
cqi_PMI_ConfigIndex
-
36
;
}
else
if
(
cqi_PMI_ConfigIndex
<=
156
)
{
// 80 ms CQI_PMI period
cqirep
->
Npd
=
80
;
cqirep
->
N_OFFSET_CQI
=
cqi_PMI_ConfigIndex
-
76
;
}
else
if
(
cqi_PMI_ConfigIndex
<=
316
)
{
// 160 ms CQI_PMI period
cqirep
->
Npd
=
160
;
cqirep
->
N_OFFSET_CQI
=
cqi_PMI_ConfigIndex
-
156
;
}
else
if
(
cqi_PMI_ConfigIndex
>
317
)
{
if
(
cqi_PMI_ConfigIndex
<=
349
)
{
// 32 ms CQI_PMI period
cqirep
->
Npd
=
32
;
cqirep
->
N_OFFSET_CQI
=
cqi_PMI_ConfigIndex
-
316
;
}
else
if
(
cqi_PMI_ConfigIndex
<=
413
)
{
// 64 ms CQI_PMI period
cqirep
->
Npd
=
64
;
cqirep
->
N_OFFSET_CQI
=
cqi_PMI_ConfigIndex
-
349
;
}
else
if
(
cqi_PMI_ConfigIndex
<=
541
)
{
// 128 ms CQI_PMI period
cqirep
->
Npd
=
128
;
cqirep
->
N_OFFSET_CQI
=
cqi_PMI_ConfigIndex
-
413
;
}
}
}
else
{
// TDD
if
(
cqi_PMI_ConfigIndex
==
0
)
{
// all UL subframes
cqirep
->
Npd
=
1
;
cqirep
->
N_OFFSET_CQI
=
0
;
}
else
if
(
cqi_PMI_ConfigIndex
<=
6
)
{
// 5 ms CQI_PMI period
cqirep
->
Npd
=
5
;
cqirep
->
N_OFFSET_CQI
=
cqi_PMI_ConfigIndex
-
1
;
}
else
if
(
cqi_PMI_ConfigIndex
<=
16
)
{
// 10ms CQI_PMI period
cqirep
->
Npd
=
10
;
cqirep
->
N_OFFSET_CQI
=
cqi_PMI_ConfigIndex
-
6
;
}
else
if
(
cqi_PMI_ConfigIndex
<=
36
)
{
// 20 ms CQI_PMI period
cqirep
->
Npd
=
20
;
cqirep
->
N_OFFSET_CQI
=
cqi_PMI_ConfigIndex
-
16
;
}
else
if
(
cqi_PMI_ConfigIndex
<=
76
)
{
// 40 ms CQI_PMI period
cqirep
->
Npd
=
40
;
cqirep
->
N_OFFSET_CQI
=
cqi_PMI_ConfigIndex
-
36
;
}
else
if
(
cqi_PMI_ConfigIndex
<=
156
)
{
// 80 ms CQI_PMI period
cqirep
->
Npd
=
80
;
cqirep
->
N_OFFSET_CQI
=
cqi_PMI_ConfigIndex
-
76
;
}
else
if
(
cqi_PMI_ConfigIndex
<=
316
)
{
// 160 ms CQI_PMI period
cqirep
->
Npd
=
160
;
cqirep
->
N_OFFSET_CQI
=
cqi_PMI_ConfigIndex
-
156
;
}
}
}
uint8_t
is_cqi_TXOp
(
PHY_VARS_UE
*
ue
,
UE_rxtx_proc_t
*
proc
,
uint8_t
eNB_id
)
{
int
subframe
=
proc
->
subframe_tx
;
int
frame
=
proc
->
frame_tx
;
CQI_REPORTPERIODIC
*
cqirep
=
&
ue
->
cqi_report_config
[
eNB_id
].
CQI_ReportPeriodic
;
LOG_D
(
PHY
,
"[UE %d][SR %x] Frame %d subframe %d Checking for CQI TXOp (cqi_ConfigIndex %d)
\n
"
,
ue
->
Mod_id
,
ue
->
pdcch_vars
[
eNB_id
]
->
crnti
,
frame
,
subframe
,
cqirep
->
cqi_PMI_ConfigIndex
);
if
(((
10
*
frame
+
subframe
)
%
cqirep
->
Npd
)
==
cqirep
->
N_OFFSET_CQI
)
return
(
1
);
else
return
(
0
);
}
uint8_t
is_ri_TXOp
(
PHY_VARS_UE
*
ue
,
UE_rxtx_proc_t
*
proc
,
uint8_t
eNB_id
)
{
int
subframe
=
proc
->
subframe_tx
;
int
frame
=
proc
->
frame_tx
;
CQI_REPORTPERIODIC
*
cqirep
=
&
ue
->
cqi_report_config
[
eNB_id
].
CQI_ReportPeriodic
;
int
log2Mri
=
cqirep
->
ri_ConfigIndex
/
161
;
int
N_OFFSET_RI
=
cqirep
->
ri_ConfigIndex
%
161
;
LOG_D
(
PHY
,
"[UE %d][SR %x] Frame %d subframe %d Checking for RI TXOp (ri_ConfigIndex %d)
\n
"
,
ue
->
Mod_id
,
ue
->
pdcch_vars
[
eNB_id
]
->
crnti
,
frame
,
subframe
,
cqirep
->
ri_ConfigIndex
);
if
(((
10
*
frame
+
subframe
+
cqirep
->
N_OFFSET_CQI
-
N_OFFSET_RI
)
%
(
cqirep
->
Npd
<<
log2Mri
))
==
0
)
return
(
1
);
else
return
(
0
);
}
uint16_t
get_n1_pucch
(
PHY_VARS_UE
*
ue
,
UE_rxtx_proc_t
*
proc
,
uint8_t
eNB_id
,
...
...
@@ -1079,14 +1185,42 @@ void ue_ulsch_uespec_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB
}
int16_t
get_pucch2_cqi
(
PHY_VARS_UE
*
ue
,
int
eNB_id
,
int
*
len
)
{
if
((
ue
->
transmission_mode
[
eNB_id
]
<
4
)
||
(
ue
->
transmission_mode
[
eNB_id
]
==
7
))
{
// Mode 1-0 feedback
// 4-bit CQI message
*
len
=
4
;
return
(
sinr2cqi
((
double
)
ue
->
measurements
.
wideband_cqi_avg
[
eNB_id
],
ue
->
transmission_mode
[
eNB_id
]));
}
else
{
// Mode 1-1 feedback, later
*
len
=
0
;
// 2-antenna ports RI=1, 6 bits (2 PMI, 4 CQI)
// 2-antenna ports RI=2, 8 bits (1 PMI, 7 CQI/DIFF CQI)
return
(
0
);
}
}
int16_t
get_pucch2_ri
(
PHY_VARS_UE
*
ue
,
int
eNB_id
)
{
return
(
1
);
}
void
ue_pucch_procedures
(
PHY_VARS_UE
*
ue
,
UE_rxtx_proc_t
*
proc
,
uint8_t
eNB_id
,
uint8_t
abstraction_flag
)
{
uint8_t
pucch_ack_payload
[
2
];
uint8_t
n1_pucch
;
uint8_t
n1_pucch
,
n2_pucch
;
ANFBmode_t
bundling_flag
;
PUCCH_FMT_t
format
;
uint8_t
SR_payload
;
uint16_t
CQI_payload
;
uint16_t
RI_payload
;
LTE_DL_FRAME_PARMS
*
frame_parms
=
&
ue
->
frame_parms
;
int
frame_tx
=
proc
->
frame_tx
;
int
subframe_tx
=
proc
->
subframe_tx
;
...
...
@@ -1210,7 +1344,7 @@ void ue_pucch_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
#endif
}
}
else
if
(
SR_payload
==
1
)
{
// no ACK/NAK but SR is triggered by MAC
if
(
ue
->
mac_enabled
==
1
)
{
Po_PUCCH
=
pucch_power_cntl
(
ue
,
proc
,
subframe_tx
,
eNB_id
,
pucch_format1
);
}
...
...
@@ -1258,6 +1392,107 @@ void ue_pucch_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
}
}
// SR_Payload==1
// PUCCH 2x
if
(
ue
->
generate_ul_signal
[
eNB_id
]
==
0
)
{
// we have not generated ACK/NAK/SR in this subframe
n2_pucch
=
ue
->
cqi_report_config
[
eNB_id
].
CQI_ReportPeriodic
.
cqi_PUCCH_ResourceIndex
;
// only use format2 for now, i.e. now ACK/NAK - CQI multiplexing
format
=
pucch_format2
;
// Periodic CQI report
if
((
ue
->
cqi_report_config
[
eNB_id
].
CQI_ReportPeriodic
.
cqi_PMI_ConfigIndex
>
0
)
&&
(
is_cqi_TXOp
(
ue
,
proc
,
eNB_id
)
==
1
)){
if
(
ue
->
mac_enabled
==
1
)
{
Po_PUCCH
=
pucch_power_cntl
(
ue
,
proc
,
subframe_tx
,
eNB_id
,
format
);
}
else
{
Po_PUCCH
=
ue
->
tx_power_max_dBm
;
}
ue
->
tx_power_dBm
[
subframe_tx
]
=
Po_PUCCH
;
ue
->
tx_total_RE
[
subframe_tx
]
=
12
;
#if defined(EXMIMO) || defined(OAI_USRP) || defined(OAI_BLADERF) || defined(OAI_LMSSDR)
tx_amp
=
get_tx_amp
(
Po_PUCCH
,
ue
->
tx_power_max_dBm
,
ue
->
frame_parms
.
N_RB_UL
,
1
);
#else
tx_amp
=
AMP
;
#endif
LOG_D
(
PHY
,
"[UE %d][SR %x] Frame %d subframe %d Generating PUCCH 2 (CQI), n2_pucch %d, Po_PUCCH %d
\n
"
,
Mod_id
,
ue
->
dlsch
[
eNB_id
][
0
]
->
rnti
,
frame_tx
,
subframe_tx
,
n2_pucch
,
Po_PUCCH
);
int
len
;
// get the payload : < 12 bits, returned in len
CQI_payload
=
get_pucch2_cqi
(
ue
,
eNB_id
,
&
len
);
generate_pucch2x
(
ue
->
common_vars
.
txdataF
,
&
ue
->
frame_parms
,
ue
->
ncs_cell
,
format
,
&
ue
->
pucch_config_dedicated
[
eNB_id
],
n2_pucch
,
1
,
// shortened format
&
CQI_payload
,
len
,
// A
0
,
// B2 not needed
tx_amp
,
subframe_tx
,
ue
->
pdcch_vars
[
eNB_id
]
->
crnti
);
}
// Periodic RI report
else
if
((
ue
->
cqi_report_config
[
eNB_id
].
CQI_ReportPeriodic
.
ri_ConfigIndex
>
0
)
&&
(
is_ri_TXOp
(
ue
,
proc
,
eNB_id
)
==
1
)){
if
(
ue
->
mac_enabled
==
1
)
{
Po_PUCCH
=
pucch_power_cntl
(
ue
,
proc
,
subframe_tx
,
eNB_id
,
format
);
}
else
{
Po_PUCCH
=
ue
->
tx_power_max_dBm
;
}
ue
->
tx_power_dBm
[
subframe_tx
]
=
Po_PUCCH
;
ue
->
tx_total_RE
[
subframe_tx
]
=
12
;
#if defined(EXMIMO) || defined(OAI_USRP) || defined(OAI_BLADERF) || defined(OAI_LMSSDR)
tx_amp
=
get_tx_amp
(
Po_PUCCH
,
ue
->
tx_power_max_dBm
,
ue
->
frame_parms
.
N_RB_UL
,
1
);
#else
tx_amp
=
AMP
;
#endif
LOG_D
(
PHY
,
"[UE %d][SR %x] Frame %d subframe %d Generating PUCCH 2 (RI), n2_pucch %d, Po_PUCCH %d
\n
"
,
Mod_id
,
ue
->
dlsch
[
eNB_id
][
0
]
->
rnti
,
frame_tx
,
subframe_tx
,
n2_pucch
,
Po_PUCCH
);
RI_payload
=
get_pucch2_ri
(
ue
,
eNB_id
);
generate_pucch2x
(
ue
->
common_vars
.
txdataF
,
&
ue
->
frame_parms
,
ue
->
ncs_cell
,
format
,
&
ue
->
pucch_config_dedicated
[
eNB_id
],
n2_pucch
,
1
,
// shortened format
&
RI_payload
,
1
,
// A
0
,
// B2 not needed
tx_amp
,
subframe_tx
,
ue
->
pdcch_vars
[
eNB_id
]
->
crnti
);
}
}
}
void
phy_procedures_UE_TX
(
PHY_VARS_UE
*
ue
,
UE_rxtx_proc_t
*
proc
,
uint8_t
eNB_id
,
uint8_t
abstraction_flag
,
runmode_t
mode
,
relaying_type_t
r_type
)
{
...
...
@@ -1299,7 +1534,10 @@ void phy_procedures_UE_TX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,ui
}
if
(
ue
->
UE_mode
[
eNB_id
]
==
PUSCH
)
{
// check if we need to use PUCCH 1a/1b
ue_pucch_procedures
(
ue
,
proc
,
eNB_id
,
abstraction_flag
);
ue_pucch_procedures
(
ue
,
proc
,
eNB_id
,
abstraction_flag
);
}
// UE_mode==PUSCH
...
...
openair2/LAYER2/MAC/eNB_scheduler_primitives.c
View file @
d8defff0
...
...
@@ -1006,7 +1006,7 @@ void dump_CCE_table(int *CCE_table,const int nCCE,const unsigned short rnti,cons
for
(
i
=
0
;
i
<
nCCE
;
i
++
)
{
printf
(
"%1d."
,
CCE_table
[
i
]);
if
((
i
&
7
)
==
7
)
printf
(
"
\n
CCE %d: "
);
printf
(
"
\n
CCE %d: "
,
i
);
}
Yk
=
(
unsigned
int
)
rnti
;
...
...
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