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
Michael Black
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
Show 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,24 +1988,30 @@ 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
]);
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
]);
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
AssertFatal
(
1
==
0
,
"only format 1a/b for now, received %d
\n
"
,
uci
->
pucch_fmt
);
}
}
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
);
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
,
...
...
@@ -2014,14 +2023,17 @@ void fill_uci_harq_indication (int UEid, PHY_VARS_eNB *eNB, LTE_eNB_UCI *uci, in
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
]);
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
]);
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
];
...
...
@@ -2029,29 +2041,34 @@ void fill_uci_harq_indication (int UEid, PHY_VARS_eNB *eNB, LTE_eNB_UCI *uci, in
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
);
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
;
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
]);
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
]);
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
;
...
...
@@ -2123,10 +2140,17 @@ void fill_uci_harq_indication (int UEid, PHY_VARS_eNB *eNB, LTE_eNB_UCI *uci, in
break
;
}
}
}
}
//TDD
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,6 +2011,16 @@ void *UE_thread(void *arg)
if
(
is_synchronized
==
0
)
{
if
(
instance_cnt_synch
<
0
)
{
// we can invoke the synch
// 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
)
{
...
...
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