improving the handling of sr_TransMax
This commit is contained in:
@@ -1714,7 +1714,9 @@ static void configure_maccellgroup(NR_UE_MAC_INST_t *mac, const NR_MAC_CellGroup
|
|||||||
si->sr_id == sr->schedulingRequestId,
|
si->sr_id == sr->schedulingRequestId,
|
||||||
"Current implementation cannot handle more than 1 SR configuration\n");
|
"Current implementation cannot handle more than 1 SR configuration\n");
|
||||||
si->sr_id = sr->schedulingRequestId;
|
si->sr_id = sr->schedulingRequestId;
|
||||||
si->sr_TransMax = sr->sr_TransMax;
|
// NR_SchedulingRequestToAddMod__sr_TransMax_n4 = 0 and so on
|
||||||
|
// to obtain the value to configure we need to right shift 4 by the RRC parameter
|
||||||
|
si->sr_MaxTransmissions = 4 << sr->sr_TransMax;
|
||||||
int target_ms = 0;
|
int target_ms = 0;
|
||||||
if (sr->sr_ProhibitTimer)
|
if (sr->sr_ProhibitTimer)
|
||||||
target_ms = 1 << *sr->sr_ProhibitTimer;
|
target_ms = 1 << *sr->sr_ProhibitTimer;
|
||||||
|
|||||||
@@ -225,7 +225,7 @@ typedef struct {
|
|||||||
/// sr ProhibitTimer
|
/// sr ProhibitTimer
|
||||||
NR_timer_t sr_ProhibitTimer;
|
NR_timer_t sr_ProhibitTimer;
|
||||||
// Maximum number of SR transmissions
|
// Maximum number of SR transmissions
|
||||||
uint32_t sr_TransMax;
|
uint32_t sr_MaxTransmissions;
|
||||||
int sr_id;
|
int sr_id;
|
||||||
///timer before triggering a periodic PHR
|
///timer before triggering a periodic PHR
|
||||||
uint16_t periodicPHR_Timer;
|
uint16_t periodicPHR_Timer;
|
||||||
|
|||||||
@@ -2484,23 +2484,22 @@ int8_t nr_ue_get_SR(NR_UE_MAC_INST_t *mac, frame_t frameP, slot_t slot)
|
|||||||
{
|
{
|
||||||
// no UL-SCH resources available for this tti && UE has a valid PUCCH resources for SR configuration for this tti
|
// no UL-SCH resources available for this tti && UE has a valid PUCCH resources for SR configuration for this tti
|
||||||
NR_UE_SCHEDULING_INFO *si = &mac->scheduling_info;
|
NR_UE_SCHEDULING_INFO *si = &mac->scheduling_info;
|
||||||
int max_sr_transmissions = (1 << (2 + si->sr_TransMax));
|
|
||||||
LOG_D(NR_MAC, "[UE %d] Frame %d slot %d send SR indication (SR_COUNTER/sr_TransMax %d/%d), SR_pending %d\n",
|
LOG_D(NR_MAC, "[UE %d] Frame %d slot %d send SR indication (SR_COUNTER/sr_TransMax %d/%d), SR_pending %d\n",
|
||||||
mac->ue_id,
|
mac->ue_id,
|
||||||
frameP,
|
frameP,
|
||||||
slot,
|
slot,
|
||||||
si->SR_COUNTER,
|
si->SR_COUNTER,
|
||||||
max_sr_transmissions,
|
si->sr_MaxTransmissions,
|
||||||
si->SR_pending); // todo
|
si->SR_pending); // todo
|
||||||
|
|
||||||
if ((si->SR_pending == 1) &&
|
if ((si->SR_pending == 1) &&
|
||||||
(si->SR_COUNTER < max_sr_transmissions)) {
|
(si->SR_COUNTER < si->sr_MaxTransmissions)) {
|
||||||
LOG_D(NR_MAC, "[UE %d] Frame %d slot %d PHY asks for SR (SR_COUNTER/sr_TransMax %d/%d), SR_pending %d, increment SR_COUNTER\n",
|
LOG_D(NR_MAC, "[UE %d] Frame %d slot %d PHY asks for SR (SR_COUNTER/sr_TransMax %d/%d), SR_pending %d, increment SR_COUNTER\n",
|
||||||
mac->ue_id,
|
mac->ue_id,
|
||||||
frameP,
|
frameP,
|
||||||
slot,
|
slot,
|
||||||
si->SR_COUNTER,
|
si->SR_COUNTER,
|
||||||
max_sr_transmissions,
|
si->sr_MaxTransmissions,
|
||||||
si->SR_pending); // todo
|
si->SR_pending); // todo
|
||||||
si->SR_COUNTER++;
|
si->SR_COUNTER++;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user