Commit e0e091b1 authored by Robert Schmidt's avatar Robert Schmidt

Merge remote-tracking branch 'jfiedlerova/fix-t2-decoding' into integration_2026_w29

fix(t2): Accept CBs decoded across separate HARQ rounds (#301)

See commit 8481bd3e for more details.
Reviewed-by: default avatarRobert Schmidt <robert.schmidt@openairinterface.org>
parents a9324db7 8481bd3e
...@@ -274,28 +274,21 @@ int nr_ulsch_decoding(PHY_VARS_gNB *phy_vars_gNB, ...@@ -274,28 +274,21 @@ int nr_ulsch_decoding(PHY_VARS_gNB *phy_vars_gNB,
nrLDPC_TB_decoding_parameters_t *TB_parameters = &TBs[pusch_id]; nrLDPC_TB_decoding_parameters_t *TB_parameters = &TBs[pusch_id];
uint32_t offset = 0, r_offset = 0; uint32_t offset = 0, r_offset = 0;
bool crcok = true;
LOG_D(PHY, "C = %d\n", TB_parameters->C); LOG_D(PHY, "C = %d\n", TB_parameters->C);
for (int r = 0; r < TB_parameters->C; r++) { for (int r = 0; r < TB_parameters->C; r++) {
LOG_D(PHY, "Segment %d %d\n", r, TB_parameters->decodeSuccess[r]); LOG_D(PHY, "Segment %d %d\n", r, TB_parameters->decodeSuccess[r]);
if (TB_parameters->decodeSuccess[r] == false) { uint32_t seg_len = (harq_process->K >> 3) - (harq_process->F >> 3) - ((harq_process->C > 1) ? 3 : 0);
if (TB_parameters->decodeSuccess[r]) {
memcpy(harq_process->b + offset, harq_process->c + r_offset, seg_len);
} else {
LOG_D(PHY, "Segment %d/%d in error\n", r, TB_parameters->C); LOG_D(PHY, "Segment %d/%d in error\n", r, TB_parameters->C);
crcok = false;
break;
} }
offset += seg_len;
r_offset += (harq_process->K >> 3);
} }
if (crcok) { bool crcok = (harq_process->processedSegments == TB_parameters->C);
for (int r = 0; r < TB_parameters->C; r++) { if (!crcok)
// Copy c to b in case of decoding success
memcpy(harq_process->b + offset,
harq_process->c + r_offset,
(harq_process->K >> 3) - (harq_process->F >> 3) - ((harq_process->C > 1) ? 3 : 0));
offset += ((harq_process->K >> 3) - (harq_process->F >> 3) - ((harq_process->C > 1) ? 3 : 0));
r_offset += (harq_process->K >> 3);
}
} else {
LOG_D(PHY, "ULSCH %d in error\n", ULSCH_id); LOG_D(PHY, "ULSCH %d in error\n", ULSCH_id);
}
merge_meas(&phy_vars_gNB->ts_deinterleave, &TB_parameters->ts_deinterleave); merge_meas(&phy_vars_gNB->ts_deinterleave, &TB_parameters->ts_deinterleave);
merge_meas(&phy_vars_gNB->ts_rate_unmatch, &TB_parameters->ts_rate_unmatch); merge_meas(&phy_vars_gNB->ts_rate_unmatch, &TB_parameters->ts_rate_unmatch);
merge_meas(&phy_vars_gNB->ts_seg_prep, &TB_parameters->ts_seg_prep); merge_meas(&phy_vars_gNB->ts_seg_prep, &TB_parameters->ts_seg_prep);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment