Pre-ci test passed git-svn-id: http://svn.eurecom.fr/openair4G/trunk@4000 818b1a75-f10b-46b9-bf7c-635c3b92a50f
514 lines
24 KiB
C
Executable File
514 lines
24 KiB
C
Executable File
/***************************************************************************
|
|
rrc_rg_bch_init.c - description
|
|
-------------------
|
|
begin : Aug 30, 2002
|
|
copyright : (C) 2002, 2010 by Eurecom
|
|
email : Michelle.Wetterwald@eurecom.fr
|
|
**************************************************************************
|
|
Procedures to call initial encoding of SIBs
|
|
***************************************************************************/
|
|
/********************
|
|
//OpenAir definitions
|
|
********************/
|
|
#include "LAYER2/MAC/extern.h"
|
|
#include "UTIL/MEM/mem_block.h"
|
|
|
|
/********************
|
|
// RRC definitions
|
|
********************/
|
|
#include "rrc_rg_vars.h"
|
|
#include "rrc_bch_mib.h"
|
|
//-----------------------------------------------------------------------------
|
|
#include "rrc_proto_int.h"
|
|
#include "rrc_proto_intf.h"
|
|
#include "rrc_proto_bch.h"
|
|
|
|
//-----------------------------------------------------------------------------
|
|
void rrc_rg_init_bch (void){
|
|
//-----------------------------------------------------------------------------
|
|
protocol_bs->rrc.rg_bch_blocks.sib_list[0] = systemInformationBlockType1;
|
|
protocol_bs->rrc.rg_bch_blocks.sib_list[1] = systemInformationBlockType2;
|
|
protocol_bs->rrc.rg_bch_blocks.sib_list[2] = systemInformationBlockType5;
|
|
protocol_bs->rrc.rg_bch_blocks.sib_list[3] = systemInformationBlockType11;
|
|
protocol_bs->rrc.rg_bch_blocks.sib_list[4] = systemInformationBlockType14;
|
|
protocol_bs->rrc.rg_bch_blocks.sib_list[5] = systemInformationBlockType18;
|
|
protocol_bs->rrc.rg_bch_blocks.SIB1_oneTimeShot = FALSE;
|
|
protocol_bs->rrc.rg_bch_blocks.SIB14_timeout = (2 << SIB14_REP) * SIB14_TFACTOR;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
void rrc_fill_mib (void){
|
|
//-----------------------------------------------------------------------------
|
|
MasterInformationBlock *pmib;
|
|
|
|
pmib = &(protocol_bs->rrc.rg_bch_blocks.currMIB);
|
|
pmib->mib_ValueTag = 0;
|
|
|
|
// hard coded in first step
|
|
pmib->plmn_Identity.mcc.numDigits = 3;
|
|
pmib->plmn_Identity.mcc.elem[0] = 1;
|
|
pmib->plmn_Identity.mcc.elem[1] = 4;
|
|
pmib->plmn_Identity.mcc.elem[2] = 9;
|
|
pmib->plmn_Identity.mnc = protocol_bs->rrc.rg_cell_id;
|
|
// pmib->plmn_Identity.mnc.numDigits=2;
|
|
// pmib->plmn_Identity.mnc.elem[0]=5;
|
|
// pmib->plmn_Identity.mnc.elem[1]=8;
|
|
|
|
// initialize with default value
|
|
pmib->sibSb_ReferenceList.numSIB = supportedSIBs; // number SIBs supported
|
|
pmib->sibSb_ReferenceList.sib_ref[0].sibSb_Type.type = SIBSb_sysInfoType1;
|
|
pmib->sibSb_ReferenceList.sib_ref[0].sibSb_Type.type_tag.sysInfoType1 = 0;
|
|
pmib->sibSb_ReferenceList.sib_ref[0].scheduling.scheduling_sib_rep.sib_Rep = SIB1_REP;
|
|
pmib->sibSb_ReferenceList.sib_ref[0].scheduling.scheduling_sib_rep.sib_Pos = SIB1_POS;
|
|
pmib->sibSb_ReferenceList.sib_ref[1].sibSb_Type.type = SIBSb_sysInfoType2;
|
|
pmib->sibSb_ReferenceList.sib_ref[1].sibSb_Type.type_tag.sysInfoType2 = 0;
|
|
pmib->sibSb_ReferenceList.sib_ref[1].scheduling.scheduling_sib_rep.sib_Rep = SIB2_REP;
|
|
pmib->sibSb_ReferenceList.sib_ref[1].scheduling.scheduling_sib_rep.sib_Pos = SIB2_POS;
|
|
pmib->sibSb_ReferenceList.sib_ref[2].sibSb_Type.type = SIBSb_sysInfoType5;
|
|
pmib->sibSb_ReferenceList.sib_ref[2].sibSb_Type.type_tag.sysInfoType5 = 0;
|
|
pmib->sibSb_ReferenceList.sib_ref[2].scheduling.scheduling_sib_rep.sib_Rep = SIB5_REP;
|
|
pmib->sibSb_ReferenceList.sib_ref[2].scheduling.scheduling_sib_rep.sib_Pos = SIB5_POS;
|
|
pmib->sibSb_ReferenceList.sib_ref[3].sibSb_Type.type = SIBSb_sysInfoType11;
|
|
pmib->sibSb_ReferenceList.sib_ref[3].sibSb_Type.type_tag.sysInfoType11 = 0;
|
|
pmib->sibSb_ReferenceList.sib_ref[3].scheduling.scheduling_sib_rep.sib_Rep = SIB11_REP;
|
|
pmib->sibSb_ReferenceList.sib_ref[3].scheduling.scheduling_sib_rep.sib_Pos = SIB11_POS;
|
|
pmib->sibSb_ReferenceList.sib_ref[4].sibSb_Type.type = SIBSb_sysInfoType14;
|
|
//no value_tag for SIB14
|
|
pmib->sibSb_ReferenceList.sib_ref[4].scheduling.scheduling_sib_rep.sib_Rep = SIB14_REP;
|
|
pmib->sibSb_ReferenceList.sib_ref[4].scheduling.scheduling_sib_rep.sib_Pos = SIB14_POS;
|
|
pmib->sibSb_ReferenceList.sib_ref[5].sibSb_Type.type = SIBSb_sysInfoType18;
|
|
pmib->sibSb_ReferenceList.sib_ref[5].sibSb_Type.type_tag.sysInfoType18 = 0;
|
|
pmib->sibSb_ReferenceList.sib_ref[5].scheduling.scheduling_sib_rep.sib_Rep = SIB18_REP;
|
|
pmib->sibSb_ReferenceList.sib_ref[5].scheduling.scheduling_sib_rep.sib_Pos = SIB18_POS;
|
|
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
void rrc_init_mib (void){
|
|
//-----------------------------------------------------------------------------
|
|
int value_tag;
|
|
// Prepare
|
|
int status = P_SUCCESS;
|
|
MasterInformationBlock *pMIB = &(protocol_bs->rrc.rg_bch_blocks.currMIB);
|
|
PERParms *pParms = &(protocol_bs->rrc.rg_bch_blocks.perParms);
|
|
char *pBuffer = (char *) &(protocol_bs->rrc.rg_bch_blocks.encoded_currMIB);
|
|
|
|
rrc_new_per_parms (pParms, pBuffer);
|
|
// Update value_tag
|
|
value_tag = protocol_bs->rrc.rg_bch_blocks.currMIB.mib_ValueTag;
|
|
value_tag = (++value_tag) % 8;
|
|
protocol_bs->rrc.rg_bch_blocks.currMIB.mib_ValueTag = value_tag;
|
|
|
|
// Encode MIB
|
|
status = rrc_PEREnc_MasterInformationBlock (pParms, pMIB);
|
|
|
|
#ifdef DEBUG_RRC_BROADCAST
|
|
msg ("\n[RRC_BCH] Init MIB result - status : %d\n", status);
|
|
rrc_print_per_parms (pParms);
|
|
#endif
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
void rrc_fill_sib1 (void){
|
|
//-----------------------------------------------------------------------------
|
|
// hard coded in first step
|
|
char bufferNAS[] = "NoData in SIB1";
|
|
char bufferTimer[] = "KLMNOPQR";
|
|
|
|
protocol_bs->rrc.rg_bch_blocks.currSIB1.subnet_NAS_SysInfo.numocts = strlen (bufferNAS);
|
|
memcpy (protocol_bs->rrc.rg_bch_blocks.currSIB1.subnet_NAS_SysInfo.data, bufferNAS, strlen (bufferNAS));
|
|
// protocol_bs->rrc.rg_bch_blocks.currSIB1.subnet_NAS_SysInfo.data[1]= "a";
|
|
|
|
protocol_bs->rrc.rg_bch_blocks.currSIB1.ue_TimersAndConstants.numocts = 8;
|
|
memcpy (protocol_bs->rrc.rg_bch_blocks.currSIB1.ue_TimersAndConstants.data, bufferTimer, 8);
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
void rrc_update_SIB1_period (int period){
|
|
//-----------------------------------------------------------------------------
|
|
MasterInformationBlock *pmib = &(protocol_bs->rrc.rg_bch_blocks.currMIB);
|
|
|
|
if (period == 0) {
|
|
protocol_bs->rrc.rg_bch_blocks.SIB1_oneTimeShot = TRUE;
|
|
} else {
|
|
if (period < 192) {
|
|
pmib->sibSb_ReferenceList.sib_ref[0].scheduling.scheduling_sib_rep.sib_Rep = SchedulingInformation_scheduling_rep128;
|
|
} else {
|
|
if (period < 320) {
|
|
pmib->sibSb_ReferenceList.sib_ref[0].scheduling.scheduling_sib_rep.sib_Rep = SchedulingInformation_scheduling_rep256;
|
|
} else {
|
|
pmib->sibSb_ReferenceList.sib_ref[0].scheduling.scheduling_sib_rep.sib_Rep = SchedulingInformation_scheduling_rep512;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
void rrc_init_sib1 (void){
|
|
//-----------------------------------------------------------------------------
|
|
int value_tag;
|
|
// Prepare
|
|
int status = P_SUCCESS;
|
|
SysInfoType1 *pSIB1 = &(protocol_bs->rrc.rg_bch_blocks.currSIB1);
|
|
PERParms *pParms = &(protocol_bs->rrc.rg_bch_blocks.perParms);
|
|
char *pBuffer = (char *) &(protocol_bs->rrc.rg_bch_blocks.encoded_currSIB1);
|
|
|
|
rrc_new_per_parms (pParms, pBuffer);
|
|
// Encode
|
|
status = rrc_PEREnc_SysInfoType1 (pParms, pSIB1);
|
|
#ifdef DEBUG_RRC_BROADCAST
|
|
msg ("[RRC_BCH] Init SIB1 result - status : %d\n", status);
|
|
rrc_print_per_parms (pParms);
|
|
#endif
|
|
// Update value_tag and MIB
|
|
value_tag = protocol_bs->rrc.rg_bch_blocks.currMIB.sibSb_ReferenceList.sib_ref[0].sibSb_Type.type_tag.sysInfoType1;
|
|
value_tag = (++value_tag) % 256;
|
|
protocol_bs->rrc.rg_bch_blocks.currMIB.sibSb_ReferenceList.sib_ref[0].sibSb_Type.type_tag.sysInfoType1 = value_tag;
|
|
protocol_bs->rrc.rg_bch_blocks.encodedSIB1_lgth = pParms->buff_size;
|
|
if ((protocol_bs->rrc.rg_bch_blocks.encodedSIB1_lgth % LSIBfixed) == 0)
|
|
protocol_bs->rrc.rg_bch_blocks.currMIB.sibSb_ReferenceList.sib_ref[0].scheduling.segCount = (protocol_bs->rrc.rg_bch_blocks.encodedSIB1_lgth / LSIBfixed);
|
|
else
|
|
protocol_bs->rrc.rg_bch_blocks.currMIB.sibSb_ReferenceList.sib_ref[0].scheduling.segCount = (protocol_bs->rrc.rg_bch_blocks.encodedSIB1_lgth / LSIBfixed) + 1;
|
|
|
|
rrc_init_mib ();
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
void rrc_fill_sib2 (void){
|
|
//-----------------------------------------------------------------------------
|
|
// // hard coded in first step
|
|
// int i;
|
|
// char IPAddr[] = "1234123412341234";
|
|
// char a;
|
|
//
|
|
// for (i=0;i<16;i++){
|
|
// a= IPAddr[i];
|
|
// protocol_bs->rrc.rg_bch_blocks.currSIB2.net_IP_addr.data[i]= a;
|
|
// }
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
void rrc_init_sib2 (void){
|
|
//-----------------------------------------------------------------------------
|
|
// int value_tag;
|
|
// // Prepare
|
|
int status = P_SUCCESS;
|
|
// SysInfoType2* pSIB2 = &(protocol_bs->rrc.rg_bch_blocks.currSIB2);
|
|
// PERParms* pParms = &(protocol_bs->rrc.rg_bch_blocks.perParms);
|
|
// char * pBuffer = (char *) & (protocol_bs->rrc.rg_bch_blocks.encoded_currSIB2);
|
|
// rrc_new_per_parms (pParms, pBuffer);
|
|
// // Encode
|
|
// status = rrc_PEREnc_SysInfoType2 (pParms, pSIB2);
|
|
//
|
|
#ifdef DEBUG_RRC_BROADCAST
|
|
msg ("[RRC_BCH] Init SIB2 result (removed) - status : %d\n\n", status);
|
|
// rrc_print_per_parms(pParms);
|
|
#endif
|
|
// // Update value_tag and MIB
|
|
// value_tag = protocol_bs->rrc.rg_bch_blocks.currMIB.sibSb_ReferenceList.sib_ref[1].sibSb_Type.type_tag.sysInfoType2;
|
|
// value_tag = (++ value_tag)%4;
|
|
// protocol_bs->rrc.rg_bch_blocks.currMIB.sibSb_ReferenceList.sib_ref[1].sibSb_Type.type_tag.sysInfoType2
|
|
// = value_tag;
|
|
// protocol_bs->rrc.rg_bch_blocks.encodedSIB2_lgth = pParms->buff_size;
|
|
// if ((protocol_bs->rrc.rg_bch_blocks.encodedSIB2_lgth % LSIBfixed) ==0)
|
|
// protocol_bs->rrc.rg_bch_blocks.currMIB.sibSb_ReferenceList.sib_ref[1].scheduling.segCount
|
|
// = (protocol_bs->rrc.rg_bch_blocks.encodedSIB2_lgth / LSIBfixed);
|
|
// else
|
|
// protocol_bs->rrc.rg_bch_blocks.currMIB.sibSb_ReferenceList.sib_ref[1].scheduling.segCount
|
|
// = (protocol_bs->rrc.rg_bch_blocks.encodedSIB2_lgth / LSIBfixed) + 1;
|
|
// rrc_init_mib();
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
void rrc_fill_sib5 (void){
|
|
//-----------------------------------------------------------------------------
|
|
/*
|
|
u8 rachfach_conf[]="I'm not thinking about retiring at this point, so my focus is on coming back and figuring out how to get back here. \
|
|
I don't think anybody's going to question why I'm coming back next year.";
|
|
//size 195
|
|
*/
|
|
// u8 rachfach_conf[]="I'm not thinking about retiring at this point.";
|
|
//size 45 - TEMP : SIB5 content to be revised
|
|
int config_length;
|
|
char* config_ptr=NULL;
|
|
u8 error_message[] = "ERROR-SIB5";
|
|
|
|
// Fill SCCPCH-PRACH config
|
|
//protocol_bs->rrc.rg_bch_blocks.currSIB5.prach_sCCPCH_SIList.numocts=strlen(rachfach_conf);
|
|
//protocol_bs->rrc.rg_bch_blocks.currSIB5.prach_sCCPCH_SIList.numocts = sizeof (SCCPCH_SYSTEM_INFO) + sizeof (PRACH_SYSTEM_INFO);
|
|
rrc_rg_get_common_config_SIB(&config_length, &config_ptr);
|
|
#ifdef DEBUG_RRC_DETAILS
|
|
//msg ("\n[RRC-RG] rrc_fill_sib5 config pointer %p \n", config_ptr);
|
|
#endif
|
|
|
|
protocol_bs->rrc.rg_bch_blocks.currSIB5.prach_sCCPCH_SIList.numocts = config_length;
|
|
|
|
#ifdef DEBUG_RRC_STATE
|
|
msg ("[RRC] Fill SIB5 : config length = %d\n", protocol_bs->rrc.rg_bch_blocks.currSIB5.prach_sCCPCH_SIList.numocts);
|
|
#endif
|
|
|
|
if (protocol_bs->rrc.rg_bch_blocks.currSIB5.prach_sCCPCH_SIList.numocts <= maxBlock - 8) {
|
|
// For test only
|
|
// memcpy(protocol_bs->rrc.rg_bch_blocks.currSIB5.prach_sCCPCH_SIList.data,rachfach_conf,
|
|
// protocol_bs->rrc.rg_bch_blocks.currSIB5.prach_sCCPCH_SIList.numocts);
|
|
//memcpy (protocol_bs->rrc.rg_bch_blocks.currSIB5.prach_sCCPCH_SIList.data, (char *) &(rrm_config->sccpch), sizeof (SCCPCH_SYSTEM_INFO) + sizeof (PRACH_SYSTEM_INFO));
|
|
memcpy(protocol_bs->rrc.rg_bch_blocks.currSIB5.prach_sCCPCH_SIList.data, config_ptr, config_length);
|
|
|
|
} else {
|
|
msg ("[RRC] Fill SIB5 : config length too long \n\n");
|
|
protocol_bs->rrc.rg_bch_blocks.currSIB5.prach_sCCPCH_SIList.numocts = strlen (error_message);
|
|
memcpy (protocol_bs->rrc.rg_bch_blocks.currSIB5.prach_sCCPCH_SIList.data, error_message, protocol_bs->rrc.rg_bch_blocks.currSIB5.prach_sCCPCH_SIList.numocts);
|
|
}
|
|
|
|
// Fill OpenLoopPowerControl_TDD with initial values
|
|
protocol_bs->rrc.rg_bch_blocks.currSIB5.openLoopPowerControl_TDD.primaryCCPCH_TX_Power
|
|
// = rrm_config->outer_loop_vars.PCCPCH_POWER;
|
|
= 25;
|
|
protocol_bs->rrc.rg_bch_blocks.currSIB5.openLoopPowerControl_TDD.alpha
|
|
// = rrm_config->outer_loop_vars.alpha;
|
|
= 4;
|
|
protocol_bs->rrc.rg_bch_blocks.currSIB5.openLoopPowerControl_TDD.prach_ConstantValue
|
|
// = rrm_config->outer_loop_vars.PRACH_CNST;
|
|
= -13;
|
|
protocol_bs->rrc.rg_bch_blocks.currSIB5.openLoopPowerControl_TDD.dpch_ConstantValue
|
|
// = rrm_config->outer_loop_vars.DPCH_CNST;
|
|
= 5;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
void rrc_init_sib5 (void){
|
|
//-----------------------------------------------------------------------------
|
|
int value_tag;
|
|
// Prepare
|
|
int status = P_SUCCESS;
|
|
SysInfoType5 *pSIB5 = &(protocol_bs->rrc.rg_bch_blocks.currSIB5);
|
|
PERParms *pParms = &(protocol_bs->rrc.rg_bch_blocks.perParms);
|
|
char *pBuffer = (char *) &(protocol_bs->rrc.rg_bch_blocks.encoded_currSIB5);
|
|
rrc_new_per_parms (pParms, pBuffer);
|
|
// Encode
|
|
status = rrc_PEREnc_SysInfoType5 (pParms, pSIB5);
|
|
|
|
#ifdef DEBUG_RRC_BROADCAST
|
|
msg ("[RRC_BCH] Init SIB5 result - status : %d\n", status);
|
|
rrc_print_per_parms (pParms);
|
|
#endif
|
|
if (status != 0){
|
|
msg ("\n\n[RRC_BCH] Init SIB5 result - WCDMA_ERROR_RRC_NASTY_BCH_CONFIG : %d\n\n", status);
|
|
//wcdma_handle_error (WCDMA_ERROR_RRC_NASTY_BCH_CONFIG);
|
|
}
|
|
// Update value_tag and MIB
|
|
value_tag = protocol_bs->rrc.rg_bch_blocks.currMIB.sibSb_ReferenceList.sib_ref[2].sibSb_Type.type_tag.sysInfoType5;
|
|
value_tag = (++value_tag) % 4;
|
|
protocol_bs->rrc.rg_bch_blocks.currMIB.sibSb_ReferenceList.sib_ref[2].sibSb_Type.type_tag.sysInfoType5 = value_tag;
|
|
protocol_bs->rrc.rg_bch_blocks.encodedSIB5_lgth = pParms->buff_size;
|
|
if ((protocol_bs->rrc.rg_bch_blocks.encodedSIB5_lgth % LSIBfixed) == 0)
|
|
protocol_bs->rrc.rg_bch_blocks.currMIB.sibSb_ReferenceList.sib_ref[2].scheduling.segCount = (protocol_bs->rrc.rg_bch_blocks.encodedSIB5_lgth / LSIBfixed);
|
|
else
|
|
protocol_bs->rrc.rg_bch_blocks.currMIB.sibSb_ReferenceList.sib_ref[2].scheduling.segCount = (protocol_bs->rrc.rg_bch_blocks.encodedSIB5_lgth / LSIBfixed) + 1;
|
|
|
|
rrc_init_mib ();
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
void rrc_fill_sib11 (void){
|
|
//-----------------------------------------------------------------------------
|
|
// // hard coded in first step
|
|
// u8 rachfach_conf[]= "6666666666777777777700000000008888888888999999999912121212121212121212343434343434343434345555555555";
|
|
//
|
|
// protocol_bs->rrc.rg_bch_blocks.currSIB11.prach_sCCPCH_SIList.numocts=98;
|
|
//// for (i=0;i<35;i++)
|
|
//// protocol_bs->rrc.rg_bch_blocks.currSIB11.ue_TimersAndConstants.data[i]=bufferTimer[i];
|
|
// memcpy(protocol_bs->rrc.rg_bch_blocks.currSIB11.prach_sCCPCH_SIList.data,rachfach_conf,
|
|
// protocol_bs->rrc.rg_bch_blocks.currSIB11.prach_sCCPCH_SIList.numocts);
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
void rrc_init_sib11 (void){
|
|
//-----------------------------------------------------------------------------
|
|
// int value_tag;
|
|
// Prepare
|
|
int status = P_SUCCESS;
|
|
// SysInfoType11* pSIB11 = &(protocol_bs->rrc.rg_bch_blocks.currSIB11);
|
|
// PERParms* pParms = &(protocol_bs->rrc.rg_bch_blocks.perParms);
|
|
// char * pBuffer = (char *) & (protocol_bs->rrc.rg_bch_blocks.encoded_currSIB11);
|
|
// rrc_new_per_parms (pParms, pBuffer);
|
|
// // Encode
|
|
// status = rrc_PEREnc_SysInfoType11 (pParms, pSIB11);
|
|
|
|
#ifdef DEBUG_RRC_BROADCAST
|
|
msg ("[RRC_BCH] Init SIB11 result (not implemented yet)- status : %d\n\n", status);
|
|
//rrc_print_per_parms(pParms);
|
|
#endif
|
|
// Update value_tag and MIB
|
|
// value_tag = protocol_bs->rrc.rg_bch_blocks.currMIB.sibSb_ReferenceList.sib_ref[3].sibSb_Type.type_tag.sysInfoType11;
|
|
// value_tag = (++ value_tag)%4;
|
|
// protocol_bs->rrc.rg_bch_blocks.currMIB.sibSb_ReferenceList.sib_ref[3].sibSb_Type.type_tag.sysInfoType11
|
|
// = value_tag;
|
|
// protocol_bs->rrc.rg_bch_blocks.encodedSIB11_lgth = pParms->buff_size;
|
|
// if ((protocol_bs->rrc.rg_bch_blocks.encodedSIB11_lgth % LSIBfixed) ==0)
|
|
// protocol_bs->rrc.rg_bch_blocks.currMIB.sibSb_ReferenceList.sib_ref[3].scheduling.segCount
|
|
// = (protocol_bs->rrc.rg_bch_blocks.encodedSIB11_lgth / LSIBfixed);
|
|
// else
|
|
// protocol_bs->rrc.rg_bch_blocks.currMIB.sibSb_ReferenceList.sib_ref[3].scheduling.segCount
|
|
// = (protocol_bs->rrc.rg_bch_blocks.encodedSIB11_lgth / LSIBfixed) + 1;
|
|
// rrc_init_mib();
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
void rrc_fill_sib14 (void){
|
|
//-----------------------------------------------------------------------------
|
|
int i = 0;
|
|
SysInfoType14 *psib14 = &(protocol_bs->rrc.rg_bch_blocks.currSIB14);
|
|
|
|
psib14->expirationTimeFactor = SIB14_TFACTOR;
|
|
psib14->individualTS_InterferenceList.numSlots = 15;
|
|
for (i = 0; i < psib14->individualTS_InterferenceList.numSlots; i++) {
|
|
psib14->individualTS_InterferenceList.data[i].timeslot = i;
|
|
}
|
|
/* **** REMOVED FOR OPENAIR ****
|
|
for (i = 0; i < psib14->individualTS_InterferenceList.numSlots; i++) {
|
|
// psib14->individualTS_InterferenceList.data[i].ul_TimeslotInterference = rrm_config->outer_loop_vars.IBTS[i];
|
|
psib14->individualTS_InterferenceList.data[i].ul_TimeslotInterference = (5*i)-110;
|
|
}
|
|
//msg(" *****Trace fill sib14 rrm_config->outer_loop_vars.IBTS[1]= %d; \n",rrm_config->outer_loop_vars.IBTS[1]);
|
|
*/
|
|
//For test
|
|
psib14->individualTS_InterferenceList.data[0].ul_TimeslotInterference=-110;
|
|
psib14->individualTS_InterferenceList.data[1].ul_TimeslotInterference=-105;
|
|
psib14->individualTS_InterferenceList.data[2].ul_TimeslotInterference=-100;
|
|
psib14->individualTS_InterferenceList.data[3].ul_TimeslotInterference=-95;
|
|
psib14->individualTS_InterferenceList.data[4].ul_TimeslotInterference=-90;
|
|
psib14->individualTS_InterferenceList.data[5].ul_TimeslotInterference=-85;
|
|
psib14->individualTS_InterferenceList.data[6].ul_TimeslotInterference=-80;
|
|
psib14->individualTS_InterferenceList.data[7].ul_TimeslotInterference=-75;
|
|
psib14->individualTS_InterferenceList.data[8].ul_TimeslotInterference=-70;
|
|
psib14->individualTS_InterferenceList.data[9].ul_TimeslotInterference=-65;
|
|
psib14->individualTS_InterferenceList.data[10].ul_TimeslotInterference=-60;
|
|
psib14->individualTS_InterferenceList.data[11].ul_TimeslotInterference=-55;
|
|
psib14->individualTS_InterferenceList.data[12].ul_TimeslotInterference=-100;
|
|
psib14->individualTS_InterferenceList.data[13].ul_TimeslotInterference=-75;
|
|
psib14->individualTS_InterferenceList.data[14].ul_TimeslotInterference=-52;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
void rrc_init_sib14 (void){
|
|
//-----------------------------------------------------------------------------
|
|
// Prepare
|
|
int status = P_SUCCESS;
|
|
SysInfoType14 *pSIB14 = &(protocol_bs->rrc.rg_bch_blocks.currSIB14);
|
|
PERParms *pParms = &(protocol_bs->rrc.rg_bch_blocks.perParms);
|
|
char *pBuffer = (char *) &(protocol_bs->rrc.rg_bch_blocks.encoded_currSIB14);
|
|
rrc_new_per_parms (pParms, pBuffer);
|
|
// Encode
|
|
status = rrc_PEREnc_SysInfoType14 (pParms, pSIB14);
|
|
|
|
#ifdef DEBUG_RRC_BROADCAST
|
|
msg ("[RRC_BCH] Init SIB14 result - status : %d\n", status);
|
|
rrc_print_per_parms (pParms);
|
|
#endif
|
|
// value_tag not updated - controlled by time-out
|
|
protocol_bs->rrc.rg_bch_blocks.encodedSIB14_lgth = pParms->buff_size;
|
|
if ((protocol_bs->rrc.rg_bch_blocks.encodedSIB14_lgth % LSIBfixed) == 0)
|
|
protocol_bs->rrc.rg_bch_blocks.currMIB.sibSb_ReferenceList.sib_ref[4].scheduling.segCount = (protocol_bs->rrc.rg_bch_blocks.encodedSIB14_lgth / LSIBfixed);
|
|
else
|
|
protocol_bs->rrc.rg_bch_blocks.currMIB.sibSb_ReferenceList.sib_ref[4].scheduling.segCount = (protocol_bs->rrc.rg_bch_blocks.encodedSIB14_lgth / LSIBfixed) + 1;
|
|
rrc_init_mib ();
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
void rrc_fill_sib18 (void){
|
|
//-----------------------------------------------------------------------------
|
|
// warning SIB18 currently a short SIB ==> length < 110 bytes
|
|
/*
|
|
u8 cells_list[]="This is the initial setting of cell list = dummy.";
|
|
//size 48
|
|
*/
|
|
u8 cells_list[] = "NoData in SIB18";
|
|
u8 error_message[] = "ERROR-SIB18";
|
|
|
|
protocol_bs->rrc.rg_bch_blocks.currSIB18.cellIdentities.numocts = strlen (cells_list);
|
|
if (protocol_bs->rrc.rg_bch_blocks.currSIB18.cellIdentities.numocts <= 110) {
|
|
memcpy (protocol_bs->rrc.rg_bch_blocks.currSIB18.cellIdentities.data, cells_list, protocol_bs->rrc.rg_bch_blocks.currSIB18.cellIdentities.numocts);
|
|
} else {
|
|
protocol_bs->rrc.rg_bch_blocks.currSIB18.cellIdentities.numocts = strlen (error_message);
|
|
memcpy (protocol_bs->rrc.rg_bch_blocks.currSIB18.cellIdentities.data, error_message, protocol_bs->rrc.rg_bch_blocks.currSIB18.cellIdentities.numocts);
|
|
}
|
|
|
|
//CodeGroups currently hard-coded for 2 cells
|
|
protocol_bs->rrc.rg_bch_blocks.currSIB18.cellCodegroups.data[0] = 0;
|
|
protocol_bs->rrc.rg_bch_blocks.currSIB18.cellCodegroups.data[1] = 14;
|
|
|
|
}
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
void rrc_init_sib18 (void){
|
|
//-----------------------------------------------------------------------------
|
|
int value_tag;
|
|
// Prepare
|
|
int status = P_SUCCESS;
|
|
|
|
SysInfoType18 *pSIB18 = &(protocol_bs->rrc.rg_bch_blocks.currSIB18);
|
|
PERParms *pParms = &(protocol_bs->rrc.rg_bch_blocks.perParms);
|
|
char *pBuffer = (char *) &(protocol_bs->rrc.rg_bch_blocks.encoded_currSIB18);
|
|
rrc_new_per_parms (pParms, pBuffer);
|
|
// Encode
|
|
status = rrc_PEREnc_SysInfoType18 (pParms, pSIB18);
|
|
#ifdef DEBUG_RRC_BROADCAST
|
|
msg ("[RRC_BCH] Init SIB18 result - status : %d\n", status);
|
|
rrc_print_per_parms (pParms);
|
|
#endif
|
|
// Update value_tag and MIB
|
|
value_tag = protocol_bs->rrc.rg_bch_blocks.currMIB.sibSb_ReferenceList.sib_ref[5].sibSb_Type.type_tag.sysInfoType18;
|
|
value_tag = (++value_tag) % 4;
|
|
protocol_bs->rrc.rg_bch_blocks.currMIB.sibSb_ReferenceList.sib_ref[5].sibSb_Type.type_tag.sysInfoType18 = value_tag;
|
|
protocol_bs->rrc.rg_bch_blocks.encodedSIB18_lgth = pParms->buff_size;
|
|
if ((protocol_bs->rrc.rg_bch_blocks.encodedSIB18_lgth % LSIBfixed) == 0)
|
|
protocol_bs->rrc.rg_bch_blocks.currMIB.sibSb_ReferenceList.sib_ref[5].scheduling.segCount = (protocol_bs->rrc.rg_bch_blocks.encodedSIB18_lgth / LSIBfixed);
|
|
else
|
|
protocol_bs->rrc.rg_bch_blocks.currMIB.sibSb_ReferenceList.sib_ref[5].scheduling.segCount = (protocol_bs->rrc.rg_bch_blocks.encodedSIB18_lgth / LSIBfixed) + 1;
|
|
rrc_init_mib ();
|
|
}
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
void rrc_update_SIB18_period (int period){
|
|
//-----------------------------------------------------------------------------
|
|
MasterInformationBlock *pmib = &(protocol_bs->rrc.rg_bch_blocks.currMIB);
|
|
|
|
if (period < 150) {
|
|
pmib->sibSb_ReferenceList.sib_ref[5].scheduling.scheduling_sib_rep.sib_Rep = SchedulingInformation_scheduling_rep128;
|
|
} else {
|
|
if (period < 320) {
|
|
pmib->sibSb_ReferenceList.sib_ref[5].scheduling.scheduling_sib_rep.sib_Rep = SchedulingInformation_scheduling_rep256;
|
|
} else {
|
|
pmib->sibSb_ReferenceList.sib_ref[5].scheduling.scheduling_sib_rep.sib_Rep = SchedulingInformation_scheduling_rep512;
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
void rrc_init_blocks (void){
|
|
//-----------------------------------------------------------------------------
|
|
// read configuration file and create MIB/SIBs data
|
|
rrc_fill_mib ();
|
|
rrc_fill_sib1 ();
|
|
rrc_fill_sib2 ();
|
|
rrc_fill_sib5 ();
|
|
rrc_fill_sib11 ();
|
|
rrc_fill_sib14 ();
|
|
rrc_fill_sib18 ();
|
|
|
|
// encode MIB/SIBs
|
|
rrc_init_sib1 ();
|
|
rrc_init_sib2 ();
|
|
rrc_init_sib5 ();
|
|
rrc_init_sib11 ();
|
|
rrc_init_sib14 ();
|
|
rrc_init_sib18 ();
|
|
// rrc_init_mib();
|
|
protocol_bs->rrc.rg_bch_blocks.curr_block_type = NO_BLOCK;
|
|
protocol_bs->rrc.rg_bch_blocks.next_block_type = NO_BLOCK;
|
|
}
|