#include "lwr_mac_fsm.h"
#include "lwr_mac_phy.h"
#ifdef INTEL_FAPI
-#include "fapi.h"
+#include "nr5g_fapi_internal.h"
#include "fapi_vendor_extension.h"
#endif
#include "lwr_mac_upr_inf.h"
#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
void l1HdlConfigReq(uint32_t msgLen, void *msg)
{
- memset(&ueDb, 0, sizeof(UeDb));
+ memset(&phyDb.ueDb, 0, sizeof(UeDb));
+ cmInetAddr((char *)SOURCE_DU_IPV4_ADDR, &phyDb.ipCfgInfo.sourceDu);
+ cmInetAddr((char *)DESTINATION_DU_IPV4_ADDR, &phyDb.ipCfgInfo.destinationDu);
+ phyDb.ipCfgInfo.portNumber = PORT_NUMBER;
+ phyDb.isServer = true;
#ifdef INTEL_FAPI
p_fapi_api_queue_elem_t configReqElem = (p_fapi_api_queue_elem_t)msg;
* RFAILED - failure
*
* ****************************************************************/
-uint16_t l1BuildAndSendCrcInd(uint16_t slot, uint16_t sfn)
+uint16_t l1BuildAndSendCrcInd(uint16_t slot, uint16_t sfn, fapi_ul_pusch_pdu_t puschPdu)
{
+ uint8_t result[]={0,//MSG3
+ 0,//BSR
+ 0,//MSG5 RRC Setup Complete
+ 0,//Security Mode Complete
+ 0,//Registraion Complete
+ 0,//RRC Reconfiguration Complete
+ 0,//UL DATA -1
+ 0,//UL DATA -2
+ 0,//UL DATA -3
+ 0,//UL DATA -4
+ 0,0,0,0,0,
+ 0,0,0,0,0,
+ 0,0,0,0,0,
+ 0,0,0,0,0,
+ 0,0,0,0,0,
+ 0,0,0,0,0,
+ 0,0,0,0,0,
+ 0,0,0,0,0,
+ 0,0,0,0,0,
+ 0,0,0,0,0,
+ 0,0,0,0,0,
+ 0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
+
#ifdef INTEL_FAPI
uint8_t idx = 0;
+ static uint8_t ind=0;
+ uint16_t ret = ROK;
fapi_crc_ind_t *crcInd;
MAC_ALLOC(crcInd, sizeof(fapi_crc_ind_t));
crcInd->slot = slot;
crcInd->numCrcs = 1;
- crcInd->crc[idx].handle = 0;
- crcInd->crc[idx].rnti = 0;
- crcInd->crc[idx].harqId = 0;
+ crcInd->crc[idx].handle = puschPdu.handle;
+ crcInd->crc[idx].rnti = puschPdu.rnti;
+ crcInd->crc[idx].harqId = puschPdu.puschData.harqProcessId;
crcInd->crc[idx].tbCrcStatus = 0;
crcInd->crc[idx].numCb = 1;
- crcInd->crc[idx].cbCrcStatus[0] = 0;
+ crcInd->crc[idx].cbCrcStatus[0] = result[ind%50];
+ ret = (0== crcInd->crc[idx].cbCrcStatus[0])?ROK:RFAILED;
+ /*TBD: To use crc ind with random number and percentage */
+ //crcInd->crc[idx].cbCrcStatus[0] = (crcPassPer >= rand()%(100))?0:1;
+
+ ind++;
crcInd->crc[idx].ul_cqi = 0;
crcInd->crc[idx].timingAdvance = 0;
crcInd->crc[idx].rssi = 0;
fillMsgHeader(&crcInd->header, FAPI_CRC_INDICATION, \
sizeof(fapi_crc_ind_t) - sizeof(fapi_msg_t));
- /* Sending RACH indication to MAC */
+ /* Sending CRC indication to MAC */
DU_LOG("\nINFO --> PHY STUB: Sending CRC Indication to MAC");
procPhyMessages(crcInd->header.msg_id, sizeof(fapi_crc_ind_t), (void *)crcInd);
MAC_FREE(crcInd, sizeof(fapi_crc_ind_t));
#endif
- return ROK;
+ return ret;
} /* l1BuildAndSendCrcInd */
#ifdef INTEL_FAPI
MsgType type = 0;
GET_UE_ID(puschPdu.rnti, ueId);
- if(!ueDb.ueCb[ueId-1].msg3Sent)
- {
- ueDb.ueCb[ueId-1].ueId = ueId;
- ueDb.ueCb[ueId-1].crnti = puschPdu.rnti;
- ueDb.ueCb[ueId-1].msg3Sent = true;
- type = MSG_TYPE_MSG3;
- sleep(2);
- }
- else if(!ueDb.ueCb[ueId-1].msg5ShortBsrSent)
- {
- ueDb.ueCb[ueId-1].msg5ShortBsrSent = true;
- type = MSG_TYPE_SHORT_BSR;
- }
- else if(!ueDb.ueCb[ueId-1].msg5Sent)
- {
- ueDb.ueCb[ueId-1].msg5Sent = true;
- type = MSG_TYPE_MSG5;
- }
- else if(!ueDb.ueCb[ueId-1].msgRegistrationComp)
+ if(phyDb.ueDb.ueCb[ueId-1].isCFRA)
{
- ueDb.ueCb[ueId-1].msgRegistrationComp = true;
- type = MSG_TYPE_REGISTRATION_COMPLETE;
- }
- else if(!ueDb.ueCb[ueId-1].msgSecurityModeComp)
- {
- ueDb.ueCb[ueId-1].msgSecurityModeComp = true;
- type = MSG_TYPE_SECURITY_MODE_COMPLETE;
+ if(!phyDb.ueDb.ueCb[ueId-1].msgRrcReconfigComp)
+ {
+ /* In CF-RA in case of handover, RRC Reconfiguration Complete is sent
+ * by UE once RAR is received from DU */
+ phyDb.ueDb.ueCb[ueId-1].ueId = ueId;
+ phyDb.ueDb.ueCb[ueId-1].crnti = puschPdu.rnti;
+ phyDb.ueDb.ueCb[ueId-1].msgRrcReconfigComp = true;
+ type = MSG_TYPE_RRC_RECONFIG_COMPLETE;
+ }
+ else
+ return ROK;
}
- else if(!ueDb.ueCb[ueId-1].msgRrcReconfiguration)
+ else
{
- ueDb.ueCb[ueId-1].msgRrcReconfiguration = true;
- type = MSG_TYPE_RRC_RECONFIG_COMPLETE;
+ if(!phyDb.ueDb.ueCb[ueId-1].msg3Sent)
+ {
+ phyDb.ueDb.ueCb[ueId-1].ueId = ueId;
+ phyDb.ueDb.ueCb[ueId-1].crnti = puschPdu.rnti;
+ phyDb.ueDb.ueCb[ueId-1].msg3Sent = true;
+ type = MSG_TYPE_MSG3;
+ sleep(2);
+ }
+ else if(!phyDb.ueDb.ueCb[ueId-1].msg5ShortBsrSent)
+ {
+ phyDb.ueDb.ueCb[ueId-1].msg5ShortBsrSent = true;
+ type = MSG_TYPE_SHORT_BSR;
+ }
+ else if(!phyDb.ueDb.ueCb[ueId-1].msg5Sent)
+ {
+ 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;
+ type = MSG_TYPE_NAS_SECURITY_MODE_COMPLETE;
+ }
+ else if(!phyDb.ueDb.ueCb[ueId-1].msgRrcSecurityModeComp)
+ {
+ phyDb.ueDb.ueCb[ueId-1].msgRrcSecurityModeComp = true;
+ type = MSG_TYPE_RRC_SECURITY_MODE_COMPLETE;
+ }
+ else if(!phyDb.ueDb.ueCb[ueId-1].msgRegistrationComp)
+ {
+ phyDb.ueDb.ueCb[ueId-1].msgRegistrationComp = true;
+ type = MSG_TYPE_REGISTRATION_COMPLETE;
+ }
+ else if(!phyDb.ueDb.ueCb[ueId-1].msgRrcReconfigComp)
+ {
+ phyDb.ueDb.ueCb[ueId-1].msgRrcReconfigComp = true;
+ type = MSG_TYPE_RRC_RECONFIG_COMPLETE;
+ }
+ else
+ return ROK;
}
- else
- return RFAILED;
MAC_ALLOC(rxDataInd, sizeof(fapi_rx_data_indication_t));
if(!rxDataInd)
DU_LOG("\nDEBUG --> PHY_STUB: Forming MSG5 PDU");
uint8_t msg5PduLen = 33; /* Length of MSG5 */
msg5PduLen += 2; /* RLC subheader */
- uint8_t msg5[] = {1, msg5PduLen, 128, ueDb.ueCb[ueId-1].rlcSnForSrb1++, 0, ueDb.ueCb[ueId-1].pdcpSn++, 16, 0, \
+ uint8_t msg5[] = {1, msg5PduLen, 128, phyDb.ueDb.ueCb[ueId-1].rlcSnForSrb1++, 0, phyDb.ueDb.ueCb[ueId-1].pdcpSn++, 16, 0, \
5, 223, 128, 16, 94, 64, 3, 64, 68, 252, 97, 0, 0, 0, 0, 4, 0, 0, 4, 68, 11, 128, 184, 56, 0, 0, 0, 0, 0};
msg5PduLen += 2; /* 2 bytes of MAC header */
break;
}
- case MSG_TYPE_SECURITY_MODE_COMPLETE:
+ 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:
+ {
+ /* For NAS security mode complete 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 NAS SECURITY MODE COMPLETE PDU");
+ uint8_t pduLen = 93; /* 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, 0x2a, 0x3f,
+ 0x02, 0x75, 0xa0, 0xa0, 0xc0, 0x80, 0x3f, 0x00, 0x2f, 0x3b, 0x80, 0x04, 0x9a, 0xa2, 0x81, 0x09, 0x80, 0xc0,
+ 0x28, 0x04, 0xf8, 0xb8, 0x80, 0x1d, 0xbf, 0x00, 0x20, 0x8c, 0x80, 0x05, 0xf9, 0x00, 0x78, 0x88, 0x7a, 0x88,
+ 0xd9, 0x00, 0x00, 0x00, 0x03, 0x08, 0x00, 0x81, 0x97, 0x02, 0x78, 0x38, 0x78, 0x38, 0x17, 0x82, 0x82, 0x00,
+ 0x80, 0x00, 0x00, 0xa9, 0x00, 0x78, 0x88, 0x00, 0x00, 0x00, 0x8b, 0x83, 0xf8, 0x38, 0x60, 0x20, 0x0c, 0xc0,
+ 0x50, 0x0c, 0x00, 0x80, 0x3a, 0x00, 0x00, 0x48, 0x29, 0x80, 0x80, 0x80, 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_RRC_SECURITY_MODE_COMPLETE:
{
/* For security mode complete where RRC Container is dummy
*
* 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 SECURITY MODE COMPLETE PDU");
+ DU_LOG("\nDEBUG --> PHY_STUB: Forming RRC SECURITY MODE COMPLETE PDU");
uint8_t pduLen = 12; /* Length of PDU */
pduLen += 2; /* RLC subheader */
- uint8_t msg[] = {1, pduLen, 128, ueDb.ueCb[ueId-1].rlcSnForSrb1++, 0, ueDb.ueCb[ueId-1].pdcpSn++, 0x2a, 0x40, \
+ uint8_t msg[] = {1, pduLen, 128, phyDb.ueDb.ueCb[ueId-1].rlcSnForSrb1++, 0, phyDb.ueDb.ueCb[ueId-1].pdcpSn++, 0x2a, 0x40, \
0, 0, 0, 0, 0, 0, 0, 0};
pduLen += 2; /* 2 bytes of MAC header */
DU_LOG("\nDEBUG --> PHY_STUB: Forming RRC REGISTRATION COMPLETE PDU");
uint8_t pduLen = 12; /* Length of PDU */
pduLen += 2; /* RLC subheader */
- uint8_t msg[] = {1, pduLen, 128, ueDb.ueCb[ueId-1].rlcSnForSrb1++, 0, ueDb.ueCb[ueId-1].pdcpSn++, 0x3a, 0x81, \
+ uint8_t msg[] = {1, pduLen, 128, phyDb.ueDb.ueCb[ueId-1].rlcSnForSrb1++, 0, phyDb.ueDb.ueCb[ueId-1].pdcpSn++, 0x3a, 0x81, \
0xbf, 0, 0x21, 0x80, 0, 0, 0, 0};
pduLen += 2; /* 2 bytes of MAC header */
DU_LOG("\nDEBUG --> PHY_STUB: Forming RRC RECONFIGURATION COMPLETE PDU");
uint8_t pduLen = 13; /* PDU length */
pduLen += 2; /* RLC sub header */
- uint8_t msg[] = {1, pduLen, 128, ueDb.ueCb[ueId-1].rlcSnForSrb1++, 0, ueDb.ueCb[ueId-1].pdcpSn++, 8, 64, 0, 0,\
+ uint8_t msg[] = {1, pduLen, 128, phyDb.ueDb.ueCb[ueId-1].rlcSnForSrb1++, 0, phyDb.ueDb.ueCb[ueId-1].pdcpSn++, 8, 64, 0, 0,\
0, 0, 0, 0, 0, 0, 0};
pduLen += 2; /* 2bytes of MAC header */
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
* RFAILED - failure
*
* ****************************************************************/
-uint16_t l1BuildAndSendRachInd(uint16_t slot, uint16_t sfn)
+uint16_t l1BuildAndSendRachInd(uint16_t slot, uint16_t sfn, uint8_t raPreambleIdx)
{
#ifdef INTEL_FAPI
uint8_t rachPduIdx = 0;
rachPdu->avgSnr = 0;
rachPdu->numPreamble = 1;
- rachPdu->preambleInfo[preamIdx].preambleIndex = 3;
+ rachPdu->preambleInfo[preamIdx].preambleIndex = raPreambleIdx;
rachPdu->preambleInfo[preamIdx].timingAdvance = 0;
rachPdu->preambleInfo[preamIdx].preamblePwr = 0;
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;
*
* ****************************************************************/
-S16 l1HdlDlTtiReq(uint16_t msgLen, void *msg)
+S16 l1HdlDlTtiReq(uint32_t msgLen, void *msg)
{
#ifdef INTEL_FAPI
p_fapi_api_queue_elem_t dlTtiElem = (p_fapi_api_queue_elem_t)msg;
*
* ****************************************************************/
-S16 l1HdlTxDataReq(uint16_t msgLen, void *msg)
+S16 l1HdlTxDataReq(uint32_t msgLen, void *msg)
{
#ifdef INTEL_FAPI
p_fapi_api_queue_elem_t txDataElem = (p_fapi_api_queue_elem_t)msg;
uint8_t fillPucchF0F1PduInfo(fapi_uci_o_pucch_f0f1_t *pduInfo, fapi_ul_pucch_pdu_t pucchPdu)
{
uint8_t idx = 0;
+ static uint8_t ind=0;
+ uint8_t result[]={0,//msg4
+ 0,//Security Mode Command
+ 0,//Registration Accept
+ 0,//RRC Reconfiguration
+ 0,//Data 1
+ 0,//Data 2
+ 0,//Data 3
+ 0,//Data 4
+ 0,0,0,0,0,
+ 0,0,0,0,0,
+ 0,0,0,0,0,
+ 0,0,0,0,0,
+ 0,0,0,0,0,
+ 0,0,0,0,0,
+ 0,0,0,0,0,
+ 0,0,0,0,0,
+ 0,0,0,0,0,
+ 0,0,0,0,0,
+ 0,0,0,0,0,
+ 0,0,0,0,0,
+ 0,0,0,0,0,};
pduInfo->handle = pucchPdu.handle;
pduInfo->pduBitmap = 1; //hardcoded for SR
+ if (pucchPdu.bitLenHarq)
+ {
+ pduInfo->pduBitmap |= HARQ_PDU_BITMASK;
+ }
pduInfo->pucchFormat = pucchPdu.formatType;
pduInfo->ul_cqi = 0;
pduInfo->rnti = pucchPdu.rnti;
pduInfo->rssi = 0;
if(pduInfo->pduBitmap & SR_PDU_BITMASK)
{
- pduInfo->srInfo.srIndication = SR_DETECTED;
- pduInfo->srInfo.srConfidenceLevel = CONFDC_LEVEL_GOOD;
+ if (result[ind%50] == 0)
+ {
+ pduInfo->srInfo.srIndication = SR_DETECTED;
+ pduInfo->srInfo.srConfidenceLevel = CONFDC_LEVEL_GOOD;
+ }
}
if(pduInfo->pduBitmap & HARQ_PDU_BITMASK)
{
pduInfo->harqInfo.harqConfidenceLevel = CONFDC_LEVEL_GOOD;
for(idx = 0; idx < pduInfo->harqInfo.numHarq; idx++)
{
- pduInfo->harqInfo.harqValue[idx] = HARQ_PASS;
+ pduInfo->harqInfo.harqValue[idx] = result[ind%50];
+ ind++;
+ /*TBD: To use harq ind with random number and percentage*/
+ //pduInfo->harqInfo.harqValue[idx] = (dlHqPassPer >= rand()%(100))?HARQ_PASS:HARQ_FAIL;
}
}
return ROK;
*
* ****************************************************************/
-S16 l1HdlUlTtiReq(uint16_t msgLen, void *msg)
+S16 l1HdlUlTtiReq(uint32_t msgLen, void *msg)
{
#ifdef INTEL_FAPI
p_fapi_api_queue_elem_t ulTtiElem = (p_fapi_api_queue_elem_t)msg;
{
if(ulTtiReq->pdus[numPdus-1].pduType == 0)
{
- DU_LOG("\nINFO --> PHY STUB: PRACH PDU");
+ DU_LOG("\nINFO --> PHY STUB: PRACH PDU");
+
+ /* Send RACH Ind to L2 for first UE */
+ if(phyDb.ueDb.ueCb[UE_IDX_0].rachIndSent == false)
+ {
+ phyDb.ueDb.ueCb[UE_IDX_0].isCFRA = false;
+ phyDb.ueDb.ueCb[UE_IDX_0].rachIndSent = true;
+ l1BuildAndSendRachInd(ulTtiReq->slot, ulTtiReq->sfn, CB_RA_PREAMBLE_IDX);
+ phyDb.ueDb.numActvUe++;
+ }
+#if 0
+ /* Send RACH Ind to L2 for second UE */
+ if(phyDb.ueDb.ueCb[UE_IDX_1].rachIndSent == false && phyDb.ueDb.ueCb[UE_IDX_0].msgRrcReconfigComp == true)
+ {
+ phyDb.ueDb.ueCb[UE_IDX_0].isCFRA = false;
+ phyDb.ueDb.ueCb[UE_IDX_1].rachIndSent = true;
+ l1BuildAndSendRachInd(ulTtiReq->slot, ulTtiReq->sfn, CB_RA_PREAMBLE_IDX);
+ phyDb.ueDb.numActvUe++;
+ }
+
+ /* Send RACH Ind to L2 for third UE */
+ if(phyDb.ueDb.ueCb[UE_IDX_2].rachIndSent == false && phyDb.ueDb.ueCb[UE_IDX_1].msgRrcReconfigComp == true)
+ {
+ phyDb.ueDb.ueCb[UE_IDX_0].isCFRA = false;
+ phyDb.ueDb.ueCb[UE_IDX_2].rachIndSent = true;
+ l1BuildAndSendRachInd(ulTtiReq->slot, ulTtiReq->sfn, CB_RA_PREAMBLE_IDX);
+ phyDb.ueDb.numActvUe++;
+ }
+#endif
}
if(ulTtiReq->pdus[numPdus-1].pduType == 1)
{
- DU_LOG("\nINFO --> PHY STUB: PUSCH PDU");
- l1BuildAndSendRxDataInd(ulTtiReq->slot, ulTtiReq->sfn, \
- ulTtiReq->pdus[numPdus-1].pdu.pusch_pdu);
+ DU_LOG("\nINFO --> PHY STUB: PUSCH PDU");
+ if (ROK == l1BuildAndSendCrcInd(ulTtiReq->slot, ulTtiReq->sfn,ulTtiReq->pdus[numPdus-1].pdu.pusch_pdu))
+ {
+ l1BuildAndSendRxDataInd(ulTtiReq->slot, ulTtiReq->sfn, ulTtiReq->pdus[numPdus-1].pdu.pusch_pdu);
+ }
}
if(ulTtiReq->pdus[numPdus-1].pduType == 2)
{
- DU_LOG("\nINFO --> PHY STUB: PUCCH PDU");
+ DU_LOG("\nINFO --> PHY STUB: PUCCH PDU");
+
fapi_ul_tti_req_t ulTtiSlotInd;
- 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);
- l1BuildAndSendUciInd(ulTtiSlotInd.slot, ulTtiSlotInd.sfn, \
- ulTtiReq->pdus[numPdus-1].pdu.pucch_pdu);
+ 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, MAX_SLOTS);
+ l1BuildAndSendUciInd(ulTtiSlotInd.slot, ulTtiSlotInd.sfn, ulTtiReq->pdus[numPdus-1].pdu.pucch_pdu);
}
numPdus--;
}
- /* TODO: [SFN:SLOT] at which RACH Indication is sent should be calculated
- * based on PRACH cfg index */
- /* Send RACH Ind to L2 for first UE */
- if(ueDb.ueCb[UE_IDX_0].rachIndSent == false && ulTtiReq->sfn == 16 && ulTtiReq->slot == 6)
- {
- ueDb.ueCb[UE_IDX_0].rachIndSent = true;
- l1BuildAndSendRachInd(ulTtiReq->slot, ulTtiReq->sfn);
- ueDb.numActvUe++;
- }
-#if 0
- /* Send RACH Ind to L2 for second UE */
- if(ueDb.ueCb[UE_IDX_1].rachIndSent == false && ulTtiReq->sfn == 304 && ulTtiReq->slot == 0)
- {
- ueDb.ueCb[UE_IDX_1].rachIndSent = true;
- l1BuildAndSendRachInd(ulTtiReq->slot, ulTtiReq->sfn);
- ueDb.numActvUe++;
- }
-
- /* Send RACH Ind to L2 for third UE */
- if(ueDb.ueCb[UE_IDX_2].rachIndSent == false && ulTtiReq->sfn == 526 && ulTtiReq->slot == 0)
- {
- ueDb.ueCb[UE_IDX_2].rachIndSent = true;
- l1BuildAndSendRachInd(ulTtiReq->slot, ulTtiReq->sfn);
- ueDb.numActvUe++;
- }
-#endif
MAC_FREE(msg, msgLen);
#endif
return ROK;
/* Initialize all global variables */
sfnValue = 0;
slotValue = 0;
- memset(&ueDb, 0, sizeof(UeDb));
+ memset(&phyDb.ueDb, 0, sizeof(UeDb));
DU_LOG("\nINFO --> PHY_STUB: Slot Indication is stopped successfully");
MAC_FREE(msg, msgLen);
*
* ****************************************************************/
-S16 l1HdlUlDciReq(uint16_t msgLen, void *msg)
+S16 l1HdlUlDciReq(uint32_t msgLen, void *msg)
{
#ifdef INTEL_FAPI
p_fapi_api_queue_elem_t ulDciElem = (p_fapi_api_queue_elem_t)msg;
{
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;
}