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
常顺宇
OpenXG-RAN
Commits
33e89e3e
Commit
33e89e3e
authored
Nov 24, 2016
by
GabrirelCouturier
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[OAI-UE] fix for issue#32
1- timing Advance fix 2- harq UL fix
parent
dab71e4c
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
59 additions
and
32 deletions
+59
-32
openair1/PHY/LTE_TRANSPORT/dci_tools.c
openair1/PHY/LTE_TRANSPORT/dci_tools.c
+26
-23
openair1/PHY/LTE_TRANSPORT/phich.c
openair1/PHY/LTE_TRANSPORT/phich.c
+12
-3
openair1/PHY/LTE_TRANSPORT/ulsch_coding.c
openair1/PHY/LTE_TRANSPORT/ulsch_coding.c
+1
-1
openair1/PHY/LTE_TRANSPORT/ulsch_modulation.c
openair1/PHY/LTE_TRANSPORT/ulsch_modulation.c
+1
-2
openair1/SCHED/phy_procedures_lte_ue.c
openair1/SCHED/phy_procedures_lte_ue.c
+19
-3
No files found.
openair1/PHY/LTE_TRANSPORT/dci_tools.c
View file @
33e89e3e
...
@@ -6444,29 +6444,30 @@ int generate_ue_ulsch_params_from_dci(void *dci_pdu,
...
@@ -6444,29 +6444,30 @@ int generate_ue_ulsch_params_from_dci(void *dci_pdu,
// UE_mac_inst[eNB_id].scheduling_info.maxHARQ_Tx);
// UE_mac_inst[eNB_id].scheduling_info.maxHARQ_Tx);
//#endif
//#endif
if
(
ulsch
->
harq_processes
[
harq_pid
]
->
round
>
0
)
// NACK detected on phich
ulsch
->
harq_processes
[
harq_pid
]
=
ulsch
->
harq_processes
[
8
];
ulsch
->
harq_processes
[
harq_pid
]
->
round
++
;
//LOG_I(PHY," Adaptative retransmission - copy temporary harq Process to current harq process. [harqId %d round %d] \n",harq_pid, ulsch->harq_processes[8]->round);
if
(
ulsch
->
harq_processes
[
harq_pid
]
->
round
>=
UE_mac_inst
[
eNB_id
].
scheduling_info
.
maxHARQ_Tx
)
{
{
ulsch
->
harq_processes
[
harq_pid
]
->
subframe_scheduling_flag
=
0
;
// ulsch->harq_processes[harq_pid]->round++; already done on phich_rx
ulsch
->
harq_processes
[
harq_pid
]
->
round
=
0
;
ulsch
->
harq_processes
[
harq_pid
]
=
ulsch
->
harq_processes
[
8
];
ulsch
->
harq_processes
[
harq_pid
]
->
status
=
IDLE
;
// LOG_I(PHY," Adaptative retransmission - copy temporary harq Process to current harq process. [harqId %d round %d] \n",harq_pid, ulsch->harq_processes[8]->round);
//LOG_I(PHY," PUSCH MAX Retransmission acheived ==> flush harq buff (%d) \n",harq_pid);
//LOG_I(PHY," [HARQ-UL harqId: %d] Adaptative retransmission NACK MAX RETRANS(%d) ==> subframe_scheduling_flag = %d round: %d\n", harq_pid, UE_mac_inst[eNB_id].scheduling_info.maxHARQ_Tx, ulsch->harq_processes[harq_pid]->subframe_scheduling_flag, ulsch->harq_processes[harq_pid]->round);
if
(
ulsch
->
harq_processes
[
harq_pid
]
->
round
>=
UE_mac_inst
[
eNB_id
].
scheduling_info
.
maxHARQ_Tx
)
}
{
else
ulsch
->
harq_processes
[
harq_pid
]
->
subframe_scheduling_flag
=
0
;
{
ulsch
->
harq_processes
[
harq_pid
]
->
round
=
0
;
// ulsch->harq_processes[harq_pid]->subframe_scheduling_flag = 1;
ulsch
->
harq_processes
[
harq_pid
]
->
status
=
IDLE
;
uint8_t
rv_table
[
4
]
=
{
0
,
2
,
3
,
1
};
//LOG_I(PHY," PUSCH MAX Retransmission acheived ==> flush harq buff (%d) \n",harq_pid);
ulsch
->
harq_processes
[
harq_pid
]
->
rvidx
=
rv_table
[
ulsch
->
harq_processes
[
harq_pid
]
->
round
&
3
];
//LOG_I(PHY," [HARQ-UL harqId: %d] Adaptative retransmission NACK MAX RETRANS(%d) ==> subframe_scheduling_flag = %d round: %d\n", harq_pid, UE_mac_inst[eNB_id].scheduling_info.maxHARQ_Tx, ulsch->harq_processes[harq_pid]->subframe_scheduling_flag, ulsch->harq_processes[harq_pid]->round);
ulsch
->
O_RI
=
0
;
}
ulsch
->
O
=
0
;
else
ulsch
->
uci_format
=
HLC_subband_cqi_nopmi
;
{
//LOG_I(PHY," [HARQ-UL harqId: %d] Adaptative retransmission NACK ==> subframe_scheduling_flag = %d round: %d\n", harq_pid, ulsch->harq_processes[harq_pid]->subframe_scheduling_flag,ulsch->harq_processes[harq_pid]->round);
// ulsch->harq_processes[harq_pid]->subframe_scheduling_flag = 1;
uint8_t
rv_table
[
4
]
=
{
0
,
2
,
3
,
1
};
ulsch
->
harq_processes
[
harq_pid
]
->
rvidx
=
rv_table
[
ulsch
->
harq_processes
[
harq_pid
]
->
round
&
3
];
ulsch
->
O_RI
=
0
;
ulsch
->
O
=
0
;
ulsch
->
uci_format
=
HLC_subband_cqi_nopmi
;
//LOG_I(PHY," [HARQ-UL harqId: %d] Adaptative retransmission NACK ==> subframe_scheduling_flag = %d round: %d\n", harq_pid, ulsch->harq_processes[harq_pid]->subframe_scheduling_flag,ulsch->harq_processes[harq_pid]->round);
}
}
}
}
}
...
@@ -7087,7 +7088,8 @@ int generate_ue_ulsch_params_from_dci(void *dci_pdu,
...
@@ -7087,7 +7088,8 @@ int generate_ue_ulsch_params_from_dci(void *dci_pdu,
// ulsch->n_DMRS2 = ((DCI0_5MHz_TDD_1_6_t *)dci_pdu)->cshift;
// ulsch->n_DMRS2 = ((DCI0_5MHz_TDD_1_6_t *)dci_pdu)->cshift;
#ifdef DEBUG_DCI
#ifdef DEBUG_DCI
printf
(
"Format 0 DCI : ulsch (ue): AbsSubframe %d.%d
\n
"
,
proc
->
frame_rx
,
subframe
);
printf
(
"Format 0 DCI : ulsch (ue): NBRB %d
\n
"
,
ulsch
->
harq_processes
[
harq_pid
]
->
nb_rb
);
printf
(
"Format 0 DCI : ulsch (ue): NBRB %d
\n
"
,
ulsch
->
harq_processes
[
harq_pid
]
->
nb_rb
);
printf
(
"Format 0 DCI :ulsch (ue): first_rb %d
\n
"
,
ulsch
->
harq_processes
[
harq_pid
]
->
first_rb
);
printf
(
"Format 0 DCI :ulsch (ue): first_rb %d
\n
"
,
ulsch
->
harq_processes
[
harq_pid
]
->
first_rb
);
printf
(
"Format 0 DCI :ulsch (ue): rballoc %d
\n
"
,
rballoc
);
printf
(
"Format 0 DCI :ulsch (ue): rballoc %d
\n
"
,
rballoc
);
...
@@ -7106,6 +7108,7 @@ int generate_ue_ulsch_params_from_dci(void *dci_pdu,
...
@@ -7106,6 +7108,7 @@ int generate_ue_ulsch_params_from_dci(void *dci_pdu,
printf
(
"Format 0 DCI :ulsch (ue): Nsymb_pusch %d
\n
"
,
ulsch
->
Nsymb_pusch
);
printf
(
"Format 0 DCI :ulsch (ue): Nsymb_pusch %d
\n
"
,
ulsch
->
Nsymb_pusch
);
printf
(
"Format 0 DCI :ulsch (ue): cshift %d
\n
"
,
ulsch
->
harq_processes
[
harq_pid
]
->
n_DMRS2
);
printf
(
"Format 0 DCI :ulsch (ue): cshift %d
\n
"
,
ulsch
->
harq_processes
[
harq_pid
]
->
n_DMRS2
);
printf
(
"Format 0 DCI :ulsch (ue): phich status %d
\n
"
,
ulsch
->
harq_processes
[
harq_pid
]
->
status
);
#else
#else
UNUSED_VARIABLE
(
dai
);
UNUSED_VARIABLE
(
dai
);
#endif
#endif
...
...
openair1/PHY/LTE_TRANSPORT/phich.c
View file @
33e89e3e
...
@@ -1386,11 +1386,20 @@ void rx_phich(PHY_VARS_UE *ue,
...
@@ -1386,11 +1386,20 @@ void rx_phich(PHY_VARS_UE *ue,
// ulsch->harq_processes[harq_pid]->Ndi = 0;
// ulsch->harq_processes[harq_pid]->Ndi = 0;
ulsch
->
harq_processes
[
harq_pid
]
->
round
++
;
ulsch
->
harq_processes
[
harq_pid
]
->
round
++
;
if
(
ulsch
->
harq_processes
[
harq_pid
]
->
round
>=
UE_mac_inst
[
eNB_id
].
scheduling_info
.
maxHARQ_Tx
)
if
(
ulsch
->
harq_processes
[
harq_pid
]
->
round
>=
(
UE_mac_inst
[
eNB_id
].
scheduling_info
.
maxHARQ_Tx
-
1
)
)
{
{
ulsch
->
harq_processes
[
harq_pid
]
->
subframe_scheduling_flag
=
0
;
// this is last push re transmission
ulsch
->
harq_processes
[
harq_pid
]
->
round
=
0
;
ulsch
->
harq_processes
[
harq_pid
]
->
rvidx
=
rv_table
[
ulsch
->
harq_processes
[
harq_pid
]
->
round
&
3
];
ulsch
->
O_RI
=
0
;
ulsch
->
O
=
0
;
ulsch
->
uci_format
=
HLC_subband_cqi_nopmi
;
// disable phich decoding since it is the last retransmission
ulsch
->
harq_processes
[
harq_pid
]
->
status
=
IDLE
;
ulsch
->
harq_processes
[
harq_pid
]
->
status
=
IDLE
;
//ulsch->harq_processes[harq_pid]->subframe_scheduling_flag = 0;
//ulsch->harq_processes[harq_pid]->round = 0;
//LOG_I(PHY,"PUSCH MAX Retransmission acheived ==> flush harq buff (%d) \n",harq_pid);
//LOG_I(PHY,"PUSCH MAX Retransmission acheived ==> flush harq buff (%d) \n",harq_pid);
//LOG_I(PHY,"[HARQ-UL harqId: %d] PHICH NACK MAX RETRANS(%d) ==> subframe_scheduling_flag = %d round: %d\n", harq_pid, UE_mac_inst[eNB_id].scheduling_info.maxHARQ_Tx, ulsch->harq_processes[harq_pid]->subframe_scheduling_flag, ulsch->harq_processes[harq_pid]->round);
//LOG_I(PHY,"[HARQ-UL harqId: %d] PHICH NACK MAX RETRANS(%d) ==> subframe_scheduling_flag = %d round: %d\n", harq_pid, UE_mac_inst[eNB_id].scheduling_info.maxHARQ_Tx, ulsch->harq_processes[harq_pid]->subframe_scheduling_flag, ulsch->harq_processes[harq_pid]->round);
}
}
...
...
openair1/PHY/LTE_TRANSPORT/ulsch_coding.c
View file @
33e89e3e
...
@@ -503,7 +503,7 @@ uint32_t ulsch_encoding(uint8_t *a,
...
@@ -503,7 +503,7 @@ uint32_t ulsch_encoding(uint8_t *a,
/*
/*
LOG_I(PHY,"ULSCH Encoding G %d, Q_RI %d (O_RI%d, Msc_initial %d, Nsymb_initial%d, beta_offset_ri_times8 %d), Q_CQI %d \n",G,Q_RI,ulsch->O_RI,ulsch->harq_processes[harq_pid]->Msc_initial,ulsch->harq_processes[harq_pid]->Nsymb_initial,ulsch->beta_offset_ri_times8,Q_CQI);
LOG_I(PHY,"ULSCH Encoding G %d, Q_RI %d (O_RI%d, Msc_initial %d, Nsymb_initial%d, beta_offset_ri_times8 %d), Q_CQI %d \n",G,Q_RI,ulsch->O_RI,ulsch->harq_processes[harq_pid]->Msc_initial,ulsch->harq_processes[harq_pid]->Nsymb_initial,ulsch->beta_offset_ri_times8,Q_CQI);
LOG_I(PHY,"
ulsch_de
coding (Nid_cell %d, rnti %x): harq_pid %d round %d, RV %d, mcs %d, O_RI %d, O_ACK %d, G %d\n",
LOG_I(PHY,"
ULSCH En
coding (Nid_cell %d, rnti %x): harq_pid %d round %d, RV %d, mcs %d, O_RI %d, O_ACK %d, G %d\n",
frame_parms->Nid_cell,ulsch->rnti,
frame_parms->Nid_cell,ulsch->rnti,
harq_pid,
harq_pid,
ulsch->harq_processes[harq_pid]->round,
ulsch->harq_processes[harq_pid]->round,
...
...
openair1/PHY/LTE_TRANSPORT/ulsch_modulation.c
View file @
33e89e3e
...
@@ -424,9 +424,8 @@ void ulsch_modulation(int32_t **txdataF,
...
@@ -424,9 +424,8 @@ void ulsch_modulation(int32_t **txdataF,
Q_m
=
get_Qm_ul
(
ulsch
->
harq_processes
[
harq_pid
]
->
mcs
);
Q_m
=
get_Qm_ul
(
ulsch
->
harq_processes
[
harq_pid
]
->
mcs
);
//
G = (int)ulsch->harq_processes[harq_pid]->nb_rb * (12 * Q_m) * (ulsch->Nsymb_pusch);
G
=
(
int
)
ulsch
->
harq_processes
[
harq_pid
]
->
nb_rb
*
(
12
*
Q_m
)
*
(
ulsch
->
Nsymb_pusch
);
G
=
ulsch
->
harq_processes
[
harq_pid
]
->
G
;
// Mapping
// Mapping
nsymb
=
(
frame_parms
->
Ncp
==
0
)
?
14
:
12
;
nsymb
=
(
frame_parms
->
Ncp
==
0
)
?
14
:
12
;
...
...
openair1/SCHED/phy_procedures_lte_ue.c
View file @
33e89e3e
...
@@ -944,9 +944,18 @@ void ulsch_common_procedures(PHY_VARS_UE *ue, UE_rxtx_proc_t *proc) {
...
@@ -944,9 +944,18 @@ void ulsch_common_procedures(PHY_VARS_UE *ue, UE_rxtx_proc_t *proc) {
#if defined(EXMIMO) || defined(OAI_USRP) || defined(OAI_BLADERF) || defined(OAI_LMSSDR)//this is the EXPRESS MIMO case
#if defined(EXMIMO) || defined(OAI_USRP) || defined(OAI_BLADERF) || defined(OAI_LMSSDR)//this is the EXPRESS MIMO case
ulsch_start
=
(
ue
->
rx_offset
+
subframe_tx
*
frame_parms
->
samples_per_tti
-
ulsch_start
=
(
ue
->
rx_offset
+
subframe_tx
*
frame_parms
->
samples_per_tti
-
ue
->
hw_timing_advance
-
ue
->
hw_timing_advance
-
ue
->
timing_advance
-
ue
->
timing_advance
-
ue
->
N_TA_offset
+
5
)
%
(
LTE_NUMBER_OF_SUBFRAMES_PER_FRAME
*
frame_parms
->
samples_per_tti
);
ue
->
N_TA_offset
+
5
);
//LOG_E(PHY,"ul-signal [subframe: %d, ulsch_start %d]\n",subframe_tx, ulsch_start);
if
(
ulsch_start
<
0
)
ulsch_start
=
ulsch_start
+
(
LTE_NUMBER_OF_SUBFRAMES_PER_FRAME
*
frame_parms
->
samples_per_tti
);
if
(
ulsch_start
>
(
LTE_NUMBER_OF_SUBFRAMES_PER_FRAME
*
frame_parms
->
samples_per_tti
))
ulsch_start
=
ulsch_start
%
(
LTE_NUMBER_OF_SUBFRAMES_PER_FRAME
*
frame_parms
->
samples_per_tti
);
//LOG_E(PHY,"ul-signal [subframe: %d, ulsch_start %d]\n",subframe_tx, ulsch_start);
#else //this is the normal case
#else //this is the normal case
ulsch_start
=
(
frame_parms
->
samples_per_tti
*
subframe_tx
)
-
ue
->
N_TA_offset
;
//-ue->timing_advance;
ulsch_start
=
(
frame_parms
->
samples_per_tti
*
subframe_tx
)
-
ue
->
N_TA_offset
;
//-ue->timing_advance;
#endif //else EXMIMO
#endif //else EXMIMO
...
@@ -1214,6 +1223,13 @@ void ue_ulsch_uespec_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB
...
@@ -1214,6 +1223,13 @@ void ue_ulsch_uespec_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB
// deactivate service request
// deactivate service request
// ue->ulsch[eNB_id]->harq_processes[harq_pid]->subframe_scheduling_flag = 0;
// ue->ulsch[eNB_id]->harq_processes[harq_pid]->subframe_scheduling_flag = 0;
LOG_D
(
PHY
,
"Generating PUSCH (Abssubframe: %d.%d): harq-Id: %d, round: %d, MaxReTrans: %d
\n
"
,
frame_tx
,
subframe_tx
,
harq_pid
,
ue
->
ulsch
[
eNB_id
]
->
harq_processes
[
harq_pid
]
->
round
,
UE_mac_inst
[
eNB_id
].
scheduling_info
.
maxHARQ_Tx
);
if
(
ue
->
ulsch
[
eNB_id
]
->
harq_processes
[
harq_pid
]
->
round
>=
(
UE_mac_inst
[
eNB_id
].
scheduling_info
.
maxHARQ_Tx
-
1
))
{
LOG_D
(
PHY
,
"PUSCH MAX Retransmission acheived ==> send last pusch (%d)
\n
"
);
ue
->
ulsch
[
eNB_id
]
->
harq_processes
[
harq_pid
]
->
subframe_scheduling_flag
=
0
;
ue
->
ulsch
[
eNB_id
]
->
harq_processes
[
harq_pid
]
->
round
=
0
;
}
ack_status
=
get_ack
(
&
ue
->
frame_parms
,
ack_status
=
get_ack
(
&
ue
->
frame_parms
,
ue
->
dlsch
[
eNB_id
][
0
]
->
harq_ack
,
ue
->
dlsch
[
eNB_id
][
0
]
->
harq_ack
,
...
...
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