PUCCH CHANGES AT SCH AND LOWER MAC
[o-du/l2.git] / src / 5gnrmac / mac_msg_hdl.c
index 62d8f9c..fa8b678 100644 (file)
@@ -17,6 +17,7 @@
 *******************************************************************************/
 
 /* header include files -- defines (.h)  */
+#include <stdbool.h>
 #include "envopt.h"        /* environment options */
 #include "envdep.h"        /* environment dependent */
 #include "envind.h"        /* environment independent */
@@ -65,6 +66,7 @@
 extern MacCb  macCb;
 
 extern void sendToLowerMac(uint16_t msgType, uint32_t msgLen, void *msg);
+uint16_t buildMacPdu(RlcMacData *dlData);
 
 /* Function pointer for sending crc ind from MAC to SCH */
 MacSchCrcIndFunc macSchCrcIndOpts[]=
@@ -190,9 +192,13 @@ uint16_t fapiMacRxDataInd(Pst *pst, RxDataInd *rxDataInd)
    uint16_t pduIdx;
  
    DU_LOG("\nMAC : Received Rx Data indication");
+  
+   /* TODO : compare the handle received in RxDataInd with handle send in PUSCH
+        * PDU, which is stored in raCb */
+
    for(pduIdx = 0; pduIdx < rxDataInd->numPdus; pduIdx++)
    {
-      unpackRxData(rxDataInd->timingInfo, &rxDataInd->pdus[pduIdx]);
+      unpackRxData(&rxDataInd->pdus[pduIdx]);
    }
    return ROK;
 }
@@ -319,31 +325,45 @@ uint16_t MacHdlCellStopReq(Pst *pst, MacCellStopInfo  *cellStopInfo)
  * ****************************************************************/
 uint16_t MacHdlDlCcchInd(Pst *pst, DlCcchIndInfo *dlCcchIndInfo)
 {
+   uint16_t idx;
    DlRlcBOInfo  dlBoInfo;
+       memset(&dlBoInfo, 0, sizeof(DlRlcBOInfo));
 
    DU_LOG("\nMAC : Handling DL CCCH IND");
-
-       /* TODO : Fill DL RLC Buffer status info */
-       dlBoInfo.cellId = dlCcchIndInfo->cellId;
-       dlBoInfo.crnti = dlCcchIndInfo->crnti;
-       dlBoInfo.numLc = 0;
-
-       if(dlCcchIndInfo->msgType == RRC_SETUP)
-       {
-          dlBoInfo.numLc++;
-          dlBoInfo.boInfo[dlBoInfo.numLc].lcId = 0;    // SRB 0 for msg4
-          dlBoInfo.boInfo[dlBoInfo.numLc].dataVolume = \
-                  strlen((const char*)dlCcchIndInfo->dlCcchMsg);
+   
+   /* TODO : Fill DL RLC Buffer status info */
+   dlBoInfo.cellId = dlCcchIndInfo->cellId;
+   dlBoInfo.crnti = dlCcchIndInfo->crnti;
+   dlBoInfo.numLc = 0;
+   
+   if(dlCcchIndInfo->msgType == RRC_SETUP)
+   {
+      dlBoInfo.boInfo[dlBoInfo.numLc].lcId = SRB_ID_0;    // SRB ID 0 for msg4
+      dlBoInfo.boInfo[SRB_ID_0].dataVolume = \
+        dlCcchIndInfo->dlCcchMsgLen;
+      dlBoInfo.numLc++;
+
+      /* storing Msg4 Pdu in raCb */
+      if(macCb.macCell->macRaCb[0].crnti == dlCcchIndInfo->crnti)
+      {
+         macCb.macCell->macRaCb[0].msg4PduLen = dlCcchIndInfo->dlCcchMsgLen;
+         MAC_ALLOC(macCb.macCell->macRaCb[0].msg4Pdu, macCb.macCell->macRaCb[0]\
+         .msg4PduLen);
+         if(macCb.macCell->macRaCb[0].msg4Pdu)
+         {
+                          for(idx = 0; idx < dlCcchIndInfo->dlCcchMsgLen; idx++)
+                               {
+               macCb.macCell->macRaCb[0].msg4Pdu[idx] =\
+                                         dlCcchIndInfo->dlCcchMsg[idx];
+                          }
+         }
+      }
    }
-
-   /* TODO: Store dlCcchMsg in raCb */
-        
-       sendDlRlcBoInfoMacToSch(&dlBoInfo);
-
-
-       MAC_FREE_SHRABL_BUF(pst->region, pst->pool, dlCcchIndInfo->dlCcchMsg, \
-          strlen((const char*)dlCcchIndInfo->dlCcchMsg));
-       MAC_FREE_SHRABL_BUF(pst->region, pst->pool, dlCcchIndInfo, sizeof(DlCcchIndInfo));
+   sendDlRlcBoInfoMacToSch(&dlBoInfo);
+   
+   MAC_FREE_SHRABL_BUF(pst->region, pst->pool, dlCcchIndInfo->dlCcchMsg, \
+      dlCcchIndInfo->dlCcchMsgLen);
+   MAC_FREE_SHRABL_BUF(pst->region, pst->pool, dlCcchIndInfo, sizeof(DlCcchIndInfo));
    return ROK;
 
 }