schedule msg3 retransmission for no signal scenario
This commit is contained in:
@@ -276,10 +276,12 @@ static void nr_postDecode(PHY_VARS_gNB *gNB, notifiedFIFO_elt_t *req)
|
|||||||
bool decodeSuccess = (rdata->decodeIterations <= rdata->decoderParms.numMaxIter);
|
bool decodeSuccess = (rdata->decodeIterations <= rdata->decoderParms.numMaxIter);
|
||||||
ulsch_harq->processedSegments++;
|
ulsch_harq->processedSegments++;
|
||||||
LOG_D(PHY,
|
LOG_D(PHY,
|
||||||
"processing result of segment: %d, processed %d/%d\n",
|
"processing result of segment: %d, processed %d/%d, %s\n",
|
||||||
rdata->segment_r,
|
rdata->segment_r,
|
||||||
ulsch_harq->processedSegments,
|
ulsch_harq->processedSegments,
|
||||||
rdata->nbSegments);
|
rdata->nbSegments,
|
||||||
|
decodeSuccess ? "Decoded Successfully" : "Decoding Unsuccessful");
|
||||||
|
|
||||||
if (decodeSuccess) {
|
if (decodeSuccess) {
|
||||||
memcpy(ulsch_harq->b + rdata->offset, ulsch_harq->c[r], rdata->Kr_bytes - (ulsch_harq->F >> 3) - ((ulsch_harq->C > 1) ? 3 : 0));
|
memcpy(ulsch_harq->b + rdata->offset, ulsch_harq->c[r], rdata->Kr_bytes - (ulsch_harq->F >> 3) - ((ulsch_harq->C > 1) ? 3 : 0));
|
||||||
|
|
||||||
@@ -466,11 +468,16 @@ void nr_fill_indication(PHY_VARS_gNB *gNB, int frame, int slot_rx, int ULSCH_id,
|
|||||||
|
|
||||||
// put timing advance command in 0..63 range
|
// put timing advance command in 0..63 range
|
||||||
timing_advance_update += 31;
|
timing_advance_update += 31;
|
||||||
|
timing_advance_update = max(timing_advance_update, 0);
|
||||||
|
timing_advance_update = min(timing_advance_update, 63);
|
||||||
|
|
||||||
if (timing_advance_update < 0) timing_advance_update = 0;
|
if (crc_flag == 0)
|
||||||
if (timing_advance_update > 63) timing_advance_update = 63;
|
LOG_D(PHY,
|
||||||
|
"%d.%d : Received PUSCH : Estimated timing advance PUSCH is = %d, timing_advance_update is %d \n",
|
||||||
if (crc_flag == 0) LOG_D(PHY, "%d.%d : Received PUSCH : Estimated timing advance PUSCH is = %d, timing_advance_update is %d \n", frame,slot_rx,sync_pos,timing_advance_update);
|
frame,
|
||||||
|
slot_rx,
|
||||||
|
sync_pos,
|
||||||
|
timing_advance_update);
|
||||||
|
|
||||||
// estimate UL_CQI for MAC
|
// estimate UL_CQI for MAC
|
||||||
int SNRtimes10 =
|
int SNRtimes10 =
|
||||||
|
|||||||
@@ -615,6 +615,26 @@ void handle_nr_ul_harq(const int CC_idP,
|
|||||||
NR_SCHED_UNLOCK(&nrmac->sched_lock);
|
NR_SCHED_UNLOCK(&nrmac->sched_lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void handle_msg3_failed_rx(NR_RA_t *ra, int i, int harq_round_max)
|
||||||
|
{
|
||||||
|
// for CFRA (NSA) do not schedule retransmission of msg3
|
||||||
|
if (ra->cfra) {
|
||||||
|
LOG_D(NR_MAC, "Random Access %i failed at state %s (NSA msg3 reception failed)\n", i, nrra_text[ra->ra_state]);
|
||||||
|
nr_clear_ra_proc(ra);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ra->msg3_round >= harq_round_max - 1) {
|
||||||
|
LOG_W(NR_MAC, "Random Access %i failed at state %s (Reached msg3 max harq rounds)\n", i, nrra_text[ra->ra_state]);
|
||||||
|
nr_clear_ra_proc(ra);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
LOG_D(NR_MAC, "Random Access %i Msg3 CRC did not pass\n", i);
|
||||||
|
ra->msg3_round++;
|
||||||
|
ra->ra_state = nrRA_Msg3_retransmission;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* When data are received on PHY and transmitted to MAC
|
* When data are received on PHY and transmitted to MAC
|
||||||
*/
|
*/
|
||||||
@@ -757,10 +777,6 @@ static void _nr_rx_sdu(const module_id_t gnb_mod_idP,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(no_sig) {
|
|
||||||
LOG_W(NR_MAC, "No signal\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
T(T_GNB_MAC_UL_PDU_WITH_DATA, T_INT(gnb_mod_idP), T_INT(CC_idP),
|
T(T_GNB_MAC_UL_PDU_WITH_DATA, T_INT(gnb_mod_idP), T_INT(CC_idP),
|
||||||
T_INT(rntiP), T_INT(frameP), T_INT(slotP), T_INT(-1) /* harq_pid */,
|
T_INT(rntiP), T_INT(frameP), T_INT(slotP), T_INT(-1) /* harq_pid */,
|
||||||
T_BUFFER(sduP, sdu_lenP));
|
T_BUFFER(sduP, sdu_lenP));
|
||||||
@@ -774,8 +790,8 @@ static void _nr_rx_sdu(const module_id_t gnb_mod_idP,
|
|||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (no_sig) {
|
if (no_sig) {
|
||||||
LOG_D(NR_MAC, "Random Access %i failed at state %s (no signal)\n", i, nrra_text[ra->ra_state]);
|
LOG_W(NR_MAC, "Random Access %i ULSCH with no signal\n", i);
|
||||||
nr_clear_ra_proc(ra);
|
handle_msg3_failed_rx(ra, i, gNB_mac->ul_bler.harq_round_max);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -912,23 +928,7 @@ static void _nr_rx_sdu(const module_id_t gnb_mod_idP,
|
|||||||
if( (frameP!=ra->Msg3_frame) || (slotP!=ra->Msg3_slot))
|
if( (frameP!=ra->Msg3_frame) || (slotP!=ra->Msg3_slot))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
// for CFRA (NSA) do not schedule retransmission of msg3
|
handle_msg3_failed_rx(ra, i, gNB_mac->ul_bler.harq_round_max);
|
||||||
if (ra->cfra) {
|
|
||||||
LOG_D(NR_MAC, "Random Access %i failed at state %s (NSA msg3 reception failed)\n", i, nrra_text[ra->ra_state]);
|
|
||||||
nr_clear_ra_proc(ra);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ra->msg3_round >= gNB_mac->ul_bler.harq_round_max - 1) {
|
|
||||||
LOG_W(NR_MAC, "Random Access %i failed at state %s (Reached msg3 max harq rounds)\n", i, nrra_text[ra->ra_state]);
|
|
||||||
nr_clear_ra_proc(ra);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
LOG_D(NR_MAC, "Random Access %i Msg3 CRC did not pass)\n", i);
|
|
||||||
|
|
||||||
ra->msg3_round++;
|
|
||||||
ra->ra_state = nrRA_Msg3_retransmission;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user