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
lizhongxiao
OpenXG-RAN
Commits
cdabdd06
Commit
cdabdd06
authored
Oct 31, 2023
by
mir
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Demodulation added
parent
ef340749
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
96 additions
and
57 deletions
+96
-57
executables/nr-gnb.c
executables/nr-gnb.c
+5
-5
openair1/PHY/NR_TRANSPORT/nr_ulsch_demodulation.c
openair1/PHY/NR_TRANSPORT/nr_ulsch_demodulation.c
+88
-52
openair1/PHY/defs_gNB.h
openair1/PHY/defs_gNB.h
+3
-0
No files found.
executables/nr-gnb.c
View file @
cdabdd06
...
@@ -487,14 +487,14 @@ void init_gNB_Tpool(int inst) {
...
@@ -487,14 +487,14 @@ void init_gNB_Tpool(int inst) {
printf
(
"[MIR]: log cores %d
\n
"
,
log_cores
);
printf
(
"[MIR]: log cores %d
\n
"
,
log_cores
);
// Assuming: 2 x Physical cores = Logical cores
// Assuming: 2 x Physical cores = Logical cores
init_task_manager
(
&
gNB
->
man
,
log_cores
/
2
);
init_task_manager
(
&
gNB
->
man
,
log_cores
/
2
);
#endif
// PUSCH symbols per thread need to be calculated by how many threads we have
gNB
->
num_pusch_symbols_per_thread
=
1
;
// ULSCH decoding threadpool
#else
#else
initTpool
(
get_softmodem_params
()
->
threadPoolConfig
,
&
gNB
->
threadPool
,
cpumeas
(
CPUMEAS_GETSTATE
));
initTpool
(
get_softmodem_params
()
->
threadPoolConfig
,
&
gNB
->
threadPool
,
cpumeas
(
CPUMEAS_GETSTATE
));
#endif
#endif
// ULSCH decoder result FIFO
// PUSCH symbols per thread need to be calculated by how many threads we have
gNB
->
num_pusch_symbols_per_thread
=
1
;
// ULSCH decoder result FIFO
initNotifiedFIFO
(
&
gNB
->
respPuschSymb
);
initNotifiedFIFO
(
&
gNB
->
respPuschSymb
);
initNotifiedFIFO
(
&
gNB
->
respDecode
);
initNotifiedFIFO
(
&
gNB
->
respDecode
);
...
...
openair1/PHY/NR_TRANSPORT/nr_ulsch_demodulation.c
View file @
cdabdd06
...
@@ -1440,6 +1440,11 @@ static void nr_pusch_symbol_processing(void *arg)
...
@@ -1440,6 +1440,11 @@ static void nr_pusch_symbol_processing(void *arg)
for
(
int
i
=
0
;
i
<
(
nb_re_pusch
*
rel15_ul
->
qam_mod_order
*
rel15_ul
->
nrOfLayers
);
i
++
)
for
(
int
i
=
0
;
i
<
(
nb_re_pusch
*
rel15_ul
->
qam_mod_order
*
rel15_ul
->
nrOfLayers
);
i
++
)
llr16
[
i
]
=
llr_ptr
[
i
]
*
rdata
->
s
[
i
];
llr16
[
i
]
=
llr_ptr
[
i
]
*
rdata
->
s
[
i
];
}
}
#ifdef TASK_MANAGER
assert
(
rdata
->
task_finished
!=
NULL
);
atomic_store_explicit
(
rdata
->
task_finished
,
1
,
memory_order_seq_cst
);
// memory_order order );
#endif
}
}
...
@@ -1471,7 +1476,7 @@ int nr_rx_pusch_tp(PHY_VARS_gNB *gNB,
...
@@ -1471,7 +1476,7 @@ int nr_rx_pusch_tp(PHY_VARS_gNB *gNB,
for
(
uint8_t
symbol
=
rel15_ul
->
start_symbol_index
;
symbol
<
(
rel15_ul
->
start_symbol_index
+
rel15_ul
->
nr_of_symbols
);
symbol
++
)
{
for
(
uint8_t
symbol
=
rel15_ul
->
start_symbol_index
;
symbol
<
(
rel15_ul
->
start_symbol_index
+
rel15_ul
->
nr_of_symbols
);
symbol
++
)
{
uint8_t
dmrs_symbol_flag
=
(
rel15_ul
->
ul_dmrs_symb_pos
>>
symbol
)
&
0x01
;
uint8_t
dmrs_symbol_flag
=
(
rel15_ul
->
ul_dmrs_symb_pos
>>
symbol
)
&
0x01
;
LOG_D
(
PHY
,
"symbol %d, dmrs_symbol_flag :%d
\n
"
,
symbol
,
dmrs_symbol_flag
);
LOG_D
(
PHY
,
"symbol %d, dmrs_symbol_flag :%d
\n
"
,
symbol
,
dmrs_symbol_flag
);
if
(
dmrs_symbol_flag
==
1
)
{
if
(
dmrs_symbol_flag
==
1
)
{
if
(
pusch_vars
->
dmrs_symbol
==
INVALID_VALUE
)
if
(
pusch_vars
->
dmrs_symbol
==
INVALID_VALUE
)
pusch_vars
->
dmrs_symbol
=
symbol
;
pusch_vars
->
dmrs_symbol
=
symbol
;
...
@@ -1479,28 +1484,28 @@ int nr_rx_pusch_tp(PHY_VARS_gNB *gNB,
...
@@ -1479,28 +1484,28 @@ int nr_rx_pusch_tp(PHY_VARS_gNB *gNB,
for
(
int
nl
=
0
;
nl
<
rel15_ul
->
nrOfLayers
;
nl
++
)
{
for
(
int
nl
=
0
;
nl
<
rel15_ul
->
nrOfLayers
;
nl
++
)
{
uint32_t
nvar_tmp
=
0
;
uint32_t
nvar_tmp
=
0
;
nr_pusch_channel_estimation
(
gNB
,
nr_pusch_channel_estimation
(
gNB
,
slot
,
slot
,
get_dmrs_port
(
nl
,
rel15_ul
->
dmrs_ports
),
get_dmrs_port
(
nl
,
rel15_ul
->
dmrs_ports
),
symbol
,
symbol
,
ulsch_id
,
ulsch_id
,
bwp_start_subcarrier
,
bwp_start_subcarrier
,
rel15_ul
,
rel15_ul
,
&
max_ch
,
&
max_ch
,
&
nvar_tmp
);
&
nvar_tmp
);
nvar
+=
nvar_tmp
;
nvar
+=
nvar_tmp
;
}
}
// measure the SNR from the channel estimation
// measure the SNR from the channel estimation
nr_gnb_measurements
(
gNB
,
nr_gnb_measurements
(
gNB
,
&
gNB
->
ulsch
[
ulsch_id
],
&
gNB
->
ulsch
[
ulsch_id
],
pusch_vars
,
pusch_vars
,
symbol
,
symbol
,
rel15_ul
->
nrOfLayers
);
rel15_ul
->
nrOfLayers
);
allocCast2D
(
n0_subband_power
,
allocCast2D
(
n0_subband_power
,
unsigned
int
,
unsigned
int
,
gNB
->
measurements
.
n0_subband_power
,
gNB
->
measurements
.
n0_subband_power
,
frame_parms
->
nb_antennas_rx
,
frame_parms
->
nb_antennas_rx
,
frame_parms
->
N_RB_UL
,
frame_parms
->
N_RB_UL
,
false
);
false
);
for
(
aarx
=
0
;
aarx
<
frame_parms
->
nb_antennas_rx
;
aarx
++
)
for
(
aarx
=
0
;
aarx
<
frame_parms
->
nb_antennas_rx
;
aarx
++
)
{
{
if
(
symbol
==
rel15_ul
->
start_symbol_index
)
if
(
symbol
==
rel15_ul
->
start_symbol_index
)
...
@@ -1526,14 +1531,14 @@ int nr_rx_pusch_tp(PHY_VARS_gNB *gNB,
...
@@ -1526,14 +1531,14 @@ int nr_rx_pusch_tp(PHY_VARS_gNB *gNB,
if
(
gNB
->
chest_time
==
1
)
if
(
gNB
->
chest_time
==
1
)
{
{
nr_chest_time_domain_avg
(
frame_parms
,
nr_chest_time_domain_avg
(
frame_parms
,
pusch_vars
->
ul_ch_estimates
,
pusch_vars
->
ul_ch_estimates
,
rel15_ul
->
nr_of_symbols
,
rel15_ul
->
nr_of_symbols
,
rel15_ul
->
start_symbol_index
,
rel15_ul
->
start_symbol_index
,
rel15_ul
->
ul_dmrs_symb_pos
,
rel15_ul
->
ul_dmrs_symb_pos
,
rel15_ul
->
rb_size
);
rel15_ul
->
rb_size
);
pusch_vars
->
dmrs_symbol
=
get_next_dmrs_symbol_in_slot
(
rel15_ul
->
ul_dmrs_symb_pos
,
pusch_vars
->
dmrs_symbol
=
get_next_dmrs_symbol_in_slot
(
rel15_ul
->
ul_dmrs_symb_pos
,
rel15_ul
->
start_symbol_index
,
rel15_ul
->
start_symbol_index
,
rel15_ul
->
nr_of_symbols
);
rel15_ul
->
nr_of_symbols
);
}
}
stop_meas
(
&
gNB
->
ulsch_channel_estimation_stats
);
stop_meas
(
&
gNB
->
ulsch_channel_estimation_stats
);
...
@@ -1598,15 +1603,15 @@ int nr_rx_pusch_tp(PHY_VARS_gNB *gNB,
...
@@ -1598,15 +1603,15 @@ int nr_rx_pusch_tp(PHY_VARS_gNB *gNB,
for
(
int
aarx
=
0
;
aarx
<
frame_parms
->
nb_antennas_rx
;
aarx
++
)
for
(
int
aarx
=
0
;
aarx
<
frame_parms
->
nb_antennas_rx
;
aarx
++
)
for
(
int
aatx
=
0
;
aatx
<
rel15_ul
->
nrOfLayers
;
aatx
++
)
for
(
int
aatx
=
0
;
aatx
<
rel15_ul
->
nrOfLayers
;
aatx
++
)
nr_ulsch_extract_rbs
(
gNB
->
common_vars
.
rxdataF
[
aarx
],
nr_ulsch_extract_rbs
(
gNB
->
common_vars
.
rxdataF
[
aarx
],
(
c16_t
*
)
pusch_vars
->
ul_ch_estimates
[
aatx
*
frame_parms
->
nb_antennas_rx
+
aarx
],
(
c16_t
*
)
pusch_vars
->
ul_ch_estimates
[
aatx
*
frame_parms
->
nb_antennas_rx
+
aarx
],
(
c16_t
*
)
&
pusch_vars
->
rxdataF_ext
[
aarx
][
meas_symbol
*
nb_re_pusch
],
(
c16_t
*
)
&
pusch_vars
->
rxdataF_ext
[
aarx
][
meas_symbol
*
nb_re_pusch
],
(
c16_t
*
)
&
pusch_vars
->
ul_ch_estimates_ext
[
aatx
*
frame_parms
->
nb_antennas_rx
+
aarx
][
meas_symbol
*
nb_re_pusch
],
(
c16_t
*
)
&
pusch_vars
->
ul_ch_estimates_ext
[
aatx
*
frame_parms
->
nb_antennas_rx
+
aarx
][
meas_symbol
*
nb_re_pusch
],
soffset
+
meas_symbol
*
frame_parms
->
ofdm_symbol_size
,
soffset
+
meas_symbol
*
frame_parms
->
ofdm_symbol_size
,
pusch_vars
->
dmrs_symbol
*
frame_parms
->
ofdm_symbol_size
,
pusch_vars
->
dmrs_symbol
*
frame_parms
->
ofdm_symbol_size
,
aarx
,
aarx
,
(
rel15_ul
->
ul_dmrs_symb_pos
>>
meas_symbol
)
&
0x01
,
(
rel15_ul
->
ul_dmrs_symb_pos
>>
meas_symbol
)
&
0x01
,
rel15_ul
,
rel15_ul
,
frame_parms
);
frame_parms
);
int
avgs
=
0
;
int
avgs
=
0
;
int
avg
[
frame_parms
->
nb_antennas_rx
*
rel15_ul
->
nrOfLayers
];
int
avg
[
frame_parms
->
nb_antennas_rx
*
rel15_ul
->
nrOfLayers
];
...
@@ -1616,32 +1621,32 @@ int nr_rx_pusch_tp(PHY_VARS_gNB *gNB,
...
@@ -1616,32 +1621,32 @@ int nr_rx_pusch_tp(PHY_VARS_gNB *gNB,
//--------------------- Channel Scaling --------------------
//--------------------- Channel Scaling --------------------
//----------------------------------------------------------
//----------------------------------------------------------
nr_ulsch_scale_channel
(
pusch_vars
->
ul_ch_estimates_ext
,
nr_ulsch_scale_channel
(
pusch_vars
->
ul_ch_estimates_ext
,
frame_parms
,
frame_parms
,
meas_symbol
,
meas_symbol
,
(
rel15_ul
->
ul_dmrs_symb_pos
>>
meas_symbol
)
&
0x01
,
(
rel15_ul
->
ul_dmrs_symb_pos
>>
meas_symbol
)
&
0x01
,
nb_re_pusch
,
nb_re_pusch
,
rel15_ul
->
nrOfLayers
,
rel15_ul
->
nrOfLayers
,
rel15_ul
->
rb_size
,
rel15_ul
->
rb_size
,
shift_ch_ext
);
shift_ch_ext
);
nr_ulsch_channel_level
(
pusch_vars
->
ul_ch_estimates_ext
,
nr_ulsch_channel_level
(
pusch_vars
->
ul_ch_estimates_ext
,
frame_parms
,
frame_parms
,
avg
,
avg
,
meas_symbol
,
// index of the start symbol
meas_symbol
,
// index of the start symbol
nb_re_pusch
,
// number of the re in pusch
nb_re_pusch
,
// number of the re in pusch
rel15_ul
->
nrOfLayers
);
rel15_ul
->
nrOfLayers
);
for
(
int
aatx
=
0
;
aatx
<
rel15_ul
->
nrOfLayers
;
aatx
++
)
for
(
int
aatx
=
0
;
aatx
<
rel15_ul
->
nrOfLayers
;
aatx
++
)
for
(
int
aarx
=
0
;
aarx
<
frame_parms
->
nb_antennas_rx
;
aarx
++
)
for
(
int
aarx
=
0
;
aarx
<
frame_parms
->
nb_antennas_rx
;
aarx
++
)
avgs
=
cmax
(
avgs
,
avg
[
aatx
*
frame_parms
->
nb_antennas_rx
+
aarx
]);
avgs
=
cmax
(
avgs
,
avg
[
aatx
*
frame_parms
->
nb_antennas_rx
+
aarx
]);
pusch_vars
->
log2_maxh
=
(
log2_approx
(
avgs
)
>>
1
);
pusch_vars
->
log2_maxh
=
(
log2_approx
(
avgs
)
>>
1
);
if
(
rel15_ul
->
nrOfLayers
==
2
&&
rel15_ul
->
qam_mod_order
>=
6
)
if
(
rel15_ul
->
nrOfLayers
==
2
&&
rel15_ul
->
qam_mod_order
>=
6
)
pusch_vars
->
log2_maxh
=
(
log2_approx
(
avgs
)
>>
1
)
-
3
;
// for MMSE
pusch_vars
->
log2_maxh
=
(
log2_approx
(
avgs
)
>>
1
)
-
3
;
// for MMSE
else
if
(
rel15_ul
->
nrOfLayers
==
1
)
else
if
(
rel15_ul
->
nrOfLayers
==
1
)
pusch_vars
->
log2_maxh
=
(
log2_approx
(
avgs
)
>>
1
)
+
1
+
log2_approx
(
frame_parms
->
nb_antennas_rx
>>
2
);
pusch_vars
->
log2_maxh
=
(
log2_approx
(
avgs
)
>>
1
)
+
1
+
log2_approx
(
frame_parms
->
nb_antennas_rx
>>
2
);
if
(
pusch_vars
->
log2_maxh
<
0
)
if
(
pusch_vars
->
log2_maxh
<
0
)
pusch_vars
->
log2_maxh
=
0
;
pusch_vars
->
log2_maxh
=
0
;
...
@@ -1650,6 +1655,17 @@ int nr_rx_pusch_tp(PHY_VARS_gNB *gNB,
...
@@ -1650,6 +1655,17 @@ int nr_rx_pusch_tp(PHY_VARS_gNB *gNB,
start_meas
(
&
gNB
->
rx_pusch_symbol_processing_stats
);
start_meas
(
&
gNB
->
rx_pusch_symbol_processing_stats
);
int
numSymbols
=
gNB
->
num_pusch_symbols_per_thread
;
int
numSymbols
=
gNB
->
num_pusch_symbols_per_thread
;
#ifdef TASK_MANAGER
int
const
loop_iter
=
rel15_ul
->
nr_of_symbols
/
numSymbols
;
puschSymbolProc_t
arr
[
loop_iter
];
_Atomic
(
int
)
arr_tf
[
loop_iter
];
memset
(
arr
,
0
,
loop_iter
*
sizeof
(
puschSymbolProc_t
));
memset
(
arr_tf
,
0
,
loop_iter
*
sizeof
(
_Atomic
(
int
)));
int
sz_arr
=
0
;
#endif
for
(
uint8_t
symbol
=
rel15_ul
->
start_symbol_index
;
for
(
uint8_t
symbol
=
rel15_ul
->
start_symbol_index
;
symbol
<
(
rel15_ul
->
start_symbol_index
+
rel15_ul
->
nr_of_symbols
);
symbol
<
(
rel15_ul
->
start_symbol_index
+
rel15_ul
->
nr_of_symbols
);
symbol
+=
numSymbols
)
symbol
+=
numSymbols
)
...
@@ -1658,15 +1674,21 @@ int nr_rx_pusch_tp(PHY_VARS_gNB *gNB,
...
@@ -1658,15 +1674,21 @@ int nr_rx_pusch_tp(PHY_VARS_gNB *gNB,
for
(
int
s
=
0
;
s
<
numSymbols
;
s
++
)
{
for
(
int
s
=
0
;
s
<
numSymbols
;
s
++
)
{
pusch_vars
->
ul_valid_re_per_slot
[
symbol
+
s
]
=
get_nb_re_pusch
(
frame_parms
,
rel15_ul
,
symbol
+
s
);
pusch_vars
->
ul_valid_re_per_slot
[
symbol
+
s
]
=
get_nb_re_pusch
(
frame_parms
,
rel15_ul
,
symbol
+
s
);
pusch_vars
->
llr_offset
[
symbol
+
s
]
=
((
symbol
+
s
)
==
rel15_ul
->
start_symbol_index
)
?
pusch_vars
->
llr_offset
[
symbol
+
s
]
=
((
symbol
+
s
)
==
rel15_ul
->
start_symbol_index
)
?
0
:
0
:
pusch_vars
->
llr_offset
[
symbol
+
s
-
1
]
+
pusch_vars
->
ul_valid_re_per_slot
[
symbol
+
s
-
1
]
*
rel15_ul
->
qam_mod_order
;
pusch_vars
->
llr_offset
[
symbol
+
s
-
1
]
+
pusch_vars
->
ul_valid_re_per_slot
[
symbol
+
s
-
1
]
*
rel15_ul
->
qam_mod_order
;
total_res
+=
pusch_vars
->
ul_valid_re_per_slot
[
symbol
+
s
];
total_res
+=
pusch_vars
->
ul_valid_re_per_slot
[
symbol
+
s
];
}
}
if
(
total_res
>
0
)
{
if
(
total_res
>
0
)
{
#ifdef TASK_MANAGER
puschSymbolProc_t
*
rdata
=
&
arr
[
sz_arr
];
rdata
->
task_finished
=
&
arr_tf
[
sz_arr
];
++
sz_arr
;
#else
union
puschSymbolReqUnion
id
=
{.
s
=
{
ulsch_id
,
frame
,
slot
,
0
}};
union
puschSymbolReqUnion
id
=
{.
s
=
{
ulsch_id
,
frame
,
slot
,
0
}};
id
.
p
=
1
+
symbol
;
id
.
p
=
1
+
symbol
;
notifiedFIFO_elt_t
*
req
=
newNotifiedFIFO_elt
(
sizeof
(
puschSymbolProc_t
),
id
.
p
,
&
gNB
->
respPuschSymb
,
&
nr_pusch_symbol_processing
);
// create a job for Tpool
notifiedFIFO_elt_t
*
req
=
newNotifiedFIFO_elt
(
sizeof
(
puschSymbolProc_t
),
id
.
p
,
&
gNB
->
respPuschSymb
,
&
nr_pusch_symbol_processing
);
// create a job for Tpool
puschSymbolProc_t
*
rdata
=
(
puschSymbolProc_t
*
)
NotifiedFifoData
(
req
);
// data for the job
puschSymbolProc_t
*
rdata
=
(
puschSymbolProc_t
*
)
NotifiedFifoData
(
req
);
// data for the job
#endif
rdata
->
gNB
=
gNB
;
rdata
->
gNB
=
gNB
;
rdata
->
frame_parms
=
frame_parms
;
rdata
->
frame_parms
=
frame_parms
;
...
@@ -1681,9 +1703,15 @@ int nr_rx_pusch_tp(PHY_VARS_gNB *gNB,
...
@@ -1681,9 +1703,15 @@ int nr_rx_pusch_tp(PHY_VARS_gNB *gNB,
rdata
->
nvar
=
nvar
;
rdata
->
nvar
=
nvar
;
if
(
rel15_ul
->
pdu_bit_map
&
PUSCH_PDU_BITMAP_PUSCH_PTRS
)
{
if
(
rel15_ul
->
pdu_bit_map
&
PUSCH_PDU_BITMAP_PUSCH_PTRS
)
{
// Obvious memory leak when TASK_MANAGER not defined
nr_pusch_symbol_processing
(
rdata
);
nr_pusch_symbol_processing
(
rdata
);
}
else
{
}
else
{
#ifdef TASK_MANAGER
task_t
t
=
{
.
args
=
rdata
,
.
func
=
&
nr_pusch_symbol_processing
};
async_task_manager
(
&
gNB
->
man
,
t
);
#else
pushTpool
(
&
gNB
->
threadPool
,
req
);
pushTpool
(
&
gNB
->
threadPool
,
req
);
#endif
gNB
->
nbSymb
++
;
gNB
->
nbSymb
++
;
}
}
...
@@ -1691,11 +1719,19 @@ int nr_rx_pusch_tp(PHY_VARS_gNB *gNB,
...
@@ -1691,11 +1719,19 @@ int nr_rx_pusch_tp(PHY_VARS_gNB *gNB,
}
}
}
// symbol loop
}
// symbol loop
#ifdef TASK_MANAGER
if
(
gNB
->
nbSymb
>
0
){
trigger_all_task_manager
(
&
gNB
->
man
);
wait_spin_all_atomics_one
(
sz_arr
,
arr_tf
);
gNB
->
nbSymb
=
0
;
}
#else
while
(
gNB
->
nbSymb
>
0
)
{
while
(
gNB
->
nbSymb
>
0
)
{
notifiedFIFO_elt_t
*
req
=
pullTpool
(
&
gNB
->
respPuschSymb
,
&
gNB
->
threadPool
);
notifiedFIFO_elt_t
*
req
=
pullTpool
(
&
gNB
->
respPuschSymb
,
&
gNB
->
threadPool
);
gNB
->
nbSymb
--
;
gNB
->
nbSymb
--
;
delNotifiedFIFO_elt
(
req
);
delNotifiedFIFO_elt
(
req
);
}
}
#endif
stop_meas
(
&
gNB
->
rx_pusch_symbol_processing_stats
);
stop_meas
(
&
gNB
->
rx_pusch_symbol_processing_stats
);
return
0
;
return
0
;
...
...
openair1/PHY/defs_gNB.h
View file @
cdabdd06
...
@@ -757,6 +757,9 @@ typedef struct puschSymbolProc_s {
...
@@ -757,6 +757,9 @@ typedef struct puschSymbolProc_s {
int16_t
**
llr_layers
;
int16_t
**
llr_layers
;
int16_t
*
s
;
int16_t
*
s
;
uint32_t
nvar
;
uint32_t
nvar
;
#ifdef TASK_MANAGER
_Atomic
(
int
)
*
task_finished
;
#endif
}
puschSymbolProc_t
;
}
puschSymbolProc_t
;
struct
puschSymbolReqId
{
struct
puschSymbolReqId
{
...
...
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