+typedef struct crcInd
+{
+ uint16_t cellId;
+ SlotIndInfo timingInfo;
+ uint16_t numCrc;
+ CrcInfo crcInfo[MAX_CRCS_PER_SLOT];
+}CrcInd;
+
+typedef struct
+{
+ uint32_t handle;
+ uint16_t rnti;
+ uint8_t harqId;
+ uint16_t pduLength;
+ uint8_t ul_cqi;
+ uint16_t timingAdvance;
+ uint16_t rssi;
+ uint8_t *pduData;
+}RxDataIndPdu;
+
+typedef struct
+{
+ uint16_t cellId;
+ SlotIndInfo timingInfo;
+ uint16_t numPdus;
+ RxDataIndPdu pdus[MAX_ULSCH_PDUS_PER_TTI];
+}RxDataInd;
+
+/* UCI Indication Structure */
+typedef struct
+{
+ uint8_t harqCrc;
+ uint16_t harqBitLen;
+ uint8_t harqPayload[MAX_HARQ_INFO_IN_BYTES];
+}PuschHarqInfo;
+
+typedef struct
+{
+ uint8_t csiPart1Crc;
+ uint16_t csiPart1BitLen;
+ uint8_t csiPart1Payload[MAX_CSI_PART1_DATA_IN_BYTES];
+}PuschCsiPart1Info;
+
+typedef struct
+{
+ uint8_t csiPart2Crc;
+ uint16_t csiPart2BitLen;
+ uint8_t csiPart2Payload[MAX_CSI_PART2_DATA_IN_BYTES];
+}PuschCsiPart2Info;
+
+typedef struct
+{
+ uint32_t handle;
+ uint8_t pduBitmap;
+ uint8_t ul_cqi;
+ uint16_t crnti;
+ uint16_t timingAdvance;
+ uint16_t rssi;
+ PuschHarqInfo harqInfo;
+ PuschCsiPart1Info csiPart1Info;
+ PuschCsiPart2Info csiPart2Info;
+}UciPusch;
+
+typedef struct
+{
+ uint8_t srIndPres;
+ uint8_t srConfdcLevel;
+}SrInfoF0F1;
+
+typedef struct
+{
+ uint8_t numHarq;
+ uint8_t harqConfdcLevel;
+ uint8_t harqValue[MAX_NUM_HARQS_PER_TTI];
+}HarqInfoF0F1;
+
+typedef struct
+{
+ uint32_t handle;
+ uint8_t pduBitmap;
+ uint8_t pucchFormat;
+ uint8_t ul_cqi;
+ uint16_t crnti;
+ uint16_t timingAdvance;
+ uint16_t rssi;
+ uint8_t uciBits[MAX_UCI_BIT_PER_TTI_IN_BYTES];
+ SrInfoF0F1 srInfo;
+ HarqInfoF0F1 harqInfo;
+}UciPucchF0F1;
+
+typedef struct
+{
+ uint32_t handle;
+ uint8_t pduBitmap;
+ uint8_t pucchFormat;
+ uint8_t ul_cqi;
+ uint16_t crnti;
+ uint16_t timingAdvance;
+ uint16_t rssi;
+ uint16_t num_uci_bits;
+ uint8_t uciBits[MAX_UCI_BIT_PER_TTI_IN_BYTES];
+}UciPucchF2F3F4;
+
+typedef struct
+{
+ uint16_t pduType;
+ uint16_t pduSize;
+ union
+ {
+ UciPusch uciPusch; /*TODO: UCI Ind for PUSCH to be handled separately */
+ UciPucchF0F1 uciPucchF0F1;
+ UciPucchF2F3F4 uciPucchF2F3F4;
+ }uci;
+}UciIndPduInfo;
+
+typedef struct
+{
+ uint16_t cellId;
+ SlotIndInfo slotInd;
+ uint16_t numUcis;
+ UciIndPduInfo pdus[MAX_UCI_PDUS_PER_TTI];
+}UciInd;
+
+typedef uint8_t (*packSlotIndMsg)(Pst *pst, SlotIndInfo *slotInd);
+typedef uint8_t (*packRachIndMsg)(Pst *pst, RachInd *rachInd);
+typedef uint8_t (*packCrcIndMsg)(Pst *pst, CrcInd *crcInd);
+typedef uint8_t (*packRxDataIndMsg)(Pst *pst, RxDataInd *rxDataInd);
+typedef uint8_t (*packStopIndMsg)(Pst *pst, uint16_t cellId);
+typedef uint8_t (*packMacUciIndMsg)(Pst *pst, UciInd *uciInd);
+
+uint8_t packLcSlotInd (Pst *pst, SlotIndInfo *slotInd);
+uint8_t packLwlcSlotInd (Pst *pst, SlotIndInfo *slotInd);
+uint8_t fapiMacSlotInd(Pst *pst, SlotIndInfo *slotInd);
+uint8_t packRachInd(Pst *pst, RachInd *rachInd);
+uint8_t fapiMacRachInd(Pst *pst, RachInd *rachInd);
+uint8_t packCrcInd(Pst *pst, CrcInd *crcInd);
+uint8_t fapiMacCrcInd(Pst *pst, CrcInd *crcInd);
+uint8_t packRxDataInd(Pst *pst, RxDataInd *rxDataInd);
+uint8_t fapiMacRxDataInd(Pst *pst, RxDataInd *rxDataInd);
+uint8_t packStopInd(Pst *pst, uint16_t cellId);
+uint8_t fapiMacStopInd(Pst *pst, uint16_t cellId);
+uint8_t packMacUciInd(Pst *pst, UciInd *uciInd);
+uint8_t FapiMacUciInd(Pst *pst, UciInd *uciInd);