fembms: - added suppor for FeMBMS RRC sublayer / l2 interface
- added primitives to build asn1 messages for FeMBMS eNB Signed-off-by: Javier Morgade <javier.morgade@ieee.org>
This commit is contained in:
@@ -28,6 +28,15 @@
|
|||||||
* \email: raymond.knopp@eurecom.fr
|
* \email: raymond.knopp@eurecom.fr
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/*! \file l2_interface.c
|
||||||
|
* \brief layer 2 interface, added support for FeMBMS RRC sublayer
|
||||||
|
* \author J. Morgade
|
||||||
|
* \date 2020
|
||||||
|
* \version 1.0
|
||||||
|
* \email: javier.morgade@ieee.org
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
#include "platform_types.h"
|
#include "platform_types.h"
|
||||||
#include "rrc_defs.h"
|
#include "rrc_defs.h"
|
||||||
#include "rrc_extern.h"
|
#include "rrc_extern.h"
|
||||||
@@ -65,6 +74,9 @@ mac_rrc_data_req(
|
|||||||
uint8_t Sdu_size = 0;
|
uint8_t Sdu_size = 0;
|
||||||
uint8_t sfn = (uint8_t)((frameP>>2)&0xff);
|
uint8_t sfn = (uint8_t)((frameP>>2)&0xff);
|
||||||
|
|
||||||
|
uint8_t sfn_fembms = (uint8_t)((frameP>>4)&0xff);
|
||||||
|
sfn_fembms = sfn_fembms<<2;
|
||||||
|
|
||||||
if (LOG_DEBUGFLAG(DEBUG_RRC)) {
|
if (LOG_DEBUGFLAG(DEBUG_RRC)) {
|
||||||
LOG_D(RRC,"[eNB %d] mac_rrc_data_req to SRB ID=%ld\n",Mod_idP,Srb_id);
|
LOG_D(RRC,"[eNB %d] mac_rrc_data_req to SRB ID=%ld\n",Mod_idP,Srb_id);
|
||||||
}
|
}
|
||||||
@@ -72,12 +84,14 @@ mac_rrc_data_req(
|
|||||||
eNB_RRC_INST *rrc;
|
eNB_RRC_INST *rrc;
|
||||||
rrc_eNB_carrier_data_t *carrier;
|
rrc_eNB_carrier_data_t *carrier;
|
||||||
LTE_BCCH_BCH_Message_t *mib;
|
LTE_BCCH_BCH_Message_t *mib;
|
||||||
|
LTE_BCCH_BCH_Message_MBMS_t *mib_fembms;
|
||||||
rrc = RC.rrc[Mod_idP];
|
rrc = RC.rrc[Mod_idP];
|
||||||
carrier = &rrc->carrier[0];
|
carrier = &rrc->carrier[0];
|
||||||
mib = &carrier->mib;
|
mib = &carrier->mib;
|
||||||
|
mib_fembms = &carrier->mib_fembms;
|
||||||
|
|
||||||
if((Srb_id & RAB_OFFSET) == BCCH_SI_MBMS){
|
if((Srb_id & RAB_OFFSET) == BCCH_SI_MBMS){
|
||||||
if (frameP%4 == 0) {
|
if (frameP%8 == 0) {
|
||||||
memcpy(&buffer_pP[0],
|
memcpy(&buffer_pP[0],
|
||||||
RC.rrc[Mod_idP]->carrier[CC_id].SIB1_MBMS,
|
RC.rrc[Mod_idP]->carrier[CC_id].SIB1_MBMS,
|
||||||
RC.rrc[Mod_idP]->carrier[CC_id].sizeof_SIB1_MBMS);
|
RC.rrc[Mod_idP]->carrier[CC_id].sizeof_SIB1_MBMS);
|
||||||
@@ -159,6 +173,22 @@ mac_rrc_data_req(
|
|||||||
return(3);
|
return(3);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if( (Srb_id & RAB_OFFSET ) == MIBCH_MBMS) {
|
||||||
|
mib_fembms->message.systemFrameNumber_r14.buf = &sfn_fembms;
|
||||||
|
enc_rval = uper_encode_to_buffer(&asn_DEF_LTE_BCCH_BCH_Message_MBMS,
|
||||||
|
NULL,
|
||||||
|
(void *)mib_fembms,
|
||||||
|
carrier->MIB_FeMBMS,
|
||||||
|
24);
|
||||||
|
LOG_I(RRC,"Encoded MIB MBMS for frame %d (%p), bits %lu %x,%x,%x %x bits_unused %d\n",sfn_fembms>>2,carrier->MIB_FeMBMS,enc_rval.encoded,carrier->MIB_FeMBMS[0],carrier->MIB_FeMBMS[1],carrier->MIB_FeMBMS[2],mib_fembms->message.systemFrameNumber_r14.buf[0],mib_fembms->message.systemFrameNumber_r14.bits_unused);
|
||||||
|
buffer_pP[0]=carrier->MIB_FeMBMS[0];
|
||||||
|
buffer_pP[1]=carrier->MIB_FeMBMS[1];
|
||||||
|
buffer_pP[2]=carrier->MIB_FeMBMS[2];
|
||||||
|
AssertFatal (enc_rval.encoded > 0, "ASN1 message encoding failed (%s, %lu)!\n",
|
||||||
|
enc_rval.failed_type->name, enc_rval.encoded);
|
||||||
|
return(3);
|
||||||
|
}
|
||||||
|
|
||||||
if( (Srb_id & RAB_OFFSET ) == CCCH) {
|
if( (Srb_id & RAB_OFFSET ) == CCCH) {
|
||||||
struct rrc_eNB_ue_context_s *ue_context_p = rrc_eNB_get_ue_context(RC.rrc[Mod_idP],rnti);
|
struct rrc_eNB_ue_context_s *ue_context_p = rrc_eNB_get_ue_context(RC.rrc[Mod_idP],rnti);
|
||||||
|
|
||||||
@@ -203,6 +233,8 @@ mac_rrc_data_req(
|
|||||||
RC.rrc[Mod_idP]->carrier[CC_id].MCCH_MESSAGE[mbsfn_sync_area],
|
RC.rrc[Mod_idP]->carrier[CC_id].MCCH_MESSAGE[mbsfn_sync_area],
|
||||||
RC.rrc[Mod_idP]->carrier[CC_id].sizeof_MCCH_MESSAGE[mbsfn_sync_area]);
|
RC.rrc[Mod_idP]->carrier[CC_id].sizeof_MCCH_MESSAGE[mbsfn_sync_area]);
|
||||||
|
|
||||||
|
LOG_W(RRC,"[eNB %d] Frame %d : MCCH request => MCCH_MESSAGE \n",Mod_idP,frameP);
|
||||||
|
|
||||||
if (LOG_DEBUGFLAG(DEBUG_RRC)) {
|
if (LOG_DEBUGFLAG(DEBUG_RRC)) {
|
||||||
LOG_W(RRC,"[eNB %d] Frame %d : MCCH request => MCCH_MESSAGE \n",Mod_idP,frameP);
|
LOG_W(RRC,"[eNB %d] Frame %d : MCCH request => MCCH_MESSAGE \n",Mod_idP,frameP);
|
||||||
|
|
||||||
@@ -216,6 +248,29 @@ mac_rrc_data_req(
|
|||||||
return (RC.rrc[Mod_idP]->carrier[CC_id].sizeof_MCCH_MESSAGE[mbsfn_sync_area]);
|
return (RC.rrc[Mod_idP]->carrier[CC_id].sizeof_MCCH_MESSAGE[mbsfn_sync_area]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if((Srb_id & RAB_OFFSET) == MCCH_COUNTING) {
|
||||||
|
if(RC.rrc[Mod_idP]->carrier[CC_id].MCCH_MESS_COUNTING[mbsfn_sync_area].Active==0) {
|
||||||
|
return 0; // this parameter is set in function init_mcch in rrc_eNB.c
|
||||||
|
}
|
||||||
|
|
||||||
|
memcpy(&buffer_pP[0],
|
||||||
|
RC.rrc[Mod_idP]->carrier[CC_id].MCCH_MESSAGE_COUNTING[mbsfn_sync_area],
|
||||||
|
RC.rrc[Mod_idP]->carrier[CC_id].sizeof_MCCH_MESSAGE_COUNTING[mbsfn_sync_area]);
|
||||||
|
|
||||||
|
if (LOG_DEBUGFLAG(DEBUG_RRC)) {
|
||||||
|
LOG_W(RRC,"[eNB %d] Frame %d : MCCH request => MCCH_MESSAGE_COUNTING \n",Mod_idP,frameP);
|
||||||
|
|
||||||
|
for (int i=0; i<RC.rrc[Mod_idP]->carrier[CC_id].sizeof_MCCH_MESSAGE_COUNTING[mbsfn_sync_area]; i++) {
|
||||||
|
LOG_T(RRC,"%x.",buffer_pP[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
LOG_T(RRC,"\n");
|
||||||
|
} /* LOG_DEBUGFLAG(DEBUG_RRC) */
|
||||||
|
|
||||||
|
return (RC.rrc[Mod_idP]->carrier[CC_id].sizeof_MCCH_MESSAGE_COUNTING[mbsfn_sync_area]);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
if ((Srb_id & RAB_OFFSET) == BCCH_SIB1_BR) {
|
if ((Srb_id & RAB_OFFSET) == BCCH_SIB1_BR) {
|
||||||
memcpy(&buffer_pP[0],
|
memcpy(&buffer_pP[0],
|
||||||
RC.rrc[Mod_idP]->carrier[CC_id].SIB1_BR,
|
RC.rrc[Mod_idP]->carrier[CC_id].SIB1_BR,
|
||||||
|
|||||||
@@ -19,7 +19,7 @@
|
|||||||
* contact@openairinterface.org
|
* contact@openairinterface.org
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*! \file l2_interface.c
|
/*! \file l2_interface_ue.c
|
||||||
* \brief layer 2 interface, used to support different RRC sublayer
|
* \brief layer 2 interface, used to support different RRC sublayer
|
||||||
* \author Raymond Knopp and Navid Nikaein
|
* \author Raymond Knopp and Navid Nikaein
|
||||||
* \date 2010-2014
|
* \date 2010-2014
|
||||||
@@ -28,6 +28,16 @@
|
|||||||
* \email: raymond.knopp@eurecom.fr
|
* \email: raymond.knopp@eurecom.fr
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/*! \file l2_interface_ue.c
|
||||||
|
* \brief layer 2 interface, added support for FeMBMS RRC sublayer
|
||||||
|
* \author J. Morgade
|
||||||
|
* \date 2020
|
||||||
|
* \version 1.0
|
||||||
|
* \email: javier.morgade@ieee.org
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
#include "platform_types.h"
|
#include "platform_types.h"
|
||||||
#include "rrc_defs.h"
|
#include "rrc_defs.h"
|
||||||
#include "rrc_extern.h"
|
#include "rrc_extern.h"
|
||||||
@@ -217,7 +227,10 @@ mac_rrc_data_ind_ue(
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ((srb_idP & RAB_OFFSET) == MCCH) {
|
if ((srb_idP & RAB_OFFSET) == MCCH) {
|
||||||
LOG_T(RRC,"[UE %d] Frame %d: Received SDU on MBSFN sync area %d for MCCH on SRB %ld from eNB %d\n",
|
//LOG_T(RRC,"[UE %d] Frame %d: Received SDU on MBSFN sync area %d for MCCH on SRB %ld from eNB %d\n",
|
||||||
|
//module_idP,frameP, mbsfn_sync_areaP, srb_idP & RAB_OFFSET,eNB_indexP);
|
||||||
|
|
||||||
|
LOG_W(RRC,"[UE %d] Frame %d: Received SDU on MBSFN sync area %d for MCCH on SRB %ld from eNB %d\n",
|
||||||
module_idP,frameP, mbsfn_sync_areaP, srb_idP & RAB_OFFSET,eNB_indexP);
|
module_idP,frameP, mbsfn_sync_areaP, srb_idP & RAB_OFFSET,eNB_indexP);
|
||||||
{
|
{
|
||||||
MessageDef *message_p;
|
MessageDef *message_p;
|
||||||
|
|||||||
@@ -28,6 +28,14 @@
|
|||||||
* \email: raymond.knopp@eurecom.fr and navid.nikaein@eurecom.fr
|
* \email: raymond.knopp@eurecom.fr and navid.nikaein@eurecom.fr
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/*! \file asn1_msg.c
|
||||||
|
* \brief added primitives to build the asn1 messages for FeMBMS
|
||||||
|
* \author Javier Morgade
|
||||||
|
* \date 2019-2020
|
||||||
|
* \version 1.0
|
||||||
|
* \email: javier.morgade@ieee.org
|
||||||
|
*/
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <stdlib.h> /* for atoi(3) */
|
#include <stdlib.h> /* for atoi(3) */
|
||||||
@@ -185,7 +193,8 @@ uint8_t get_adjacent_cell_mod_id(uint16_t phyCellId) {
|
|||||||
uint8_t do_MIB_FeMBMS(rrc_eNB_carrier_data_t *carrier, uint32_t N_RB_DL, uint32_t additionalNonMBSFN, uint32_t frame) {
|
uint8_t do_MIB_FeMBMS(rrc_eNB_carrier_data_t *carrier, uint32_t N_RB_DL, uint32_t additionalNonMBSFN, uint32_t frame) {
|
||||||
asn_enc_rval_t enc_rval;
|
asn_enc_rval_t enc_rval;
|
||||||
LTE_BCCH_BCH_Message_MBMS_t *mib_fembms=&carrier->mib_fembms;
|
LTE_BCCH_BCH_Message_MBMS_t *mib_fembms=&carrier->mib_fembms;
|
||||||
uint8_t sfn = (uint8_t)((frame>>2)&0xff);
|
frame=198;
|
||||||
|
uint8_t sfn = (uint8_t)((frame>>4)&0xff);
|
||||||
uint16_t *spare = calloc(1,sizeof(uint16_t));
|
uint16_t *spare = calloc(1,sizeof(uint16_t));
|
||||||
|
|
||||||
if( spare == NULL ) abort();
|
if( spare == NULL ) abort();
|
||||||
@@ -223,15 +232,16 @@ uint8_t do_MIB_FeMBMS(rrc_eNB_carrier_data_t *carrier, uint32_t N_RB_DL, uint32_
|
|||||||
(uint32_t)mib_fembms->message.dl_Bandwidth_MBMS_r14,
|
(uint32_t)mib_fembms->message.dl_Bandwidth_MBMS_r14,
|
||||||
(uint32_t)additionalNonMBSFN,
|
(uint32_t)additionalNonMBSFN,
|
||||||
(uint32_t)sfn);
|
(uint32_t)sfn);
|
||||||
|
sfn = sfn<<2;
|
||||||
mib_fembms->message.systemFrameNumber_r14.buf = &sfn;
|
mib_fembms->message.systemFrameNumber_r14.buf = &sfn;
|
||||||
mib_fembms->message.systemFrameNumber_r14.size = 1;
|
mib_fembms->message.systemFrameNumber_r14.size = 1;
|
||||||
mib_fembms->message.systemFrameNumber_r14.bits_unused=0;
|
mib_fembms->message.systemFrameNumber_r14.bits_unused=2;
|
||||||
mib_fembms->message.spare.buf = (uint8_t *)spare;
|
mib_fembms->message.spare.buf = (uint8_t *)spare;
|
||||||
mib_fembms->message.spare.size = 2;
|
mib_fembms->message.spare.size = 2;
|
||||||
mib_fembms->message.spare.bits_unused = 6; // This makes a spare of 10 bits
|
mib_fembms->message.spare.bits_unused = 3; // This makes a spare of 10 bits
|
||||||
//TODO additionalNonBMSFNSubframes-r14 INTEGER (0..3) ?
|
//TODO additionalNonBMSFNSubframes-r14 INTEGER (0..3) ?
|
||||||
//if ( LOG_DEBUGFLAG(DEBUG_ASN1) ) {
|
//if ( LOG_DEBUGFLAG(DEBUG_ASN1) ) {
|
||||||
//xer_fprint(stdout, &asn_DEF_LTE_BCCH_BCH_Message_MBMS, (void *)mib_fembms);
|
xer_fprint(stdout, &asn_DEF_LTE_BCCH_BCH_Message_MBMS, (void *)mib_fembms);
|
||||||
//}
|
//}
|
||||||
enc_rval = uper_encode_to_buffer(&asn_DEF_LTE_BCCH_BCH_Message_MBMS,
|
enc_rval = uper_encode_to_buffer(&asn_DEF_LTE_BCCH_BCH_Message_MBMS,
|
||||||
NULL,
|
NULL,
|
||||||
@@ -387,7 +397,11 @@ uint8_t do_SIB1_MBMS(rrc_eNB_carrier_data_t *carrier,
|
|||||||
// SystemInformation_t systemInformation;
|
// SystemInformation_t systemInformation;
|
||||||
int num_plmn = configuration->num_plmn;
|
int num_plmn = configuration->num_plmn;
|
||||||
|
|
||||||
LTE_PLMN_IdentityInfo_t *PLMN_identity_info;
|
//LTE_PLMN_IdentityInfo_t *PLMN_identity_info;
|
||||||
|
LTE_PLMN_IdentityInfo_t * PLMN_identity_info = &carrier->PLMN_identity_info_MBMS[0];
|
||||||
|
//LTE_MCC_MNC_Digit_t dummy_mcc[num_plmn][3], dummy_mnc[num_plmn][3];
|
||||||
|
//LTE_MCC_MNC_Digit_t *dummy_mcc = &carrier->dummy_mcc_MBMS[0][0];
|
||||||
|
//LTE_MCC_MNC_Digit_t *dummy_mnc = &carrier->dummy_mnc_MBMS[0][0];
|
||||||
LTE_MCC_MNC_Digit_t *dummy_mcc_0;
|
LTE_MCC_MNC_Digit_t *dummy_mcc_0;
|
||||||
LTE_MCC_MNC_Digit_t *dummy_mcc_1;
|
LTE_MCC_MNC_Digit_t *dummy_mcc_1;
|
||||||
LTE_MCC_MNC_Digit_t *dummy_mcc_2;
|
LTE_MCC_MNC_Digit_t *dummy_mcc_2;
|
||||||
@@ -395,7 +409,9 @@ uint8_t do_SIB1_MBMS(rrc_eNB_carrier_data_t *carrier,
|
|||||||
LTE_MCC_MNC_Digit_t *dummy_mnc_1;
|
LTE_MCC_MNC_Digit_t *dummy_mnc_1;
|
||||||
LTE_MCC_MNC_Digit_t *dummy_mnc_2;
|
LTE_MCC_MNC_Digit_t *dummy_mnc_2;
|
||||||
asn_enc_rval_t enc_rval;
|
asn_enc_rval_t enc_rval;
|
||||||
LTE_SchedulingInfo_MBMS_r14_t *schedulingInfo;
|
//LTE_SchedulingInfo_MBMS_r14_t *schedulingInfo;
|
||||||
|
//LTE_SchedulingInfo_MBMS_r14_t schedulingInfo;
|
||||||
|
LTE_SchedulingInfo_MBMS_r14_t *schedulingInfo = &carrier->schedulingInfo_MBMS;
|
||||||
LTE_SIB_Type_t *sib_type;
|
LTE_SIB_Type_t *sib_type;
|
||||||
uint8_t *buffer = carrier->SIB1_MBMS;
|
uint8_t *buffer = carrier->SIB1_MBMS;
|
||||||
LTE_BCCH_DL_SCH_Message_MBMS_t *bcch_message = &carrier->siblock1_MBMS;
|
LTE_BCCH_DL_SCH_Message_MBMS_t *bcch_message = &carrier->siblock1_MBMS;
|
||||||
@@ -408,6 +424,8 @@ uint8_t do_SIB1_MBMS(rrc_eNB_carrier_data_t *carrier,
|
|||||||
// memcpy(&bcch_message.message.choice.c1.choice.systemInformationBlockType1,sib1,sizeof(SystemInformationBlockType1_t));
|
// memcpy(&bcch_message.message.choice.c1.choice.systemInformationBlockType1,sib1,sizeof(SystemInformationBlockType1_t));
|
||||||
*sib1_MBMS = &bcch_message->message.choice.c1.choice.systemInformationBlockType1_MBMS_r14;
|
*sib1_MBMS = &bcch_message->message.choice.c1.choice.systemInformationBlockType1_MBMS_r14;
|
||||||
PLMN_identity_info = CALLOC(1, sizeof(LTE_PLMN_IdentityInfo_t) * num_plmn);
|
PLMN_identity_info = CALLOC(1, sizeof(LTE_PLMN_IdentityInfo_t) * num_plmn);
|
||||||
|
//memset(&schedulingInfo,0,sizeof(LTE_SchedulingInfo_MBMS_r14_t));
|
||||||
|
memset(schedulingInfo,0,sizeof(LTE_SchedulingInfo_MBMS_r14_t));
|
||||||
|
|
||||||
if (PLMN_identity_info == NULL)
|
if (PLMN_identity_info == NULL)
|
||||||
exit(1);
|
exit(1);
|
||||||
@@ -528,7 +546,7 @@ uint8_t do_SIB1_MBMS(rrc_eNB_carrier_data_t *carrier,
|
|||||||
MBSFN_Area1->mcch_Config_r9.sf_AllocInfo_r9.size= 1;
|
MBSFN_Area1->mcch_Config_r9.sf_AllocInfo_r9.size= 1;
|
||||||
MBSFN_Area1->mcch_Config_r9.sf_AllocInfo_r9.buf[0]=0x20<<2; // FDD: SF1
|
MBSFN_Area1->mcch_Config_r9.sf_AllocInfo_r9.buf[0]=0x20<<2; // FDD: SF1
|
||||||
MBSFN_Area1->mcch_Config_r9.sf_AllocInfo_r9.bits_unused= 2;
|
MBSFN_Area1->mcch_Config_r9.sf_AllocInfo_r9.bits_unused= 2;
|
||||||
MBSFN_Area1->mcch_Config_r9.signallingMCS_r9= LTE_MBSFN_AreaInfo_r9__mcch_Config_r9__signallingMCS_r9_n7;
|
MBSFN_Area1->mcch_Config_r9.signallingMCS_r9= LTE_MBSFN_AreaInfo_r9__mcch_Config_r9__signallingMCS_r9_n2;
|
||||||
(MBSFN_Area1)->ext1 = CALLOC (1, sizeof(*(MBSFN_Area1)->ext1));
|
(MBSFN_Area1)->ext1 = CALLOC (1, sizeof(*(MBSFN_Area1)->ext1));
|
||||||
memset((MBSFN_Area1)->ext1,0,sizeof(*(MBSFN_Area1)->ext1));
|
memset((MBSFN_Area1)->ext1,0,sizeof(*(MBSFN_Area1)->ext1));
|
||||||
MBSFN_Area1->ext1->subcarrierSpacingMBMS_r14 = CALLOC(1,sizeof(*( MBSFN_Area1->ext1)->subcarrierSpacingMBMS_r14));
|
MBSFN_Area1->ext1->subcarrierSpacingMBMS_r14 = CALLOC(1,sizeof(*( MBSFN_Area1->ext1)->subcarrierSpacingMBMS_r14));
|
||||||
@@ -541,18 +559,18 @@ uint8_t do_SIB1_MBMS(rrc_eNB_carrier_data_t *carrier,
|
|||||||
if(1) {
|
if(1) {
|
||||||
(*sib1_MBMS)->nonMBSFN_SubframeConfig_r14 = CALLOC(1,sizeof(struct LTE_NonMBSFN_SubframeConfig_r14));
|
(*sib1_MBMS)->nonMBSFN_SubframeConfig_r14 = CALLOC(1,sizeof(struct LTE_NonMBSFN_SubframeConfig_r14));
|
||||||
memset((*sib1_MBMS)->nonMBSFN_SubframeConfig_r14,0,sizeof(struct LTE_NonMBSFN_SubframeConfig_r14));
|
memset((*sib1_MBMS)->nonMBSFN_SubframeConfig_r14,0,sizeof(struct LTE_NonMBSFN_SubframeConfig_r14));
|
||||||
(*sib1_MBMS)->nonMBSFN_SubframeConfig_r14->radioFrameAllocationPeriod_r14 = LTE_NonMBSFN_SubframeConfig_r14__radioFrameAllocationPeriod_r14_rf8;
|
(*sib1_MBMS)->nonMBSFN_SubframeConfig_r14->radioFrameAllocationPeriod_r14 = LTE_NonMBSFN_SubframeConfig_r14__radioFrameAllocationPeriod_r14_rf4;
|
||||||
(*sib1_MBMS)->nonMBSFN_SubframeConfig_r14->radioFrameAllocationOffset_r14 = 0;
|
(*sib1_MBMS)->nonMBSFN_SubframeConfig_r14->radioFrameAllocationOffset_r14 = 0;
|
||||||
(*sib1_MBMS)->nonMBSFN_SubframeConfig_r14->subframeAllocation_r14.buf = MALLOC(2);
|
(*sib1_MBMS)->nonMBSFN_SubframeConfig_r14->subframeAllocation_r14.buf = MALLOC(2);
|
||||||
//100000001 byte(0)=10000000 byte(1)=xxxxxxx1
|
//100000001 byte(0)=10000000 byte(1)=xxxxxxx1
|
||||||
(*sib1_MBMS)->nonMBSFN_SubframeConfig_r14->subframeAllocation_r14.buf[0] = 0x80<<0;
|
(*sib1_MBMS)->nonMBSFN_SubframeConfig_r14->subframeAllocation_r14.buf[0] = 0x8<<0;
|
||||||
(*sib1_MBMS)->nonMBSFN_SubframeConfig_r14->subframeAllocation_r14.buf[1] = 0x1<<7;
|
(*sib1_MBMS)->nonMBSFN_SubframeConfig_r14->subframeAllocation_r14.buf[1] = 0;
|
||||||
(*sib1_MBMS)->nonMBSFN_SubframeConfig_r14->subframeAllocation_r14.size = 2;
|
(*sib1_MBMS)->nonMBSFN_SubframeConfig_r14->subframeAllocation_r14.size = 2;
|
||||||
(*sib1_MBMS)->nonMBSFN_SubframeConfig_r14->subframeAllocation_r14.bits_unused = 7;
|
(*sib1_MBMS)->nonMBSFN_SubframeConfig_r14->subframeAllocation_r14.bits_unused = 7;
|
||||||
}
|
}
|
||||||
|
|
||||||
//if ( LOG_DEBUGFLAG(DEBUG_ASN1) ) {
|
//if ( LOG_DEBUGFLAG(DEBUG_ASN1) ) {
|
||||||
//xer_fprint(stdout, &asn_DEF_LTE_BCCH_DL_SCH_Message_MBMS, (void *)bcch_message);
|
xer_fprint(stdout, &asn_DEF_LTE_BCCH_DL_SCH_Message_MBMS, (void *)bcch_message);
|
||||||
//}
|
//}
|
||||||
enc_rval = uper_encode_to_buffer(&asn_DEF_LTE_BCCH_DL_SCH_Message_MBMS,
|
enc_rval = uper_encode_to_buffer(&asn_DEF_LTE_BCCH_DL_SCH_Message_MBMS,
|
||||||
NULL,
|
NULL,
|
||||||
|
|||||||
Reference in New Issue
Block a user