Fix AckNack and SR multiplexing in PUCCH2
- correctly reset HARQ structure for HARQ Ack/Nack/PUCCH0 - reduce max PUCCH2 bits to have room for SR
This commit is contained in:
committed by
Robert Schmidt
parent
7f910a2e36
commit
8c81c70de9
@@ -370,6 +370,7 @@ void nr_decode_pucch1(int32_t **rxdataF,
|
||||
uint8_t nr_bit);
|
||||
|
||||
void nr_decode_pucch2(PHY_VARS_gNB *gNB,
|
||||
int frame,
|
||||
int slot,
|
||||
nfapi_nr_uci_pucch_pdu_format_2_3_4_t* uci_pdu,
|
||||
nfapi_nr_pucch_pdu_t* pucch_pdu);
|
||||
@@ -380,10 +381,5 @@ void nr_decode_pucch0(PHY_VARS_gNB *gNB,
|
||||
nfapi_nr_uci_pucch_pdu_format_0_1_t* uci_pdu,
|
||||
nfapi_nr_pucch_pdu_t* pucch_pdu);
|
||||
|
||||
void nr_decode_pucch2(PHY_VARS_gNB *gNB,
|
||||
int slot,
|
||||
nfapi_nr_uci_pucch_pdu_format_2_3_4_t* uci_pdu,
|
||||
nfapi_nr_pucch_pdu_t* pucch_pdu);
|
||||
|
||||
|
||||
#endif /*__NR_TRANSPORT__H__*/
|
||||
|
||||
@@ -1136,6 +1136,7 @@ void init_pucch2_luts() {
|
||||
|
||||
|
||||
void nr_decode_pucch2(PHY_VARS_gNB *gNB,
|
||||
int frame,
|
||||
int slot,
|
||||
nfapi_nr_uci_pucch_pdu_format_2_3_4_t* uci_pdu,
|
||||
nfapi_nr_pucch_pdu_t* pucch_pdu) {
|
||||
@@ -1720,13 +1721,19 @@ void nr_decode_pucch2(PHY_VARS_gNB *gNB,
|
||||
uci_pdu->pduBitmap|=2;
|
||||
uci_pdu->harq.harq_payload = (uint8_t*)malloc(harq_bytes);
|
||||
uci_pdu->harq.harq_crc = decoderState;
|
||||
LOG_D(PHY,"[DLSCH/PDSCH/PUCCH2] %d.%d HARQ bytes (%d) Decoder state %d\n",
|
||||
frame,slot,harq_bytes,decoderState);
|
||||
int i=0;
|
||||
for (;i<harq_bytes-1;i++) {
|
||||
uci_pdu->harq.harq_payload[i] = decodedPayload[0] & 255;
|
||||
LOG_D(PHY,"[DLSCH/PDSCH/PUCCH2] %d.%d HARQ paylod (%d) = %d\n",
|
||||
frame,slot,i,uci_pdu->harq.harq_payload[i]);
|
||||
decodedPayload[0]>>=8;
|
||||
}
|
||||
bit_left = pucch_pdu->bit_len_harq-((harq_bytes-1)<<3);
|
||||
uci_pdu->harq.harq_payload[i] = decodedPayload[0] & ((1<<bit_left)-1);
|
||||
LOG_D(PHY,"[DLSCH/PDSCH/PUCCH2] %d.%d HARQ paylod (%d) = %d\n",
|
||||
frame,slot,i,uci_pdu->harq.harq_payload[i]);
|
||||
decodedPayload[0] >>= pucch_pdu->bit_len_harq;
|
||||
}
|
||||
|
||||
|
||||
@@ -711,6 +711,7 @@ int phy_procedures_gNB_uespec_RX(PHY_VARS_gNB *gNB, int frame_rx, int slot_rx) {
|
||||
|
||||
LOG_D(PHY,"%d.%d Calling nr_decode_pucch2\n",frame_rx,slot_rx);
|
||||
nr_decode_pucch2(gNB,
|
||||
frame_rx,
|
||||
slot_rx,
|
||||
uci_pdu_format2,
|
||||
pucch_pdu);
|
||||
|
||||
@@ -705,7 +705,7 @@ int main(int argc, char **argv)
|
||||
pucch_pdu.second_hop_prb = N_RB_DL-1;
|
||||
}
|
||||
else pucch_pdu.freq_hop_flag = 0;
|
||||
nr_decode_pucch2(gNB,nr_slot_tx,&uci_pdu,&pucch_pdu);
|
||||
nr_decode_pucch2(gNB,nr_frame_tx,nr_slot_tx,&uci_pdu,&pucch_pdu);
|
||||
int csi_part1_bytes=pucch_pdu.bit_len_csi_part1>>3;
|
||||
if ((pucch_pdu.bit_len_csi_part1&7) > 0) csi_part1_bytes++;
|
||||
for (int i=0;i<csi_part1_bytes;i++) {
|
||||
|
||||
@@ -1598,7 +1598,6 @@ void nr_ue_configure_pucch(NR_UE_MAC_INST_t *mac,
|
||||
|
||||
// TODO verify if SR can be transmitted in this mode
|
||||
pucch_pdu->payload = (pucch->sr_payload << O_ACK) | pucch->ack_payload;
|
||||
|
||||
}
|
||||
else if (pucch->pucch_resource != NULL) {
|
||||
|
||||
@@ -1799,8 +1798,6 @@ void nr_ue_configure_pucch(NR_UE_MAC_INST_t *mac,
|
||||
default:
|
||||
AssertFatal(1==0,"Group hopping flag undefined (0,1,2) \n");
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -2195,7 +2192,8 @@ uint8_t get_downlink_ack(NR_UE_MAC_INST_t *mac,
|
||||
sched_frame = (sched_frame + 1) % 1024;
|
||||
}
|
||||
AssertFatal(sched_slot < slots_per_frame, "sched_slot was calculated incorrect %d\n", sched_slot);
|
||||
LOG_D(PHY,"HARQ pid %d is active for %d.%d (dl_slot %d, feedback_to_ul %d, is_common %d\n",dl_harq_pid, sched_frame,sched_slot,current_harq->dl_slot,current_harq->feedback_to_ul,current_harq->is_common);
|
||||
LOG_D(PHY,"HARQ pid %d is active for %d.%d (dl_slot %d, feedback_to_ul %d, is_common %d\n",
|
||||
dl_harq_pid, sched_frame,sched_slot,current_harq->dl_slot,current_harq->feedback_to_ul,current_harq->is_common);
|
||||
/* check if current tx slot should transmit downlink acknowlegment */
|
||||
if (sched_frame == frame && sched_slot == slot) {
|
||||
if (get_softmodem_params()->emulate_l1) {
|
||||
|
||||
@@ -1306,9 +1306,10 @@ int nr_acknack_scheduling(int mod_id,
|
||||
csi_pucch->ul_slot == pucch->ul_slot) {
|
||||
// skip the CSI PUCCH if it is present and if in the next frame/slot
|
||||
// and if we don't multiplex
|
||||
// FIXME currently we support at most 11 bits in pucch2 so skip also in that case
|
||||
/* FIXME currently we support at most 11 bits in pucch2 so skip also in that case.
|
||||
We need to set the limit to 10 because SR scheduling has been moved afterwards */
|
||||
if(!csi_pucch->simultaneous_harqcsi
|
||||
|| ((csi_pucch->csi_bits + csi_pucch->dai_c) >= 11)) {
|
||||
|| ((csi_pucch->csi_bits + csi_pucch->dai_c) >= 10)) {
|
||||
LOG_D(NR_MAC,"Cannot multiplex csi_pucch %d +csi_pucch->dai_c %d for %d.%d\n",csi_pucch->csi_bits,csi_pucch->dai_c,csi_pucch->frame,csi_pucch->ul_slot);
|
||||
nr_fill_nfapi_pucch(RC.nrmac[mod_id], frame, slot, csi_pucch, UE);
|
||||
memset(csi_pucch, 0, sizeof(*csi_pucch));
|
||||
@@ -1328,9 +1329,7 @@ int nr_acknack_scheduling(int mod_id,
|
||||
else {
|
||||
csi_pucch->timing_indicator = ind_found;
|
||||
csi_pucch->dai_c++;
|
||||
// keep updating format 2 indicator
|
||||
pucch->timing_indicator = ind_found; // index in the list of timing indicators
|
||||
pucch->dai_c++;
|
||||
memset(pucch,0,sizeof(*pucch));
|
||||
|
||||
LOG_D(NR_MAC,"multiplexing csi_pucch %d +csi_pucch->dai_c %d for %d.%d\n",csi_pucch->csi_bits,csi_pucch->dai_c,csi_pucch->frame,csi_pucch->ul_slot);
|
||||
return 1;
|
||||
|
||||
Reference in New Issue
Block a user