#include "phy_stub_utils.h"
#include "lwr_mac_phy_stub_inf.h"
+/*******************************************************************
+ *
+ * @brief start the uplink data
+ *
+ * @details
+ *
+ * Function : startUlData
+ *
+ * Functionality: start the uplink data
+ *
+ * @params[in]
+ *
+ * @return void
+ *
+ * ****************************************************************/
+
+void startUlData()
+{
+ uint8_t ueIdx=0, drbIdx=0;
+
+ /* Start Pumping data from PHY stub to DU */
+ for(ueIdx=0; ueIdx < phyDb.ueDb.numActvUe; ueIdx++)
+ {
+ for(drbIdx = 0; drbIdx < NUM_DRB_TO_PUMP_DATA; drbIdx++) //Number of DRB times the loop will run
+ {
+ DU_LOG("\nDEBUG --> PHY STUB: Sending UL User Data[DrbId:%d] for UEIdx %d\n",drbIdx,ueIdx);
+ l1SendUlUserData(drbIdx,ueIdx);
+ }
+ }
+}
+
/*******************************************************************
*
* @brief Builds and sends param response to MAC CL
phyDb.ueDb.ueCb[ueId-1].msg5Sent = true;
type = MSG_TYPE_MSG5;
}
+ else if(!phyDb.ueDb.ueCb[ueId-1].msgNasAuthenticationComp)
+ {
+ phyDb.ueDb.ueCb[ueId-1].msgNasAuthenticationComp = true;
+ type = MSG_TYPE_NAS_AUTHENTICATION_COMPLETE;
+ }
else if(!phyDb.ueDb.ueCb[ueId-1].msgNasSecurityModeComp)
{
phyDb.ueDb.ueCb[ueId-1].msgNasSecurityModeComp = true;
byteIdx += msg5PduLen; /* 4 bytes of header : MAC+RLC */
break;
}
+
+ case MSG_TYPE_NAS_AUTHENTICATION_COMPLETE:
+ {
+ /* For Authentication response where RRC Container is dummy
+ *
+ * MAC subheader format is R/F/LCId/L (2/3 bytes)
+ * LCId is 1 for SRB1
+ * L is length of PDU i.e 6bytes here
+ * From 38.321 section 6.1.1
+ *
+ * RLC subheader for AM PDU is D/C/P/SI/SN (2 bytes for 12-bit SN)
+ * From 38.322, section 6.2.2.4
+ */
+ DU_LOG("\nDEBUG --> PHY_STUB: Forming AUTHENTICATION RESPONSE PDU");
+ uint8_t pduLen = 37; /* Length of PDU */
+ pduLen += 2; /* RLC subheader */
+ uint8_t msg[] = {1, pduLen, 128, phyDb.ueDb.ueCb[ueId-1].rlcSnForSrb1++, 0, phyDb.ueDb.ueCb[ueId-1].pdcpSn++, 0x3a, \
+ 0x0e, 0x3f, 0x00, 0xca, 0x95, 0xe9, 0x19, 0x41, 0x3f, 0x00, 0x2b, 0x96, 0x88, 0x06, 0xd7, 0x16, 0xc6, \
+ 0x8b, 0xea, 0xae, 0x45, 0xd1, 0x01, 0xfd, 0x34, 0xd4, 0xfd, 0xd5, 0x71, 0x00, 0x00, 0x00, 0x00, 0x00};
+
+ pduLen += 2; /* 2 bytes of MAC header */
+ memcpy(pdu, &msg, pduLen);
+ byteIdx += pduLen; /* 4 bytes of header : MAC+RLC */
+ break;
+ }
case MSG_TYPE_NAS_SECURITY_MODE_COMPLETE:
{
pduLen += 2; /* 2 bytes of MAC header */
memcpy(pdu, &msg, pduLen);
byteIdx += pduLen; /* 4 bytes of header : MAC+RLC */
-break;
+ break;
}
+
case MSG_TYPE_RRC_SECURITY_MODE_COMPLETE:
{
/* For security mode complete where RRC Container is dummy
if(pduInfo->pdu_length)
MAC_FREE(pduInfo->pduData, pduInfo->pdu_length);
MAC_FREE(rxDataInd, sizeof(fapi_rx_data_indication_t));
+
+#ifdef START_DL_UL_DATA
+ if(phyDb.ueDb.ueCb[ueId-1].msgRrcReconfigComp == true)
+ {
+ startUlData();
+ }
+#endif
return ROK;
}
#endif
return ROK;
}
+
/*******************************************************************
*
* @brief Builds and Send the Slot Indication message to MAC
}
CMCHKPK(oduPackPointer, (PTR)slotIndMsg, mBuf);
ODU_POST_TASK(&pst, mBuf);
+
}
#endif
return ROK;
memset(&ulTtiSlotInd, 0, sizeof(fapi_ul_tti_req_t));
ulTtiSlotInd.slot = ulTtiReq->slot;
ulTtiSlotInd.sfn = ulTtiReq->sfn;
- ADD_DELTA_TO_TIME(ulTtiSlotInd, ulTtiSlotInd, SLOT_DELAY);
+ ADD_DELTA_TO_TIME(ulTtiSlotInd, ulTtiSlotInd, SLOT_DELAY, MAX_SLOTS);
l1BuildAndSendUciInd(ulTtiSlotInd.slot, ulTtiSlotInd.sfn, ulTtiReq->pdus[numPdus-1].pdu.pucch_pdu);
}
numPdus--;
{
if(ulDciReq->pdus[numPdus-1].pduType == 0)
{
- DU_LOG("\nINFO --> PHY STUB: Received UL DCI Request for PDCCH PDU");
+ DU_LOG("\nINFO --> PHY STUB: Received UL DCI Request for PDCCH PDU");
//l1BuildAndSendMsg5(ulDciReq->sfn, ulDciReq->slot);
//msg5Sent = true;
}