Files
openairinterface5g/openair2/RRC/CELLULAR/rrc_ue_main.c
T
2013-09-26 09:54:22 +00:00

138 lines
4.7 KiB
C
Executable File

/***************************************************************************
rrc_ue_main.c -
-------------------
begin : Tue Jan 15 2002
copyright : (C) 2002, 2010 by Eurecom
created by : michelle.wetterwald@eurecom.fr
**************************************************************************
This file contains the main function of the RRC module
***************************************************************************/
//#include "rtos_header.h"
//#include "platform.h"
//#include "protocol_vars_extern.h"
//#include "print.h"
//-----------------------------------------------------------------------------
/********************
//OpenAir definitions
********************/
#include "LAYER2/MAC/extern.h"
#include "UTIL/MEM/mem_block.h"
//-----------------------------------------------------------------------------
/********************
// RRC definitions
********************/
#include "rrc_ue_vars.h"
//#include "rrc_nas_sap.h"
//#include "rrc_messages.h"
//-----------------------------------------------------------------------------
#include "rrc_proto_int.h"
//#include "rrc_proto_fsm.h"
//#include "rrc_proto_intf.h"
//#include "rrc_proto_bch.h"
#include "rrc_proto_mbms.h"
#include "umts_timer_proto_extern.h"
//-----------------------------------------------------------------------------
// entry point for rrc-ue process
//void rrc_ue_main_scheduler (u8 Mod_id){
int rrc_ue_main_scheduler(u8 Mod_id,u32 frame, u8 eNB_flag,u8 index){
//-----------------------------------------------------------------------------
mem_block_t *p;
int Message_Id;
// while(1)
// {sleep(2);}
// protocol_ms->rrc.current_SFN = Mac_rlc_xface->frame;
// protocol_ms->rrc.current_SFN = frame;
/*************/
// TODO TO BE REMOVED TEMP -- stop RRC process action (for early traces)
//if (protocol_ms->rrc.current_SFN > 300)
// return 0;
#ifdef DEBUG_RRC_DETAILS
if (protocol_ms->rrc.current_SFN % 50 == 0) {
msg ("\n\n[RRC][MSG_TEST] System Time : %d\n", protocol_ms->rrc.current_SFN);
#ifdef DEBUG_RRC_BROADCAST
msg ("[RRC_BCH-UE] DEBUG ue_wait_establish_req = %d.\n", protocol_ms->rrc.ue_wait_establish_req );
#endif
}
#endif
#ifdef ALLOW_MBMS_PROTOCOL
// ATTENTION: This must be the first event of RRC process.
// Used to find the beginning of the modification period.
rrc_ue_mbms_scheduling_check();
#endif
if (rrc_release_all_ressources) {
#ifdef DEBUG_RRC_STATE
msg ("[RRC_UE]rrc_ue_main_scheduler : release_radio_resources() \n");
#endif
//mac_remove_all ();
//rb_remove_all ();
// Set RRM Functions to remove RBs, TrChs, CCTrChs
// Put UE in Cell-BCH mode
/* BYPASS_L1 */
rrc_release_all_ressources = 0;
}
// check L1
rrc_ue_L1_check ();
// check if there is some message to transmit to NAS and do it
if ((p = protocol_ms->rrc.NASMessageToXmit) != NULL) {
rrc_ue_write_FIFO (p);
} else {
if (protocol_ms->rrc.ue_broadcast_counter % 500 == 2) {
RRC_UE_O_NAS_MEASUREMENT_IND ();
rrc_ue_write_FIFO (protocol_ms->rrc.NASMessageToXmit);
}
// modulo to improve stability
protocol_ms->rrc.ue_broadcast_counter = (protocol_ms->rrc.ue_broadcast_counter++) % 1000000000;
}
// time out for SIB14 - cf RG
if (protocol_ms->rrc.ue_broadcast_counter % (protocol_ms->rrc.ue_bch_blocks.SIB14_timeout_value) == 2) {
protocol_ms->rrc.ue_bch_blocks.SIB14_timeout = TRUE;
}
// Wait for message in DC FIFO
//rrc_ue_read_DCin_FIFO (); // old version before Netlink sockets
rrc_ue_read_FIFO();
// check for a time-out event
// umts_timer_check_time_out (&protocol_ms->rrc.rrc_timers, protocol_ms->frame_tick_milliseconds);
//umts_timer_check_time_out (&protocol_ms->rrc.rrc_timers, Mac_rlc_xface->frame/RRC_FRAME_DURATION);
if (protocol_ms->rrc.rrc_ue_t300_target >0){
#ifdef DEBUG_RRC_STATE
msg ("[RRC_UE][DEBUG]rrc_ue_main_scheduler: T300 running at frame %d , target %d, msg length %d\n",
protocol_ms->rrc.current_SFN, protocol_ms->rrc.rrc_ue_t300_target, protocol_ms->rrc.ue_msg_infos.msg_length);
#endif
}
if (protocol_ms->rrc.rrc_ue_t300_target == protocol_ms->rrc.current_SFN){
rrc_ue_t300_timeout();
}
// Measurements
//rrc_ue_meas_loop(); // for test only
//check if report of measure needed in UE
rrc_ue_sync_measures (protocol_ms->rrc.current_SFN, &Message_Id);
// TEMP - 06/02/2013
// PDCP does not returm ack in AM mode, so it is simulated here to process with the FSM
if (protocol_ms->rrc.rrc_ue_ackSimu_flag ==1)
rrc_ue_simu_receive_ack_from_rlc();
//Force Uplink RLC communication
rrc_ue_force_uplink ();
#ifdef USER_MODE
fflush(stdout);
#endif
return 0;
}