separate DL and UL timers at UE
This commit is contained in:
+4
-1
@@ -519,7 +519,7 @@ void processSlotTX(void *arg)
|
|||||||
bool sl_tx_action = false;
|
bool sl_tx_action = false;
|
||||||
|
|
||||||
if (UE->if_inst)
|
if (UE->if_inst)
|
||||||
UE->if_inst->slot_indication(UE->Mod_id);
|
UE->if_inst->slot_indication(UE->Mod_id, true);
|
||||||
|
|
||||||
if (proc->tx_slot_type == NR_UPLINK_SLOT || proc->tx_slot_type == NR_MIXED_SLOT) {
|
if (proc->tx_slot_type == NR_UPLINK_SLOT || proc->tx_slot_type == NR_MIXED_SLOT) {
|
||||||
if (UE->sl_mode == 2 && proc->tx_slot_type == NR_SIDELINK_SLOT) {
|
if (UE->sl_mode == 2 && proc->tx_slot_type == NR_SIDELINK_SLOT) {
|
||||||
@@ -650,6 +650,9 @@ static int UE_dl_preprocessing(PHY_VARS_NR_UE *UE,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (UE->if_inst)
|
||||||
|
UE->if_inst->slot_indication(UE->Mod_id, false);
|
||||||
|
|
||||||
bool dl_slot = false;
|
bool dl_slot = false;
|
||||||
if (proc->rx_slot_type == NR_DOWNLINK_SLOT || proc->rx_slot_type == NR_MIXED_SLOT) {
|
if (proc->rx_slot_type == NR_DOWNLINK_SLOT || proc->rx_slot_type == NR_MIXED_SLOT) {
|
||||||
dl_slot = true;
|
dl_slot = true;
|
||||||
|
|||||||
@@ -49,7 +49,8 @@ NR_UE_DL_BWP_t *get_dl_bwp_structure(NR_UE_MAC_INST_t *mac, int bwp_id, bool set
|
|||||||
NR_UE_UL_BWP_t *get_ul_bwp_structure(NR_UE_MAC_INST_t *mac, int bwp_id, bool setup);
|
NR_UE_UL_BWP_t *get_ul_bwp_structure(NR_UE_MAC_INST_t *mac, int bwp_id, bool setup);
|
||||||
|
|
||||||
void send_srb0_rrc(int ue_id, const uint8_t *sdu, sdu_size_t sdu_len, void *data);
|
void send_srb0_rrc(int ue_id, const uint8_t *sdu, sdu_size_t sdu_len, void *data);
|
||||||
void update_mac_timers(NR_UE_MAC_INST_t *mac);
|
void update_mac_ul_timers(NR_UE_MAC_INST_t *mac);
|
||||||
|
void update_mac_dl_timers(NR_UE_MAC_INST_t *mac);
|
||||||
NR_LC_SCHEDULING_INFO *get_scheduling_info_from_lcid(NR_UE_MAC_INST_t *mac, NR_LogicalChannelIdentity_t lcid);
|
NR_LC_SCHEDULING_INFO *get_scheduling_info_from_lcid(NR_UE_MAC_INST_t *mac, NR_LogicalChannelIdentity_t lcid);
|
||||||
|
|
||||||
/**\brief apply default configuration values in nr_mac instance
|
/**\brief apply default configuration values in nr_mac instance
|
||||||
|
|||||||
@@ -182,16 +182,23 @@ void handle_time_alignment_timer_expired(NR_UE_MAC_INST_t *mac)
|
|||||||
// TODO not sure what to do here
|
// TODO not sure what to do here
|
||||||
}
|
}
|
||||||
|
|
||||||
void update_mac_timers(NR_UE_MAC_INST_t *mac)
|
void update_mac_dl_timers(NR_UE_MAC_INST_t *mac)
|
||||||
|
{
|
||||||
|
bool ra_window_expired = nr_timer_tick(&mac->ra.response_window_timer);
|
||||||
|
if (ra_window_expired) // consider the Random Access Response reception not successful
|
||||||
|
nr_rar_not_successful(mac);
|
||||||
|
bool alignment_timer_expired = nr_timer_tick(&mac->time_alignment_timer);
|
||||||
|
if (alignment_timer_expired)
|
||||||
|
handle_time_alignment_timer_expired(mac);
|
||||||
|
}
|
||||||
|
|
||||||
|
void update_mac_ul_timers(NR_UE_MAC_INST_t *mac)
|
||||||
{
|
{
|
||||||
if (mac->data_inactivity_timer) {
|
if (mac->data_inactivity_timer) {
|
||||||
bool inactivity_timer_expired = nr_timer_tick(mac->data_inactivity_timer);
|
bool inactivity_timer_expired = nr_timer_tick(mac->data_inactivity_timer);
|
||||||
if (inactivity_timer_expired)
|
if (inactivity_timer_expired)
|
||||||
nr_mac_rrc_inactivity_timer_ind(mac->ue_id);
|
nr_mac_rrc_inactivity_timer_ind(mac->ue_id);
|
||||||
}
|
}
|
||||||
bool alignment_timer_expired = nr_timer_tick(&mac->time_alignment_timer);
|
|
||||||
if (alignment_timer_expired)
|
|
||||||
handle_time_alignment_timer_expired(mac);
|
|
||||||
bool contention_resolution_expired = nr_timer_tick(&mac->ra.contention_resolution_timer);
|
bool contention_resolution_expired = nr_timer_tick(&mac->ra.contention_resolution_timer);
|
||||||
if (contention_resolution_expired)
|
if (contention_resolution_expired)
|
||||||
nr_ra_contention_resolution_failed(mac);
|
nr_ra_contention_resolution_failed(mac);
|
||||||
@@ -238,9 +245,6 @@ void update_mac_timers(NR_UE_MAC_INST_t *mac)
|
|||||||
phr_info->phr_reporting |= (1 << phr_cause_periodic_timer);
|
phr_info->phr_reporting |= (1 << phr_cause_periodic_timer);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
bool ra_window_expired = nr_timer_tick(&mac->ra.response_window_timer);
|
|
||||||
if (ra_window_expired) // consider the Random Access Response reception not successful
|
|
||||||
nr_rar_not_successful(mac);
|
|
||||||
bool ra_backoff_expired = nr_timer_tick(&mac->ra.RA_backoff_timer);
|
bool ra_backoff_expired = nr_timer_tick(&mac->ra.RA_backoff_timer);
|
||||||
if (ra_backoff_expired) {
|
if (ra_backoff_expired) {
|
||||||
// perform the Random Access Resource selection procedure after the backoff time
|
// perform the Random Access Resource selection procedure after the backoff time
|
||||||
|
|||||||
@@ -1329,12 +1329,15 @@ int nr_ue_dl_indication(nr_downlink_indication_t *dl_info)
|
|||||||
return ret2;
|
return ret2;
|
||||||
}
|
}
|
||||||
|
|
||||||
void nr_ue_slot_indication(uint8_t mod_id)
|
void nr_ue_slot_indication(uint8_t mod_id, bool is_tx)
|
||||||
{
|
{
|
||||||
NR_UE_MAC_INST_t *mac = get_mac_inst(mod_id);
|
NR_UE_MAC_INST_t *mac = get_mac_inst(mod_id);
|
||||||
int ret = pthread_mutex_lock(&mac->if_mutex);
|
int ret = pthread_mutex_lock(&mac->if_mutex);
|
||||||
AssertFatal(!ret, "mutex failed %d\n", ret);
|
AssertFatal(!ret, "mutex failed %d\n", ret);
|
||||||
update_mac_timers(mac);
|
if (is_tx)
|
||||||
|
update_mac_ul_timers(mac);
|
||||||
|
else
|
||||||
|
update_mac_dl_timers(mac);
|
||||||
ret = pthread_mutex_unlock(&mac->if_mutex);
|
ret = pthread_mutex_unlock(&mac->if_mutex);
|
||||||
AssertFatal(!ret, "mutex failed %d\n", ret);
|
AssertFatal(!ret, "mutex failed %d\n", ret);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -260,7 +260,7 @@ typedef int (nr_ue_dl_indication_f)(nr_downlink_indication_t *dl_info);
|
|||||||
*/
|
*/
|
||||||
typedef int (nr_ue_ul_indication_f)(nr_uplink_indication_t *ul_info);
|
typedef int (nr_ue_ul_indication_f)(nr_uplink_indication_t *ul_info);
|
||||||
|
|
||||||
typedef void (nr_ue_slot_indication_f)(uint8_t mod_id);
|
typedef void (nr_ue_slot_indication_f)(uint8_t mod_id, bool is_tx);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Generic type of an application-defined callback to return various
|
* Generic type of an application-defined callback to return various
|
||||||
|
|||||||
Reference in New Issue
Block a user