Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
OpenXG UE
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
OpenXG UE
Commits
ac8da1f0
Commit
ac8da1f0
authored
Mar 18, 2022
by
Robert Schmidt
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/fix-legacy-errors-lte' into integration_2022_wk11
parents
628e7332
14491451
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
89 additions
and
55 deletions
+89
-55
openair1/SCHED/phy_procedures_lte_eNb.c
openair1/SCHED/phy_procedures_lte_eNb.c
+78
-54
targets/RT/USER/lte-ue.c
targets/RT/USER/lte-ue.c
+11
-1
No files found.
openair1/SCHED/phy_procedures_lte_eNb.c
View file @
ac8da1f0
...
...
@@ -1938,6 +1938,8 @@ void fill_ulsch_harq_indication (PHY_VARS_eNB *eNB, LTE_UL_eNB_HARQ_t *ulsch_har
pthread_mutex_unlock
(
&
eNB
->
UL_INFO_mutex
);
}
#define packetError(ConD, fmt, args...) if (!(ConD)) { LOG_E(PHY, fmt, args); goodPacket=false; }
void
fill_uci_harq_indication
(
int
UEid
,
PHY_VARS_eNB
*
eNB
,
LTE_eNB_UCI
*
uci
,
int
frame
,
int
subframe
,
uint8_t
*
harq_ack
,
uint8_t
tdd_mapping_mode
,
uint16_t
tdd_multiplexing_mask
)
{
if
(
split73
==
SPLIT73_DU
)
{
sendFs6Ulharq
(
fs6ULindicationHarq
,
UEid
,
eNB
,
uci
,
frame
,
subframe
,
harq_ack
,
tdd_mapping_mode
,
tdd_multiplexing_mask
,
0
,
0
);
...
...
@@ -1953,6 +1955,7 @@ void fill_uci_harq_indication (int UEid, PHY_VARS_eNB *eNB, LTE_eNB_UCI *uci, in
}
pthread_mutex_lock
(
&
eNB
->
UL_INFO_mutex
);
bool
goodPacket
=
true
;
nfapi_harq_indication_t
*
ind
=
&
eNB
->
UL_INFO
.
harq_ind
;
nfapi_harq_indication_body_t
*
body
=
&
ind
->
harq_indication_body
;
assert
(
eNB
->
UL_INFO
.
harq_ind
.
harq_indication_body
.
number_of_harqs
<=
NFAPI_HARQ_IND_MAX_PDU
);
...
...
@@ -1985,73 +1988,87 @@ void fill_uci_harq_indication (int UEid, PHY_VARS_eNB *eNB, LTE_eNB_UCI *uci, in
pdu
->
harq_indication_fdd_rel13
.
tl
.
tag
=
NFAPI_HARQ_INDICATION_FDD_REL13_TAG
;
pdu
->
harq_indication_fdd_rel13
.
mode
=
0
;
pdu
->
harq_indication_fdd_rel13
.
number_of_ack_nack
=
1
;
AssertFatal
(
harq_ack
[
0
]
==
1
||
harq_ack
[
0
]
==
2
||
harq_ack
[
0
]
==
4
,
"harq_ack[0] is %d, should be 1,2 or 4
\n
"
,
harq_ack
[
0
]);
pdu
->
harq_indication_fdd_rel13
.
harq_tb_n
[
0
]
=
harq_ack
[
0
];
// release DLSCH if needed
release_harq
(
eNB
,
DLSCH_id
,
0
,
frame
,
subframe
,
0xffff
,
harq_ack
[
0
]
==
1
);
packetError
(
harq_ack
[
0
]
==
1
||
harq_ack
[
0
]
==
2
||
harq_ack
[
0
]
==
4
,
"harq_ack[0] is %d, should be 1,2 or 4
\n
"
,
harq_ack
[
0
]);
if
(
goodPacket
)
{
pdu
->
harq_indication_fdd_rel13
.
harq_tb_n
[
0
]
=
harq_ack
[
0
];
// release DLSCH if needed
release_harq
(
eNB
,
DLSCH_id
,
0
,
frame
,
subframe
,
0xffff
,
harq_ack
[
0
]
==
1
);
}
}
else
if
(
uci
->
pucch_fmt
==
pucch_format1b
)
{
pdu
->
harq_indication_fdd_rel13
.
tl
.
tag
=
NFAPI_HARQ_INDICATION_FDD_REL13_TAG
;
pdu
->
harq_indication_fdd_rel13
.
mode
=
0
;
pdu
->
harq_indication_fdd_rel13
.
number_of_ack_nack
=
2
;
AssertFatal
(
harq_ack
[
0
]
==
1
||
harq_ack
[
0
]
==
2
||
harq_ack
[
1
]
==
4
,
"harq_ack[0] is %d, should be 0,1 or 4
\n
"
,
harq_ack
[
0
]);
AssertFatal
(
harq_ack
[
1
]
==
1
||
harq_ack
[
1
]
==
2
||
harq_ack
[
1
]
==
4
,
"harq_ack[1] is %d, should be 0,1 or 4
\n
"
,
harq_ack
[
1
]);
pdu
->
harq_indication_fdd_rel13
.
harq_tb_n
[
0
]
=
harq_ack
[
0
];
pdu
->
harq_indication_fdd_rel13
.
harq_tb_n
[
1
]
=
harq_ack
[
1
];
// release DLSCH if needed
release_harq
(
eNB
,
DLSCH_id
,
0
,
frame
,
subframe
,
0xffff
,
harq_ack
[
0
]
==
1
);
release_harq
(
eNB
,
DLSCH_id
,
1
,
frame
,
subframe
,
0xffff
,
harq_ack
[
1
]
==
1
);
}
else
AssertFatal
(
1
==
0
,
"only format 1a/b for now, received %d
\n
"
,
uci
->
pucch_fmt
);
packetError
(
harq_ack
[
0
]
==
1
||
harq_ack
[
0
]
==
2
||
harq_ack
[
1
]
==
4
,
"harq_ack[0] is %d, should be 0,1 or 4
\n
"
,
harq_ack
[
0
]);
packetError
(
harq_ack
[
1
]
==
1
||
harq_ack
[
1
]
==
2
||
harq_ack
[
1
]
==
4
,
"harq_ack[1] is %d, should be 0,1 or 4
\n
"
,
harq_ack
[
1
]);
if
(
goodPacket
)
{
pdu
->
harq_indication_fdd_rel13
.
harq_tb_n
[
0
]
=
harq_ack
[
0
];
pdu
->
harq_indication_fdd_rel13
.
harq_tb_n
[
1
]
=
harq_ack
[
1
];
// release DLSCH if needed
release_harq
(
eNB
,
DLSCH_id
,
0
,
frame
,
subframe
,
0xffff
,
harq_ack
[
0
]
==
1
);
release_harq
(
eNB
,
DLSCH_id
,
1
,
frame
,
subframe
,
0xffff
,
harq_ack
[
1
]
==
1
);
}
}
else
packetError
(
1
==
0
,
"only format 1a/b for now, received %d
\n
"
,
uci
->
pucch_fmt
);
}
else
{
// TDD
AssertFatal
(
tdd_mapping_mode
==
0
||
tdd_mapping_mode
==
1
||
tdd_mapping_mode
==
2
,
"Illegal tdd_mapping_mode %d
\n
"
,
tdd_mapping_mode
);
pdu
->
harq_indication_tdd_rel13
.
tl
.
tag
=
NFAPI_HARQ_INDICATION_TDD_REL13_TAG
;
pdu
->
harq_indication_tdd_rel13
.
mode
=
tdd_mapping_mode
;
LOG_D
(
PHY
,
"%s(eNB, uci_harq format %d, rnti:%04x, frame:%d, subframe:%d, tdd_mapping_mode:%d) harq_ack[0]:%d harq_ack[1]:%d
\n
"
,
__FUNCTION__
,
uci
->
pucch_fmt
,
uci
->
rnti
,
frame
,
subframe
,
tdd_mapping_mode
,
harq_ack
[
0
],
harq_ack
[
1
]);
switch
(
tdd_mapping_mode
)
{
packetError
(
tdd_mapping_mode
==
0
||
tdd_mapping_mode
==
1
||
tdd_mapping_mode
==
2
,
"Illegal tdd_mapping_mode %d
\n
"
,
tdd_mapping_mode
);
if
(
goodPacket
)
{
pdu
->
harq_indication_tdd_rel13
.
tl
.
tag
=
NFAPI_HARQ_INDICATION_TDD_REL13_TAG
;
pdu
->
harq_indication_tdd_rel13
.
mode
=
tdd_mapping_mode
;
LOG_D
(
PHY
,
"%s(eNB, uci_harq format %d, rnti:%04x, frame:%d, subframe:%d, tdd_mapping_mode:%d) harq_ack[0]:%d harq_ack[1]:%d
\n
"
,
__FUNCTION__
,
uci
->
pucch_fmt
,
uci
->
rnti
,
frame
,
subframe
,
tdd_mapping_mode
,
harq_ack
[
0
],
harq_ack
[
1
]);
switch
(
tdd_mapping_mode
)
{
case
0
:
// bundling
if
(
uci
->
pucch_fmt
==
pucch_format1a
)
{
pdu
->
harq_indication_tdd_rel13
.
tl
.
tag
=
NFAPI_HARQ_INDICATION_TDD_REL13_TAG
;
pdu
->
harq_indication_tdd_rel13
.
number_of_ack_nack
=
1
;
LOG_D
(
PHY
,
"bundling, pucch1a, number of ack nack %d
\n
"
,
pdu
->
harq_indication_tdd_rel13
.
number_of_ack_nack
);
AssertFatal
(
harq_ack
[
0
]
==
1
||
harq_ack
[
0
]
==
2
||
harq_ack
[
0
]
==
4
,
"harq_ack[0] is %d, should be 1,2 or 4
\n
"
,
harq_ack
[
0
]);
pdu
->
harq_indication_tdd_rel13
.
harq_data
[
0
].
bundling
.
value_0
=
harq_ack
[
0
];
// release all bundled DLSCH if needed
release_harq
(
eNB
,
DLSCH_id
,
0
,
frame
,
subframe
,
0xffff
,
harq_ack
[
0
]
==
1
);
packetError
(
harq_ack
[
0
]
==
1
||
harq_ack
[
0
]
==
2
||
harq_ack
[
0
]
==
4
,
"harq_ack[0] is %d, should be 1,2 or 4
\n
"
,
harq_ack
[
0
]);
if
(
goodPacket
)
{
pdu
->
harq_indication_tdd_rel13
.
harq_data
[
0
].
bundling
.
value_0
=
harq_ack
[
0
];
// release all bundled DLSCH if needed
release_harq
(
eNB
,
DLSCH_id
,
0
,
frame
,
subframe
,
0xffff
,
harq_ack
[
0
]
==
1
);
}
}
else
if
(
uci
->
pucch_fmt
==
pucch_format1b
)
{
pdu
->
harq_indication_tdd_rel13
.
number_of_ack_nack
=
2
;
AssertFatal
(
harq_ack
[
0
]
==
1
||
harq_ack
[
0
]
==
2
||
harq_ack
[
1
]
==
4
,
"harq_ack[0] is %d, should be 0,1 or 4
\n
"
,
harq_ack
[
0
]);
AssertFatal
(
harq_ack
[
1
]
==
1
||
harq_ack
[
1
]
==
2
||
harq_ack
[
1
]
==
4
,
"harq_ack[1] is %d, should be 0,1 or 4
\n
"
,
harq_ack
[
1
]);
pdu
->
harq_indication_tdd_rel13
.
tl
.
tag
=
NFAPI_HARQ_INDICATION_TDD_REL13_TAG
;
pdu
->
harq_indication_tdd_rel13
.
harq_data
[
0
].
bundling
.
value_0
=
harq_ack
[
0
];
pdu
->
harq_indication_tdd_rel13
.
harq_data
[
1
].
bundling
.
value_0
=
harq_ack
[
1
];
// release all DLSCH if needed
release_harq
(
eNB
,
DLSCH_id
,
0
,
frame
,
subframe
,
0xffff
,
harq_ack
[
0
]
==
1
);
release_harq
(
eNB
,
DLSCH_id
,
1
,
frame
,
subframe
,
0xffff
,
harq_ack
[
1
]
==
1
);
packetError
(
harq_ack
[
0
]
==
1
||
harq_ack
[
0
]
==
2
||
harq_ack
[
1
]
==
4
,
"harq_ack[0] is %d, should be 0,1 or 4
\n
"
,
harq_ack
[
0
]);
packetError
(
harq_ack
[
1
]
==
1
||
harq_ack
[
1
]
==
2
||
harq_ack
[
1
]
==
4
,
"harq_ack[1] is %d, should be 0,1 or 4
\n
"
,
harq_ack
[
1
]);
if
(
goodPacket
)
{
pdu
->
harq_indication_tdd_rel13
.
tl
.
tag
=
NFAPI_HARQ_INDICATION_TDD_REL13_TAG
;
pdu
->
harq_indication_tdd_rel13
.
harq_data
[
0
].
bundling
.
value_0
=
harq_ack
[
0
];
pdu
->
harq_indication_tdd_rel13
.
harq_data
[
1
].
bundling
.
value_0
=
harq_ack
[
1
];
// release all DLSCH if needed
release_harq
(
eNB
,
DLSCH_id
,
0
,
frame
,
subframe
,
0xffff
,
harq_ack
[
0
]
==
1
);
release_harq
(
eNB
,
DLSCH_id
,
1
,
frame
,
subframe
,
0xffff
,
harq_ack
[
1
]
==
1
);
}
}
break
;
case
1
:
// multiplexing
AssertFatal
(
uci
->
pucch_fmt
==
pucch_format1b
,
"uci->pucch_format %d is not format1b
\n
"
,
uci
->
pucch_fmt
);
if
(
uci
->
num_pucch_resources
==
1
&&
uci
->
pucch_fmt
==
pucch_format1a
)
{
pdu
->
harq_indication_tdd_rel13
.
tl
.
tag
=
NFAPI_HARQ_INDICATION_TDD_REL13_TAG
;
pdu
->
harq_indication_tdd_rel13
.
number_of_ack_nack
=
1
;
AssertFatal
(
harq_ack
[
0
]
==
1
||
harq_ack
[
0
]
==
2
||
harq_ack
[
0
]
==
4
,
"harq_ack[0] is %d, should be 1,2 or 4
\n
"
,
harq_ack
[
0
]);
pdu
->
harq_indication_tdd_rel13
.
harq_data
[
0
].
multiplex
.
value_0
=
harq_ack
[
0
];
// release all DLSCH if needed
release_harq
(
eNB
,
DLSCH_id
,
0
,
frame
,
subframe
,
0xffff
,
harq_ack
[
0
]
==
1
);
packetError
(
uci
->
pucch_fmt
==
pucch_format1b
,
"uci->pucch_format %d is not format1b
\n
"
,
uci
->
pucch_fmt
);
if
(
goodPacket
)
{
if
(
uci
->
num_pucch_resources
==
1
&&
uci
->
pucch_fmt
==
pucch_format1a
)
{
pdu
->
harq_indication_tdd_rel13
.
tl
.
tag
=
NFAPI_HARQ_INDICATION_TDD_REL13_TAG
;
pdu
->
harq_indication_tdd_rel13
.
number_of_ack_nack
=
1
;
packetError
(
harq_ack
[
0
]
==
1
||
harq_ack
[
0
]
==
2
||
harq_ack
[
0
]
==
4
,
"harq_ack[0] is %d, should be 1,2 or 4
\n
"
,
harq_ack
[
0
]);
if
(
goodPacket
)
{
pdu
->
harq_indication_tdd_rel13
.
harq_data
[
0
].
multiplex
.
value_0
=
harq_ack
[
0
];
// release all DLSCH if needed
release_harq
(
eNB
,
DLSCH_id
,
0
,
frame
,
subframe
,
0xffff
,
harq_ack
[
0
]
==
1
);
}
}
else
if
(
uci
->
num_pucch_resources
==
1
&&
uci
->
pucch_fmt
==
pucch_format1b
)
{
pdu
->
harq_indication_tdd_rel13
.
tl
.
tag
=
NFAPI_HARQ_INDICATION_TDD_REL13_TAG
;
pdu
->
harq_indication_tdd_rel13
.
number_of_ack_nack
=
2
;
AssertFatal
(
harq_ack
[
0
]
==
1
||
harq_ack
[
0
]
==
2
||
harq_ack
[
1
]
==
4
,
"harq_ack[0] is %d, should be 0,1 or 4
\n
"
,
harq_ack
[
0
]);
AssertFatal
(
harq_ack
[
1
]
==
1
||
harq_ack
[
1
]
==
2
||
harq_ack
[
1
]
==
4
,
"harq_ack[1] is %d, should be 0,1 or 4
\n
"
,
harq_ack
[
1
]);
pdu
->
harq_indication_tdd_rel13
.
harq_data
[
0
].
multiplex
.
value_0
=
harq_ack
[
0
];
pdu
->
harq_indication_tdd_rel13
.
harq_data
[
1
].
multiplex
.
value_0
=
harq_ack
[
1
];
// release all DLSCH if needed
release_harq
(
eNB
,
DLSCH_id
,
0
,
frame
,
subframe
,
0xffff
,
harq_ack
[
0
]
==
1
);
release_harq
(
eNB
,
DLSCH_id
,
1
,
frame
,
subframe
,
0xffff
,
harq_ack
[
1
]
==
1
);
pdu
->
harq_indication_tdd_rel13
.
tl
.
tag
=
NFAPI_HARQ_INDICATION_TDD_REL13_TAG
;
pdu
->
harq_indication_tdd_rel13
.
number_of_ack_nack
=
2
;
packetError
(
harq_ack
[
0
]
==
1
||
harq_ack
[
0
]
==
2
||
harq_ack
[
1
]
==
4
,
"harq_ack[0] is %d, should be 0,1 or 4
\n
"
,
harq_ack
[
0
]);
packetError
(
harq_ack
[
1
]
==
1
||
harq_ack
[
1
]
==
2
||
harq_ack
[
1
]
==
4
,
"harq_ack[1] is %d, should be 0,1 or 4
\n
"
,
harq_ack
[
1
]);
if
(
goodPacket
)
{
pdu
->
harq_indication_tdd_rel13
.
harq_data
[
0
].
multiplex
.
value_0
=
harq_ack
[
0
];
pdu
->
harq_indication_tdd_rel13
.
harq_data
[
1
].
multiplex
.
value_0
=
harq_ack
[
1
];
// release all DLSCH if needed
release_harq
(
eNB
,
DLSCH_id
,
0
,
frame
,
subframe
,
0xffff
,
harq_ack
[
0
]
==
1
);
release_harq
(
eNB
,
DLSCH_id
,
1
,
frame
,
subframe
,
0xffff
,
harq_ack
[
1
]
==
1
);
}
}
else
{
// num_pucch_resources (M) > 1
pdu
->
harq_indication_tdd_rel13
.
tl
.
tag
=
NFAPI_HARQ_INDICATION_TDD_REL13_TAG
;
pdu
->
harq_indication_tdd_rel13
.
number_of_ack_nack
=
uci
->
num_pucch_resources
;
...
...
@@ -2067,7 +2084,7 @@ void fill_uci_harq_indication (int UEid, PHY_VARS_eNB *eNB, LTE_eNB_UCI *uci, in
release_harq
(
eNB
,
DLSCH_id
,
1
,
frame
,
subframe
,
tdd_multiplexing_mask
,
1
/* force release? previous code was unconditional */
);
}
break
;
break
;
case
2
:
// special bundling (SR collision)
pdu
->
harq_indication_tdd_rel13
.
tl
.
tag
=
NFAPI_HARQ_INDICATION_TDD_REL13_TAG
;
...
...
@@ -2117,16 +2134,23 @@ void fill_uci_harq_indication (int UEid, PHY_VARS_eNB *eNB, LTE_eNB_UCI *uci, in
}
else
{
pdu
->
harq_indication_tdd_rel13
.
harq_data
[
0
].
bundling
.
value_0
=
0
;
}
break
;
}
break
;
}
}
}
}
//TDD
eNB
->
UL_INFO
.
harq_ind
.
harq_indication_body
.
number_of_harqs
++
;
LOG_D
(
PHY
,
"Incremented eNB->UL_INFO.harq_ind.harq_indication_body.number_of_harqs:%d
\n
"
,
eNB
->
UL_INFO
.
harq_ind
.
harq_indication_body
.
number_of_harqs
);
if
(
goodPacket
)
{
eNB
->
UL_INFO
.
harq_ind
.
harq_indication_body
.
number_of_harqs
++
;
LOG_D
(
PHY
,
"Incremented eNB->UL_INFO.harq_ind.harq_indication_body.number_of_harqs:%d
\n
"
,
eNB
->
UL_INFO
.
harq_ind
.
harq_indication_body
.
number_of_harqs
);
}
else
{
LOG_W
(
PHY
,
"discarded a PUCCH because the decoded values are impossible
\n
"
);
}
pthread_mutex_unlock
(
&
eNB
->
UL_INFO_mutex
);
}
...
...
targets/RT/USER/lte-ue.c
View file @
ac8da1f0
...
...
@@ -2011,8 +2011,18 @@ void *UE_thread(void *arg)
if
(
is_synchronized
==
0
)
{
if
(
instance_cnt_synch
<
0
)
{
// we can invoke the synch
// grab 10 ms of signal and wakeup synch thread
// we shift in time flow because the UE doesn't detect sync when frame alignment is not easy
for
(
int
i
=
0
;
i
<
UE
->
frame_parms
.
nb_antennas_rx
;
i
++
)
rxp
[
i
]
=
(
void
*
)
&
dummy_rx
[
i
][
0
];
UE
->
rfdevice
.
trx_read_func
(
&
UE
->
rfdevice
,
&
timestamp
,
rxp
,
UE
->
frame_parms
.
samples_per_tti
/
2
,
UE
->
frame_parms
.
nb_antennas_rx
);
// grab 10 ms of signal and wakeup synch thread
if
(
UE
->
mode
!=
loop_through_memory
)
{
if
(
IS_SOFTMODEM_RFSIM
)
{
for
(
int
sf
=
0
;
sf
<
10
;
sf
++
)
{
...
...
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