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
89db512d
Commit
89db512d
authored
Oct 20, 2016
by
Raymond Knopp
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
periodic cqi procedures
parent
1e34b62d
Changes
8
Show 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 @
89db512d
...
...
@@ -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 @
89db512d
...
...
@@ -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 @
89db512d
...
...
@@ -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 @
89db512d
...
...
@@ -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 @
89db512d
...
...
@@ -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 @
89db512d
...
...
@@ -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 @
89db512d
...
...
@@ -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
;
...
...
@@ -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_mode==PUSCH
...
...
openair2/LAYER2/MAC/eNB_scheduler_primitives.c
View file @
89db512d
...
...
@@ -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