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
1
Merge Requests
1
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
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-RAN
Commits
a530166b
Commit
a530166b
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
b1eaa660
f4c39e9d
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 @
a530166b
...
...
@@ -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 @
a530166b
...
...
@@ -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