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
1
Merge Requests
1
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
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
OpenXG-RAN
Commits
3df0b895
Commit
3df0b895
authored
Feb 10, 2022
by
Hongzhi Wang
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
re-activating HARQ for UL. break loop when one segment is in error
parent
65b0e7a8
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
35 additions
and
31 deletions
+35
-31
openair1/PHY/NR_TRANSPORT/nr_ulsch_decoding.c
openair1/PHY/NR_TRANSPORT/nr_ulsch_decoding.c
+35
-31
No files found.
openair1/PHY/NR_TRANSPORT/nr_ulsch_decoding.c
View file @
3df0b895
...
@@ -602,8 +602,8 @@ uint32_t nr_ulsch_decoding(PHY_VARS_gNB *phy_vars_gNB,
...
@@ -602,8 +602,8 @@ uint32_t nr_ulsch_decoding(PHY_VARS_gNB *phy_vars_gNB,
E
=
nr_get_E
(
G
,
harq_process
->
C
,
Qm
,
n_layers
,
r
);
E
=
nr_get_E
(
G
,
harq_process
->
C
,
Qm
,
n_layers
,
r
);
memset
(
harq_process
->
c
[
r
],
0
,
Kr_bytes
);
memset
(
harq_process
->
c
[
r
],
0
,
Kr_bytes
);
if
((
dtx_det
==
0
)
&&
(
pusch_pdu
->
pusch_data
.
rv_index
==
0
)){
//
if ((dtx_det==0)&&(pusch_pdu->pusch_data.rv_index==0)){
//
if (dtx_det==0){
if
(
dtx_det
==
0
){
if
(
mcs
>
9
){
if
(
mcs
>
9
){
memcpy
((
&
z_ol
[
0
]),
ulsch_llr
+
r_offset
,
E
*
sizeof
(
short
));
memcpy
((
&
z_ol
[
0
]),
ulsch_llr
+
r_offset
,
E
*
sizeof
(
short
));
...
@@ -705,6 +705,7 @@ uint32_t nr_ulsch_decoding(PHY_VARS_gNB *phy_vars_gNB,
...
@@ -705,6 +705,7 @@ uint32_t nr_ulsch_decoding(PHY_VARS_gNB *phy_vars_gNB,
else
{
else
{
no_iteration_ldpc
=
ulsch
->
max_ldpc_iterations
+
1
;
no_iteration_ldpc
=
ulsch
->
max_ldpc_iterations
+
1
;
}
}
bool
decodeSuccess
=
(
no_iteration_ldpc
<=
ulsch
->
max_ldpc_iterations
);
bool
decodeSuccess
=
(
no_iteration_ldpc
<=
ulsch
->
max_ldpc_iterations
);
if
(
decodeSuccess
)
{
if
(
decodeSuccess
)
{
memcpy
(
harq_process
->
b
+
offset
,
memcpy
(
harq_process
->
b
+
offset
,
...
@@ -716,37 +717,40 @@ uint32_t nr_ulsch_decoding(PHY_VARS_gNB *phy_vars_gNB,
...
@@ -716,37 +717,40 @@ uint32_t nr_ulsch_decoding(PHY_VARS_gNB *phy_vars_gNB,
else
{
else
{
LOG_D
(
PHY
,
"uplink segment error %d/%d
\n
"
,
r
,
harq_process
->
C
);
LOG_D
(
PHY
,
"uplink segment error %d/%d
\n
"
,
r
,
harq_process
->
C
);
LOG_D
(
PHY
,
"ULSCH %d in error
\n
"
,
ULSCH_id
);
LOG_D
(
PHY
,
"ULSCH %d in error
\n
"
,
ULSCH_id
);
break
;
//don't even attempt to decode other segments
}
}
if
(
r
==
(
harq_process
->
C
-
1
)){
}
if
((
decodeSuccess
)
&&
(
harq_process
->
processedSegments
==
(
harq_process
->
C
)))
{
LOG_D
(
PHY
,
"[gNB %d] ULSCH: Setting ACK for slot %d TBS %d
\n
"
,
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_gNB_ULSCH_DECODING
,
0
);
phy_vars_gNB
->
Mod_id
,
harq_process
->
slot
,
harq_process
->
TBS
);
harq_process
->
status
=
SCH_IDLE
;
if
((
harq_process
->
processedSegments
==
(
harq_process
->
C
)))
{
harq_process
->
round
=
0
;
LOG_D
(
PHY
,
"[gNB %d] ULSCH: Setting ACK for slot %d TBS %d
\n
"
,
ulsch
->
harq_mask
&=
~
(
1
<<
harq_pid
);
phy_vars_gNB
->
Mod_id
,
harq_process
->
slot
,
harq_process
->
TBS
);
harq_process
->
status
=
SCH_IDLE
;
LOG_D
(
PHY
,
"ULSCH received ok
\n
"
);
harq_process
->
round
=
0
;
nr_fill_indication
(
phy_vars_gNB
,
harq_process
->
frame
,
harq_process
->
slot
,
ULSCH_id
,
harq_pid
,
0
,
0
);
ulsch
->
harq_mask
&=
~
(
1
<<
harq_pid
);
}
else
{
LOG_D
(
PHY
,
"ULSCH received ok
\n
"
);
LOG_D
(
PHY
,
"[gNB %d] ULSCH: Setting NAK for SFN/SF %d/%d (pid %d, status %d, round %d, TBS %d) r %d
\n
"
,
nr_fill_indication
(
phy_vars_gNB
,
harq_process
->
frame
,
harq_process
->
slot
,
ULSCH_id
,
harq_pid
,
0
,
0
);
phy_vars_gNB
->
Mod_id
,
harq_process
->
frame
,
harq_process
->
slot
,
harq_pid
,
harq_process
->
status
,
harq_process
->
round
,
harq_process
->
TBS
,
r
);
}
else
{
if
(
harq_process
->
round
>=
ulsch
->
Mlimit
)
{
LOG_D
(
PHY
,
"[gNB %d] ULSCH: Setting NAK for SFN/SF %d/%d (pid %d, status %d, round %d, TBS %d) r %d
\n
"
,
harq_process
->
status
=
SCH_IDLE
;
phy_vars_gNB
->
Mod_id
,
harq_process
->
frame
,
harq_process
->
slot
,
harq_process
->
round
=
0
;
harq_pid
,
harq_process
->
status
,
harq_process
->
round
,
harq_process
->
TBS
,
r
);
harq_process
->
handled
=
0
;
if
(
harq_process
->
round
>=
ulsch
->
Mlimit
)
{
ulsch
->
harq_mask
&=
~
(
1
<<
harq_pid
);
harq_process
->
status
=
SCH_IDLE
;
}
harq_process
->
round
=
0
;
harq_process
->
handled
=
1
;
harq_process
->
handled
=
0
;
no_iteration_ldpc
=
ulsch
->
max_ldpc_iterations
+
1
;
ulsch
->
harq_mask
&=
~
(
1
<<
harq_pid
);
LOG_D
(
PHY
,
"ULSCH %d in error
\n
"
,
ULSCH_id
);
}
nr_fill_indication
(
phy_vars_gNB
,
harq_process
->
frame
,
harq_process
->
slot
,
ULSCH_id
,
harq_pid
,
1
,
0
);
harq_process
->
handled
=
1
;
}
no_iteration_ldpc
=
ulsch
->
max_ldpc_iterations
+
1
;
ulsch
->
last_iteration_cnt
=
no_iteration_ldpc
;
LOG_D
(
PHY
,
"ULSCH %d in error
\n
"
,
ULSCH_id
);
}
nr_fill_indication
(
phy_vars_gNB
,
harq_process
->
frame
,
harq_process
->
slot
,
ULSCH_id
,
harq_pid
,
1
,
0
);
}
}
}
ulsch
->
last_iteration_cnt
=
no_iteration_ldpc
;
}
else
{
else
{
void
(
*
nr_processULSegment_ptr
)(
void
*
)
=
&
nr_processULSegment
;
void
(
*
nr_processULSegment_ptr
)(
void
*
)
=
&
nr_processULSegment
;
...
...
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