+typedef struct msg4Info
+{
+ uint16_t crnti;
+ uint8_t ndi;
+ uint8_t harqProcNum;
+ uint8_t dlAssignIdx;
+ uint8_t pucchTpc;
+ uint8_t pucchResInd;
+ uint8_t harqFeedbackInd;
+ uint8_t dciFormatId;
+ uint8_t *msg4Pdu;
+ uint16_t msg4PduLen;
+}Msg4Info;
+
+typedef struct msg4Alloc
+{
+ Msg4Info msg4Info;
+ BwpCfg bwp;
+ PdcchCfg msg4PdcchCfg;
+ PdschCfg msg4PdschCfg;
+}Msg4Alloc;
+
+typedef struct schSlotValue
+{
+ SlotIndInfo currentTime;
+ SlotIndInfo broadcastTime;
+ SlotIndInfo rarTime;
+ SlotIndInfo msg4Time;
+ SlotIndInfo dlMsgTime;
+}SchSlotValue;
+
+typedef struct dlSchedInfo
+{
+ uint16_t cellId; /* Cell Id */
+ SchSlotValue schSlotValue;
+
+ /* Allocation for broadcast messages */
+ bool isBroadcastPres;
+ DlBrdcstAlloc brdcstAlloc;
+
+ /* Allocation for RAR message */
+ //uint8_t isRarPres;
+ RarAlloc *rarAlloc;
+
+ /* Allocation from MSG4 */
+ Msg4Alloc *msg4Alloc;
+}DlSchedInfo;
+
+typedef struct tbInfo
+{
+ uint8_t mcs; /* MCS */
+ uint8_t ndi; /* NDI */
+ uint8_t rv; /* Redundancy Version */
+ uint16_t tbSize; /* TB Size */
+}TbInfo;
+
+typedef struct schPuschInfo
+{
+ uint8_t harqProcId; /* HARQ Process ID */
+ uint8_t resAllocType; /* Resource allocation type */
+ FreqDomainAlloc fdAlloc; /* Freq domain allocation */
+ TimeDomainAlloc tdAlloc; /* Time domain allocation */
+ TbInfo tbInfo; /* TB info */
+ uint8_t dmrsMappingType;
+ uint8_t nrOfDmrsSymbols;
+ uint8_t dmrsAddPos;
+}SchPuschInfo;
+
+typedef struct schPucchInfo
+{
+ uint16_t rnti;
+ uint8_t pucchFormat;
+ FreqDomainAlloc fdAlloc; /* Freq domain allocation */
+ TimeDomainAlloc tdAlloc; /* Time domain allocation */
+ uint8_t srFlag;
+ uint8_t harqFlag;
+ uint8_t numHarqBits;
+ uint8_t uciFlag;
+ uint8_t numUciBits;
+}SchPucchInfo;
+
+typedef struct ulSchedInfo
+{
+ uint16_t cellId; /* Cell Id */
+ uint16_t crnti; /* CRNI */
+ SlotIndInfo slotIndInfo; /* Slot Info: sfn, slot number */
+ uint8_t dataType; /* Type of info being scheduled */
+ PrachSchInfo prachSchInfo; /* Prach scheduling info */
+ SchPuschInfo schPuschInfo; /* Pusch scheduling info */
+ SchPucchInfo schPucchInfo; /* Pusch scheduling info */
+}UlSchedInfo;
+
+typedef struct rachIndInfo
+{
+ uint16_t cellId;
+ uint16_t crnti;
+ SlotIndInfo timingInfo;
+ uint8_t slotIdx;
+ uint8_t symbolIdx;
+ uint8_t freqIdx;
+ uint8_t preambleIdx;
+ uint16_t timingAdv;
+}RachIndInfo;
+
+
+typedef struct crcIndInfo
+{
+ uint16_t cellId;
+ uint16_t crnti;
+ SlotIndInfo timingInfo;
+ uint16_t numCrcInd;
+ uint8_t crcInd[MAX_NUMBER_OF_CRC_IND_BITS];
+}CrcIndInfo;
+
+typedef struct boInfo
+{
+ uint8_t lcId;
+ uint32_t dataVolume;
+}BOInfo;
+
+typedef struct dlRlcBOInfo
+{
+ uint16_t cellId;
+ uint16_t crnti;
+ uint16_t numLc;
+ BOInfo boInfo[MAX_NUM_LOGICAL_CHANNELS];
+}DlRlcBOInfo;
+
+
+/* function pointers */