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
Michael Black
OpenXG-RAN
Commits
91fd14bf
Commit
91fd14bf
authored
Jun 05, 2020
by
Sakthivel Velumani
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
UE harq bugfixes
parent
7948d26f
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
44 additions
and
35 deletions
+44
-35
executables/nr-ue.c
executables/nr-ue.c
+5
-4
openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_decoding.c
openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_decoding.c
+3
-0
openair1/SCHED_NR_UE/phy_procedures_nr_ue.c
openair1/SCHED_NR_UE/phy_procedures_nr_ue.c
+4
-2
openair1/SCHED_NR_UE/pucch_uci_ue_nr.c
openair1/SCHED_NR_UE/pucch_uci_ue_nr.c
+32
-29
No files found.
executables/nr-ue.c
View file @
91fd14bf
...
...
@@ -374,7 +374,7 @@ void processSlotTX( PHY_VARS_NR_UE *UE, UE_nr_rxtx_proc_t *proc) {
nr_scheduled_response_t
scheduled_response
;
// program PUSCH. this should actually be done by the MAC upon reception of an UL DCI
if
(
proc
->
nr_tti_tx
==
8
||
proc
->
nr_tti_tx
==
19
||
UE
->
frame_parms
.
frame_type
==
FDD
){
if
(
proc
->
nr_tti_tx
==
8
||
proc
->
nr_tti_tx
==
7
||
UE
->
frame_parms
.
frame_type
==
FDD
){
mod_id
=
UE
->
Mod_id
;
...
...
@@ -420,7 +420,7 @@ void processSlotTX( PHY_VARS_NR_UE *UE, UE_nr_rxtx_proc_t *proc) {
nr_ue_scheduled_response
(
&
scheduled_response
);
if
(
UE
->
mode
!=
loop_through_memory
)
{
uint8_t
thread_id
=
PHY_vars_UE_g
[
mod_id
][
0
]
->
current_thread_id
[
proc
->
nr_tti_
t
x
];
uint8_t
thread_id
=
PHY_vars_UE_g
[
mod_id
][
0
]
->
current_thread_id
[
proc
->
nr_tti_
r
x
];
phy_procedures_nrUE_TX
(
UE
,
proc
,
0
,
thread_id
);
}
}
...
...
@@ -860,8 +860,9 @@ void *UE_thread(void *arg) {
usleep
(
200
);
}
if
(
decoded_frame_rx
!=
curMsg
->
proc
.
frame_rx
&&
((
decoded_frame_rx
+
1
)
%
MAX_FRAME_NUMBER
)
!=
curMsg
->
proc
.
frame_rx
)
if
(
(
decoded_frame_rx
!=
curMsg
->
proc
.
frame_rx
)
&&
(((
decoded_frame_rx
+
1
)
%
MAX_FRAME_NUMBER
)
!=
curMsg
->
proc
.
frame_rx
)
&&
(((
decoded_frame_rx
+
2
)
%
MAX_FRAME_NUMBER
)
!=
curMsg
->
proc
.
frame_rx
))
LOG_D
(
PHY
,
"Decoded frame index (%d) is not compatible with current context (%d), UE should go back to synch mode
\n
"
,
decoded_frame_rx
,
curMsg
->
proc
.
frame_rx
);
...
...
openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_decoding.c
View file @
91fd14bf
...
...
@@ -32,6 +32,7 @@
#include "common/utils/LOG/vcd_signal_dumper.h"
#include "PHY/defs_nr_UE.h"
#include "SCHED_NR_UE/harq_nr.h"
#include "PHY/phy_extern_nr_ue.h"
#include "PHY/CODING/coding_extern.h"
#include "PHY/CODING/coding_defs.h"
...
...
@@ -132,6 +133,7 @@ NR_UE_DLSCH_t *new_nr_ue_dlsch(uint8_t Kmimo,uint8_t Mdlharq,uint32_t Nsoft,uint
memset
(
dlsch
,
0
,
sizeof
(
NR_UE_DLSCH_t
));
dlsch
->
Kmimo
=
Kmimo
;
dlsch
->
Mdlharq
=
Mdlharq
;
dlsch
->
number_harq_processes_for_pdsch
=
Mdlharq
;
dlsch
->
Nsoft
=
Nsoft
;
dlsch
->
Mlimit
=
4
;
dlsch
->
max_ldpc_iterations
=
max_ldpc_iterations
;
...
...
@@ -142,6 +144,7 @@ NR_UE_DLSCH_t *new_nr_ue_dlsch(uint8_t Kmimo,uint8_t Mdlharq,uint32_t Nsoft,uint
if
(
dlsch
->
harq_processes
[
i
])
{
memset
(
dlsch
->
harq_processes
[
i
],
0
,
sizeof
(
NR_DL_UE_HARQ_t
));
init_downlink_harq_status
(
dlsch
->
harq_processes
[
i
]);
dlsch
->
harq_processes
[
i
]
->
first_tx
=
1
;
dlsch
->
harq_processes
[
i
]
->
b
=
(
uint8_t
*
)
malloc16
(
dlsch_bytes
);
...
...
openair1/SCHED_NR_UE/phy_procedures_nr_ue.c
View file @
91fd14bf
...
...
@@ -44,6 +44,7 @@
#include "PHY/NR_UE_TRANSPORT/nr_transport_proto_ue.h"
//#include "PHY/extern.h"
#include "SCHED_NR_UE/defs.h"
#include "SCHED_NR_UE/pucch_uci_ue_nr.h"
#include "SCHED_NR/extern.h"
#include "SCHED_NR_UE/phy_sch_processing_time.h"
//#include <sched.h>
...
...
@@ -4032,8 +4033,8 @@ int phy_procedures_nrUE_RX(PHY_VARS_NR_UE *ue,
NR_UE_PDCCH
*
pdcch_vars
=
ue
->
pdcch_vars
[
ue
->
current_thread_id
[
nr_tti_rx
]][
0
];
NR_UE_DLSCH_t
**
dlsch
=
ue
->
dlsch
[
ue
->
current_thread_id
[
nr_tti_rx
]][
eNB_id
];
fapi_nr_config_request_t
*
cfg
=
&
ue
->
nrUE_config
;
uint8_t
harq_pid
=
ue
->
dlsch
[
ue
->
current_thread_id
[
nr_tti_rx
]][
eNB_id
][
0
]
->
current_harq_pid
;
NR_DL_UE_HARQ_t
*
dlsch0_harq
=
dlsch
[
0
]
->
harq_processes
[
harq_pid
];
uint8_t
*
harq_pid
=
&
ue
->
dlsch
[
ue
->
current_thread_id
[
nr_tti_rx
]][
eNB_id
][
0
]
->
current_harq_pid
;
NR_DL_UE_HARQ_t
*
dlsch0_harq
=
dlsch
[
0
]
->
harq_processes
[
*
harq_pid
];
uint16_t
nb_symb_sch
=
dlsch0_harq
->
nb_symbols
;
uint16_t
start_symb_sch
=
dlsch0_harq
->
start_symbol
;
uint8_t
nb_symb_pdcch
=
pdcch_vars
->
nb_search_space
>
0
?
pdcch_vars
->
pdcch_config
[
0
].
coreset
.
duration
:
0
;
...
...
@@ -4144,6 +4145,7 @@ int phy_procedures_nrUE_RX(PHY_VARS_NR_UE *ue,
if
(
dci_cnt
>
0
){
LOG_D
(
PHY
,
" ------ --> PDSCH ChannelComp/LLR Frame.slot %d.%d ------
\n
"
,
frame_rx
%
1024
,
nr_tti_rx
);
//to update from pdsch config
dlsch0_harq
=
dlsch
[
0
]
->
harq_processes
[
*
harq_pid
];
start_symb_sch
=
dlsch0_harq
->
start_symbol
;
int
symb_dmrs
=-
1
;
for
(
int
i
=
0
;
i
<
4
;
i
++
)
if
(((
1
<<
i
)
&
dlsch0_harq
->
dlDmrsSymbPos
)
>
0
)
{
symb_dmrs
=
i
;
break
;}
...
...
openair1/SCHED_NR_UE/pucch_uci_ue_nr.c
View file @
91fd14bf
...
...
@@ -718,41 +718,44 @@ uint8_t get_downlink_ack(PHY_VARS_NR_UE *ue, uint8_t gNB_id, UE_nr_rxtx_proc_t
for
(
int
dl_harq_pid
=
0
;
dl_harq_pid
<
number_pid_dl
;
dl_harq_pid
++
)
{
harq_status
=
&
ue
->
dlsch
[
ue
->
current_thread_id
[
proc
->
nr_tti_rx
]][
gNB_id
][
code_word
]
->
harq_processes
[
dl_harq_pid
]
->
harq_ack
;
for
(
int
thread_idx
=
0
;
thread_idx
<
RX_NB_TH
;
thread_idx
++
)
{
/* check if current tx slot should transmit downlink acknowlegment */
if
(
harq_status
->
slot_for_feedback_ack
==
proc
->
nr_tti_tx
)
{
harq_status
=
&
ue
->
dlsch
[
thread_idx
][
gNB_id
][
code_word
]
->
harq_processes
[
dl_harq_pid
]
->
harq_ack
;
if
(
harq_status
->
ack
==
DL_ACKNACK_NO_SET
)
{
LOG_E
(
PHY
,
"PUCCH Downlink acknowledgment has not been set : at line %d in function %s of file %s
\n
"
,
LINE_FILE
,
__func__
,
FILE_NAME
);
return
(
0
);
}
else
if
(
harq_status
->
vDAI_DL
==
DL_DAI_NO_SET
)
{
LOG_E
(
PHY
,
"PUCCH Downlink DAI has not been set : at line %d in function %s of file %s
\n
"
,
LINE_FILE
,
__func__
,
FILE_NAME
);
return
(
0
);
}
else
if
(
harq_status
->
vDAI_DL
>
NR_DL_MAX_DAI
)
{
LOG_E
(
PHY
,
"PUCCH Downlink DAI has an invalid value : at line %d in function %s of file %s
\n
"
,
LINE_FILE
,
__func__
,
FILE_NAME
);
return
(
0
);
}
else
if
(
harq_status
->
send_harq_status
==
0
)
{
LOG_E
(
PHY
,
"PUCCH Downlink ack can not be transmitted : at line %d in function %s of file %s
\n
"
,
LINE_FILE
,
__func__
,
FILE_NAME
);
return
(
0
);
}
else
{
dai_current
=
harq_status
->
vDAI_DL
;
/* check if current tx slot should transmit downlink acknowlegment */
if
(
harq_status
->
slot_for_feedback_ack
==
proc
->
nr_tti_tx
)
{
if
(
dai_current
==
0
)
{
LOG_E
(
PHY
,
"PUCCH Downlink dai is invalid : at line %d in function %s of file %s
\n
"
,
LINE_FILE
,
__func__
,
FILE_NAME
);
if
(
harq_status
->
ack
==
DL_ACKNACK_NO_SET
)
{
LOG_E
(
PHY
,
"PUCCH Downlink acknowledgment has not been set : at line %d in function %s of file %s
\n
"
,
LINE_FILE
,
__func__
,
FILE_NAME
);
return
(
0
);
}
else
if
(
harq_status
->
vDAI_DL
==
DL_DAI_NO_SET
)
{
LOG_E
(
PHY
,
"PUCCH Downlink DAI has not been set : at line %d in function %s of file %s
\n
"
,
LINE_FILE
,
__func__
,
FILE_NAME
);
return
(
0
);
}
else
if
(
harq_status
->
vDAI_DL
>
NR_DL_MAX_DAI
)
{
LOG_E
(
PHY
,
"PUCCH Downlink DAI has an invalid value : at line %d in function %s of file %s
\n
"
,
LINE_FILE
,
__func__
,
FILE_NAME
);
return
(
0
);
}
else
if
(
harq_status
->
send_harq_status
==
0
)
{
LOG_E
(
PHY
,
"PUCCH Downlink ack can not be transmitted : at line %d in function %s of file %s
\n
"
,
LINE_FILE
,
__func__
,
FILE_NAME
);
return
(
0
);
}
else
if
(
dai_current
>
dai_max
)
{
dai_max
=
dai_current
;
}
else
{
dai_current
=
harq_status
->
vDAI_DL
;
number_harq_feedback
++
;
ack_data
[
code_word
][
dai_current
-
1
]
=
harq_status
->
ack
;
dai
[
code_word
][
dai_current
-
1
]
=
dai_current
;
if
(
dai_current
==
0
)
{
LOG_E
(
PHY
,
"PUCCH Downlink dai is invalid : at line %d in function %s of file %s
\n
"
,
LINE_FILE
,
__func__
,
FILE_NAME
);
return
(
0
);
}
else
if
(
dai_current
>
dai_max
)
{
dai_max
=
dai_current
;
}
number_harq_feedback
++
;
ack_data
[
code_word
][
dai_current
-
1
]
=
harq_status
->
ack
;
dai
[
code_word
][
dai_current
-
1
]
=
dai_current
;
}
}
}
if
(
do_reset
==
TRUE
)
{
...
...
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