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
ZhouShuya
OpenXG-RAN
Commits
0e3d87b4
Commit
0e3d87b4
authored
Jun 14, 2020
by
Raymond Knopp
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
format 2 up to 64 bits tested for 8 and 16 PRBs PUCCH format
parent
613d1e8c
Changes
6
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
225 additions
and
46 deletions
+225
-46
nfapi/open-nFAPI/nfapi/public_inc/nfapi_nr_interface_scf.h
nfapi/open-nFAPI/nfapi/public_inc/nfapi_nr_interface_scf.h
+3
-3
openair1/PHY/CODING/nr_polar_init.c
openair1/PHY/CODING/nr_polar_init.c
+9
-3
openair1/PHY/NR_TRANSPORT/pucch_rx.c
openair1/PHY/NR_TRANSPORT/pucch_rx.c
+179
-28
openair1/PHY/NR_UE_TRANSPORT/pucch_nr.c
openair1/PHY/NR_UE_TRANSPORT/pucch_nr.c
+17
-5
openair1/PHY/defs_gNB.h
openair1/PHY/defs_gNB.h
+2
-0
openair1/SIMULATION/NR_PHY/pucchsim.c
openair1/SIMULATION/NR_PHY/pucchsim.c
+15
-7
No files found.
nfapi/open-nFAPI/nfapi/public_inc/nfapi_nr_interface_scf.h
View file @
0e3d87b4
...
@@ -1498,7 +1498,7 @@ typedef struct
...
@@ -1498,7 +1498,7 @@ typedef struct
//for dci_pusch_pdu
//for dci_pusch_pdu
typedef
struct
typedef
struct
{
{
uint8_t
pdu
_bit_
map
;
uint8_t
pdu
Bit
map
;
uint32_t
handle
;
uint32_t
handle
;
uint16_t
rnti
;
uint16_t
rnti
;
uint8_t
ul_cqi
;
uint8_t
ul_cqi
;
...
@@ -1513,7 +1513,7 @@ typedef struct
...
@@ -1513,7 +1513,7 @@ typedef struct
//for PUCCH PDU Format 0/1
//for PUCCH PDU Format 0/1
typedef
struct
typedef
struct
{
{
uint8_t
pdu
_bit_
map
;
uint8_t
pdu
Bit
map
;
uint32_t
handle
;
uint32_t
handle
;
uint16_t
rnti
;
uint16_t
rnti
;
uint8_t
pucch_format
;
//PUCCH format Value: 0 -> 1 0: PUCCH Format0 1: PUCCH Format1
uint8_t
pucch_format
;
//PUCCH format Value: 0 -> 1 0: PUCCH Format0 1: PUCCH Format1
...
@@ -1529,7 +1529,7 @@ typedef struct
...
@@ -1529,7 +1529,7 @@ typedef struct
//PUCCH PDU Format 2/3/4
//PUCCH PDU Format 2/3/4
typedef
struct
typedef
struct
{
{
uint8_t
pdu
_bit_
map
;
uint8_t
pdu
Bit
map
;
uint32_t
handle
;
uint32_t
handle
;
uint16_t
rnti
;
uint16_t
rnti
;
uint8_t
pucch_format
;
//PUCCH format Value: 0 -> 2 0: PUCCH Format2 1: PUCCH Format3 2: PUCCH Format4
uint8_t
pucch_format
;
//PUCCH format Value: 0 -> 2 0: PUCCH Format2 1: PUCCH Format3 2: PUCCH Format4
...
...
openair1/PHY/CODING/nr_polar_init.c
View file @
0e3d87b4
...
@@ -43,11 +43,12 @@ static void nr_polar_init(t_nrPolar_params * *polarParams,
...
@@ -43,11 +43,12 @@ static void nr_polar_init(t_nrPolar_params * *polarParams,
uint8_t
aggregation_level
,
uint8_t
aggregation_level
,
int
decoder_flag
)
{
int
decoder_flag
)
{
t_nrPolar_params
*
currentPtr
=
*
polarParams
;
t_nrPolar_params
*
currentPtr
=
*
polarParams
;
uint16_t
aggregation_prime
=
nr_polar_aggregation_prime
(
aggregation_level
);
uint16_t
aggregation_prime
=
(
messageType
>=
2
)
?
aggregation_level
:
nr_polar_aggregation_prime
(
aggregation_level
);
//Parse the list. If the node is already created, return without initialization.
//Parse the list. If the node is already created, return without initialization.
while
(
currentPtr
!=
NULL
)
{
while
(
currentPtr
!=
NULL
)
{
//printf("currentPtr->idx %d, (%d,%d)\n",currentPtr->idx,currentPtr->payloadBits,currentPtr->encoderLength);
//printf("currentPtr->idx %d, (%d,%d)\n",currentPtr->idx,currentPtr->payloadBits,currentPtr->encoderLength);
LOG_D
(
PHY
,
"Looking for index %d
\n
"
,(
messageType
*
messageLength
*
aggregation_prime
));
if
(
currentPtr
->
idx
==
(
messageType
*
messageLength
*
aggregation_prime
))
return
;
if
(
currentPtr
->
idx
==
(
messageType
*
messageLength
*
aggregation_prime
))
return
;
else
currentPtr
=
currentPtr
->
nextPtr
;
else
currentPtr
=
currentPtr
->
nextPtr
;
}
}
...
@@ -57,6 +58,7 @@ static void nr_polar_init(t_nrPolar_params * *polarParams,
...
@@ -57,6 +58,7 @@ static void nr_polar_init(t_nrPolar_params * *polarParams,
t_nrPolar_params
*
newPolarInitNode
=
calloc
(
sizeof
(
t_nrPolar_params
),
1
);
t_nrPolar_params
*
newPolarInitNode
=
calloc
(
sizeof
(
t_nrPolar_params
),
1
);
if
(
newPolarInitNode
!=
NULL
)
{
if
(
newPolarInitNode
!=
NULL
)
{
LOG_D
(
PHY
,
"Setting new polarParams index %d, messageType %d, messageLength %d, aggregation_prime %d
\n
"
,(
messageType
*
messageLength
*
aggregation_prime
),
messageType
,
messageLength
,
aggregation_prime
);
newPolarInitNode
->
idx
=
(
messageType
*
messageLength
*
aggregation_prime
);
newPolarInitNode
->
idx
=
(
messageType
*
messageLength
*
aggregation_prime
);
newPolarInitNode
->
nextPtr
=
NULL
;
newPolarInitNode
->
nextPtr
=
NULL
;
//printf("newPolarInitNode->idx %d, (%d,%d,%d:%d)\n",newPolarInitNode->idx,messageType,messageLength,aggregation_prime,aggregation_level);
//printf("newPolarInitNode->idx %d, (%d,%d,%d:%d)\n",newPolarInitNode->idx,messageType,messageLength,aggregation_prime,aggregation_level);
...
@@ -116,6 +118,7 @@ static void nr_polar_init(t_nrPolar_params * *polarParams,
...
@@ -116,6 +118,7 @@ static void nr_polar_init(t_nrPolar_params * *polarParams,
newPolarInitNode
->
payloadBits
=
messageLength
;
newPolarInitNode
->
payloadBits
=
messageLength
;
newPolarInitNode
->
crcCorrectionBits
=
NR_POLAR_PUCCH_CRC_ERROR_CORRECTION_BITS
;
newPolarInitNode
->
crcCorrectionBits
=
NR_POLAR_PUCCH_CRC_ERROR_CORRECTION_BITS
;
//newPolarInitNode->crc_generator_matrix=crc24c_generator_matrix(newPolarInitNode->payloadBits+newPolarInitNode->crcParityBits);//G_P
//newPolarInitNode->crc_generator_matrix=crc24c_generator_matrix(newPolarInitNode->payloadBits+newPolarInitNode->crcParityBits);//G_P
LOG_D
(
PHY
,
"New polar node, encoderLength %d, aggregation_level %d
\n
"
,
newPolarInitNode
->
encoderLength
,
aggregation_level
);
}
else
{
}
else
{
AssertFatal
(
1
==
0
,
"[nr_polar_init] Incorrect Message Type(%d)"
,
messageType
);
AssertFatal
(
1
==
0
,
"[nr_polar_init] Incorrect Message Type(%d)"
,
messageType
);
}
}
...
@@ -219,16 +222,19 @@ t_nrPolar_params *nr_polar_params (int8_t messageType,
...
@@ -219,16 +222,19 @@ t_nrPolar_params *nr_polar_params (int8_t messageType,
nr_polar_init
(
polarList_ext
!=
NULL
?
polarList_ext
:
&
polarList
,
nr_polar_init
(
polarList_ext
!=
NULL
?
polarList_ext
:
&
polarList
,
messageType
,
messageLength
,
aggregation_level
,
decoding_flag
);
messageType
,
messageLength
,
aggregation_level
,
decoding_flag
);
t_nrPolar_params
*
polarParams
=
polarList_ext
!=
NULL
?
*
polarList_ext
:
polarList
;
t_nrPolar_params
*
polarParams
=
polarList_ext
!=
NULL
?
*
polarList_ext
:
polarList
;
const
int
tag
=
messageType
*
messageLength
*
nr_polar_aggregation_prime
(
aggregation_level
);
const
int
tag
=
messageType
*
messageLength
*
(
messageType
>=
2
?
aggregation_level
:
nr_polar_aggregation_prime
(
aggregation_level
)
);
while
(
polarParams
!=
NULL
)
{
while
(
polarParams
!=
NULL
)
{
LOG_D
(
PHY
,
"nr_polar_params : tag %d (from nr_polar_init %d)
\n
"
,
tag
,
polarParams
->
idx
);
if
(
polarParams
->
idx
==
tag
)
if
(
polarParams
->
idx
==
tag
)
return
polarParams
;
return
polarParams
;
polarParams
=
polarParams
->
nextPtr
;
polarParams
=
polarParams
->
nextPtr
;
}
}
AssertFatal
(
false
,
"Polar Init tables internal failure
\n
"
);
AssertFatal
(
false
,
"Polar Init tables internal failure
, no polarParams found
\n
"
);
return
NULL
;
return
NULL
;
}
}
...
...
openair1/PHY/NR_TRANSPORT/pucch_rx.c
View file @
0e3d87b4
This diff is collapsed.
Click to expand it.
openair1/PHY/NR_UE_TRANSPORT/pucch_nr.c
View file @
0e3d87b4
...
@@ -798,8 +798,8 @@ void nr_generate_pucch1_old(PHY_VARS_NR_UE *ue,
...
@@ -798,8 +798,8 @@ void nr_generate_pucch1_old(PHY_VARS_NR_UE *ue,
}
}
#endif //0
#endif //0
inline
void
nr_pucch2_3_4_scrambling
(
uint16_t
M_bit
,
uint16_t
rnti
,
uint16_t
n_id
,
uint
32_t
B
,
uint8_t
*
btilde
)
__attribute__
((
always_inline
));
inline
void
nr_pucch2_3_4_scrambling
(
uint16_t
M_bit
,
uint16_t
rnti
,
uint16_t
n_id
,
uint
64_t
*
B64
,
uint8_t
*
btilde
)
__attribute__
((
always_inline
));
inline
void
nr_pucch2_3_4_scrambling
(
uint16_t
M_bit
,
uint16_t
rnti
,
uint16_t
n_id
,
uint
32_t
B
,
uint8_t
*
btilde
)
{
inline
void
nr_pucch2_3_4_scrambling
(
uint16_t
M_bit
,
uint16_t
rnti
,
uint16_t
n_id
,
uint
64_t
*
B64
,
uint8_t
*
btilde
)
{
uint32_t
x1
,
x2
,
s
=
0
;
uint32_t
x1
,
x2
,
s
=
0
;
int
i
;
int
i
;
uint8_t
c
;
uint8_t
c
;
...
@@ -807,14 +807,26 @@ inline void nr_pucch2_3_4_scrambling(uint16_t M_bit,uint16_t rnti,uint16_t n_id,
...
@@ -807,14 +807,26 @@ inline void nr_pucch2_3_4_scrambling(uint16_t M_bit,uint16_t rnti,uint16_t n_id,
//x2 = (rnti) + ((uint32_t)(1+nr_tti_tx)<<16)*(1+(fp->Nid_cell<<1));
//x2 = (rnti) + ((uint32_t)(1+nr_tti_tx)<<16)*(1+(fp->Nid_cell<<1));
x2
=
((
rnti
)
<<
15
)
+
n_id
;
x2
=
((
rnti
)
<<
15
)
+
n_id
;
#ifdef DEBUG_NR_PUCCH_TX
#ifdef DEBUG_NR_PUCCH_TX
printf
(
"
\t\t
[nr_pucch2_3_4_scrambling] gold sequence s=%x
\n
"
,
s
);
printf
(
"
\t\t
[nr_pucch2_3_4_scrambling] gold sequence s=%x
, M_bit %d
\n
"
,
s
,
M_bit
);
#endif
#endif
uint8_t
*
btildep
=
btilde
;
uint8_t
*
btildep
=
btilde
;
int
M_bit2
=
M_bit
>
31
?
32
:
(
M_bit
&
31
),
M_bit3
=
M_bit
;
int
M_bit2
=
M_bit
>
31
?
32
:
(
M_bit
&
31
),
M_bit3
=
M_bit
;
uint32_t
B
;
for
(
int
iprime
=
0
;
iprime
<=
(
M_bit
>>
5
);
iprime
++
,
btildep
+=
32
)
{
for
(
int
iprime
=
0
;
iprime
<=
(
M_bit
>>
5
);
iprime
++
,
btildep
+=
32
)
{
s
=
lte_gold_generic
(
&
x1
,
&
x2
,
(
iprime
==
0
)
?
1
:
0
);
s
=
lte_gold_generic
(
&
x1
,
&
x2
,
(
iprime
==
0
)
?
1
:
0
);
B
=
((
uint32_t
*
)
B64
)[
iprime
];
for
(
int
n
=
0
;
n
<
M_bit2
;
n
+=
8
)
LOG_D
(
PHY
,
"PUCCH2 encoded %d : %d,%d,%d,%d,%d,%d,%d,%d
\n
"
,
n
,
(
B
>>
n
)
&
1
,
(
B
>>
(
n
+
1
))
&
1
,
(
B
>>
(
n
+
2
))
&
1
,
(
B
>>
(
n
+
3
))
&
1
,
(
B
>>
(
n
+
4
))
&
1
,
(
B
>>
(
n
+
5
))
&
1
,
(
B
>>
(
n
+
6
))
&
1
,
(
B
>>
(
n
+
7
))
&
1
);
for
(
i
=
0
;
i
<
M_bit2
;
i
++
)
{
for
(
i
=
0
;
i
<
M_bit2
;
i
++
)
{
c
=
(
uint8_t
)((
s
>>
i
)
&
1
);
c
=
(
uint8_t
)((
s
>>
i
)
&
1
);
btildep
[
i
]
=
(((
B
>>
i
)
&
1
)
^
c
);
btildep
[
i
]
=
(((
B
>>
i
)
&
1
)
^
c
);
...
@@ -946,7 +958,7 @@ void nr_generate_pucch2(PHY_VARS_NR_UE *ue,
...
@@ -946,7 +958,7 @@ void nr_generate_pucch2(PHY_VARS_NR_UE *ue,
printf
(
"
\t
[nr_generate_pucch2] start function at slot(nr_tti_tx)=%d with payload=%lu and nr_bit=%d
\n
"
,
nr_tti_tx
,
payload
,
nr_bit
);
printf
(
"
\t
[nr_generate_pucch2] start function at slot(nr_tti_tx)=%d with payload=%lu and nr_bit=%d
\n
"
,
nr_tti_tx
,
payload
,
nr_bit
);
#endif
#endif
// b is the block of bits transmitted on the physical channel after payload coding
// b is the block of bits transmitted on the physical channel after payload coding
uint64_t
b
;
uint64_t
b
[
16
];
// limit to 1024-bit encoded length
// M_bit is the number of bits of block b (payload after encoding)
// M_bit is the number of bits of block b (payload after encoding)
uint16_t
M_bit
;
uint16_t
M_bit
;
nr_uci_encoding
(
payload
,
nr_bit
,
pucch_format2_nr
,
0
,
nrofSymbols
,
nrofPRB
,
1
,
0
,
0
,
&
b
,
&
M_bit
);
nr_uci_encoding
(
payload
,
nr_bit
,
pucch_format2_nr
,
0
,
nrofSymbols
,
nrofPRB
,
1
,
0
,
0
,
&
b
,
&
M_bit
);
...
...
openair1/PHY/defs_gNB.h
View file @
0e3d87b4
...
@@ -667,6 +667,8 @@ typedef struct PHY_VARS_gNB_s {
...
@@ -667,6 +667,8 @@ typedef struct PHY_VARS_gNB_s {
NR_gNB_ULSCH_t
*
ulsch
[
NUMBER_OF_NR_ULSCH_MAX
][
2
];
// [Nusers times][2 codewords]
NR_gNB_ULSCH_t
*
ulsch
[
NUMBER_OF_NR_ULSCH_MAX
][
2
];
// [Nusers times][2 codewords]
NR_gNB_DLSCH_t
*
dlsch_SI
,
*
dlsch_ra
,
*
dlsch_p
;
NR_gNB_DLSCH_t
*
dlsch_SI
,
*
dlsch_ra
,
*
dlsch_p
;
NR_gNB_DLSCH_t
*
dlsch_PCH
;
NR_gNB_DLSCH_t
*
dlsch_PCH
;
t_nrPolar_params
*
uci_polarParams
;
uint8_t
pbch_configured
;
uint8_t
pbch_configured
;
char
gNB_generate_rar
;
char
gNB_generate_rar
;
...
...
openair1/SIMULATION/NR_PHY/pucchsim.c
View file @
0e3d87b4
...
@@ -457,6 +457,8 @@ int main(int argc, char **argv)
...
@@ -457,6 +457,8 @@ int main(int argc, char **argv)
pucch_GroupHopping_t
PUCCH_GroupHopping
=
UE
->
pucch_config_common_nr
->
pucch_GroupHopping
;
pucch_GroupHopping_t
PUCCH_GroupHopping
=
UE
->
pucch_config_common_nr
->
pucch_GroupHopping
;
uint32_t
hopping_id
=
UE
->
pucch_config_common_nr
->
hoppingId
;
uint32_t
hopping_id
=
UE
->
pucch_config_common_nr
->
hoppingId
;
uint32_t
dmrs_scrambling_id
=
0
,
data_scrambling_id
=
0
;
uint32_t
dmrs_scrambling_id
=
0
,
data_scrambling_id
=
0
;
t_nrPolar_params
*
currentPtr
;
if
(
format
==
0
){
if
(
format
==
0
){
// for now we are not considering SR just HARQ-ACK
// for now we are not considering SR just HARQ-ACK
if
(
nr_bit
==
0
)
if
(
nr_bit
==
0
)
...
@@ -467,7 +469,8 @@ int main(int argc, char **argv)
...
@@ -467,7 +469,8 @@ int main(int argc, char **argv)
mcs
=
table2_mcs
[
actual_payload
];
mcs
=
table2_mcs
[
actual_payload
];
else
AssertFatal
(
1
==
0
,
"Either nr_bit %d or sr_flag %d must be non-zero
\n
"
);
else
AssertFatal
(
1
==
0
,
"Either nr_bit %d or sr_flag %d must be non-zero
\n
"
);
}
}
else
if
(
format
==
2
&&
nr_bit
>
11
)
gNB
->
uci_polarParams
=
nr_polar_params
(
2
,
nr_bit
,
nrofPRB
,
1
,
NULL
);
for
(
SNR
=
snr0
;
SNR
<=
snr1
;
SNR
=
SNR
+
1
){
for
(
SNR
=
snr0
;
SNR
<=
snr1
;
SNR
=
SNR
+
1
){
ack_nack_errors
=
0
;
ack_nack_errors
=
0
;
n_errors
=
0
;
n_errors
=
0
;
...
@@ -506,6 +509,8 @@ int main(int argc, char **argv)
...
@@ -506,6 +509,8 @@ int main(int argc, char **argv)
pucch_pdu
.
group_hop_flag
=
PUCCH_GroupHopping
&
1
;
pucch_pdu
.
group_hop_flag
=
PUCCH_GroupHopping
&
1
;
pucch_pdu
.
sequence_hop_flag
=
(
PUCCH_GroupHopping
>>
1
)
&
1
;
pucch_pdu
.
sequence_hop_flag
=
(
PUCCH_GroupHopping
>>
1
)
&
1
;
pucch_pdu
.
bit_len_harq
=
nr_bit
;
pucch_pdu
.
bit_len_harq
=
nr_bit
;
pucch_pdu
.
bit_len_csi_part1
=
0
;
pucch_pdu
.
bit_len_csi_part2
=
0
;
pucch_pdu
.
sr_flag
=
sr_flag
;
pucch_pdu
.
sr_flag
=
sr_flag
;
pucch_pdu
.
nr_of_symbols
=
nrofSymbols
;
pucch_pdu
.
nr_of_symbols
=
nrofSymbols
;
pucch_pdu
.
hopping_id
=
hopping_id
;
pucch_pdu
.
hopping_id
=
hopping_id
;
...
@@ -534,7 +539,9 @@ int main(int argc, char **argv)
...
@@ -534,7 +539,9 @@ int main(int argc, char **argv)
pucch_pdu
.
subcarrier_spacing
=
1
;
pucch_pdu
.
subcarrier_spacing
=
1
;
pucch_pdu
.
group_hop_flag
=
PUCCH_GroupHopping
&
1
;
pucch_pdu
.
group_hop_flag
=
PUCCH_GroupHopping
&
1
;
pucch_pdu
.
sequence_hop_flag
=
(
PUCCH_GroupHopping
>>
1
)
&
1
;
pucch_pdu
.
sequence_hop_flag
=
(
PUCCH_GroupHopping
>>
1
)
&
1
;
pucch_pdu
.
bit_len_harq
=
nr_bit
;
pucch_pdu
.
bit_len_csi_part1
=
nr_bit
;
pucch_pdu
.
bit_len_harq
=
0
;
pucch_pdu
.
bit_len_csi_part2
=
0
;
pucch_pdu
.
sr_flag
=
0
;
pucch_pdu
.
sr_flag
=
0
;
pucch_pdu
.
nr_of_symbols
=
nrofSymbols
;
pucch_pdu
.
nr_of_symbols
=
nrofSymbols
;
pucch_pdu
.
hopping_id
=
hopping_id
;
pucch_pdu
.
hopping_id
=
hopping_id
;
...
@@ -545,14 +552,15 @@ int main(int argc, char **argv)
...
@@ -545,14 +552,15 @@ int main(int argc, char **argv)
pucch_pdu
.
dmrs_scrambling_id
=
dmrs_scrambling_id
;
pucch_pdu
.
dmrs_scrambling_id
=
dmrs_scrambling_id
;
pucch_pdu
.
data_scrambling_id
=
data_scrambling_id
;
pucch_pdu
.
data_scrambling_id
=
data_scrambling_id
;
nr_decode_pucch2
(
gNB
,
nr_tti_tx
,
&
uci_pdu
,
&
pucch_pdu
);
nr_decode_pucch2
(
gNB
,
nr_tti_tx
,
&
uci_pdu
,
&
pucch_pdu
);
int
harq_bytes
=
pucch_pdu
.
bit_len_harq
>>
3
;
int
csi_part1_bytes
=
pucch_pdu
.
bit_len_csi_part1
>>
3
;
if
((
pucch_pdu
.
bit_len_
harq
&
7
)
>
0
)
harq
_bytes
++
;
if
((
pucch_pdu
.
bit_len_
csi_part1
&
7
)
>
0
)
csi_part1
_bytes
++
;
for
(
int
i
=
0
;
i
<
harq_bytes
;
i
++
)
for
(
int
i
=
0
;
i
<
csi_part1_bytes
;
i
++
)
{
if
(
uci_pdu
.
harq
.
harq_payload
[
i
]
!=
((
int8_t
*
)
&
actual_payload
)[
i
])
{
if
(
uci_pdu
.
csi_part1
.
csi_part1_payload
[
i
]
!=
((
u
int8_t
*
)
&
actual_payload
)[
i
])
{
ack_nack_errors
++
;
ack_nack_errors
++
;
break
;
break
;
}
}
free
(
uci_pdu
.
harq
.
harq_payload
);
}
free
(
uci_pdu
.
csi_part1
.
csi_part1_payload
);
}
}
n_errors
=
((
actual_payload
^
payload_received
)
&
1
)
+
(((
actual_payload
^
payload_received
)
&
2
)
>>
1
)
+
(((
actual_payload
^
payload_received
)
&
4
)
>>
2
)
+
n_errors
;
n_errors
=
((
actual_payload
^
payload_received
)
&
1
)
+
(((
actual_payload
^
payload_received
)
&
2
)
>>
1
)
+
(((
actual_payload
^
payload_received
)
&
4
)
>>
2
)
+
n_errors
;
...
...
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