Commit a0083404 authored by Navid Nikaein's avatar Navid Nikaein

* change the mcs limit for DCI format 1A from 7 to 8 in dci_tools.c, supported by MAC

* activate the sencond MBSFNArea when eMBMS relaying is activated
* add wireshark interface for MCH PDUs (Not tested feature)
* pre-ci test passed


git-svn-id: http://svn.eurecom.fr/openair4G/trunk@4156 818b1a75-f10b-46b9-bf7c-635c3b92a50f
parent a8553594
...@@ -1812,8 +1812,8 @@ int generate_ue_dlsch_params_from_dci(uint8_t subframe, ...@@ -1812,8 +1812,8 @@ int generate_ue_dlsch_params_from_dci(uint8_t subframe,
LOG_E(PHY,"Format 1A: NPRB=0\n"); LOG_E(PHY,"Format 1A: NPRB=0\n");
return(-1); return(-1);
} }
// change the mcs limit from 7 to 8, supported by MAC
if (mcs > 7) { if (mcs > 8) {
LOG_E(PHY,"Format 1A: unlikely mcs for format 1A (%d)\n",mcs); LOG_E(PHY,"Format 1A: unlikely mcs for format 1A (%d)\n",mcs);
return(-1); return(-1);
} }
......
...@@ -1704,7 +1704,7 @@ void lte_ue_pbch_procedures(u8 eNB_id,u8 last_slot, PHY_VARS_UE *phy_vars_ue,u8 ...@@ -1704,7 +1704,7 @@ void lte_ue_pbch_procedures(u8 eNB_id,u8 last_slot, PHY_VARS_UE *phy_vars_ue,u8
} }
#ifdef DEBUG_PHY_PROC #ifdef DEBUG_PHY_PROC
LOG_D(PHY,"[UE %d] frame %d, slot %d, PBCH: mode1_flag %d, tx_ant %d, frame_tx %d. N_RB_DL %d, phich_duration %d, phich_resource %d/6!\n", LOG_D(PHY,"[UE %d] frame %d, slot %d, Received PBCH (MIB): mode1_flag %d, tx_ant %d, frame_tx %d. N_RB_DL %d, phich_duration %d, phich_resource %d/6!\n",
phy_vars_ue->Mod_id, phy_vars_ue->Mod_id,
phy_vars_ue->frame, phy_vars_ue->frame,
last_slot, last_slot,
......
...@@ -31,6 +31,7 @@ ...@@ -31,6 +31,7 @@
* \author Raymond Knopp, Navid Nikaein * \author Raymond Knopp, Navid Nikaein
* \date 2011 * \date 2011
* \version 0.5 * \version 0.5
* \email navid.nikaein@eurecom.fr
* @ingroup _mac * @ingroup _mac
*/ */
...@@ -959,7 +960,7 @@ s8 get_deltaP_rampup(u8 Mod_id); ...@@ -959,7 +960,7 @@ s8 get_deltaP_rampup(u8 Mod_id);
void chbch_phy_sync_success(u8 Mod_id,u32 frame,u8 CH_index); void chbch_phy_sync_success(u8 Mod_id,u32 frame,u8 CH_index);
void mrbch_phy_sync_failure(u8 Mod_id, u32 frame,u8 Free_ch_index); void mrbch_phy_sync_failure(u8 Mod_id, u32 frame,u8 free_eNB_index);
int mac_top_init(int eMBMS_active, u8 cba_group_active); int mac_top_init(int eMBMS_active, u8 cba_group_active);
...@@ -1136,7 +1137,7 @@ u32 ue_get_SR(u8 Mod_id, u32 frame, u8 eNB_id,u16 rnti,u8 subframe); ...@@ -1136,7 +1137,7 @@ u32 ue_get_SR(u8 Mod_id, u32 frame, u8 eNB_id,u16 rnti,u8 subframe);
u8 get_ue_weight(u8 Mod_id, u8 UE_id); u8 get_ue_weight(u8 Mod_id, u8 UE_id);
// UE functions // UE functions
void out_of_sync_ind(u8 Mod_id, u32 frame, u16); void mac_out_of_sync_ind(u8 Mod_id, u32 frame, u16 eNB_index);
void ue_decode_si(u8 Mod_id, u32 frame, u8 CH_index, void *pdu, u16 len); void ue_decode_si(u8 Mod_id, u32 frame, u8 CH_index, void *pdu, u16 len);
......
...@@ -30,6 +30,7 @@ ...@@ -30,6 +30,7 @@
* \brief procedures related to UE * \brief procedures related to UE
* \author Raymond Knopp, Navid Nikaein * \author Raymond Knopp, Navid Nikaein
* \date 2011 * \date 2011
* \email: navid.nikaein@eurecom.fr
* \version 0.5 * \version 0.5
* @ingroup _mac * @ingroup _mac
...@@ -1458,6 +1459,16 @@ int schedule_MBMS(unsigned char Mod_id,u32 frame, u8 subframe) { ...@@ -1458,6 +1459,16 @@ int schedule_MBMS(unsigned char Mod_id,u32 frame, u8 subframe) {
// filling remainder of MCH with random data if necessery // filling remainder of MCH with random data if necessery
for (j=0;j<(TBS-sdu_length_total-offset);j++) for (j=0;j<(TBS-sdu_length_total-offset);j++)
eNB_mac_inst[Mod_id].MCH_pdu.payload[offset+sdu_length_total+j] = (char)(taus()&0xff); eNB_mac_inst[Mod_id].MCH_pdu.payload[offset+sdu_length_total+j] = (char)(taus()&0xff);
#if defined(USER_MODE) && defined(OAI_EMU)
/* Tracing of PDU is done on UE side */
if (oai_emulation.info.opt_enabled)
trace_pdu(1, (uint8_t *)eNB_mac_inst[Mod_id].MCH_pdu.payload[0],
TBS, Mod_id, 6, 0xffff, // M_RNTI = 6 in wirehsark
eNB_mac_inst[Mod_id].subframe,0,0);
LOG_D(OPT,"[eNB %d][MCH] Frame %d : MAC PDU with size %d\n",
Mod_id, frame, TBS);
#endif
/* /*
for (j=0;j<sdu_length_total;j++) for (j=0;j<sdu_length_total;j++)
printf("%2x.",eNB_mac_inst[Mod_id].MCH_pdu.payload[j+offset]); printf("%2x.",eNB_mac_inst[Mod_id].MCH_pdu.payload[j+offset]);
......
...@@ -31,6 +31,7 @@ ...@@ -31,6 +31,7 @@
* \author Raymond Knopp and Navid Nikaein * \author Raymond Knopp and Navid Nikaein
* \date 2011 * \date 2011
* \version 0.5 * \version 0.5
* \email: navid.nikaein@eurecom.fr
* @ingroup _mac * @ingroup _mac
*/ */
...@@ -78,13 +79,10 @@ void dl_phy_sync_success(unsigned char Mod_id, ...@@ -78,13 +79,10 @@ void dl_phy_sync_success(unsigned char Mod_id,
unsigned char eNB_index, unsigned char eNB_index,
u8 first_sync){ //init as MR u8 first_sync){ //init as MR
/***********************************************************************/ /***********************************************************************/
// msg("[MAC]Node %d, PHY SYNC to eNB_index %d\n",NODE_ID[Mod_id],eNB_index); LOG_D(MAC,"[UE %d] Frame %d: PHY Sync to eNB_index %d successful \n", Mod_id, frame, eNB_index);
if (first_sync==1) { if (first_sync==1) {
if( (layer2_init_UE(Mod_id)==-1) || layer2_init_UE(Mod_id);
(openair_rrc_ue_init(Mod_id,eNB_index)==-1) ) { openair_rrc_ue_init(Mod_id,eNB_index);
//(openair_rrc_lite_ue_init(Mod_id,eNB_index)==-1) ) {
// Mac_rlc_xface->Is_cluster_head[Mod_id]=2;
}
} }
else { else {
mac_in_sync_ind(Mod_id,frame,eNB_index); mac_in_sync_ind(Mod_id,frame,eNB_index);
...@@ -93,25 +91,15 @@ void dl_phy_sync_success(unsigned char Mod_id, ...@@ -93,25 +91,15 @@ void dl_phy_sync_success(unsigned char Mod_id,
} }
/***********************************************************************/ /***********************************************************************/
void mrbch_phy_sync_failure(u8 Mod_id, u32 frame, u8 Free_ch_index){//init as CH void mrbch_phy_sync_failure(u8 Mod_id, u32 frame, u8 free_eNB_index){//init as CH
/***********************************************************************/ /***********************************************************************/
LOG_I(MAC,"FRAME %d: Node %d, NO PHY SYNC to master\n",frame,Mod_id); LOG_I(MAC,"[eNB %d] Frame %d: PHY Sync failure \n",Mod_id,frame);
//if((layer2_init_eNB(Mod_id, Free_ch_index)==-1) || ( openair_rrc_lite_eNB_init(Mod_id)==-1)){ layer2_init_eNB(Mod_id, free_eNB_index);
if((layer2_init_eNB(Mod_id, Free_ch_index)==-1) || ( openair_rrc_eNB_init(Mod_id)==-1)){ openair_rrc_eNB_init(Mod_id);
// Mac_rlc_xface->Is_cluster_head[Mod_id]=2;
}
} }
/***********************************************************************/
char layer2_init_eNB(unsigned char Mod_id, unsigned char eNB_index){ char layer2_init_eNB(unsigned char Mod_id, unsigned char eNB_index){
/***********************************************************************/
Mac_rlc_xface->Is_cluster_head[Mod_id]=1;
// msg("\nMAC: INIT eNB %d Successful \n\n",Mod_id);
return 0; return 0;
...@@ -119,8 +107,6 @@ char layer2_init_eNB(unsigned char Mod_id, unsigned char eNB_index){ ...@@ -119,8 +107,6 @@ char layer2_init_eNB(unsigned char Mod_id, unsigned char eNB_index){
/***********************************************************************/ /***********************************************************************/
char layer2_init_UE(unsigned char Mod_id){ char layer2_init_UE(unsigned char Mod_id){
/***********************************************************************/
Mac_rlc_xface->Is_cluster_head[NB_eNB_INST + Mod_id]=0;
return 0; return 0;
} }
......
...@@ -31,6 +31,7 @@ ...@@ -31,6 +31,7 @@
* \author Raymond Knopp, Navid Nikaein * \author Raymond Knopp, Navid Nikaein
* \date 2011 * \date 2011
* \version 0.5 * \version 0.5
* \email: navid.nikaein@eurecom.fr
* @ingroup _mac * @ingroup _mac
*/ */
......
...@@ -88,7 +88,7 @@ typedef struct ...@@ -88,7 +88,7 @@ typedef struct
void (*rx_sdu)(u8 Mod_id,u32 frame,u16 rnti, u8 *sdu,u16 sdu_len); void (*rx_sdu)(u8 Mod_id,u32 frame,u16 rnti, u8 *sdu,u16 sdu_len);
/// Indicate failure to synch to external source /// Indicate failure to synch to external source
void (*mrbch_phy_sync_failure) (u8 Mod_id,u32 frame, u8 Free_ch_index); void (*mrbch_phy_sync_failure) (u8 Mod_id,u32 frame, u8 free_eNB_index);
/// Indicate Scheduling Request from UE /// Indicate Scheduling Request from UE
void (*SR_indication)(u8 Mod_id,u32 frame,u16 rnti,u8 subframe); void (*SR_indication)(u8 Mod_id,u32 frame,u16 rnti,u8 subframe);
...@@ -126,8 +126,8 @@ typedef struct ...@@ -126,8 +126,8 @@ typedef struct
// UE functions // UE functions
/// Indicate loss of synchronization of PBCH /// Indicate loss of synchronization of PBCH for this eNB to MAC layer
void (*out_of_sync_ind)(u8 Mod_id,u32 frame,u16); void (*out_of_sync_ind)(u8 Mod_id,u32 frame,u16 eNB_index);
/// Send a received SI sdu /// Send a received SI sdu
void (*ue_decode_si)(u8 Mod_id,u32 frame, u8 CH_index, void *pdu, u16 len); void (*ue_decode_si)(u8 Mod_id,u32 frame, u8 CH_index, void *pdu, u16 len);
......
...@@ -184,19 +184,11 @@ s8 mac_rrc_lite_data_ind(u8 Mod_id, u32 frame, u16 Srb_id, char *Sdu, u16 Sdu_le ...@@ -184,19 +184,11 @@ s8 mac_rrc_lite_data_ind(u8 Mod_id, u32 frame, u16 Srb_id, char *Sdu, u16 Sdu_le
SRB_INFO *Srb_info; SRB_INFO *Srb_info;
int si_window; int si_window;
#ifdef DEBUG_RRC
if (Srb_id == BCCH)
msg("[RRC]Node =%d: mac_rrc_data_ind to SI, eNB_UE_INDEX %d...\n",Mod_id,eNB_index);
else
msg("[RRC]Node =%d: mac_rrc_data_ind to SRB ID=%d, eNB_UE_INDEX %d...\n",Mod_id,Srb_id,eNB_index);
#endif
if(eNB_flag == 0){ if(eNB_flag == 0){
//LOG_D(RRC,"[RRC][UE %d] Received SDU for SRB %d\n",Mod_id,Srb_id);
if(Srb_id == BCCH){ if(Srb_id == BCCH){
LOG_T(RRC,"[UE %d] Received SDU for BCCH on SRB %d from eNB %d\n",Mod_id,Srb_id,eNB_index);
decode_BCCH_DLSCH_Message(Mod_id,frame,eNB_index,Sdu,Sdu_len); decode_BCCH_DLSCH_Message(Mod_id,frame,eNB_index,Sdu,Sdu_len);
/* /*
if ((frame %2) == 0) { if ((frame %2) == 0) {
...@@ -245,6 +237,7 @@ s8 mac_rrc_lite_data_ind(u8 Mod_id, u32 frame, u16 Srb_id, char *Sdu, u16 Sdu_le ...@@ -245,6 +237,7 @@ s8 mac_rrc_lite_data_ind(u8 Mod_id, u32 frame, u16 Srb_id, char *Sdu, u16 Sdu_le
Srb_info = &UE_rrc_inst[Mod_id].Srb0[eNB_index]; Srb_info = &UE_rrc_inst[Mod_id].Srb0[eNB_index];
if (Sdu_len>0) { if (Sdu_len>0) {
LOG_T(RRC,"[UE %d] Received SDU for CCCH on SRB %d from eNB %d\n",Mod_id,Srb_id & RAB_OFFSET,eNB_index);
memcpy(Srb_info->Rx_buffer.Payload,Sdu,Sdu_len); memcpy(Srb_info->Rx_buffer.Payload,Sdu,Sdu_len);
Srb_info->Rx_buffer.payload_size = Sdu_len; Srb_info->Rx_buffer.payload_size = Sdu_len;
rrc_ue_decode_ccch(Mod_id,frame,Srb_info,eNB_index); rrc_ue_decode_ccch(Mod_id,frame,Srb_info,eNB_index);
...@@ -253,7 +246,7 @@ s8 mac_rrc_lite_data_ind(u8 Mod_id, u32 frame, u16 Srb_id, char *Sdu, u16 Sdu_le ...@@ -253,7 +246,7 @@ s8 mac_rrc_lite_data_ind(u8 Mod_id, u32 frame, u16 Srb_id, char *Sdu, u16 Sdu_le
#ifdef Rel10 #ifdef Rel10
if ((Srb_id & RAB_OFFSET) == MCCH) { if ((Srb_id & RAB_OFFSET) == MCCH) {
LOG_T(RRC,"[UE %d] Received SDU for MCCH on SRB %d from eNB %d\n",Mod_id,Srb_id & RAB_OFFSET,eNB_index);
decode_MCCH_Message(Mod_id, frame, eNB_index, Sdu, Sdu_len); decode_MCCH_Message(Mod_id, frame, eNB_index, Sdu, Sdu_len);
} }
#endif // Rel10 #endif // Rel10
...@@ -261,8 +254,10 @@ s8 mac_rrc_lite_data_ind(u8 Mod_id, u32 frame, u16 Srb_id, char *Sdu, u16 Sdu_le ...@@ -261,8 +254,10 @@ s8 mac_rrc_lite_data_ind(u8 Mod_id, u32 frame, u16 Srb_id, char *Sdu, u16 Sdu_le
} }
else{ // This is an eNB else{ // This is an eNB
LOG_T(RRC,"[eNB %d] Received SDU for CCCH on SRB %d\n",Mod_id,Srb_info->Srb_id);
Srb_info = &eNB_rrc_inst[Mod_id].Srb0; Srb_info = &eNB_rrc_inst[Mod_id].Srb0;
// msg("\n***********************************INST %d Srb_info %p, Srb_id=%d**********************************\n\n",Mod_id,Srb_info,Srb_info->Srb_id); // msg("\n******INST %d Srb_info %p, Srb_id=%d****\n\n",Mod_id,Srb_info,Srb_info->Srb_id);
memcpy(Srb_info->Rx_buffer.Payload,Sdu,6); memcpy(Srb_info->Rx_buffer.Payload,Sdu,6);
rrc_eNB_decode_ccch(Mod_id,frame,Srb_info); rrc_eNB_decode_ccch(Mod_id,frame,Srb_info);
} }
...@@ -276,15 +271,16 @@ void mac_lite_sync_ind(u8 Mod_id,u8 Status){ ...@@ -276,15 +271,16 @@ void mac_lite_sync_ind(u8 Mod_id,u8 Status){
//-------------------------------------------------------------------------------------------// //-------------------------------------------------------------------------------------------//
} }
//------------------------------------------------------------------------------------------------------------------// // this function is Not USED anymore
void rrc_lite_data_ind( u8 Mod_id, u32 frame, u8 eNB_flag,u32 Srb_id, u32 sdu_size,u8 *Buffer){ void rrc_lite_data_ind( u8 Mod_id, u32 frame, u8 eNB_flag,u32 Srb_id, u32 sdu_size,u8 *Buffer){
//------------------------------------------------------------------------------------------------------------------//
u8 UE_index=(Srb_id-1)/NB_RB_MAX; u8 UE_index=(Srb_id-1)/NB_RB_MAX;
u8 DCCH_index = Srb_id % NB_RB_MAX; u8 DCCH_index = Srb_id % NB_RB_MAX;
LOG_D(RRC,"[SRB %d]RECEIVED MSG ON DCCH %d, UE %d, Size %d\n", LOG_N(RRC,"[%s %d] Frame %d: received a DCCH %d message on SRB %d with Size %d (Deprecated function)\n",
Srb_id-1, DCCH_index,UE_index,sdu_size); (eNB_flag == 1)? "eNB": "UE",
(eNB_flag == 1)? Mod_id : UE_index,
frame, DCCH_index,Srb_id-1,sdu_size);
if (eNB_flag ==1) if (eNB_flag ==1)
rrc_eNB_decode_dcch(Mod_id,frame,DCCH_index,UE_index,Buffer,sdu_size); rrc_eNB_decode_dcch(Mod_id,frame,DCCH_index,UE_index,Buffer,sdu_size);
else else
...@@ -298,15 +294,13 @@ void rrc_lite_in_sync_ind(u8 Mod_id, u32 frame, u16 eNB_index) { ...@@ -298,15 +294,13 @@ void rrc_lite_in_sync_ind(u8 Mod_id, u32 frame, u16 eNB_index) {
if (UE_rrc_inst[Mod_id].Info[eNB_index].T310_active==1) if (UE_rrc_inst[Mod_id].Info[eNB_index].T310_active==1)
UE_rrc_inst[Mod_id].Info[eNB_index].N311_cnt++; UE_rrc_inst[Mod_id].Info[eNB_index].N311_cnt++;
} }
/*-------------------------------------------------------------------------------------------*/
void rrc_lite_out_of_sync_ind(u8 Mod_id, u32 frame, u16 eNB_index){ void rrc_lite_out_of_sync_ind(u8 Mod_id, u32 frame, u16 eNB_index){
/*-------------------------------------------------------------------------------------------*/
// rlc_info_t rlc_infoP; // rlc_info_t rlc_infoP;
// rlc_infoP.rlc_mode=RLC_UM; // rlc_infoP.rlc_mode=RLC_UM;
LOG_D(RRC,"[UE %d] Frame %d OUT OF SYNC FROM CH %d (T310 %d, N310 %d, N311 %d)\n ",Mod_id,frame,eNB_index, LOG_I(RRC,"[UE %d] Frame %d: OUT OF SYNC FROM eNB %d (T310 %d, N310 %d, N311 %d)\n ",
Mod_id,frame,eNB_index,
UE_rrc_inst[Mod_id].Info[eNB_index].T310_cnt, UE_rrc_inst[Mod_id].Info[eNB_index].T310_cnt,
UE_rrc_inst[Mod_id].Info[eNB_index].N310_cnt, UE_rrc_inst[Mod_id].Info[eNB_index].N310_cnt,
UE_rrc_inst[Mod_id].Info[eNB_index].N311_cnt); UE_rrc_inst[Mod_id].Info[eNB_index].N311_cnt);
......
...@@ -559,7 +559,7 @@ uint8_t do_SIB23(uint8_t Mod_id, ...@@ -559,7 +559,7 @@ uint8_t do_SIB23(uint8_t Mod_id,
struct SystemInformation_r8_IEs__sib_TypeAndInfo__Member *sib13_part; struct SystemInformation_r8_IEs__sib_TypeAndInfo__Member *sib13_part;
MBSFN_SubframeConfigList_t *MBSFNSubframeConfigList; MBSFN_SubframeConfigList_t *MBSFNSubframeConfigList;
MBSFN_AreaInfoList_r9_t *MBSFNArea_list; MBSFN_AreaInfoList_r9_t *MBSFNArea_list;
struct MBSFN_AreaInfo_r9 *MBSFN_Area1; struct MBSFN_AreaInfo_r9 *MBSFN_Area1, *MBSFN_Area2;
#endif #endif
asn_enc_rval_t enc_rval; asn_enc_rval_t enc_rval;
...@@ -797,7 +797,7 @@ uint8_t do_SIB23(uint8_t Mod_id, ...@@ -797,7 +797,7 @@ uint8_t do_SIB23(uint8_t Mod_id,
// MBSFN Area 1 // MBSFN Area 1
MBSFN_Area1= CALLOC(1, sizeof(*MBSFN_Area1)); MBSFN_Area1= CALLOC(1, sizeof(*MBSFN_Area1));
MBSFN_Area1->mbsfn_AreaId_r9= 1; MBSFN_Area1->mbsfn_AreaId_r9= 1;
MBSFN_Area1->non_MBSFNregionLength= MBSFN_AreaInfo_r9__non_MBSFNregionLength_s1; MBSFN_Area1->non_MBSFNregionLength= MBSFN_AreaInfo_r9__non_MBSFNregionLength_s2;
MBSFN_Area1->notificationIndicator_r9= 0; MBSFN_Area1->notificationIndicator_r9= 0;
MBSFN_Area1->mcch_Config_r9.mcch_RepetitionPeriod_r9= MBSFN_AreaInfo_r9__mcch_Config_r9__mcch_RepetitionPeriod_r9_rf32; MBSFN_Area1->mcch_Config_r9.mcch_RepetitionPeriod_r9= MBSFN_AreaInfo_r9__mcch_Config_r9__mcch_RepetitionPeriod_r9_rf32;
MBSFN_Area1->mcch_Config_r9.mcch_Offset_r9= 1; // in accordance with mbsfn subframe configuration in sib2 MBSFN_Area1->mcch_Config_r9.mcch_Offset_r9= 1; // in accordance with mbsfn subframe configuration in sib2
...@@ -817,23 +817,29 @@ uint8_t do_SIB23(uint8_t Mod_id, ...@@ -817,23 +817,29 @@ uint8_t do_SIB23(uint8_t Mod_id,
ASN_SEQUENCE_ADD(&MBSFNArea_list->list,MBSFN_Area1); ASN_SEQUENCE_ADD(&MBSFNArea_list->list,MBSFN_Area1);
/* //MBSFN Area 2 //MBSFN Area 2: currently only activated for eMBMS relaying
if (MBMS_flag == 4 ) {
MBSFN_Area2= CALLOC(1, sizeof(*MBSFN_Area2)); MBSFN_Area2= CALLOC(1, sizeof(*MBSFN_Area2));
MBSFN_Area2->mbsfn_AreaId_r9= 2; MBSFN_Area2->mbsfn_AreaId_r9= 2;
MBSFN_Area2->non_MBSFNregionLength= MBSFN_AreaInfo_r9__non_MBSFNregionLength_s1; MBSFN_Area2->non_MBSFNregionLength= MBSFN_AreaInfo_r9__non_MBSFNregionLength_s2;
MBSFN_Area2->notificationIndicator_r9= 0; MBSFN_Area2->notificationIndicator_r9= 1;
MBSFN_Area2->mcch_Config_r9.mcch_RepetitionPeriod_r9= MBSFN_AreaInfo_r9__mcch_Config_r9__mcch_RepetitionPeriod_r9_rf32; MBSFN_Area2->mcch_Config_r9.mcch_RepetitionPeriod_r9= MBSFN_AreaInfo_r9__mcch_Config_r9__mcch_RepetitionPeriod_r9_rf32;
MBSFN_Area2->mcch_Config_r9.mcch_Offset_r9= 0; MBSFN_Area2->mcch_Config_r9.mcch_Offset_r9= 1;
MBSFN_Area2->mcch_Config_r9.mcch_ModificationPeriod_r9= MBSFN_AreaInfo_r9__mcch_Config_r9__mcch_ModificationPeriod_r9_rf512; MBSFN_Area2->mcch_Config_r9.mcch_ModificationPeriod_r9= MBSFN_AreaInfo_r9__mcch_Config_r9__mcch_ModificationPeriod_r9_rf512;
// Subframe Allocation Info // Subframe Allocation Info
MBSFN_Area2->mcch_Config_r9.sf_AllocInfo_r9.buf= MALLOC(1); MBSFN_Area2->mcch_Config_r9.sf_AllocInfo_r9.buf= MALLOC(1);
MBSFN_Area2->mcch_Config_r9.sf_AllocInfo_r9.size= 1; MBSFN_Area2->mcch_Config_r9.sf_AllocInfo_r9.size= 1;
MBSFN_Area2->mcch_Config_r9.sf_AllocInfo_r9.buf[0]=0x8;
MBSFN_Area2->mcch_Config_r9.sf_AllocInfo_r9.bits_unused= 2; MBSFN_Area2->mcch_Config_r9.sf_AllocInfo_r9.bits_unused= 2;
if (frame_parms->frame_type == TDD) {//TDD: SF7
MBSFN_Area1->mcch_Config_r9.sf_AllocInfo_r9.buf[0]=0x08<<2;
}
else {
MBSFN_Area1->mcch_Config_r9.sf_AllocInfo_r9.buf[0]=0x04<<2; // FDD: SF6
}
MBSFN_Area2->mcch_Config_r9.signallingMCS_r9= MBSFN_AreaInfo_r9__mcch_Config_r9__signallingMCS_r9_n2; MBSFN_Area2->mcch_Config_r9.signallingMCS_r9= MBSFN_AreaInfo_r9__mcch_Config_r9__signallingMCS_r9_n2;
ASN_SEQUENCE_ADD(&MBSFNArea_list->list,MBSFN_Area2);*/ ASN_SEQUENCE_ADD(&MBSFNArea_list->list,MBSFN_Area2);
}
// end of adding for MBMS SIB13 // end of adding for MBMS SIB13
} }
#endif #endif
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment