git-svn-id: http://svn.eurecom.fr/openair4G/trunk@4166 818b1a75-f10b-46b9-bf7c-635c3b92a50f
138 lines
4.7 KiB
C
Executable File
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;
|
|
}
|