Pre-ci test passed git-svn-id: http://svn.eurecom.fr/openair4G/trunk@4000 818b1a75-f10b-46b9-bf7c-635c3b92a50f
173 lines
6.3 KiB
C
Executable File
173 lines
6.3 KiB
C
Executable File
/***************************************************************************
|
|
rrc_ue_mbms_process.c - description
|
|
-------------------
|
|
begin : May 30, 2005
|
|
copyright : (C) 2005, 2010 by Eurecom
|
|
created by : Huu-Nghia.Nguyen@eurecom.fr
|
|
modified by : Michelle.Wetterwald@eurecom.fr
|
|
**************************************************************************
|
|
This file implements Interface procedures for UE
|
|
**************************************************************************/
|
|
/********************
|
|
//OpenAir definitions
|
|
********************/
|
|
#include "LAYER2/MAC/extern.h"
|
|
#include "UTIL/MEM/mem_block.h"
|
|
|
|
/********************
|
|
// RRC definitions
|
|
********************/
|
|
#include "rrc_ue_vars.h"
|
|
#include "rrc_mbms_pdus.h"
|
|
#include "rrc_msg_class.h"
|
|
#include "rrc_ue_mbms_variables.h"
|
|
//-----------------------------------------------------------------------------
|
|
#include "rrc_proto_mbms.h"
|
|
|
|
rrc_ue_mbms_variables * volatile p_ue_mbms; /** pointer reference to protocol_ms->rrc.mbms */
|
|
|
|
/**
|
|
* @brief Init the UE side mbms variables
|
|
* @date May 27, 2005 6:45:24 PM
|
|
*/
|
|
//-----------------------------------------------------------------------------
|
|
void rrc_ue_mbms_init(void){
|
|
//-----------------------------------------------------------------------------
|
|
#ifdef DEBUG_RRC_STATE
|
|
msg("[RRC-UE][MBMS] START OF MBMS INITIALISATION.......................\n");
|
|
#endif
|
|
|
|
p_ue_mbms = &protocol_ms->rrc.mbms;
|
|
memset(p_ue_mbms, 0, sizeof(rrc_ue_mbms_variables));
|
|
|
|
#ifdef DEBUG_RRC_STATE
|
|
msg("[RRC-UE][MBMS] Allow the procedure MBMS PTM RB Configuration\n");
|
|
#endif
|
|
p_ue_mbms->initialised = FALSE;
|
|
p_ue_mbms->mustAcquireRBInfo = TRUE;
|
|
|
|
p_ue_mbms->modifPeriodCoef = MODIF_PERIOD_COEF_DEFAULT;
|
|
rrc_ue_mbms_fsm_reset();
|
|
rrc_ue_mbms_fsm(); //Enter the state machine.
|
|
|
|
#ifdef DEBUG_RRC_STATE
|
|
msg("[RRC-UE][MBMS] END OF MBMS INITIALISATION\n\n");
|
|
#endif
|
|
}
|
|
|
|
/**
|
|
* @brief Reset all flags and signals for a new modification period
|
|
* @date May 31, 2005 4:52:48 PM
|
|
* @see rrc_ue_mbms_advance_time()
|
|
*/
|
|
//-----------------------------------------------------------------------------
|
|
void rrc_ue_mbms_activate_modification_period(void){
|
|
//-----------------------------------------------------------------------------
|
|
int i;
|
|
#ifdef DEBUG_RRC_MBMS
|
|
msg("\033[31m\n**************************************************\033[0m\n");
|
|
msg("[RRC-UE][MBMS] START A NEW MODIFICATION PERIOD at frame %d \n", protocol_ms->rrc.current_SFN);
|
|
#endif
|
|
|
|
//If this is the first time, we didn't have the RB info, we must acquire it. Otherwise we reset it to FALSE
|
|
p_ue_mbms->mustAcquireRBInfo = !p_ue_mbms->initialised;
|
|
|
|
memset(&p_ue_mbms->flags, 0, sizeof(p_ue_mbms->flags)); //Clear flags
|
|
RRC_UE_MBMS_I_MODIF_PERIOD_ENDED();
|
|
rrc_ue_mbms_fsm();
|
|
|
|
//Print a list of MBMS Activated Services:
|
|
#ifdef DEBUG_RRC_MBMS
|
|
msg("[RRC-UE][MBMS] MBMS Activated Services: { ");
|
|
for (i = 0; i<p_ue_mbms->act_numService; i++){
|
|
msg(" service%d/", p_ue_mbms->act_serviceIdentity[i]);
|
|
if (p_ue_mbms->act_activated[i])
|
|
msg("active");
|
|
else
|
|
msg("standby");
|
|
}
|
|
msg(" }\n");
|
|
#endif
|
|
}
|
|
|
|
/**
|
|
* @brief check for the modification period
|
|
* @warning the counter p_ue_mbms->curr_modif_counter will be synchronize with RG when
|
|
* decoding the MBMS Modified Services Information message.
|
|
* @date May 31, 2005 11:24:19 AM
|
|
*/
|
|
//-----------------------------------------------------------------------------
|
|
void rrc_ue_mbms_scheduling_check(void){
|
|
//-----------------------------------------------------------------------------
|
|
if (protocol_ms->rrc.current_SFN % (1 << p_ue_mbms->modifPeriodCoef) == 0)
|
|
rrc_ue_mbms_activate_modification_period();
|
|
}
|
|
|
|
/**
|
|
* @brief Local function, used to print out the list of modified services
|
|
* @date Jul 29, 2005 10:24:11 AM
|
|
*/
|
|
//-----------------------------------------------------------------------------
|
|
void rrc_ue_mbms_modif_services_print(void){
|
|
//-----------------------------------------------------------------------------
|
|
int i;
|
|
msg("[RRC-UE][MBMS] MBMS Modified Services: \n");
|
|
for (i = 0; i< p_ue_mbms->mod_numService; i++){
|
|
msg("[RRC-UE][MBMS]\t\t service id = %d, required action = ", p_ue_mbms->mod_serviceIdentity[i]);
|
|
switch (p_ue_mbms->mod_requiredUEAction[i]){
|
|
case Mod_none: msg("None\n"); break;
|
|
case Mod_acquirePTM_RBInfo: msg("Acquire PTM RB Info\n"); break;
|
|
case Mod_releasePTM_RB: msg("Release PTM RB Info\n"); break;
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @brief Local function, used to print out the status of activated services
|
|
* @date Sept 06, 2006
|
|
*/
|
|
//-----------------------------------------------------------------------------
|
|
void rrc_ue_mbms_status_services_print(void){
|
|
//-----------------------------------------------------------------------------
|
|
#ifdef DEBUG_RRC_MBMS_STATUS
|
|
int i;
|
|
//Print the list of MBMS broadcasted services
|
|
msg("[RRC-UE][MBMS] MBMS Started Services: \n");
|
|
for (i = 0; i< maxMBMSServices; i++){
|
|
msg("[RRC-UE][MBMS]\t\t service id = %d, activated = ", i+1);
|
|
switch (p_ue_mbms->act_activated[i]){
|
|
case TRUE : msg("YES\n"); break;
|
|
case FALSE : msg("NO\n"); break;
|
|
default: msg("UNDEFINED\n"); break;
|
|
}
|
|
}
|
|
|
|
//Print a list of MBMS Activated Services:
|
|
msg("[RRC-UE][MBMS] MBMS Activated Services: { ");
|
|
for (i = 0; i<p_ue_mbms->act_numService; i++){
|
|
msg(" service%d/", p_ue_mbms->act_serviceIdentity[i]);
|
|
if (p_ue_mbms->act_activated[i]) msg("active");
|
|
else msg("standby");
|
|
}
|
|
msg(" }\n");
|
|
#endif
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
const char * rrc_mbms_message_getName(int channelID, char* pmsg, int msgtype){
|
|
//-----------------------------------------------------------------------------
|
|
const char * mcch_message_name[8] = {"", "AccessInfomation", "CommonPTMRBInformation", "CurrentCellPTMRBInformation", "GeneralInformation", "ModifiedServicesInformation", "NeighbouringCellPTMRBInformation", "UnmodifiedServicesInformation" };
|
|
switch (channelID){
|
|
case DCCH_ID:
|
|
return "ModifiedServicesInformation";
|
|
case MCCH_ID:
|
|
if (pmsg != NULL) return mcch_message_name[((MCCH_Message*) pmsg)->message.type];
|
|
else return mcch_message_name[msgtype];
|
|
case MSCH_ID:
|
|
return "SchedulingInformation";
|
|
default:
|
|
return "Unrecognized";
|
|
}
|
|
}
|
|
|