Exemplo n.º 1
0
//函数能够将bsr的大小和物理层上传的数据,增加到S_UEinfo的队列中。
void Add_sueinfo_Node(PHYtoMAC_Info *temp, int m_bsr, int type_bsr)
{
	struct S_UEinfo * p_ul_UEinfo;
	
    FIN(Add_sueinfo_Node());
    SV_PTR_GET(mac_sv);
    p_ul_UEinfo=(S_UEinfo *)fsm_mem_alloc(sizeof(S_UEinfo));
    while(p_ul_UEinfo==NULL)//申请内存失败
		p_ul_UEinfo=(S_UEinfo *)fsm_mem_alloc(sizeof(S_UEinfo));
  
	p_ul_UEinfo->datasizeof_bsr		=cal_bsrsize(m_bsr,type_bsr);
	p_ul_UEinfo->rnti				=temp->rnti;
	p_ul_UEinfo->cqi				=temp->cqi;
	p_ul_UEinfo->crc				=temp->crc;
	p_ul_UEinfo->harqindex			=temp->harqindex;
	//p_ul_UEinfo->pgtype				=temp->pgtype;
	p_ul_UEinfo->pmi				=temp->pmi;
	p_ul_UEinfo->sfn				=temp->sfn;
	p_ul_UEinfo->sr					=temp->sr;
	p_ul_UEinfo->subframeN			=temp->subframeN;
	p_ul_UEinfo->ta					=temp->ta;
	fsm_printf("###BSR_SIZE is:%d",p_ul_UEinfo->datasizeof_bsr);
	insert_ULschedQue(SV(ULschedQue_p), p_ul_UEinfo);
	//test_code Geng
	fsm_printf("\n###finsh inser node!\n");
	FOUT;
}
Exemplo n.º 2
0
/************************************************************************************************************************************************
**Function name:send_rrc_connection_release_msg_to_ue
**Desciption:use for testing ,generated rrcConnectionRelease info
**Input : 
**Output:generated rrcConnectionRelease info ,and stored in the global variable.
**Created by:zhou yang
**Created Date:2014/09/08
**--------------------------------------------------------------------------------------------------
**Modified by:zhou yang
**Modified Date:2014/10/07
**Descriptions:modified format
**--------------------------------------------------------------------------------------------------

*************************************************************************************************************************************************/
void send_rrc_connection_release_msg_to_ue()
{
	SV_PTR_GET(rrc_sv_enb_ue);
	char *msg=NULL;
	int msg_len;
	int message_type;
	struct RRCConnectionRelease rrcConnectionRelease ;
	struct DL_DCCH_Message      *dl_dcch_message;
	FIN(send_rrc_connection_release_msg_to_ue());
	fsm_printf("[rrc] [conn_release] send_rrc_connection_release_msg_to_ue().\n");
	dl_dcch_message=(struct DL_DCCH_Message  *)fsm_mem_alloc(sizeof(struct DL_DCCH_Message  ));
	rrcConnectionRelease.rrcTransactionIdentifier=1;
	rrcConnectionRelease.haveIdleModeMobilityControlInfo=true;
	rrcConnectionRelease.releaseCause=other;
	rrcConnectionRelease.idleModeMobilityControlInfo.have_t320=true;
	rrcConnectionRelease.idleModeMobilityControlInfo.t320_Value=min5;
	rrcConnectionRelease.idleModeMobilityControlInfo.haveCellReselectionPriorityInfo=false;
	dl_dcch_message->msg.rrcConnectionRelease=rrcConnectionRelease;
	dl_dcch_message->type=2;
	msg=(char*)dl_dcch_message;
	msg_len=sizeof(struct RRCConnectionRelease);
	message_type=4;
	//fsm_octets_print(msg, msg_len);
	packet_send_to_rlc(msg, msg_len, message_type, SV(crnti));
	//fsm_mem_free(rrcConnectionRelease);
	//rrcConnectionRelease=NULL;
	FOUT;
	
}
Exemplo n.º 3
0
/******************************************************************************
 ** Function name:DyS_dist_mac_net_device_stc_init
 ** Descriptions:initiate the field of struct net_device for register use in dys_dist_mac_module
 ** Input: 
 ** Output: 
 ** Returns: 
 ** Created by: 
 ** Created Date:2010/07/07 
 **-------------------------------------- --------------------
 ** Modified by:
 ** Modified Date: 
 ******************************************************************************/
void dev_init(struct net_device *dev)
{
   	fsm_priv* priv;
	int fsm_id;
   	ASSERT(dev);
    	dev->tx_queue_len = 128;   	/* the queue length */   
    	dev->mtu = MTU;		/* now we do not fragmentate the packet */
   	dev->header_ops = NULL;   	/* cancle eth_header function for not building ethnet mac header */ 
    	dev->addr_len = 0;
    	dev->hard_header_len = 0;
	dev->netdev_ops = &fsm_netdev_ops;
   	dev->watchdog_timeo = 1000;  				/* the time unit is jiffy */
   	dev->flags = IFF_BROADCAST | IFF_MULTICAST | IFF_NOARP;
    	dev->features |= 4;//NETIF_F_NO_CSUM;
    	priv = (fsm_priv*)netdev_priv(dev);
   	fsm_mem_set(priv,0,sizeof(fsm_priv));
	fsm_core_create(dev);
	priv->sv_ptr = fsm_mem_alloc(sizeof(SV_TYPE_NAME));
	fsm_mem_set(priv->sv_ptr, 0, sizeof(SV_TYPE_NAME));
/*-----------------------------------FSM creation---------------------------*/
	fsm_id = fsm_create_register("lte_mac_fsm", mac_main, priv->sv_ptr);
	fsm_mainport_bind(fsm_id);
/*--------------------------------------------------------------------------*/
    return;
}
Exemplo n.º 4
0
//此函数生成的是整个RAR下行数据包的DCI,由于RA-RNTI相同,多个UE可能仅RAPID不同;
//但是在目前最简系统中,我们随机选择一个正在进行随机接入的UE的下行资源用来发送RAR,
//就不会发生冲突(因为其还处于随机接入过程,没有下行数据发送,信道没有被占用)
int Do_RAR_DCI1C(struct S_RAinfo *ra_UEinfo)
{
	ENBMAC_TO_PHY_Rardci * p_rar_ici_dci;
	
    FIN(Do_RAR_DCI());
    p_rar_ici_dci=(ENBMAC_TO_PHY_Rardci *)fsm_mem_alloc(sizeof(ENBMAC_TO_PHY_Rardci));

	p_rar_ici_dci->m_rnti				=ra_UEinfo->ra_rnti;
	p_rar_ici_dci->m_tbsize				=Get_Format1C_TbSize(ra_UEinfo->cqi);//这个为什么是这样的,与RIV是对应的吗?
	p_rar_ici_dci->dci_format=4;//format 1C
	p_rar_ici_dci->cfi=Do_DlDci_cfi();
	
    p_rar_ici_dci->rar_dci.m_gap				=1;//还未找到出处,暂时使用Gap2(频域距离)
    //20141022由于为下行数据,下行用户是固定的,所以最简系统目前的RIV是与bitmap相对应的
    //由于在随机接入前,UE并未获取C-RNTI,所以为了让下行静态调度结果与随机分配相结合,宏定义任意5个中的一个RNTI,得到RIV值(5个值是相同的)
    p_rar_ici_dci->rar_dci.RIV					=Do_DL_RIV(ra_UEinfo->rapid);
	//此处还没有更改完全,RIV的资源分配应该和下行调度有关系
	p_rar_ici_dci->rar_dci.I_TBS				=Get_ITbSize(ra_UEinfo->cqi);
	p_rar_ici_dci->rar_dci.emptybits			=0;
	//Test code Geng 20141027
	fsm_printf("\n##After Test Do_RAR_DCI1C:");
	fsm_printf("\nSome important paramters are:");
	fsm_printf("  RA-RNTI:%d",p_rar_ici_dci->m_rnti);
	fsm_printf("  dci_format:%d",p_rar_ici_dci->dci_format);
	fsm_printf("  m_tbsize:%d",p_rar_ici_dci->m_tbsize);
	fsm_printf("  CFI:%d",p_rar_ici_dci->cfi);
	fsm_printf("  RIV:%d",p_rar_ici_dci->rar_dci.RIV);
	fsm_printf("  m_gap:%d",p_rar_ici_dci->rar_dci.m_gap);
	fsm_printf("  I_TBS:%d\n",p_rar_ici_dci->rar_dci.I_TBS);

	fsm_do_ioctrl(STRM_TO_SRIO, IOCCMD_MACTOPHY_RAR_DCI, (void *) p_rar_ici_dci, sizeof(ENBMAC_TO_PHY_Rardci));
	fsm_mem_free(p_rar_ici_dci);
	FRET(Cal_usable_ResOfBitmap(ra_UEinfo->cqi,ra_UEinfo->subframeN));  
}
Exemplo n.º 5
0
/******************************************************************************
 ** Function name:DyS_dist_mac_net_device_stc_init
 ** Descriptions:initiate the field of struct net_device for register use in dys_dist_mac_module
 ** Input: 
 ** Output: 
 ** Returns: 
 ** Created by: 
 ** Created Date:2010/07/07 
 **-------------------------------------- --------------------
 ** Modified by:
 ** Modified Date: 
 ******************************************************************************/
void dev_init(struct net_device *dev)
{
   	ipadp_priv* priv;
	int fsm_id;
   	ASSERT(dev);
    	dev->tx_queue_len = 128;   			/* the queue length */   
    	dev->mtu = 1500;					/* now we do not fragmentate the packet */
   	dev->header_ops = NULL;   			/* cancle eth_header function for not building ethnet mac header */ 
    	dev->addr_len = 0;
    	dev->hard_header_len = 0;
   /*	dev->open = fsm_dev_open;
    	dev->stop = fsm_dev_stop;
    	dev->set_config = fsm_dev_set_config; 
   	dev->hard_start_xmit = fsm_dev_tx;
    	dev->do_ioctl = fsm_dev_ioctl;
    	dev->get_stats = fsm_dev_get_stats;
   	dev->tx_timeout = fsm_dev_tx_timeout; */
	
	dev->netdev_ops = &ipadp_netdev_ops;
   	dev->watchdog_timeo = 1000;  				/* the time unit is jiffy */
   	dev->flags = IFF_BROADCAST | IFF_MULTICAST | IFF_NOARP;
	//dev->features |= NETIF_F_NO_CSUM;
	priv = (ipadp_priv*)netdev_priv(dev);
   	fsm_mem_set(priv,0,sizeof(ipadp_priv));
	fsm_core_create(dev);
	priv->ipadp_sv_ptr = fsm_mem_alloc(sizeof(ipadp_sv));
	fsm_mem_set(priv->ipadp_sv_ptr, 0, sizeof(ipadp_sv));
	fsm_id = fsm_create_register("ipadpfsm",ipadp_main,priv->ipadp_sv_ptr);
	fsm_mainport_bind(fsm_id);
    return;
}
Exemplo n.º 6
0
int Do_RAR_DCI0(struct S_RAinfo *ra_UEinfo)
{
	//UL_ICI_DCI * p_ul_ici_dci;//LHL 20141011
	ENBMAC_TO_PHY_ULscheduleDCI *p_ul_rar_dci;//LHL 20141011
    FIN(Do_RAR_DCI0());
    p_ul_rar_dci=(ENBMAC_TO_PHY_ULscheduleDCI *)fsm_mem_alloc(sizeof(ENBMAC_TO_PHY_ULscheduleDCI));

	p_ul_rar_dci->m_rnti=ra_UEinfo->ra_rnti;
	p_ul_rar_dci->m_tbsize=Do_Ul_TbSize(ra_UEinfo->cqi,cal_ul_abs(SIZE_MSG3,Get_Ul_PerPrb_Datasize(ra_UEinfo->cqi)));//LHL 20141011,需要和耿讨论
	p_ul_rar_dci->dci_format=0;
	
    p_ul_rar_dci->s_ul_dci.m_format		=Do_UlDci_format();//区分format0和format1A
    p_ul_rar_dci->s_ul_dci.m_hopping	=Do_UlDci_hopping();
    p_ul_rar_dci->s_ul_dci.RIV			=Do_ulgrant_rb_assignment(ra_UEinfo->subframeN, ra_UEinfo->cqi);//与ulgrant中的资源分配结果应该是保持一致的
    p_ul_rar_dci->s_ul_dci.m_ndi		=Do_UlDci_ndi();
    p_ul_rar_dci->s_ul_dci.m_mcs		=Do_UlDci_mcs(ra_UEinfo->cqi);
    p_ul_rar_dci->s_ul_dci.m_tpc		=Do_UlDci_tpc();
    p_ul_rar_dci->s_ul_dci.m_cqiRequest	=Do_UlDci_cqirequest();
    p_ul_rar_dci->s_ul_dci.Cyclic_shift	=Do_UlDci_Cyclic_shift();
    p_ul_rar_dci->s_ul_dci.m_dai		=Do_UlDci_dai();
    p_ul_rar_dci->s_ul_dci.padding		=0;
	p_ul_rar_dci->s_ul_dci.emptybits	=0;
	//Test code Geng 20141027
	fsm_printf("\n##After Test Do_RAR_DCI0:");
		fsm_printf("\nSome important paramters are:");
		fsm_printf("  RA-RNTI:%d",p_ul_rar_dci->m_rnti);
		fsm_printf("  dci_format:%d",p_ul_rar_dci->dci_format);
		fsm_printf("  m_tbsize:%d",p_ul_rar_dci->m_tbsize);
		fsm_printf("  m_mcs:%d",p_ul_rar_dci->s_ul_dci.m_mcs);
		fsm_printf("  RIV:%d",p_ul_rar_dci->s_ul_dci.RIV);
		fsm_printf("  m_dai:%d",p_ul_rar_dci->s_ul_dci.m_dai);
	

	
	fsm_do_ioctrl(STRM_TO_SRIO, IOCCMD_MACTOPHY_UL_DCI, (void *) p_ul_rar_dci, sizeof(ENBMAC_TO_PHY_ULscheduleDCI));
	fsm_mem_free(p_ul_rar_dci);
	FRET(Cal_usable_ResOfBitmap(ra_UEinfo->cqi,ra_UEinfo->subframeN));
    
}
Exemplo n.º 7
0
//上行调度指令:执行后返回剩余资源量大小
int Order_Ul_Sched(struct S_UEinfo *p_ul_UEinfo)
{
	//UL_ICI_DCI * p_ul_ici_dci;//LHL 20141011
	ENBMAC_TO_PHY_ULscheduleDCI *p_ul_ici_dci;//LHL 20141011
    FIN(Order_Ul_Sched());
    p_ul_ici_dci=(ENBMAC_TO_PHY_ULscheduleDCI *)fsm_mem_alloc(sizeof(ENBMAC_TO_PHY_ULscheduleDCI));

	p_ul_ici_dci->m_rnti=p_ul_UEinfo->rnti;
	p_ul_ici_dci->m_tbsize=Do_Ul_TbSize(p_ul_UEinfo->cqi,cal_ul_abs(p_ul_UEinfo->datasizeof_bsr,Get_Ul_PerPrb_Datasize(p_ul_UEinfo->cqi)));//LHL 20141011,需要和耿讨论
	p_ul_ici_dci->dci_format=0;
	
    p_ul_ici_dci->s_ul_dci.m_format		=Do_UlDci_format();
    p_ul_ici_dci->s_ul_dci.m_hopping	=Do_UlDci_hopping();
    p_ul_ici_dci->s_ul_dci.RIV			=Do_UlDci_RIV(p_ul_UEinfo->subframeN, p_ul_UEinfo->cqi, p_ul_UEinfo->datasizeof_bsr);
    p_ul_ici_dci->s_ul_dci.m_ndi		=Do_UlDci_ndi();
    p_ul_ici_dci->s_ul_dci.m_mcs		=Do_UlDci_mcs(p_ul_UEinfo->cqi);
    p_ul_ici_dci->s_ul_dci.m_tpc		=Do_UlDci_tpc();
    p_ul_ici_dci->s_ul_dci.m_cqiRequest	=Do_UlDci_cqirequest();
    p_ul_ici_dci->s_ul_dci.Cyclic_shift	=Do_UlDci_Cyclic_shift();
    p_ul_ici_dci->s_ul_dci.m_dai		=Do_UlDci_dai();
    p_ul_ici_dci->s_ul_dci.padding		=0;
	p_ul_ici_dci->s_ul_dci.emptybits	=0;
	//Test code Geng 20141027
	fsm_printf("\n##After Test Order_Ul_Sched:");
		fsm_printf("\nSome important paramters are:");
		fsm_printf("  RNTI:%u",p_ul_ici_dci->m_rnti);
		fsm_printf("  dci_format:%u",p_ul_ici_dci->dci_format);
		fsm_printf("  m_tbsize:%u",p_ul_ici_dci->m_tbsize);
		fsm_printf("  m_mcs:%u",p_ul_ici_dci->s_ul_dci.m_mcs);
		fsm_printf("  RIV:%u",p_ul_ici_dci->s_ul_dci.RIV);
		fsm_printf("  m_dai:%u",p_ul_ici_dci->s_ul_dci.m_dai);

	
	fsm_do_ioctrl(STRM_TO_SRIO, IOCCMD_MACTOPHY_UL_DCI, (void *) p_ul_ici_dci, sizeof(ENBMAC_TO_PHY_ULscheduleDCI));
	fsm_mem_free(p_ul_ici_dci);
	FRET(Cal_usable_ResOfBitmap(p_ul_UEinfo->cqi,p_ul_UEinfo->subframeN));
    
}
Exemplo n.º 8
0
/******************************************************************
**Function name:struct DL_CCCH_Message *gen_dl_ccch_send_rrcsetup
**Description:generate DL_CCCH_Message meaasge pointer ues for RRC connection process ,the meaasge include RRCConnectionSetup message
**Input:void
**Output:void
**Return:dl_ccch_rrcsetup
**Created by:Xu Shangfei
**Created date:2014/09/06
**-----------------------------------
**Modified by: Xu Shangfei
**Modified date:2014.10.9
****************************************************************/
struct DL_CCCH_Message *gen_dl_ccch_send_rrcsetup(void)

{
	//srb-ToAddModList
	struct T_PollRetransmit t_pollretransmit1={
		.t_PollRetransmittype = ms120,
	};
	struct PollPDU pollpdu1={
		.pollPDUtype = p8,
	};
	struct PollByte pollbyte1={
		.pollByte = kB1000,
	};
	struct UL_AM_RLC  ul_amrlc1={
		.t_PollRetransmit = t_pollretransmit1,
		.pollPDU = pollpdu1,
		.pollByte = pollbyte1,
		.maxRetxThreshold = t2,
	};
	struct T_Reordering t_reordering1={
		.t_Reordering = t_Reordering_ms20,
	};
	struct T_StatusProhibit t_statusprohibit1={
		.t_StatusProhibit = t_StatusProhibit_ms20,
	};
	struct DL_AM_RLC dl_am_rlc1={
		.t_Reordering = t_reordering1,
		.t_StatusProhibit = t_statusprohibit1,
	};

	struct RLC_Config_am rlc_config_am1={
		.ul_AM_RLC =  ul_amrlc1,
		.dl_AM_RLC =  dl_am_rlc1,
	};
	struct RlcConfig rlcconfig1={                                       //RLC configuration of SRB and DRB
		.type = 1,
		.rlcConfigType.am = rlc_config_am1,
	};

	struct Ul_SpecificParameters ul_specificparameters1={
		.priority = 1,       //INTEGER (1..16)
		.prioritisedBitRate = kBps32,
		.bucketSizeDuration = bucketSizeDuration_ms100,
		.logicalChannelGroup = 1,	//INTEGER (0..3)
	};
	struct LogicalChannelConfig logicalchannelconfig1 = {
		.haveUl_SpecificParameters = true,
		.ul_SpecificParameters = ul_specificparameters1,
	};
	struct SrbToAddMod srbtoaddmod1={
		.srbIdentity = 1,       //INTEGER (1..2)
		.haveRlcConfig = true,
		.rlcConfig =  rlcconfig1,    //rlcConfig==null means use default config
		.haveLogicalChannelConfig = true,
		.logicalChannelConfig = logicalchannelconfig1,   //nullmeans use default config
	};
	struct SrbToAddMod srbtoaddmod2={
		.srbIdentity = 2,       //INTEGER (1..2)
		.haveRlcConfig = true,
		.rlcConfig =  rlcconfig1,    //rlcConfig==nullmeans use default config
		.haveLogicalChannelConfig = true,
		.logicalChannelConfig = logicalchannelconfig1,   //nullmeans use default config
	};

	/**srb-ToAddModList**/
	struct SrbToAddModList srb_toaddmodlist1={
		.num = 2,     //number of SrbToAddMod in SrbToAddModList
		.srbList[0] = srbtoaddmod1,
		.srbList[1] = srbtoaddmod2,
	};

	struct DrbToAddMod drb_toaddmod1={
		.eps_BearerIdentity = 1,//INTEGER (0..15)
		.drb_Identity = 1,
		.haveRlcConfig = true,
		.rlcConfig = rlcconfig1,
		.logicalChannelIdentity = 7,//INTEGER (3..10)
		.haveLogicalChannelConfig = true,
		.logicalChannelConfig = logicalchannelconfig1,
	};
	/**DrbToAddModList**/
	struct DrbToAddModList drb_toaddmodlist1={
		.num = 1,
		.drbList[0] = drb_toaddmod1,
	};
	/**DrbToReleaseList**/
	struct DrbToReleaseList drb_toreleaseliast={
		.num = 1,
		.drbToRelease[0] = 4,
	};
	/**mac-MainConfig**/
	struct Ul_SCH_Config ul_schconfig1={
		.maxHARQ_Tx = maxHARQ_Tx_n2,
		.periodicBSR_Timer = periodicBSR_Timer_sf40,
		.retxBSR_Timer = retxBSR_Timer_sf640,
		.ttiBundling = true,
	};
	struct ShortDRX shortdrx1={
		.shortDRX_Cycle = shortDRX_Cycle_sf64 ,
		.drxShortCycleTimer = 4,   //INTEGER (1..16)
	};
	struct DRX_Config_setup drx_config_setup1={
		.onDurationTimer =  psf60,
		.drx_InactivityTimer = drx_InactivityTimer_psf100,
		.drx_RetransmissionTimer = drx_RetransmissionTimer_psf8,
		.type = 3,    //1:sf10......
		.longDRX_CycleStartOffset.sf32 = 30,
		.haveShortDRX = true,
		.shortDRX = shortdrx1,
	};
	struct DRX_Config drx_config1={
        .type = 2,    //1:release, 2:setup
		.choice.setup = drx_config_setup1,
	};

	struct Phr_Config_Setup phr_configsetup1={

		.periodicPHR_Timer = periodicPHR_Timer_sf100,
		.prohibitPHR_Timer = prohibitPHR_Timer_sf100,
		.dl_PathlossChange = dl_PathlossChange_dB1,
	};
	struct TimeAlignmentTimer time_alignmenttimer1={
		.timeAlignmentTimertype = timeAlignmentTimertype_sf1920,
	};
	struct MAC_MainConfig mac_mainconfig1={                                     //descripe Macmainconfig
		.haveUl_SCH_Config = true,
		.ul_SCH_Config = ul_schconfig1,
		.haveDRX_Config = true,
		.drx_Config = drx_config1,
		.timeAlignmentTimerDedicated = time_alignmenttimer1,
		.type = 2,   //1:release, 2:setup
		.phr_Config.setup = phr_configsetup1,
	};

	/****SPS-Config****/
	struct C_RNTI c_rnti1={     //bitstring datetype
		.c_rnti = 4,
	};
	struct N1_PUCCH_AN_PersistentList n1_pucch_an_persistentlist1={          //parameters not understand need to refer to 36.213
		.num[0] = 1,
		.num[1] = 2,
		.num[2] = 3,
		.num[3] = 4,
	};
	struct SPS_ConfigDL_setup sps_configdl_setup1={
		.semiPersistSchedIntervalDL = semiPersistSchedIntervalDL_sf40,
		.numberOfConfSPS_Processes = 4,   //INTEGER (1..8)
		.n1_PUCCH_AN_PersistentList = n1_pucch_an_persistentlist1,
	};
	struct SPS_ConfigDL sps_configdl1={
		.type = 2,    //1:release, 2:setup
		.choice.setup = sps_configdl_setup1,
	};

	struct P0_Persistent p0_persistent1={
		.p0_NominalPUSCH_Persistent = 1,//INTEGER (-126..24)
		.p0_UE_PUSCH_Persistent = 1,    //INTEGER (-8..7)
	};

	struct SPS_ConfigUL_setup sps_config_setup1={
		.semiPersistSchedIntervalUL = semiPersistSchedIntervalUL_sf64,
		.implicitReleaseAfter = e2,
		.haveP0_Persistent = true,
		.p0_Persistent = p0_persistent1,
		.twoIntervalsConfig = true,
	};
	struct SPS_ConfigUL sps_configul1={
		.type = 2,   //1:release, 2:setup
		.choice.setup = sps_config_setup1,
	};
	struct SPS_Config sps_config1={                                             //descripe SPS_Config
		.haveC_RNTI = true,
		.semiPersistSchedC_RNTI = c_rnti1,
		.haveSPS_ConfigDL = true,
		.sps_ConfigDL = sps_configdl1,
		.haveSPS_ConfigUL = true,
		.sps_ConfigUL = sps_configul1,
	};

	/****PhysicalConfigDedicated****/
	struct PDSCH_ConfigDedicated pdsch_configdedicated1={                   //descripe PDSCH_ConfigDedicated
		.p_a = p_a_dB1,
	};
	struct AckNackRepetition_setup acknacrepetition_setup1={
		.repetitionFactor = repetitionFactor_n2,
		.n1PUCCH_AN_Rep = 4,
	};

	struct PUCCH_ConfigDedicated pucch_configdedicate1={                         //descripe PUCCH_ConfigDedicated
		.type = 2,   //1:release, 2:setup, 3:tddAckNackFeedbackMode
		.ackNackRepetition.setup = acknacrepetition_setup1,
	};
	struct PUSCH_ConfigDedicated pusch_configdicated1={                           //descripe PUSCH_ConfigDedicated
		.betaOffset_ACK_Index = 2, //INTEGER (0..15)
		.betaOffset_RI_Index = 2,   //INTEGER (0..15)
		.betaOffset_CQI_Index = 2, //INTEGER (0..15)
	};
	struct FilterCoefficient filtercoefficient1={
		.filterCoefficienttype = fc6,
	};

	struct UplinkPowerControlDedicated uplinkpowercontroldedicated1={               //descripe UplinkPowerControlDedicated
		.p0_UE_PUSCH = 2,          //INTEGER (-8..7)
		.deltaMCS_Enabled = en1,    //en1 对应值1.25
		.accumulationEnabled = true,
		.p0_uE_PUCCH = 2,         //INTEGER (-8..7)
		.pSRS_Offset = 2,          //INTEGER (0..15)
		.filterCoefficient = filtercoefficient1,
	};
	struct TPC_PDCCH_Config_setup tpc_pdcch_config_setup1={
		.indexOfFormat3 = 2,       //INTEGER (1..15)
		.indexOfFormat3A = 2,       //INTEGER (1..31)
	};
	struct TPC_PDCCH_Config tpc_pdcch_config1={
		.type = 2,    //1:release, 2:setup
		.choice.setup = tpc_pdcch_config_setup1,
	};
	struct SubbandCQI subbandcqi1={
		.k = 2,                      //INTEGER (1..4)
	};
	struct CQI_ReportPeriodic_setup cqi_reportperioid1={
		.cqi_PUCCH_ResourceIndex = 100,//INTEGER (0.. 1185)
		.cqi_pmi_ConfigIndex = 100,    //INTEGER (0..1023)
		.type = 3,    //1:widebandCQI......
		.cqi_FormatIndicatorPeriodic.ri_ConfigIndex = 100,
	};
	struct CQI_ReportPeriodic cqi_reportperodic1={
		.type = 2,   //1:release, 2:setup, 3:ri_ConfigIndex, 4:simultaneousAckNackAndCQI
		.choice.setup = cqi_reportperioid1,
	};
	struct CQI_ReportConfig cqi_reportconfig1={                                    //descripe CQI_ReportConfig
		.cqi_ReportModeAperiodic = rm20,
		.nomPDSCH_RS_EPRE_Offset = 2, //INTEGER (-1..6)
		.haveCQI_ReportPeriodic = true,
		.cqi_ReportPeriodic = cqi_reportperodic1,
	};
	struct SoundingRS_UL_ConfigDedicated_setup soundrs_ul_configdedicate_setup1={
		.srs_Bandwidth = srs_Bandwidth_bw0,
		.srs_HoppingBandwidth = hbw0,
		.FreqDomainPosition = 2,      //INTEGER (0..23)
		.duration = true,
		.srs_ConfigIndex = 2,        //INTEGER (0..1023)
		.transmissionComb = 1,        //INTEGER (0..1)
		.cyclicShift = cs1,
	};
	struct SoundingRS_UL_ConfigDedicated soundrs_ul_configdedicated1={              //descripe SoundingRS_UL_ConfigDedicated
		.type = 2,    //1:release, 2:setup
		.choice.setup = soundrs_ul_configdedicate_setup1,
	};
	struct SchedulingRequestConfig_setup schedulingrequestconfig_setup1={
		.sr_PUCCH_ResourceIndex = 100,    //INTEGER (0..2047)
		.sr_ConfigIndex = 100,           //INTEGER (0..157)
		.dsr_TransMax  = dsr_TransMax_n4,
	};
	struct SchedulingRequestConfig schedulingrequestconfig1={                       //descripe  SchedulingRequestConfig
		.type = 2,    //1:release, 2:setup
		.choice.setup = schedulingrequestconfig_setup1,
	};
	struct AntennaInformationDedicated antennainformationdedicated1={
		.transmissionMode = tm3,
		.type_codebookSubsetRestriction = 2,    //1:n2TxAntenna_tm3......
		.codebookSubsetRestriction.n4TxAntenna_tm3 = 2,
		.type_ue_TransmitAntennaSelection = 2,
		.ue_TransmitAntennaSelection.setup = openLoop,
	};

	struct PhysicalConfigDedicated physicalconfigdedicateed1={
		.havePDSCH_ConfigDedicated = true,
		.pdsch_ConfigDedicated = pdsch_configdedicated1,
		.havePUCCH_ConfigDedicated = true,
		.pucch_ConfigDedicated = pucch_configdedicate1,
		.havePUSCH_ConfigDedicated =true,
		.pusch_ConfigDedicated =  pusch_configdicated1,
		.haveUplinkPowerControlDedicated =true,
		.uplinkPowerControlDedicated = uplinkpowercontroldedicated1,
		.haveTPC_PDCCH_Config =true,
		.tpc_PDCCH_ConfigPUCCH = tpc_pdcch_config1,
		.tpc_PDCCH_ConfigPUSCH = tpc_pdcch_config1,
		.haveCQI_ReportConfig = true,
		.cqi_ReportConfig = cqi_reportconfig1,
		.haveSoundingRS_UL_ConfigDedicated =true,
		.soundingRS_UL_ConfigDedicated = soundrs_ul_configdedicated1,
		.haveAntennaInformationDedicated = true,
		.antennaInfo = antennainformationdedicated1,
		.haveSchedulingRequestConfig = true,
		.schedulingRequestConfig = schedulingrequestconfig1,
	};


	/****RadioResourceConfigDedicated****/
	struct RadioResourceConfigDedicated set_radioresourcemsg={
		.haveSrbToAddModList = true,
		.srbToAddModList = srb_toaddmodlist1,
		.haveDrbToAddModList = false,
		.drbToAddModList = drb_toaddmodlist1,
		.haveDrbToReleaseList = true,
		.drbToReleaseList = drb_toreleaseliast,
		.haveMAC_MainConfig = true,
		.mac_MainConfig = mac_mainconfig1,
		.haveSPS_Config = true,
		.sps_Config = sps_config1,
		.havePhysicalConfigDedicated = true,
		.physicalConfigDedicated = physicalconfigdedicateed1,
	};

	struct RRCConnectionSetup rrcConnectionSetupmsg1 ={
		.rrcTransactionIdentifier = 2,	//random value
		.radioResourceConfigDedicated = set_radioresourcemsg,
	};


	struct DL_CCCH_Message *dl_ccch_rrcsetup = fsm_mem_alloc(sizeof(struct DL_CCCH_Message));
	dl_ccch_rrcsetup->type = 4;
	dl_ccch_rrcsetup->msg.rrcConnectionSetup = rrcConnectionSetupmsg1;
//	fsm_mem_cpy(&(dl_ccch_rrcsetup->msg.rrcConnectionSetup), &rrcConnectionSetupmsg1, sizeof(struct RRCConnectionSetup));

	return dl_ccch_rrcsetup;
}

/******************************************************************

**Filename:impl_rrc_conn_establish.c

**Copyright:uestc

**Description:RRC reject data struct,use for rrcreject msg

**V1.0,2014/10/16,Xu Shangfei written

**-----------------------------------

**modification history:

**Modified by: Xu Shangfei

**Modified date:2014.10.9

**Description:modified note

****************************************************************/
struct DL_CCCH_Message *gen_dl_ccch_send_rrcreject(void)
{
	struct RRCConnectionReject rrcrejct = {
			.waitTime = 4,
	};
	struct DL_CCCH_Message *dl_ccch_rrcrejct = fsm_mem_alloc(sizeof(struct DL_CCCH_Message));
	dl_ccch_rrcrejct->type = 3;
	fsm_mem_cpy(&(dl_ccch_rrcrejct->msg.rrcConnectionSetup), &rrcrejct, sizeof(struct RRCConnectionReject));

	return dl_ccch_rrcrejct;
}


/******************************************************************
**Function name:void send_RRCConnectionSetup
**Description:struct DL_CCCH_Message *dlccchRRCremsg,use packet_send_to_pdcp
			  send RRCconsetup msg to UE
**Input:struct DL_CCCH_Message *dlccchRRCremsg
**Output:void
**Return:void
**Created by:Xu Shangfei
**Created date:2014.10.9
**-----------------------------------
**Modified by: Xu Shangfei
**Modified date:
****************************************************************/
void send_RRCConnectionSetup(struct DL_CCCH_Message *dlccchRRCremsg)
{
	SV_PTR_GET(rrc_sv_enb_ue);
    FIN(send_RRCConnectionSetup());
    char *msg = (char *)(&(*dlccchRRCremsg));
    int msg_len = sizeof(struct DL_CCCH_Message);
    int message_type = 3;
    packet_send_to_rlc(msg, msg_len, message_type, SV(crnti));
    fsm_printf("[rrc] [conn_establish] <-- message RRCConnectionSetup sends successfully.\n");
    FOUT;
}

/******************************************************************
**Function name:void send_RRCConnectionRejct

**Description:struct DL_CCCH_Message *dlccchRRCremsg,use packet_send_to_pdcp
			  send RRCconsetup msg to UE
**Input:struct DL_CCCH_Message *dlccchRRCremsg

**Output:void
**Return:void
**Created by:Xu Shangfei

**Created date:2014.10.9
**-----------------------------------
**Modified by: Xu Shangfei

**Modified date:
****************************************************************/
void send_RRCConnectionRejct(struct DL_CCCH_Message *dlccchRRCremsg)
{
    FIN(send_RRCConnectionSetup());
	SV_PTR_GET(rrc_sv_enb_ue);
    char *msg = (char *)(&(*dlccchRRCremsg));
    int msg_len = sizeof(struct DL_CCCH_Message);
    int message_type = 3;
    packet_send_to_rlc(msg, msg_len, message_type, SV(crnti));
    fsm_printf("[rrc] [conn_establish] <-- message RRCConnectionRejct sends successfully.\n");
    FOUT;
}

//ues for test in-->static void rcv_rrc_conn_setup_complete(void)
struct UL_DCCH_Message *gen_ul_dcch_rrccomplete(void)
{
	struct PLMN_Identity plmn_identity1={
		.MCC[0] = 2,
		.MNC[0] = 2,
	};
	struct RegisteredMME registeredmme1={
		.plmn_Identity = plmn_identity1,
		.mmegi = 1,
		.mmec= 1,
	};
	struct RRCConnectionSetupComplete rrcconnectionsetup_complete1={
		.rrcTransactionIdentifier = 1,
		.selectedPLMN_Identity = 1,    //INTEGER (1..6),
		.registeredMME = registeredmme1,
		//struct DedicatedInfoNAS dedicatedInfoNAS;       //协议里有,暂时不用
	};

	struct UL_DCCH_Message *ul_dcchmsg1 = fsm_mem_alloc(sizeof(struct UL_DCCH_Message));
	ul_dcchmsg1->type = 4;
	ul_dcchmsg1->msg.rrcConnectionSetupComplete = rrcconnectionsetup_complete1;
	fsm_printf("[rrc] [conn_establish] <--send rrcsetupcompletemsg message !\n");
	return ul_dcchmsg1;
}