--- /dev/null
+/******************************************************************************
+###############################################################################
+# Copyright (c) [2017-2020] [ICT/CAS] #
+# Licensed under the ORAN Software License v1.0 (License) #
+###############################################################################
+******************************************************************************/
+#ifndef _GNB_COMMON_H_
+#define _GNB_COMMON_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#include "vos_common.h"
+#include "vos_sockMgr.h"
+#include <netinet/in.h>
+#include "gnbServiceType.h"
+#include "vos_lib.h"
+
+
+extern struct timeval procStart, procEnd;
+
+#define MARK_START_TIME() do{\
+ gettimeofday(&procStart,0);\
+}while(0)
+
+#define CU_CALC_ELAPSED_TIME(S) do{\
+ INT32 diff; \
+ gettimeofday(&procEnd,0);\
+ diff = ( procEnd.tv_sec*1000000L + procEnd.tv_usec ) \
+ - ( procStart.tv_sec*1000000L + procStart.tv_usec ); \
+ vos_info_print("Msg %s spend time = %ld us\n",S ,diff);\
+}while(0)
+
+
+#define GNB_OK 0
+#define GNB_ERROR 1
+
+#define TRUE 1
+#define FALSE 0
+
+/***********************************************************************************************************
+************************************************define type in DU ****************************************
+************************************************************************************************************/
+
+
+/***********************************************************************************************************
+************************************************** macro define ******************************************
+************************************************************************************************************/
+
+
+/** @brief max logical channel id */
+#define MAX_LCH_ID (MAX_LCH_NUM - 1)
+
+#define MAX_LEN_AMF_NAME 150
+#define MAX_GNB_DU_NAME 150
+#define MAX_GNB_CU_NAME 150
+#define MAX_GNB_DU_NUM 2
+
+
+#define MAX_TASK_NUM 60
+#define MAX_TASK_NAME_LEN 256
+#define MAX_QUEUE_NUM 20
+#define MAX_QUEUE_MSG_NUM 256
+#define MAX_IP_ADDR_STRING_LEN 256
+#define MAX_IP_ADDR_NUM COMM_SCTP_ADDR_MAX
+
+#define MAX_LOCK_NUM 20
+#define MAX_SEMA_NUM 20
+#define MAX_TIMER_NUM 100
+
+#define MAX_SI_NUM 32
+#define MAX_SI_MESSAGE 32
+#define MAX_SIB 32
+#define MAX_SIB_LEN 300
+
+#define RRC_SI_DATA 4
+#define MAX_TX_PDU_NUM 256//1024
+#define MAX_MULTI_BANDS 8
+#define MAX_NR_NS_PMAX 8
+#define MAX_ACCESS_CAT 64
+#define MAX_BARRING_SET 8
+#define MAX_PLMN 12
+#define MAXCELLINTRA 16 //Maximum number of intra-Freq cells listed in SIB3
+#define MAXCELLBLACK 16 //Maximum number of NR blacklisted cell ranges in SIB3, SIB4
+/** @brief max cell bands num */
+#define MAX_NR_CELL_BANDS 16//32
+/** @brief F1 max cell num */
+#define F1_MAX_CELL_NUM MAX_CELL_NUM
+
+
+#define COMMON_LOG_LEVEL (0)
+#define MAJOR_LOG_LEVEL (1)
+
+/*module msg marco define*/
+#define MSG_HEAD_LEN (20)
+#define MSG_TOTAL_LEN (8096)
+#define MSG_MAX_BUFFER_LEN (MSG_TOTAL_LEN-MSG_HEAD_LEN)
+
+#define MAX_MODULE_NAME_LEN (256)
+
+/*MAX IPV6 ADDR LEN*/
+#define MAX_IPV6ADDR_LEN (16)
+
+#define MAX_ENTITY_MANAGE_MSG_NUM 100
+#define CHECK_FUNCTION_RET(ret) \
+ do { \
+ if (VOS_OK != (ret)) { \
+ return VOS_ERROR; \
+ } \
+ } while(0)
+
+extern UINT32 f1apGetModuleId();
+
+#define DUCP_MODULE_ID ducpGetModuleId()
+#define F1AP_MODULE_ID f1apGetModuleId()
+
+
+
+#define MAX_SCS 5
+#define MAX_LENGTH_NGAP_RAN_NAME 150
+
+
+
+/***********************************************************************************************************
+********************************************* enum define*************************************************
+************************************************************************************************************/
+
+/* IP Type */
+typedef enum ipAddrType
+{
+ IPv4,
+ IPv6,
+ IPTypeMax,
+}IpAddrType_e;
+
+typedef enum
+{
+ SOCKET_SCTP,
+ SOCKET_UDP,
+ SOCKET_TCP,
+ SOCKET_UNIX_UDP,
+ SOCKET_UNIX_TCP,
+}SOCKET_TYPE;
+
+/** log level */
+typedef enum gnbLogLevel
+{
+ LOG_CRIT = 1, ///< critical conditions
+ LOG_ERR, ///< error conditions
+ LOG_WARNING, ///< warning conditions
+ LOG_INFO, ///< informational
+ LOG_DEBUG, ///< debug info
+} gnbLogLevel_e;
+
+
+/***********************************************************************************************************
+****************************************************define typ *********************************************
+************************************************************************************************************/
+typedef VOID (*FUNCPTR)(void *args);
+typedef INT32 (*VOS_TASK_INIT_FUNCPTR)();
+typedef VOID (*VOS_TASK_FUNCPTR)(ULONG ulArg1, ULONG ulArg2,ULONG ulArg3, ULONG ulArg4,ULONG ulArg5, ULONG ulArg6,ULONG ulArg7, ULONG ulArg8,ULONG ulArg9, ULONG ulArg10);
+
+typedef INT32 (*USER_TASK_INIT_FUNCPTR)();
+typedef LONG (*USER_TASK_FUNCPTR)(ULONG aulMsg[VOS_QUEUE_MSG_SIZE]);
+
+
+typedef INT32 (*HOST_TASK_FUNCPTR)(ULONG aulMsg[VOS_QUEUE_MSG_SIZE]);
+typedef INT32 (*HOST_TASK_INIT_FUNCPTR)(void);
+
+
+/***********************************************************************************************************
+************************************************task info strcut *******************************************
+************************************************************************************************************/
+
+/* IPV4 Address */
+typedef struct
+{
+ UINT16 port;
+ UINT32 address;
+} Ipv4Addr_t;
+
+/* IPV6 Address */
+typedef struct cmInetIpv6Addr
+{
+ UINT16 port;
+ UINT8 IpAddr6[MAX_IPV6ADDR_LEN];
+} Ipv6Addr_t;
+
+
+/* IP Address */
+typedef struct ipAddress
+{
+ IpAddrType_e ipType; /* type of transport address */
+ union
+ {
+ Ipv4Addr_t ipv4Addr; /* IPv4 transport address */
+ Ipv6Addr_t ipv6Addr; /* IPv6 transport address */
+ }u;
+} IpAddress_t;
+
+/* Ran name, a string */
+typedef struct ngapRanName
+{
+ char ranName[MAX_LENGTH_NGAP_RAN_NAME];
+}NgapRanName_t;
+
+/* user task info */
+typedef struct
+{
+ UINT32 userTaskId;
+ UINT32 hostTaskId;
+ UINT8 userTaskName[MAX_TASK_NAME_LEN];
+ UINT32 userTaskPriority;
+ FUNCPTR userTaskEntry;
+} UserTaskInfo_t;
+
+/* Host task info */
+typedef struct
+{
+ UINT32 hostTaskId;
+ UINT32 procId;
+ UINT8 hostTaskName[MAX_TASK_NAME_LEN];
+ UINT32 hostTaskpriority;
+ FUNCPTR hostTaskEntry;
+} HostTaskInfo_t;
+
+/* user task table info */
+typedef struct
+{
+ UINT32 userTaskId;
+ UINT32 hostTaskId;
+ CHAR userTaskName[MAX_TASK_NAME_LEN];/*线程名称*/
+ ULONG userModuleID;
+ UINT32 userTaskPriority;/*优先级*/
+ USER_TASK_INIT_FUNCPTR userTaskInitPtr;
+ USER_TASK_FUNCPTR userTaskEntry;/*线程执行函数*/
+} UserTaskTable_t;
+
+/* Host task table info */
+
+typedef struct
+{
+ UINT32 hostTaskId;
+ CHAR hostTaskName[MAX_TASK_NAME_LEN];/*线程名称*/
+ UINT32 priority;/*优先级*/
+ LONG cpuSize;
+ LONG cpus[8];
+} HostTaskTable_t;
+
+/* vos task info */
+typedef struct
+{
+ UINT8 vosTaskId;
+ CHAR vosTaskName[MAX_TASK_NAME_LEN];/*线程名称*/
+ CHAR vosMoudleName[MAX_MODULE_NAME_LEN];
+ UINT8 vosTaskpriority;/*优先级*/
+ VOS_TASK_INIT_FUNCPTR vosTaskInitPtr;
+ VOS_TASK_FUNCPTR vosTaskEntry;/*线程执行函数*/
+} VosTaskTable_t;
+
+typedef struct
+{
+ UINT8 vosTaskId;
+ vos_module_t vosModule;
+ VOS_HANDLE taskHandle;
+}MoudleInfo_t;
+
+typedef struct
+{
+ UCHAR ipAddrStr[MAX_IP_ADDR_STRING_LEN];
+ UINT32 port;
+}IpAddrStr_t;
+
+typedef struct
+{
+ LONG Count;//最大个数为COMM_SCTP_ADDR_MAX
+ IpAddrStr_t ipList[MAX_IP_ADDR_NUM];
+}SockAddrStr_t;
+
+typedef struct
+{
+ UINT32 vosTaskId;
+ SockAddrStr_t ipAddrStr;
+
+ SockAddrStr_t clientAddrInfo;
+}TaskSockAddrInfo_t;
+
+typedef struct
+{
+ UINT32 vosTaskId;
+ CHAR vosTaskName[MAX_TASK_NAME_LEN];
+ SockAddrStr_t sockAddrInfo;
+ SockAddrStr_t clientSockAddrInfo;
+ UINT32 sockType;
+ vos_sock_para_t comPara;
+ vos_sock_info_t comOpInfo;
+}CommPara_t;
+
+typedef struct
+{
+ UINT8 isUsed;
+ vos_sock_info_t opInfo;
+}E1UpClientSockInfo_t;
+
+
+
+
+typedef struct
+{
+
+}UdpSocketMsg_t;
+typedef struct
+{
+
+}TcpSocketMsg_t;
+
+typedef struct
+{
+ UINT32 connectId;/*SOCKET INDEX*/
+ UINT32 fd;/*用于收消息的fd*/
+ vos_sockaddr_t fromAddr;/*用于消息来源地址*/
+ struct sctp_sndrcvinfo sri;/*收到的SCTP消息信息*/
+ LONG msg_flags;/*链路信息*/
+ UINT32 assocState;/*链路状态*/
+
+}SctpSocketMsg_t;
+
+typedef struct
+{
+
+}UnixUdpSocketMsg_t;
+
+typedef struct
+{
+
+}UnixTcpSocketMsg_t;
+
+/*
+SOCKET msg
+*/
+typedef struct
+{
+ UINT32 socketMsgType;
+ union
+ {
+ UdpSocketMsg_t udpMsg;
+ TcpSocketMsg_t tcpMsg;
+ SctpSocketMsg_t sctpMsg;
+ UnixUdpSocketMsg_t unixUdpSocketMsg;
+ UnixTcpSocketMsg_t unixTcpSocketMsg;
+ }u;
+}SocketMsg_t;
+
+typedef struct
+{
+ UINT32 associationId;
+ vos_sock_info_t op;/*发送时索引到该字段*/
+ ULONG usedFlag;
+}SockInfoMng_t;
+
+
+
+/*
+1.非SOCKET msg 格式化为接口数据
+2.SOCKET msg格式化为:SocketMsg_t数据+接口数据
+*/
+typedef struct
+{
+ UINT32 srcModuleId;
+ UINT32 dstModuleId;
+ UINT32 msgSap;
+ UINT32 msgCode;
+ UINT32 msgLen;
+ UINT8 msgBuf[MSG_MAX_BUFFER_LEN];
+} ModuleMsg_t;
+
+
+
+/** 采用非VOS通信方式的模块需要提供的额外参数 */
+typedef struct
+{
+ module_comm_type_t type; ///< 通信方式
+ union{
+ vos_sockaddr_t addr; ///< socket 通信
+ sctp_para_t sctp; ///< sctp 通信
+ }u;
+ receive_handler recv_handle; ///< 接收函数
+ LONG maxClient; ///< tcp server 允许的连接数
+ BOOL soloMode; ///< 如果为真,则单独创建接收线程;如果为假,则由 VOS socket代理任务负责接收
+ LONG fdIdx; ///< 无需关心
+}CommunicatePara_t;
+
+
+/***********************************************************************************************************
+*********************************************protocol info strcut ******************************************
+************************************************************************************************************/
+
+/*********************************** Mib_t ***************************************/
+typedef enum mibSubCarrierSpacingCommon
+{
+ MIB_subCarrierSpacingCommon_scs15or60 = 0,
+ MIB_subCarrierSpacingCommon_scs30or120 = 1
+} MibSubCarrierSpacingCommon_e;
+
+typedef enum mibDmrsTypeaPosition
+{
+ MIB_dmrs_TypeA_Position_pos2 = 0,
+ MIB_dmrs_TypeA_Position_pos3 = 1
+} MibDmrsTypeaPosition_e;
+
+typedef enum mibCellBarred
+{
+ MIB_cellBarred_barred = 0,
+ MIB_cellBarred_notBarred = 1
+} MibCellBarred_e;
+
+typedef enum mibIntraFreqReselection
+{
+ MIB_intraFreqReselection_allowed = 0,
+ MIB_intraFreqReselection_notAllowed = 1
+} MibIntraFreqReselection_e;
+
+typedef enum
+{
+ mibCellBarredBarred = 0,
+ mibCellBarredNotBarred = 1
+} CellBarred_e;
+
+typedef enum
+{
+ mibIntraFreqReselectionAllowed = 0,
+ mibIntraFreqReselectionNotAllowed = 1
+} IntraFreqReselection_e;
+
+typedef struct PDCCHConfigSIB1
+{
+ UINT8 controlResourceSetZero;
+ UINT8 searchSpaceZero;
+
+}PDCCHConfigSIB1_t;
+
+typedef struct mib
+{
+ UINT8 systemFrameNumber;
+ MibSubCarrierSpacingCommon_e subCarrierSpacingCommon;
+ UINT8 ssbSubcarrierOffset;
+ MibDmrsTypeaPosition_e dmrsTypeaPosition;
+ UINT8 searchSpaceZero;
+ UINT8 controlResourceSetZero;
+ CellBarred_e cellBarred;
+ IntraFreqReselection_e intraFreqReselection;
+
+}Mib_t;
+
+typedef struct macCellCfgPara_s
+{
+ UINT32 nSSBAbsFre;//
+ UINT16 PCI;//
+}macCellCfgPara_t;
+
+/*********************************** SIB1_t ***************************************/
+typedef enum connEstFailureControlCount
+{
+ NR_ConnEstFailureControl__connEstFailCount_n1 = 0,
+ NR_ConnEstFailureControl__connEstFailCount_n2 = 1,
+ NR_ConnEstFailureControl__connEstFailCount_n3 = 2,
+ NR_ConnEstFailureControl__connEstFailCount_n4 = 3
+} ConnEstFailureControlCount_e;
+
+typedef enum connEstFailureControlOffsetValidity
+{
+ NR_ConnEstFailureControl__connEstFailOffsetValidity_s30 = 0,
+ NR_ConnEstFailureControl__connEstFailOffsetValidity_s60 = 1,
+ NR_ConnEstFailureControl__connEstFailOffsetValidity_s120 = 2,
+ NR_ConnEstFailureControl__connEstFailOffsetValidity_s240 = 3,
+ NR_ConnEstFailureControl__connEstFailOffsetValidity_s300 = 4,
+ NR_ConnEstFailureControl__connEstFailOffsetValidity_s420 = 5,
+ NR_ConnEstFailureControl__connEstFailOffsetValidity_s600 = 6,
+ NR_ConnEstFailureControl__connEstFailOffsetValidity_s900 = 7
+} ConnEstFailureControlOffsetValidity_e;
+
+#define CONN_EST_FAILOFFSET (1<<0)
+typedef struct connEstFailCtrl
+{
+ UINT16 bitMask;
+ ConnEstFailureControlCount_e connEstFailCount;
+ ConnEstFailureControlOffsetValidity_e connEstFailOffsetValidity;
+ UINT8 connEstFailOffset; /*option*/
+} ConnEstFailCtrl_t;
+
+typedef enum timerT300
+{
+ NR_UE_TimersAndConstants__t300_ms100 = 0,
+ NR_UE_TimersAndConstants__t300_ms200 = 1,
+ NR_UE_TimersAndConstants__t300_ms300 = 2,
+ NR_UE_TimersAndConstants__t300_ms400 = 3,
+ NR_UE_TimersAndConstants__t300_ms600 = 4,
+ NR_UE_TimersAndConstants__t300_ms1000 = 5,
+ NR_UE_TimersAndConstants__t300_ms1500 = 6,
+ NR_UE_TimersAndConstants__t300_ms2000 = 7
+} TimerT300_e;
+
+typedef enum timerT301
+{
+ NR_UE_TimersAndConstants__t301_ms100 = 0,
+ NR_UE_TimersAndConstants__t301_ms200 = 1,
+ NR_UE_TimersAndConstants__t301_ms300 = 2,
+ NR_UE_TimersAndConstants__t301_ms400 = 3,
+ NR_UE_TimersAndConstants__t301_ms600 = 4,
+ NR_UE_TimersAndConstants__t301_ms1000 = 5,
+ NR_UE_TimersAndConstants__t301_ms1500 = 6,
+ NR_UE_TimersAndConstants__t301_ms2000 = 7
+} TimerT301_e;
+
+typedef enum timerT310
+{
+ NR_UE_TimersAndConstants__t310_ms0 = 0,
+ NR_UE_TimersAndConstants__t310_ms50 = 1,
+ NR_UE_TimersAndConstants__t310_ms100 = 2,
+ NR_UE_TimersAndConstants__t310_ms200 = 3,
+ NR_UE_TimersAndConstants__t310_ms500 = 4,
+ NR_UE_TimersAndConstants__t310_ms1000 = 5,
+ NR_UE_TimersAndConstants__t310_ms2000 = 6
+} TimerT310_e;
+
+typedef enum timerN310
+{
+ NR_UE_TimersAndConstants__n310_n1 = 0,
+ NR_UE_TimersAndConstants__n310_n2 = 1,
+ NR_UE_TimersAndConstants__n310_n3 = 2,
+ NR_UE_TimersAndConstants__n310_n4 = 3,
+ NR_UE_TimersAndConstants__n310_n6 = 4,
+ NR_UE_TimersAndConstants__n310_n8 = 5,
+ NR_UE_TimersAndConstants__n310_n10 = 6,
+ NR_UE_TimersAndConstants__n310_n20 = 7
+} TimerN310_e;
+
+typedef enum timerT311
+{
+ NR_UE_TimersAndConstants__t311_ms1000 = 0,
+ NR_UE_TimersAndConstants__t311_ms3000 = 1,
+ NR_UE_TimersAndConstants__t311_ms5000 = 2,
+ NR_UE_TimersAndConstants__t311_ms10000 = 3,
+ NR_UE_TimersAndConstants__t311_ms15000 = 4,
+ NR_UE_TimersAndConstants__t311_ms20000 = 5,
+ NR_UE_TimersAndConstants__t311_ms30000 = 6
+} TimerT311_e;
+
+typedef enum timerN311
+{
+ NR_UE_TimersAndConstants__n311_n1 = 0,
+ NR_UE_TimersAndConstants__n311_n2 = 1,
+ NR_UE_TimersAndConstants__n311_n3 = 2,
+ NR_UE_TimersAndConstants__n311_n4 = 3,
+ NR_UE_TimersAndConstants__n311_n5 = 4,
+ NR_UE_TimersAndConstants__n311_n6 = 5,
+ NR_UE_TimersAndConstants__n311_n8 = 6,
+ NR_UE_TimersAndConstants__n311_n10 = 7
+} TimerN311_e;
+
+typedef enum timerT319
+{
+ NR_UE_TimersAndConstants__t319_ms100 = 0,
+ NR_UE_TimersAndConstants__t319_ms200 = 1,
+ NR_UE_TimersAndConstants__t319_ms300 = 2,
+ NR_UE_TimersAndConstants__t319_ms400 = 3,
+ NR_UE_TimersAndConstants__t319_ms600 = 4,
+ NR_UE_TimersAndConstants__t319_ms1000 = 5,
+ NR_UE_TimersAndConstants__t319_ms1500 = 6,
+ NR_UE_TimersAndConstants__t319_ms2000 = 7
+} TimerT319_e;
+
+typedef struct ueTimersAndConstants {
+ TimerT300_e t300;
+ TimerT301_e t301;
+ TimerT310_e t310;
+ TimerN310_e n310;
+ TimerT311_e t311;
+ TimerN311_e n311;
+ TimerT319_e t319;
+} UETimersAndConstants_t;
+
+
+
+
+
+#define CELL_RESERVED_FOR_OTHERUSE (1<<0)
+typedef struct cellAccessInfo
+{
+ UINT16 bitMask;
+ UINT16 plmnInfoNum;
+ PlmnInformation_t plmnInfo[MAX_PLMN];
+ BOOL cellReservedForOtherUse; /*option*/
+
+} CellAccessInfo_t;
+
+#define RA_ASSOCIATION_PERIOD_INDEX (1<<0)
+#define RA_SSB_OCCASION_MASK_INDEX (1<<1)
+typedef struct siReqRes
+{
+ UINT16 bitMask;
+ UINT8 raPreambleStartIndex;
+ UINT8 raAssociationPeriodIndex; /*option*/
+ UINT8 raSsbOccasionMaskIndex; /*option*/
+
+} SiReqRes_t;
+
+#define PRACH_CONFIGURATION_INDEX (1<<0)
+#define MSG1_FDM (1<<1)
+#define MSG1_FREQUENCYSTART (1<<2)
+#define ZERO_COR_RELATION_ZONECONFIG (1<<3)
+#define PREAMBLE_RECEIVED_TARGETPOWER (1<<4)
+#define PREAMBLE_TRANS_MAX (1<<5)
+#define POWER_RAMPING_STEP (1<<6)
+#define RA_RESPONSE_WINDOW (1<<7)
+
+#define SI_REQUEST_PERIOD (1<<8)
+typedef struct siRequestConfig
+{
+ UINT16 bitMask;
+ UINT8 prach_ConfigurationIndex; /*option*/
+ UINT8 msg1_FDM; /*option*/
+ UINT16 msg1_FrequencyStart; /*option*/
+ UINT8 zeroCorrelationZoneConfig; /*option*/
+ INT16 preambleReceivedTargetPower; /*option*/
+ UINT8 preambleTransMax; /*option*/
+ UINT8 powerRampingStep; /*option*/
+ UINT8 raResponseWindow; /*option*/
+ UINT8 ssbPerRachOccasion;
+ UINT8 siRequestPeriod; /*option*/
+ UINT16 siRequestResourcesNum;
+ SiReqRes_t siRequestResources[MAX_SI_MESSAGE];
+} SiRequestConfig_t;
+
+typedef enum schInfoSiPeriod
+{
+ NR_SchedulingInfo__si_Periodicity_rf8 = 0,
+ NR_SchedulingInfo__si_Periodicity_rf16 = 1,
+ NR_SchedulingInfo__si_Periodicity_rf32 = 2,
+ NR_SchedulingInfo__si_Periodicity_rf64 = 3,
+ NR_SchedulingInfo__si_Periodicity_rf128 = 4,
+ NR_SchedulingInfo__si_Periodicity_rf256 = 5,
+ NR_SchedulingInfo__si_Periodicity_rf512 = 6
+} SchInfoSiPeriod_e;
+
+typedef enum sibType
+{
+ NR_SIB_TypeInfo__type_sibType2 = 0,
+ NR_SIB_TypeInfo__type_sibType3 = 1,
+ NR_SIB_TypeInfo__type_sibType4 = 2,
+ NR_SIB_TypeInfo__type_sibType5 = 3,
+ NR_SIB_TypeInfo__type_sibType6 = 4,
+ NR_SIB_TypeInfo__type_sibType7 = 5,
+ NR_SIB_TypeInfo__type_sibType8 = 6,
+ NR_SIB_TypeInfo__type_sibType9 = 7
+} SibType_e;
+
+typedef enum sibAreaScope
+{
+ NR_SIB_TypeInfo__areaScope_true = 0
+} SibAreaScope_e;
+
+#define VALUE_TAG (1<<0)
+#define AREA_SCOPE (1<<1)
+
+typedef struct sibTypeInfo
+{
+ UINT16 bitMask;
+ SibType_e type;
+ UINT8 valueTag; /*option*/
+ SibAreaScope_e areaScope; /*option*/
+} SibTypeInfo_t;
+
+typedef struct siSchInfo
+{
+
+ BOOL siBroadcastStatus;
+ SchInfoSiPeriod_e siPeriodicity;
+ UINT16 sibMappingNum;
+ SibTypeInfo_t sibMapping[MAX_SIB];
+
+} SiSchInfo_t;
+
+typedef enum nrControlResourceSet_cce_REG_MappingType_PR
+{
+ NrControlResourceSet_cce_REG_MappingType_PR_NOTHING, /* No components present */
+ NrControlResourceSet_cce_REG_MappingType_PR_interleaved,
+ NrControlResourceSet_cce_REG_MappingType_PR_nonInterleaved
+} NrControlResourceSet_cce_REG_MappingType_PR;
+
+#define MAC_TCI_STATEID 64
+#define NrControlResourceSetShiftIndexChosen 0x1
+#define NrControlResourceSetTciPresentInDciChosen 0x2
+#define NrControlResourceSetDmrsScramblingIDChosen 0x4
+typedef struct nrControlResourceSet
+{
+ UINT16 bitmask;
+ long controlResourceSetId;
+ UINT64 frequencyDomainResources;
+ long duration;
+ NrControlResourceSet_cce_REG_MappingType_PR present;
+ union ControlResourceSet_cce_REG_MappingType_u
+ {
+ struct ControlResourceSet_cce_REG_MappingType_interleaved
+ {
+ long reg_BundleSize;
+ long interleaverSize;
+ long shiftIndex; /* OPTIONAL */
+ } nrInterleaved;
+ int nonInterleaved;
+ } choice;
+ long precoderGranularity;
+ UINT8 tciPdcchToAddListNum;
+ long tciStateIdAddList[MAC_TCI_STATEID];
+ UINT8 tciPdcchToReleaseListNum;
+ long tciStateIdReleaseList[MAC_TCI_STATEID];
+ long tci_PresentInDCI; /* OPTIONAL */
+ long pdcch_DMRS_ScramblingID; /* OPTIONAL */
+} NrControlResourceSet_t;
+
+typedef struct nrofCandidates
+{
+ long aggregationLevel1;
+ long aggregationLevel2;
+ long aggregationLevel4;
+ long aggregationLevel8;
+ long aggregationLevel16;
+} NrofCandidates_t;
+
+typedef enum nrSearchSpace_searchSpaceType_PR {
+ NrSearchSpace_searchSpaceType_PR_NOTHING, /* No components present */
+ NrSearchSpace_searchSpaceType_PR_common,
+ NrSearchSpace_searchSpaceType_PR_ue_Specific
+} NrSearchSpace_searchSpaceType_PR;
+
+#define NrSearchSpaceTypeCommonDciFormat0_0_AndFormat1_0_Presence 1
+#define NrSearchSpaceTypeCommonDci_Format2_0_Presence 2
+#define NrSearchSpaceTypeCommonDci_Format2_1_Presence 4
+#define NrSearchSpaceTypeCommonDci_Format2_2_Presence 8
+#define NrSearchSpaceTypeCommonDci_Format2_3_Presence 16
+typedef struct nrSearchSpaceType
+{
+ NrSearchSpace_searchSpaceType_PR present;
+ union SearchSpace_searchSpaceType_u
+ {
+ struct SearchSpace_searchSpaceType_common
+ {
+ UINT16 bitMask;
+ struct SearchSpace_searchSpaceType_common_dci_Format0_0_AndFormat1_0
+ {
+ } dci_Format0_0_AndFormat1_0;//option
+
+ struct SearchSpace_searchSpaceType_common_dci_Format2_0
+ {
+#define NrSearchSpaceTypeAggLevel1Chosen 1
+#define NrSearchSpaceTypeAggLevel2Chosen 2
+#define NrSearchSpaceTypeAggLevel4Chosen 4
+#define NrSearchSpaceTypeAggLevel8Chosen 8
+#define NrSearchSpaceTypeAggLevel16Chosen 16
+
+ UINT8 bitMask;
+ long aggregationLevel1; /* OPTIONAL */
+ long aggregationLevel2; /* OPTIONAL */
+ long aggregationLevel4; /* OPTIONAL */
+ long aggregationLevel8; /* OPTIONAL */
+ long aggregationLevel16; /* OPTIONAL */
+ } dci_Format2_0;//optional
+
+ struct SearchSpace_searchSpaceType_common_dci_Format2_1
+ {
+ } dci_Format2_1;//optional
+
+ struct SearchSpace_searchSpaceType_common_dci_Format2_2
+ {
+ } dci_Format2_2;//optional
+
+ struct NrSearchSpace_searchSpaceType_common_dci_Format2_3
+ {
+#define NrSearchSpaceTypeDciFormat2_3Dummy1Chosen 1
+ UINT8 bitMask;
+ long dummy1; /* OPTIONAL */
+ long dummy2;
+ } dci_Format2_3;//optional
+ } common;
+ struct SearchSpace_searchSpaceType_specific
+ {
+ long dci_Formats;
+ }specific;
+
+ } choice;
+}NrSearchSpaceType_t;
+
+typedef enum nrSearchSpaceMonitoringSlotPeriodicityAndOffset_PR
+{
+ NrSearchSpace_monitoringSlotPeriodicityAndOffset_PR_NOTHING, /* No components present */
+ NrSearchSpace_monitoringSlotPeriodicityAndOffset_PR_sl1,
+ NrSearchSpace_monitoringSlotPeriodicityAndOffset_PR_sl2,
+ NrSearchSpace_monitoringSlotPeriodicityAndOffset_PR_sl4,
+ NrSearchSpace_monitoringSlotPeriodicityAndOffset_PR_sl5,
+ NrSearchSpace_monitoringSlotPeriodicityAndOffset_PR_sl8,
+ NrSearchSpace_monitoringSlotPeriodicityAndOffset_PR_sl10,
+ NrSearchSpace_monitoringSlotPeriodicityAndOffset_PR_sl16,
+ NrSearchSpace_monitoringSlotPeriodicityAndOffset_PR_sl20,
+ NrSearchSpace_monitoringSlotPeriodicityAndOffset_PR_sl40,
+ NrSearchSpace_monitoringSlotPeriodicityAndOffset_PR_sl80,
+ NrSearchSpace_monitoringSlotPeriodicityAndOffset_PR_sl160,
+ NrSearchSpace_monitoringSlotPeriodicityAndOffset_PR_sl320,
+ NrSearchSpace_monitoringSlotPeriodicityAndOffset_PR_sl640,
+ NrSearchSpace_monitoringSlotPeriodicityAndOffset_PR_sl1280,
+ NrSearchSpace_monitoringSlotPeriodicityAndOffset_PR_sl2560
+} NrSearchSpaceMonitoringSlotPeriodicityAndOffset_PR;
+
+#define NrSearchSpaceControlResIdChosen 0x1
+#define NrSearchSpaceMonSlotPeriodAndOddsetChosen 0x2
+#define NrSearchSpaceDurationChosen 0x4
+#define MONITORING_SYMBOLS_WITHIN_SLOT 0x08
+typedef struct nrSearchSpace
+{
+ UINT16 bitmask;
+ long searchSpaceId;
+ long controlResourceSetId; /* OPTIONAL */
+
+ struct SearchSpaceMonitoringSlotPeriodicityAndOffset
+ {
+ NrSearchSpaceMonitoringSlotPeriodicityAndOffset_PR present;
+ union SearchSpaceMonitoringSlotPeriodicityAndOffset_u
+ {
+ int sl1;
+ long sl2;
+ long sl4;
+ long sl5;
+ long sl8;
+ long sl10;
+ long sl16;
+ long sl20;
+ long sl40;
+ long sl80;
+ long sl160;
+ long sl320;
+ long sl640;
+ long sl1280;
+ long sl2560;
+ } choice;
+ } monitoringSlotPeriodicityAndOffset;/* OPTIONAL */
+
+ long duration; /* OPTIONAL */
+ UINT16 monitoringSymbolsWithinSlot; /* OPTIONAL */
+ NrofCandidates_t nrofCandidates;
+ NrSearchSpaceType_t searchSpaceType;
+} NrSearchSpace_t;
+
+#define MAX_SEARCHSPACE_NUM 4
+
+#define PdcchCfgCommonCtrlResSetZeroChosen 1
+#define PdcchCfgCommonCtrlResSetChosen 2
+#define PdcchCfgCommonSearchSpaceZeroChosen 4
+#define PdcchCfgCommonSearchSpaceSIB1Chosen 8
+#define PdcchCfgCommonSearchSpaceOtherSysInfoChosen 16
+#define PdcchCfgCommonPagingSearchSpaceChosen 32
+#define PdcchCfgCommonRaSearchSpaceChosen 64
+
+typedef struct PDCCHCfgCommon
+{
+
+ UINT16 bitmask;
+ long controlResourceSetZero; /* OPTIONAL */
+ NrControlResourceSet_t commonControlResourceSet; /* OPTIONAL */
+ long searchSpaceZero; /* OPTIONAL */
+ UINT8 searchSpaceNum;
+ NrSearchSpace_t searchSpace[MAX_SEARCHSPACE_NUM];
+
+ long searchSpaceSIB1; /* OPTIONAL */
+ long searchSpaceOtherSystemInformation; /* OPTIONAL */
+ long pagingSearchSpace; /* OPTIONAL */
+ long raSearchSpace; /* OPTIONAL */
+}Pdcch_Cfg_Common_t;
+
+typedef enum setup_Release_PDCCH_PR
+{
+ Setup_Release_PDCCH_PR_NOTHING, /* No components present */
+ Setup_Release_PDCCH_PR_release,
+ Setup_Release_PDCCH_PR_setup
+
+}Setup_Release_PDCCH_PR;
+typedef struct pdcchCfgCommon
+{
+ Setup_Release_PDCCH_PR present;
+ union Setup_Release_PDCCH_PR_u {
+ UINT32 release;
+ Pdcch_Cfg_Common_t setup;
+
+ }choice;
+
+} PdcchCfgCommon_t;
+
+/* PUCCH-ConfigCommon */
+#define PucchCfgCommonResourceCommonChosen 1
+#define PucchCfgCommonHoppingIdChosen 2
+#define PucchCfgCommonP0NominalChosen 4
+typedef struct nrPucch_ConfigCommon
+{
+ UINT16 bitmask;
+ long pucchResourceCommon; /* OPTIONAL */
+ long pucchGroupHopping;
+ long hoppingId; /* OPTIONAL */
+ long p0Nominal; /* OPTIONAL */
+}NrPucch_ConfigCommon_t;
+
+typedef enum nrPucchCfgCommon_PR
+{
+ NrPucchCfgCommon_PR_NOTHING, /* No components present */
+ NrPucchCfgCommon_PR_release,
+ NrPucchCfgCommon_PR_setup
+}NrPucchCfgCommon_PR;
+
+typedef struct nrPucchCfgCommon
+{
+
+ NrPucchCfgCommon_PR present;
+ union NrPucchCfgCommon_u {
+ int release;
+ NrPucch_ConfigCommon_t setup;
+ } choice;
+
+} NrPucchCfgCommon_t;
+
+#define PdschTimeDomainAllockOChosen 1
+typedef struct pdschTimeDomainAlloc
+{
+ UINT16 bitmask;
+ long k0; /* OPTIONAL */
+ long mappingType;
+ long startSymbolAndLength;
+} PdschTimeDomainAlloc_t;
+
+#define PuschTimeDomainAllock2Chosen 1
+typedef struct puschTimeDomainAlloc
+{
+ UINT16 bitmask;
+ long k2; /* OPTIONAL */
+ long mappingType;
+ long startSymbolAndLength;
+} PuschTimeDomainAlloc_t;
+
+
+#define MAX_TIME_DOMAIN_NUM 16
+#define PdschTimeDomainAllocationChose (1 << 0)
+typedef struct pdsch_Cfg_Common_t
+{
+ UINT16 bitmask;
+ UINT8 timeDomainNum;
+ PdschTimeDomainAlloc_t pdschTimeDomainAllocation[MAX_TIME_DOMAIN_NUM]; /* OPTIONAL */
+} Pdsch_Cfg_Common_t;
+
+typedef enum setup_Release_PDSCH_PR
+{
+ Setup_Release_PDSCH_PR_NOTHING, /* No components present */
+ Setup_Release_PDSCH_PR_release,
+ Setup_Release_PDSCH_PR_setup
+}Setup_Release_PDSCH_PR;
+
+typedef struct pdschCfgCommon
+{
+ Setup_Release_PDSCH_PR present;
+ union Setup_Release_PDSCH_PR_u {
+ UINT32 release;
+ Pdsch_Cfg_Common_t setup;
+
+ }choice;
+
+} PdschCfgCommon_t;
+
+typedef struct nrBWP
+{
+ UINT16 locationAndBandwidth;
+ UINT8 subcarrierSpacing;
+ /*UINT8 cyclicPrefix; extension*/
+} NrBWP_t;
+
+#define NrBwpDownLinkCommonPdcchCfgChosen 0x1
+#define NrBwpDownLinkCommonPdschCfgChosen 0x2
+typedef struct nrBwpDownLinkCommon
+{
+ UINT16 bitmask;
+ NrBWP_t bwp;
+ PdcchCfgCommon_t pdcchCfgCommon; /* OPTIONAL */
+ PdschCfgCommon_t pdschCfgCommon; /* OPTIONAL */
+} NrBwpDownLinkCommon_t;
+
+#define ADDITIONAL_PMAX (1<<0)
+typedef struct pmaxValue
+{
+ UINT16 bitMask;
+ INT8 additionalPmax; /*option*/
+ UINT16 additionalSpectrumEmission;
+} PmaxValue_t;
+
+#define FREQ_BAND_INDICATOR_NR (1<<0)
+#define PMAX_LIST (1<<1)
+typedef struct nrMultiBand
+{
+ UINT16 bitMask;
+ UINT16 freqBandIndicatorNR; /*option*/
+ UINT16 pmaxListNum;
+ PmaxValue_t pmaxList[MAX_NR_NS_PMAX]; /*option*/
+} NrMultiBand_t;
+
+typedef struct specificCarrier
+{
+ UINT16 offsetToCarrier;
+ UINT8 subcarrierSpacing;
+ UINT16 carrierBandwidth;
+ /*UINT16 txDirectCurrentLocation_v1530; extension*/
+
+} SpecificCarrier_t;
+
+#define ABSOLUTE_FREQUENCY_POINTA (1<<0)
+#define PMAX (1<<1)
+
+typedef struct freqInfoUlSib
+{
+ UINT16 bitMask;
+ UINT16 nrMulBandNum;
+ NrMultiBand_t nrMulBand[MAX_MULTI_BANDS];
+ UINT32 absoluteFrequencyPointA; /*option*/
+ UINT16 speCarrierNum;
+ SpecificCarrier_t speCarrier[MAX_SCS];
+ INT8 pMax; /*option*/
+ /*UINT8 frequencyShift7p5khz; extension*/
+} FreqInfoUlSib_t;
+
+/* RACH-ConfigGeneric */
+typedef struct nrRachCfgGeneric_t
+{
+ long prach_ConfigurationIndex;
+ long msg1_FDM;
+ long msg1_FrequencyStart;
+ long zeroCorrelationZoneConfig;
+ long preambleReceivedTargetPower;
+ long preambleTransMax;
+ long powerRampingStep;
+ long ra_ResponseWindow;
+} NrRachCfgGeneric_t;
+
+typedef enum nrRachCfgCommon_ssb_perRACH_OccasionAndCB_PreamblesPerSSB
+{
+ NrRACH_ConfigCommon_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_NOTHING, /* No components present */
+ NrRACH_ConfigCommon_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_oneEighth,
+ NrRACH_ConfigCommon_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_oneFourth,
+ NrRACH_ConfigCommon_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_oneHalf,
+ NrRACH_ConfigCommon_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_one,
+ NrRACH_ConfigCommon_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_two,
+ NrRACH_ConfigCommon_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_four,
+ NrRACH_ConfigCommon_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_eight,
+ NrRACH_ConfigCommon_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_sixteen
+} NrRachCfgCommon_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_e;
+typedef enum nrRachCfgCommonPrachRootSequenceIndex
+{
+ NrRACH_ConfigCommon_prach_RootSequenceIndex_PR_NOTHING, /* No components present */
+ NrRACH_ConfigCommon_prach_RootSequenceIndex_PR_l839,
+ NrRACH_ConfigCommon_prach_RootSequenceIndex_PR_l139
+} NrRachCfgCommonPrachRootSequenceIndex_e;
+
+#define NrRachCfgCommonTotalNumberOfRaChosen (1<<0)
+#define NrRachCfgCommongroupBconfiguredChosen (1<<1)
+#define NrRachCfgCommonRsrpThresholdSSBChosen (1<<2)
+#define NrRachCfgCommonRsrpThresholdSSBSulChosen (1<<3)
+#define NrRachCfgCommonMsg1SubcarrierSpacingChosen (1<<4)
+#define NrRachCfgCommonMsg3TransformPrecoderChosen (1<<5)
+#define NrRachCfgCommonGroupBconfigChosen 32
+typedef struct RACH_Config_Common
+{
+ UINT16 bitmask;
+ NrRachCfgGeneric_t rachCfgGeneric;
+ long totalNumberOfRA_Preambles; /* OPTIONAL */
+ struct RACH_ConfigCommon_ssb_perRACH_OccasionAndCB_PreamblesPerSSB
+ {
+ NrRachCfgCommon_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_e present;
+ union ssbPerRachOccAndCBPreamblesPerSSB_u
+ {
+ long oneEighth;
+ long oneFourth;
+ long oneHalf;
+ long one;
+ long two;
+ long four;
+ long eight;
+ long sixteen;
+ } choice;
+ } ssbPerRachOccAndCBPreamblesPerSSB;
+
+ struct rachCfgCommonGroupBconfigured
+ {
+ long ra_Msg3SizeGroupA;
+ long messagePowerOffsetGroupB;
+ long numberOfRA_PreamblesGroupA;
+ } groupBconfigured;/* OPTIONAL */
+
+ long ra_ContentionResolutionTimer;
+ long rsrp_ThresholdSSB; /* OPTIONAL */
+ long rsrp_ThresholdSSB_SUL; /* OPTIONAL */
+ struct rachCfgCommonPrachRootSequenceIndex
+ {
+ NrRachCfgCommonPrachRootSequenceIndex_e present;
+ union rachCfgCommonPrachRootSequenceIndex_u
+ {
+ long l839;
+ long l139;
+ } choice;
+ } prachRootSequenceIndex;
+ long msg1_SubcarrierSpacing;/* OPTIONAL */
+ long restrictedSetConfig;
+ long msg3_transformPrecoder;/* OPTIONAL */
+
+}rACH_Config_Common_t;
+typedef enum setup_Release_903P7_PR
+{
+ NrRachCfgCommon_PR_NOTHING, /* No components present */
+ NrRachCfgCommon_PR_release,
+ NrRachCfgCommon_PR_setup
+}NrRachCfgCommon_PR;
+
+typedef struct nrRachCfgCommon
+{
+ NrRachCfgCommon_PR present;
+ union NrRachCfgCommon_PR_u {
+ int release;
+ rACH_Config_Common_t setup;
+ } choice;
+} NrRachCfgCommon_t;
+
+/* PUSCH-ConfigCommon */
+#define NrPuschCfgCommonGroupHoppingChosen 1
+#define NrPuschCfgCommonMsg3DeltaChosen 2
+#define NrPuschCfgCommonPoNominalChosen 4
+#define NrPuschCfgCommonpuschTimeDomainAllocationChosen 8
+
+typedef struct nrPusch_ConfigCommon
+{
+ UINT16 bitmask;
+ long groupHoppingEnabledTransformPrecoding; /* OPTIONAL */
+ long msg3DeltaPreamble; /* OPTIONAL */
+ long p0NominalWithGrant; /* OPTIONAL */
+ UINT8 timeDomainNum;
+ PuschTimeDomainAlloc_t puschTimeDomainAllocation[MAX_TIME_DOMAIN_NUM]; /* OPTIONAL */
+
+}NrPusch_ConfigCommon_t;
+
+typedef enum
+{
+ NrPuschCfgCommon_PR_NOTHING, /* No components present */
+ NrPuschCfgCommon_PR_release,
+ NrPuschCfgCommon_PR_setup
+}NrPuschCfgCommon_PR;
+typedef struct nrPuschCfgCommon
+{
+ NrPuschCfgCommon_PR present;
+ union NrPuschCfgCommon_u {
+ int release;
+ NrPusch_ConfigCommon_t setup;
+ } choice;
+
+} NrPuschCfgCommon_t;
+
+#define InitialUlBwpRachCfgChosen 1
+#define InitialUlBwpPuschCfgChosen 2
+#define InitialUlBwpPucchCfgChosen 4
+typedef struct initialUlBwp
+{
+ UINT16 bitmask;
+ NrBWP_t bwp;
+ NrRachCfgCommon_t rachCfgCommon; /* OPTIONAL */
+ NrPuschCfgCommon_t puschCfgCommon; /* OPTIONAL */
+ NrPucchCfgCommon_t pucchCfgCommon; /* OPTIONAL */
+} InitialUlBwp_t;
+
+typedef struct ulCfgCommonSIB
+{
+ FreqInfoUlSib_t frequencyInfoUL;
+ InitialUlBwp_t initialUplinkBWP;
+ UINT8 timeAlignmentTimerCommon;
+} UlCfgCommonSIB_t;
+
+typedef struct freqInfoDlSib
+{
+ UINT16 frequencyBandListNum;
+ NrMultiBand_t frequencyBandList[MAX_MULTI_BANDS];
+ UINT16 offsetToPointA;
+ UINT16 speCarrierNum;
+ SpecificCarrier_t speCarrier[MAX_SCS];
+} FreqInfoDlSib_t;
+
+#define FIRST_PDCCH_MONITORING_OCCASION_OF_PO_T (1<<0)
+typedef enum
+{
+ PagingFrameOffset_PR_NOTHING, /* No components present */
+ PagingFrameOffset_PR_oneT,
+ PagingFrameOffset_PR_halfT,
+ PagingFrameOffset_PR_quarterT,
+ PagingFrameOffset_PR_oneEighthT,
+ PagingFrameOffset_PR_oneSixteenthT,
+} PagingFrameOffset_e;
+
+typedef enum
+{
+ PDCCH_Monitoring_PR_NOTHING, /* No components present */
+ PDCCH_Monitoring_PR_sCS15KHZoneT,
+ PDCCH_Monitoring_PR_sCS30KHZoneT_SCS15KHZhalfT,
+ PDCCH_Monitoring_PR_sCS60KHZoneT_SCS30KHZhalfT_SCS15KHZquarterT,
+ PDCCH_Monitoring_PR_sCS120KHZoneT_SCS60KHZhalfT_SCS30KHZquarterT_SCS15KHZoneEighthT,
+ PDCCH_Monitoring_PR_sCS120KHZhalfT_SCS60KHZquarterT_SCS30KHZoneEighthT_SCS15KHZoneSixteenthT,
+ PDCCH_Monitoring_PR_sCS120KHZquarterT_SCS60KHZoneEighthT_SCS30KHZoneSixteenthT,
+ PDCCH_Monitoring_PR_sCS120KHZoneEighthT_SCS60KHZoneSixteenthT,
+ PDCCH_Monitoring_PR_sCS120KHZoneSixteenthT,
+} FirstPDCCH_MonitoringOccasionOfPO_e;
+
+#define MAX_PDCCH_MONITORING_OCCASION 4
+
+typedef struct sCS15KHZoneT_s
+{
+ UINT16 poNum;
+ UINT16 firstMonitorOccasionOfPO[MAX_PDCCH_MONITORING_OCCASION];
+}SCS15KHZoneT_t;
+
+typedef struct sCS30KHZoneT_SCS15KHZhalfT_s
+{
+
+ UINT16 poNum;
+ UINT16 firstMonitorOccasionOfPO[MAX_PDCCH_MONITORING_OCCASION];
+
+}sCS30KHZoneT_SCS15KHZhalfT_t;
+
+typedef struct sCS60KHZoneT_SCS30KHZhalfT_SCS15KHZquarterT_s
+{
+ UINT16 poNum;
+ UINT16 firstMonitorOccasionOfPO[MAX_PDCCH_MONITORING_OCCASION];
+
+}sCS60KHZoneT_SCS30KHZhalfT_SCS15KHZquarterT_t;
+
+typedef struct sCS120KHZoneT_SCS60KHZhalfT_SCS30KHZquarterT_SCS15KHZoneEighthT_s
+{
+ UINT16 poNum;
+ UINT16 firstMonitorOccasionOfPO[MAX_PDCCH_MONITORING_OCCASION];
+
+}sCS120KHZoneT_SCS60KHZhalfT_SCS30KHZquarterT_SCS15KHZoneEighthT_t;
+
+typedef struct sCS120KHZhalfT_SCS60KHZquarterT_SCS30KHZoneEighthT_SCS15KHZoneSixteenthT_s
+{
+ UINT16 poNum;
+ UINT16 firstMonitorOccasionOfPO[MAX_PDCCH_MONITORING_OCCASION];
+
+}sCS120KHZhalfT_SCS60KHZquarterT_SCS30KHZoneEighthT_SCS15KHZoneSixteenthT_t;
+
+typedef struct sCS120KHZquarterT_SCS60KHZoneEighthT_SCS30KHZoneSixteenthT_s
+{
+ UINT16 poNum;
+ UINT16 firstMonitorOccasionOfPO[MAX_PDCCH_MONITORING_OCCASION];
+
+}sCS120KHZquarterT_SCS60KHZoneEighthT_SCS30KHZoneSixteenthT_t;
+
+typedef struct sCS120KHZoneEighthT_SCS60KHZoneSixteenthT_s
+{
+ UINT16 poNum;
+ UINT16 firstMonitorOccasionOfPO[MAX_PDCCH_MONITORING_OCCASION];
+
+}sCS120KHZoneEighthT_SCS60KHZoneSixteenthT_t;
+
+typedef struct sCS120KHZoneSixteenthT_s
+{
+ UINT16 poNum;
+ UINT16 firstMonitorOccasionOfPO[MAX_PDCCH_MONITORING_OCCASION];
+
+}sCS120KHZoneSixteenthT_t;
+
+#define FirstPDCCH_MonitoringOccasionOfpoChosen (1 << 0)
+typedef struct pcchConfig
+{
+ UINT16 bitMask;
+ UINT8 defaultPagingCycle;
+
+ struct PagingFrameOffset
+ { PagingFrameOffset_e present;
+ union PagingFrame {
+ INT32 oneT;
+ UINT8 halfT;
+ UINT8 quarterT;
+ UINT8 oneEighthT;
+ UINT8 oneSixteenthT;
+ }choice;
+ }pagingFrameOffset_t;
+ UINT8 ns;
+ struct FirstPDCCH_MonitoringOccasionOfPO
+ { FirstPDCCH_MonitoringOccasionOfPO_e present;
+ union PDCCH_MonitoringOccasion {
+
+ SCS15KHZoneT_t SCS15KHZoneT;
+ sCS30KHZoneT_SCS15KHZhalfT_t sCS30KHZoneT_SCS15KHZhalfT;
+ sCS60KHZoneT_SCS30KHZhalfT_SCS15KHZquarterT_t sCS60KHZoneT_SCS30KHZhalfT_SCS15KHZquarterT;
+ sCS120KHZoneT_SCS60KHZhalfT_SCS30KHZquarterT_SCS15KHZoneEighthT_t sCS120KHZoneT_SCS60KHZhalfT_SCS30KHZquarterT_SCS15KHZoneEighthT;
+ sCS120KHZhalfT_SCS60KHZquarterT_SCS30KHZoneEighthT_SCS15KHZoneSixteenthT_t sCS120KHZhalfT_SCS60KHZquarterT_SCS30KHZoneEighthT_SCS15KHZoneSixteenthT;
+ sCS120KHZquarterT_SCS60KHZoneEighthT_SCS30KHZoneSixteenthT_t sCS120KHZquarterT_SCS60KHZoneEighthT_SCS30KHZoneSixteenthT;
+ sCS120KHZoneEighthT_SCS60KHZoneSixteenthT_t sCS120KHZoneEighthT_SCS60KHZoneSixteenthT;
+ sCS120KHZoneSixteenthT_t sCS120KHZoneSixteenthT;
+ }choice;
+ }firstPDCCH_MonitoringOccasionOfPO_t; /*option*/
+
+} PcchConfig_t;
+
+typedef struct dlCfgCommonSIB
+{
+ FreqInfoDlSib_t frequencyInfoDL;
+ NrBwpDownLinkCommon_t initialDownlinkBWP;
+ UINT8 modificationPeriodCoeff;
+ PcchConfig_t pcchConfig;
+} DlCfgCommonSIB_t;
+
+typedef struct tddUlDlPattern
+{
+ UINT8 dlULTransmissionPeriodicity;
+ UINT16 nrofDownlinkSlots;
+ UINT8 nrofDownlinkSymbols;
+ UINT16 nrofUplinkSlots;
+ UINT8 nrofUplinkSymbols;
+ /*UINT8 dlULTransmissionPeriodicity_v1530; extension*/
+} TddUlDlPattern_t;
+
+
+typedef struct tddUlDlCfgCom
+{
+ UINT8 referenceSubcarrierSpacing;
+ TddUlDlPattern_t pattern1;
+ /*TddUlDlPattern_t pattern2; extension*/
+} TddUlDlCfgCom_t;
+
+
+#define UPLINK_CONFIG_COMMON (1<<0)
+#define SUPPLEMENTARY_UPLINK (1<<1)
+#define NTIMING_ADVANCE_OFFSET (1<<2)
+#define GROUP_PRESENCE (1<<3)
+#define TDD_ULDL_CFG_COMMON (1<<4)
+typedef struct servingCellCfg
+{
+ UINT16 bitMask;
+ DlCfgCommonSIB_t downlinkConfigCommon;
+ UlCfgCommonSIB_t uplinkConfigCommon; /*option*/
+ UlCfgCommonSIB_t supplementaryUplink; /*option*/
+ UINT8 nTimingAdvanceOffset; /*option*/
+ UINT8 inOneGroup;
+ UINT8 groupPresence; /*option*/
+ UINT8 ssbPeriodServingCell;
+ TddUlDlCfgCom_t tddUlDlCfgCommon; /*option*/
+ INT8 ssPBCHBlockPower;
+} ServingCellCfg_t;
+
+typedef struct uACBarringPerCat
+{
+ UINT8 accessCategory;
+ UINT8 uacBarringInfoSetIndex;
+} UACBarringPerCat_t;
+
+#define UAC_AC_BARRING_LIST_TYPE (1 << 0)
+
+typedef enum UacAcBarringListType_PR {
+ UacImplicitACBarringList_UacExplicitAcBarringListType_PR_NOTHING, /* No components present */
+ UacImplicitACBarringList_UacExplicitAcBarringListType_PR_UacImplicitACBarringList,
+ UacImplicitACBarringList_UacExplicitAcBarringListType_PR_UacExplicitAcBarringList
+} UacImplicitACBarringList_UacExplicitAcBarringList_PR;
+
+
+typedef struct uACBarringPerPLMN
+{
+ UINT16 bitMask;
+ UINT8 plmnIdentityIndex;
+ UINT16 BarringListNum;
+ UacImplicitACBarringList_UacExplicitAcBarringList_PR present;
+ union UacAcBarringListType_u {
+ UINT8 uacImplicitACBarringList[MAX_ACCESS_CAT - 1];
+ UACBarringPerCat_t uacExplicitAcBarringList[MAX_ACCESS_CAT - 1];
+ }choice; /*option*/
+} UACBarringPerPLMN_t;
+
+/***
+typedef struct uACBarringPerPLMN
+{
+ UINT8 plmnIdentityIndex;
+ UINT8 present;
+ UINT8 uacImplicitACBarringList[MAX_ACCESS_CAT - 1];
+ UACBarringPerCat_t uacExplicitAcBarringList[MAX_ACCESS_CAT - 1];
+
+} UACBarringPerPLMN_t;
+
+
+***/
+
+
+typedef struct uACBarringInfoSet
+{
+ UINT8 uacBarringFactor;
+ UINT8 uacBarringTime;
+ UINT8 uacBarringForAccessIdentity;
+} UACBarringInfoSet_t;
+
+#define UAC_BARRING_FOR_COMMON (1 << 0)
+#define UAC_BARRING_PER_PLMN_LIST (1 << 1)
+#define UAC_INDIVIDUAL_PLMN_LIST (1 << 2)
+#define UAC_ACT1_ESCLECT_ASSISTANCE_INFO (1 << 3)
+
+typedef enum uac_AccessCategory1_SelectionAssistanceInfo_PR
+{
+ uac_AccessCategory1_SelectionAssistanceInfo_nonthing,//guotingting
+ uac_AccessCategory1_SelectionAssistanceInfo_plmnCommon,
+ uac_AccessCategory1_SelectionAssistanceInfo_individualPLMNList
+} Uac_AccessCategory1_SelectionAssistanceInfo_PR;
+
+
+typedef struct sib1UacBarringInfo
+{
+ UINT16 bitMask;
+ UINT16 uac_BarringForCommonNUM;
+ UACBarringPerCat_t uac_BarringForCommon[MAX_ACCESS_CAT - 1]; /*option*/
+ UINT16 uacBarringPerPLMNListNUM;
+ UACBarringPerPLMN_t uacBarringPerPLMNList[MAX_PLMN]; /*option*/
+ UINT16 uacBarringInfoSetListNUM;
+ UACBarringInfoSet_t uacBarringInfoSetList[MAX_BARRING_SET];
+ Uac_AccessCategory1_SelectionAssistanceInfo_PR present;
+ UINT16 individualPLMNListNUM;
+ union uac_AccessCategory1_SelectionAssistanceInfo
+ {
+ UINT8 plmnCommon;
+ UINT8 individualPLMNList[MAX_PLMN];
+
+ }choice; /*option*/
+
+} Sib1UacBarringInfo_t;
+
+
+
+#define Q_RXLEVMIN_OFFSETD (1 << 0)
+#define Q_RXLEVMIN_SUL (1 << 1)
+#define Q_QUAL_MIN (1 << 2)
+#define Q_QUALMIN_OFFSET (1 << 3)
+#define CONN_EST_FAILURE_CTRL (1 << 4)
+#define SI_SCHE_LIST_PRESENCE (1 << 5)
+#define SI_SCHEDUL_INFO (1 << 6)
+#define SI_REQ_CFG (1 << 7)
+#define SI_REQ_CFGSUL (1 << 8)
+#define SYSTEM_INFORMATION_AREAID (1 << 9)
+#define SERVING_CELL_CFGCOMMON (1 << 10)
+#define IMS_EMERGENCY_SUPPORT (1 << 11)
+#define E_CALL_OVERIMS_SUPPORT (1 << 12)
+#define UE_TIMERS_ANDCONSTS (1 << 13)
+#define SIB1_UAC_BARINFO (1 << 14)
+#define USEFULL_RESUMEID (1 << 15)
+
+
+typedef struct sib1
+{
+ UINT16 bitMask;
+ INT8 qRxLevMin;
+ UINT8 qRxLevMinOffsetd; /*option*/
+ INT8 qRxLevMinSUL; /*option*/
+ INT8 qQualMin; /*option*/
+ UINT8 qQualMinOffset; /*option*/
+ CellAccessInfo_t cellAccessRelateInfo;
+ ConnEstFailCtrl_t connEstFailureCtrl; /*option*/
+ UINT8 siWindowLen;
+ UINT16 siNum;
+ SiSchInfo_t siSchedulInfo[MAX_SI_MESSAGE]; /*option*/
+ SiRequestConfig_t siReqCfg; /*option*/
+ SiRequestConfig_t siReqCfgSul; /*option*/
+ UINT32 systemInformationAreaID; /*option*/
+ ServingCellCfg_t servingCellCfgCommon; /*option*/
+ BOOL ims_EmergencySupport; /*option*/
+ BOOL eCallOverIMS_Support; /*option*/
+ UETimersAndConstants_t ueTimersAndConsts; /*option*/
+ Sib1UacBarringInfo_t sib1UacBarInfo; /*option*/
+ BOOL useFullResumeID; /*option*/
+}Sib1_t;
+
+/********************** Sib2_t ************************/
+typedef enum cmSib2QHyst
+{
+ qHystdB0 = 0,
+ qHystdB1 = 1,
+ qHystdB2 = 2,
+ qHystdB3 = 3,
+ qHystdB4 = 4,
+ qHystdB5 = 5,
+ qHystdB6 = 6,
+ qHystdB8 = 7,
+ qHystdB10 = 8,
+ qHystdB12 = 9,
+ qHystdB14 = 10,
+ qHystdB16 = 11,
+ qHystdB18 = 12,
+ qHystdB20 = 13,
+ qHystdB22 = 14,
+ qHystdB24 = 15
+}CmSib2QHyst_e;
+
+
+typedef enum cmSib2SfMedium
+{
+ qHystSFdBMedium0 = 0,
+ qHystSFdBMedium2 = 1,
+ qHystSFdBMedium4 = 2,
+ qHystSFdBMedium6 = 3
+}CmSib2SfMedium_e;
+
+typedef enum cmSib2SfHigh
+{
+ qHystSFdBHigh0 = 0,
+ qHystSFdBHigh2 = 1,
+ qHystSFdBHigh4 = 2,
+ qHystSFdBHigh6 = 3
+}CmSib2SfHigh_e;
+
+typedef struct cmSib2QHystSf
+{
+ CmSib2SfMedium_e sfMedium;
+ CmSib2SfHigh_e sfHigh;
+}CmSib2QHystSf_t;
+
+
+typedef enum cmSib2TEvaluation
+{
+ tEvaluationS30 = 0,
+ tEvaluationS60 = 1,
+ tEvaluationS120 = 2,
+ tEvaluationS180 = 3,
+ tEvaluationS240 = 4,
+ tEvaluationSpare3 = 5,
+ tEvaluationSpare2 = 6,
+ tEvaluationSpare1 = 7
+}CmSib2TEvaluation_e;
+
+typedef enum cmSib2THystNormal
+{
+ tHystNormalS30 = 0,
+ tHystNormalS60 = 1,
+ tHystNormalS120 = 2,
+ tHystNormalS180 = 3,
+ tHystNormalS240 = 4,
+ tHystNormalSpare3 = 5,
+ tHystNormalSpare2 = 6,
+ tHystNormalSpare1 = 7
+}CmSib2THystNormal_e;
+
+
+typedef struct cmSib2MobilityStateParameters
+{
+ CmSib2TEvaluation_e tEvaluation;
+ CmSib2THystNormal_e tHystNormal;
+ UINT8 nCellChangeMedium; /*1-16*/
+ UINT8 nCellChangeHigh; /*1-16*/
+}CmSib2MobilityStateParameters_t;
+
+
+typedef struct cmSib2SpeedStateReselectionPars
+{
+ CmSib2MobilityStateParameters_t mobilityStateParameters;
+ CmSib2QHystSf_t qHystSF;
+}CmSib2SpeedStateReselectionPars_t;
+
+#define THRESHOLD_RSRP_PRESENT (1 << 0)
+#define THRESHOLD_PSRQ_PRESENT (1 << 1)
+#define THRESHOLD_SINR_PRESENT (1 << 2)
+typedef struct cmSib2ThresholdNr
+{
+ UINT16 bitMask;
+ UINT8 thresholdRSRP; /*0-127 OPTIONAL*/
+ UINT8 thresholdRSRQ; /*0-127 OPTIONAL*/
+ UINT8 thresholdSINR; /*0-127 OPTIONAL*/
+}CmSib2ThresholdNr_t;
+
+typedef enum cmSib2QOffsetRange
+{
+ sib2qOffsetRangeMinus24 = 0,
+ sib2qOffsetRangeMinus22 = 1,
+ sib2qOffsetRangeMinus20 = 2,
+ sib2qOffsetRangeMinus18 = 3,
+ sib2qOffsetRangeMinus16 = 4,
+ sib2qOffsetRangeMinus14 = 5,
+ sib2qOffsetRangeMinus12 = 6,
+ sib2qOffsetRangeMinus10 = 7,
+ sib2qOffsetRangeMinus8 = 8,
+ sib2qOffsetRangeMinus6 = 9,
+ sib2qOffsetRangeMinus5 = 10,
+ sib2qOffsetRangeMinus4 = 11,
+ sib2qOffsetRangeMinus3 = 12,
+ sib2qOffsetRangeMinus2 = 13,
+ sib2qOffsetRangeMinus1 = 14,
+ sib2qOffsetRangePlus0 = 15,
+ sib2qOffsetRangePlus1 = 16,
+ sib2qOffsetRangePlus2 = 17,
+ sib2qOffsetRangePlus3 = 18,
+ sib2qOffsetRangePlus4 = 19,
+ sib2qOffsetRangePlus5 = 20,
+ sib2qOffsetRangePlus6 = 21,
+ sib2qOffsetRangePlus8 = 22,
+ sib2qOffsetRangePlus10 = 23,
+ sib2qOffsetRangePlus12 = 24,
+ sib2qOffsetRangePlus14 = 25,
+ sib2qOffsetRangePlus16 = 26,
+ sib2qOffsetRangePlus18 = 27,
+ sib2qOffsetRangePlus20 = 28,
+ sib2qOffsetRangePlus22 = 29,
+ sib2qOffsetRangePlus24 = 30,
+
+}CmSib2QOffsetRange_e;
+
+#define NROF_SS_BLOCKS_TO_AVERAGE_PRESENT (1 << 0)
+#define ABS_THRESH_SS_BLOCKS_CONSOLIDATION_PRESENT (1 << 1)
+#define RANGE_TO_BEST_CELL_PRESENT (1 << 2)
+#define SPEED_STATE_RESELECTION_PARS_PRESENT (1 << 3)
+typedef struct cmSib2CellReselectionInfoCommon
+{
+ UINT16 bitMask;
+ UINT8 nrofSsBlocksToAverage; /*2-16 OPTIONAL*/
+ CmSib2ThresholdNr_t absThreshSsBlocksConsolidation; /*OPTIONAL*/
+ CmSib2QOffsetRange_e rangeToBestCell; /*OPTIONAL*/
+ CmSib2QHyst_e qHyst;
+ CmSib2SpeedStateReselectionPars_t speedStateReselectionPars;
+} CmSib2CellReselectionInfoCommon_t;
+
+typedef enum cmSib2CellReselectionSubPriority
+{
+ cellReselectionSubPriorityoDot2 = 0,
+ cellReselectionSubPriorityoDot4 = 1,
+ cellReselectionSubPriorityoDot6 = 2,
+ cellReselectionSubPriorityoDot8 = 3
+}CmSib2CellReselectionSubPriority_e;
+
+#define CM_SIB2_RESELECT_SERV_FREQ_SNON_INTRA_SEARCH_P (1 << 0)
+#define CM_SIB2_RESELECT_SERV_FREQ_SNON_INTRA_SEARCH_Q (1 << 1)
+#define CM_SIB2_RESELECT_SERV_FREQ_THRESH_SERV_LOWQ (1 << 2)
+#define CM_SIB2_RESELECT_SERV_FREQ_SUB_PRIORITY (1 << 3)
+typedef struct cmSib2CellReselectionServingFreqInfo
+{
+ UINT16 bitMask;
+ UINT8 sNonIntraSearchP; //0-31
+ UINT8 sNonIntraSearchQ; //0-31
+ UINT8 threshServingLowP; //0-31
+ UINT8 threshServingLowQ; //0-31
+ UINT8 cellReselectionPriority; //0-7
+ CmSib2CellReselectionSubPriority_e cellReselectionSubPriority;
+} CmSib2CellReselectionServingFreqInfo_t;
+
+
+typedef struct cmSib2SsRssiMeasurement
+{
+ UINT8 measurementSlots[10]; //BIT STRING SIZE(1-80)
+ UINT8 endSymbol; //0-3
+} CmSib2SsRssiMeasurement_t;
+
+
+typedef struct cmSib2NrNsPmaxValue
+{
+ INT8 additionalPmax; /*-30~30 OPTIONAL*/
+ UINT8 additionalSpectrumEmission; /*0-7*/
+} CmSib2NrNsPmaxValue_t;
+
+
+typedef struct cmSib2NrNsPmaxList
+{
+ CmSib2NrNsPmaxValue_t nRNsPmaxList[MAX_NR_NS_PMAX];
+} CmSib2NrNsPmaxList_t;
+
+
+typedef struct cmSib2NrMultiBandInfo
+{
+ UINT16 freqBandIndicatorNR; //1-1024
+ CmSib2NrNsPmaxList_t nRNsPmaxList;
+} CmSib2NrMultiBandInfo_t;
+
+
+typedef struct cmSib2MultiFrequencyBandListNrSib
+{
+ CmSib2NrMultiBandInfo_t multiFrequencyBandListNrSib[MAX_MULTI_BANDS];
+
+} CmSib2MultiFrequencyBandListNrSib_t;
+
+
+typedef enum cmSib2Duration
+{
+ durationSf1 = 0,
+ durationSf2 = 1,
+ durationSf3 = 2,
+ durationSf4 = 3,
+ durationSf5 = 4,
+}CmSib2Duration_e;
+
+typedef enum cmSib2SsMtcPresent
+{
+ CM_SIB2_SSB_MTC_NOTHING = 0,
+ CM_SIB2_SSB_MTC_SF5 = 1,
+ CM_SIB2_SSB_MTC_SF10 = 2,
+ CM_SIB2_SSB_MTC_SF20 = 3,
+ CM_SIB2_SSB_MTC_SF40 = 4,
+ CM_SIB2_SSB_MTC_SF80 = 5,
+ CM_SIB2_SSB_MTC_SF160 = 6,
+}CmSib2SsMtcPresent_e;
+
+typedef struct cmSib2SsbMtc //choice sf5-sf160
+{
+ CmSib2SsMtcPresent_e present;
+ UINT8 sf5; //0-4
+ UINT8 sf10; //0-9
+ UINT8 sf20; //0-19
+ UINT8 sf40; //0-39
+ UINT8 sf80; //0-79
+ UINT8 sf160; //0-159
+ CmSib2Duration_e duration;
+
+} CmSib2SsbMtc_t;
+
+typedef enum cmSib2SsbToMeasurePresent
+{
+ CM_SIB2_SSB_TO_MEASURE_NOTHING = 0,
+ CM_SIB2_SSB_TO_MEASURE_SHORT_BITMAP = 1,
+ CM_SIB2_SSB_TO_MEASURE_MEDIUM_BITMAP = 2,
+ CM_SIB2_SSB_TO_MEASURE_LONG_BITMAP = 3,
+}CmSib2SsbToMeasurePresent_e;
+
+typedef struct cmSib2SsbToMeasure
+{
+ CmSib2SsbToMeasurePresent_e present;
+ UINT8 shortBitmap; //BIT STRING SIZE(4)
+ UINT8 mediumBitmap; //BIT STRING SIZE(8)
+ UINT64 longBitmap; //BIT STRING SIZE(64)
+
+} CmSib2SsbToMeasure_t;
+
+#define CM_INTRA_FREQ_CELL_RESELECT_QRX_LEV_MIN_SUL_PRESENT (1 << 0)
+#define CM_INTRA_FREQ_CELL_RESELECT_QUAL_MIN_PRESENT (1 << 1)
+#define CM_INTRA_FREQ_CELL_RESELECT_SINTRA_SEARCH_Q_PRESENT (1 << 2)
+#define CM_INTRA_FREQ_CELL_RESELECT_FREQUENCY_BAND_LIST_PRESENT (1 << 3)
+#define CM_INTRA_FREQ_CELL_RESELECT_FREQUENCY_BAND_LIST_SUL_PRESENT (1 << 4)
+#define CM_INTRA_FREQ_CELL_RESELECT_PMAX_PRESENT (1 << 5)
+#define CM_INTRA_FREQ_CELL_RESELECT_CM_SIB2_SSB_MTC_PRSENT (1 << 6)
+#define CM_INTRA_FREQ_CELL_RESELECT_CM_SIB2_SS_RSSI_MEASUREMENT_PRSENT (1 << 7)
+#define CM_INTRA_FREQ_CELL_RESELECT_CM_SIB2_SSB_TO_MEASURE_PRSENT (1 << 8)
+typedef struct cmSib2IntraFreqCellReselectionInfo
+{
+ UINT16 bitMask;
+ INT8 qRxLevMin; //-70~-22
+ INT8 qRxLevMinSUL; //-70~-22
+ INT8 qQualMin; //-34~-3
+ UINT8 sIntraSearchP; //0-31
+ UINT8 sIntraSearchQ; //0-31
+ UINT8 tReselectionNR; //0-7
+ CmSib2MultiFrequencyBandListNrSib_t frequencyBandList;
+ CmSib2MultiFrequencyBandListNrSib_t frequencyBandListSUL;
+ INT8 pMax; //-30-33
+ CmSib2SsbMtc_t smtc;
+ CmSib2SsRssiMeasurement_t ssRssiMeasurement ;
+ CmSib2SsbToMeasure_t ssbToMeasure;
+ BOOL deriveSSBIndexFromCell;
+} CmSib2IntraFreqCellReselectionInfo_t;
+
+typedef struct sib2
+{
+ CmSib2CellReselectionInfoCommon_t cellReselectionCommon;
+ CmSib2CellReselectionServingFreqInfo_t cellReselectionServingFreq;
+ CmSib2IntraFreqCellReselectionInfo_t intraFreqCellReselection;
+}Sib2_t;
+
+/********************** Sib3_t ************************/
+typedef enum cmSib3QOffsetRange
+{
+ sib3qOffsetRangeMinus24 = 0,
+ sib3qOffsetRangeMinus22 = 1,
+ sib3qOffsetRangeMinus20 = 2,
+ sib3qOffsetRangeMinus18 = 3,
+ sib3qOffsetRangeMinus16 = 4,
+ sib3qOffsetRangeMinus14 = 5,
+ sib3qOffsetRangeMinus12 = 6,
+ sib3qOffsetRangeMinus10 = 7,
+ sib3qOffsetRangeMinus8 = 8,
+ sib3qOffsetRangeMinus6 = 9,
+ sib3qOffsetRangeMinus5 = 10,
+ sib3qOffsetRangeMinus4 = 11,
+ sib3qOffsetRangeMinus3 = 12,
+ sib3qOffsetRangeMinus2 = 13,
+ sib3qOffsetRangeMinus1 = 14,
+ sib3qOffsetRangePlus0 = 15,
+ sib3qOffsetRangePlus1 = 16,
+ sib3qOffsetRangePlus2 = 17,
+ sib3qOffsetRangePlus3 = 18,
+ sib3qOffsetRangePlus4 = 19,
+ sib3qOffsetRangePlus5 = 20,
+ sib3qOffsetRangePlus6 = 21,
+ sib3qOffsetRangePlus8 = 22,
+ sib3qOffsetRangePlus10 = 23,
+ sib3qOffsetRangePlus12 = 24,
+ sib3qOffsetRangePlus14 = 25,
+ sib3qOffsetRangePlus16 = 26,
+ sib3qOffsetRangePlus18 = 27,
+ sib3qOffsetRangePlus20 = 28,
+ sib3qOffsetRangePlus22 = 29,
+ sib3qOffsetRangePlus24 = 30
+}CmSib3QOffsetRange_e;
+
+#define CM_INTRA_FREQ_NEIGH_CELL_QRX_LEV_MIN_OFFSET_CELL (1 << 0)
+#define CM_INTRA_FREQ_NEIGH_CELL_QRX_LEV_MIN_OFFSET_SUL_CELL (1 << 1)
+#define CM_INTRA_FREQ_NEIGH_CELL_QUAL_MIN_OFFSET_CELL (1 << 2)
+typedef struct cmSib3IntraFreqNeighCellInfo
+{
+ UINT32 bitMask;
+ UINT16 physCellId; //0-1007
+ CmSib3QOffsetRange_e qOffsetCell;
+ UINT8 qRxLevMinOffsetCell; //1-8
+ UINT8 qRxLevMinOffsetCellSUL; //1-8
+ UINT8 qQualMinOffsetCell; //1-8
+
+} CmSib3IntraFreqNeighCellInfo_t;
+
+
+typedef struct cmSib3IntraFreqNeighCellList
+{
+ UINT32 neighNum;
+ CmSib3IntraFreqNeighCellInfo_t intraFrequenceNeighCellList[MAXCELLINTRA];
+
+} CmSib3IntraFreqNeighCellList_t;
+
+
+typedef enum cmSib3Range
+{
+ rangeN4 = 0,
+ rangeN8 = 1,
+ rangeN12 = 2,
+ rangeN16 = 3,
+ rangeN24 = 4,
+ rangeN32 = 5,
+ rangeN48 = 6,
+ rangeN64 = 7,
+ rangeN84 = 8,
+ rangeN96 = 9,
+ rangeN128 = 10,
+ rangeN168 = 11,
+ rangeN252 = 12,
+ rangeN504 = 13,
+ rangeN1008 = 14,
+ rangeSpare1 = 15,
+}CmSib3Range_e;
+
+#define CM_SIB3_PCI_RANGE (1 << 0)
+typedef struct cmSib3PciRange
+{
+ UINT32 bitMask;
+ UINT16 physCellId; //0-1007
+ CmSib3Range_e range;
+} CmSib3PciRange_t;
+
+
+typedef struct cmSib3IntraFreqBlackCellList
+{
+ UINT32 blackNum;
+ CmSib3PciRange_t intraFrequenceBlackCellList[MAXCELLBLACK];
+
+} CmSib3IntraFreqBlackCellList_t;
+
+#define CM_SIB3_INTRA_FREQ_NEIGH_CELL_LIST (1 << 0)
+#define CM_SIB3_INTRA_FREQ_BLACK_CELL_LIST (1 << 1)
+typedef struct sib3
+{
+ UINT16 bitMask;
+ CmSib3IntraFreqNeighCellList_t intraFreqNeighCell;
+ CmSib3IntraFreqBlackCellList_t intraFreqBlackCell;
+}Sib3_t;
+
+/********************** SystemInfo_t ************************/
+typedef struct systemInfo
+{
+ Sib2_t siSib2;
+ Sib3_t siSib3;
+#if 0
+ Sib4_t siSib4;
+ Sib5_t siSib5;
+ Sib6_t siSib6;
+ Sib7_t siSib7;
+ Sib8_t siSib8;
+ Sib9_t siSib9;
+#endif
+}SystemInfo_t;
+
+/********************** SiConfig_t ************************/
+typedef struct siConfig
+{
+ Mib_t mibCfg;
+ Sib1_t sib1Cfg;
+ Sib2_t sib2Cfg;
+ Sib3_t sib3Cfg;
+ SystemInfo_t si1Cfg;
+ SystemInfo_t si2Cfg;
+ UINT8 sib1Flag;
+ UINT8 siFlag;
+ UINT8 pagingFlag;
+#if 0
+ Sib4_t sib4Cfg;
+ Sib5_t sib5Cfg;
+ Sib6_t sib6Cfg;
+ Sib7_t sib7Cfg;
+ Sib8_t sib8Cfg;
+ Sib9_t sib9Cfg;
+ SystemInfo_t si3;
+ SystemInfo_t si4;
+ SystemInfo_t si5;
+ SystemInfo_t si6;
+ SystemInfo_t si7;
+ SystemInfo_t si8;
+#endif
+} SiConfig_t;
+
+typedef struct ngapConfig
+{
+ UINT32 gNBId; /* Global Ran Node ID of one gNB */
+ NgapRanName_t ranNodeName; /* name of one gNB */
+ IpAddress_t ranNodeIp; /* IP Address of gNB */
+} NGAPConfig_t;
+/********************** OamCuCpConfig_t ************************/
+typedef struct
+{
+ UINT64 gnbDuId;
+ IpAddress_t gnbDuIp;/* IP Address of DU */
+ UCHAR gnbDuName[MAX_GNB_DU_NAME];
+
+}F1apDuInfo_t;
+
+typedef struct f1apConfig
+{
+ UINT32 gNBId;
+
+ UINT64 gnbCuId;
+ IpAddress_t gnbCuIp;/* IP Address of CU */
+ UCHAR gnbCuName[MAX_GNB_CU_NAME];
+ UINT8 gnbDuNum;
+ F1apDuInfo_t gnbDuCfg[MAX_GNB_DU_NUM];
+} F1APConfig_t;
+
+/**
+ * @struct Transmission BandWidth
+ This structure is the Transmission BandWidth of Cell Configuration
+*/
+typedef struct transBandWidth
+{
+ long nrScs;
+ long nrb;
+} TransBandWidth_t;
+
+/**
+ * @struct SULInfo
+ This structure is the sul Info of Cell Configuration
+*/
+typedef struct sulInfo
+{
+ UINT32 sulArfcn;
+ TransBandWidth_t sulTransBW;
+} SulInfo_t;
+
+/**
+ * @struct FreqBand
+ This structure is the freq Band of Cell Configuration
+*/
+typedef struct freqBand
+{
+ UINT32 nrFreqBand;
+ UINT8 supportedSulBandNum;
+ UINT32 sulBand[MAX_NR_CELL_BANDS];
+} FreqBand_t;
+
+/**
+ * @struct FreqInfo
+ This structure is the freq Info of Cell Configuration
+*/
+#define FreqInfoSulInfoChosen 0x01
+typedef struct freqInfo
+{
+ UINT16 bitmask;
+ UINT32 nrArfcn;
+ SulInfo_t sulInfo;
+ UINT8 freqBandNum;
+ FreqBand_t freqBandItem[MAX_NR_CELL_BANDS];
+} FreqInfo_t;
+
+/**
+ * @struct FDDInfo
+ This structure is the FDD Mode Config Info of Cell Configuration
+*/
+typedef struct fddInfo
+{
+ FreqInfo_t ulFreqInfo;
+ FreqInfo_t dlFreqInfo;
+ TransBandWidth_t ulTransBW;
+ TransBandWidth_t dlTransBW;
+} FddInfo_t;
+
+/**
+ * @struct TDDInfo
+ This structure is the TDD Mode Config Info of Cell Configuration
+*/
+typedef struct tddInfo
+{
+ FreqInfo_t nrFreqInfo;
+ TransBandWidth_t transBW;
+} TddInfo_t;
+
+/**
+ * @struct oamActCellInfo
+ This structure is oam send this message to Du act cell
+*/
+typedef struct oamActCellInfo
+{
+ UINT8 actCellNum;
+ CmNrCellId actCellId[MAX_CELL_NUM];
+} OamActCellInfo_t;
+
+/**
+ * @struct oamActCellRsp
+ This structure is DU send reponse message to OAM
+*/
+typedef struct oamActCellRsp
+{
+ UINT8 actResult; //0: all failed 1: all success 2: some success and some failed
+ UINT8 actCellNum;
+ CmNrCellId actSuccessCellId[MAX_CELL_NUM];
+ CmNrCellId actFailedCellId[MAX_CELL_NUM];
+} OamActCellRsp_t;
+
+
+/** 从原始消息中获取SOCKET msg */
+#define GNB_GET_SOCKET_MSG(src,dst) VOS_MemCpy((CHAR*)dst,(CHAR*)src,sizeof(vos_sock_info_t))
+
+/** 从原始消息中拷贝消息到dst中 */
+#define GNB_GET_DATA(src,dst,len) if(len > sizeof(vos_sock_info_t)) \
+ { \
+ VOS_MemCpy((CHAR*)dst,((CHAR*)src+sizeof(vos_sock_info_t)),(len-sizeof(vos_sock_info_t))); \
+ } \
+ else \
+ { \
+ printf("msg len invalid, len = %d \r\n",len);\
+ VOS_ASSERT(0); \
+ return VOS_ERROR;\
+ }
+/*获取msgBuf中消息地址*/
+#define GNB_GET_MODULE_MSG_DATA_PTR(dataType,pData,buf) do{ \
+ ULONG ulBufAddr = 0; \
+ VOS_MemCpy((CHAR*)&ulBufAddr,(CHAR*)buf,sizeof(ULONG));\
+ pData =(dataType*)(ULONG*)ulBufAddr; \
+ }while(0)
+/*设置msgBuf中消息地址*/
+#define GNB_SET_MODULE_MSG_DATA_PTR(src,dst) do{ \
+ ULONG ulBufAddr = 0; \
+ ulBufAddr= (ULONG)((ULONG*)src); \
+ VOS_MemCpy(dst, &ulBufAddr, sizeof(ULONG)); \
+ }while(0)
+
+/*填充数据地址到msgBuf中*/
+#define GNB_SET_MODULE_MSG(msg,pModuleMsg) do{ \
+ CHAR* bufPtr = NULL; \
+ ULONG ulBufAddr = 0; \
+ bufPtr = (CHAR*)VOS_Malloc((pModuleMsg)->msgLen,(pModuleMsg)->srcModuleId); \
+ if(NULL == bufPtr) \
+ { \
+ VOS_ASSERT(0); \
+ return VOS_ERROR; \
+ } \
+ VOS_MemCpy(bufPtr,&msg,sizeof(msg)); \
+ ulBufAddr= (ULONG)((ULONG*)bufPtr); \
+ VOS_MemCpy((pModuleMsg)->msgBuf, &ulBufAddr, sizeof(ULONG)); \
+ }while(0)
+#define BUFFER_TO_UINT32(buf, x) \
+do { \
+ x = ((uint32_t)((buf)[0]) ) | \
+ ((uint32_t)((buf)[1]) << 8) | \
+ ((uint32_t)((buf)[2]) << 16) | \
+ ((uint32_t)((buf)[3]) << 24); \
+} while(0)
+
+#define INT32_TO_BUFFER(x, buf) \
+do { \
+ (buf)[0] = (x) >> 24; \
+ (buf)[1] = (x) >> 16; \
+ (buf)[2] = (x) >> 8; \
+ (buf)[3] = (x); \
+} while(0)
+
+
+
+
+extern void fillSocketPara(UINT32 sockType,SockAddrStr_t* pSockAddr,SockAddrStr_t* clientSockAddrInfo,vos_sock_para_t *para);
+extern INT32 get_file_len(FILE *file_p);
+extern INT32 tell_file(FILE *file_p);
+extern INT32 getpos_file(FILE *file_p, fpos_t *pos);
+extern INT32 putpos_file(FILE *file_p, fpos_t *pos);
+extern INT32 seek_file(FILE *file_p, INT32 offset, INT32 whence);
+extern INT32 eof_file(FILE *file_p);
+extern INT32 error_file(FILE *file_p);
+extern FILE *open_file(const char *path, const char *flag);
+extern INT32 close_file(FILE *file_p);
+extern INT32 read_file(void *buf, INT32 size, INT32 count, FILE *file_p);
+
+extern VOID sctpMsgNotifyProc(vos_sock_info_t* opval,VOID* buffer);
+
+void gnbPrintRrcMsg(int direction, int msgType, UINT8 *buf, INT32 size);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _CU_COMMON_H_*/
+
+
+