X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=src%2Fphy_stub%2Fl1_bdy1.c;h=cedcc3cbf60c14578b36f8fb228070dd60e580e9;hb=0bdd575f55257e64b4becb4cee0df0dab2bac3fa;hp=85954293b8f3eb922f910ae2f947058bcab7336a;hpb=1bed59663a087c96c3ebb984ee19be92e7f4ecc5;p=o-du%2Fl2.git diff --git a/src/phy_stub/l1_bdy1.c b/src/phy_stub/l1_bdy1.c index 85954293b..cedcc3cbf 100644 --- a/src/phy_stub/l1_bdy1.c +++ b/src/phy_stub/l1_bdy1.c @@ -277,6 +277,147 @@ PUBLIC void l1HdlConfigReq(uint32_t msgLen, void *msg) } +/******************************************************************* + * + * @brief Build and Send CRC Indication + * + * @details + * + * Function : l1BuildAndSendCrcInd + * + * Functionality: + * Build and Send CRC Indication + * + * @params[in] Slot + * SFN + * @return ROK - success + * RFAILED - failure + * + * ****************************************************************/ +uint16_t l1BuildAndSendCrcInd(uint16_t slot, uint16_t sfn) +{ +#ifdef FAPI + uint8_t idx = 0; + fapi_crc_ind_t *crcInd; + + MAC_ALLOC(crcInd, sizeof(fapi_crc_ind_t)); + if(!crcInd) + { + printf("\nPHY_STUB: Memory allocation failed for CRC Indication Message"); + return RFAILED; + } + + /* TODO: Fill the required values. As of now only 1 CRC status PASS is filled */ + crcInd->sfn = sfn; + crcInd->slot = slot; + crcInd->numCrcs = 1; + + crcInd->crc[idx].handle = 0; + crcInd->crc[idx].rnti = 0; + crcInd->crc[idx].harqId = 0; + crcInd->crc[idx].tbCrcStatus = 0; + crcInd->crc[idx].numCb = 1; + crcInd->crc[idx].cbCrcStatus[0] = 0; + 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)); + + /* Sending RACH indication to MAC */ + DU_LOG("\nPHY STUB: Sending CRC Indication to MAC"); + handlePhyMessages(crcInd->header.message_type_id, sizeof(fapi_crc_ind_t), (void *)crcInd); + MAC_FREE(crcInd, sizeof(fapi_crc_ind_t)); +#endif + return ROK; +} /* l1BuildAndSendCrcInd */ + +#ifdef FAPI +/******************************************************************* + * + * @brief Build and send Rx data indication + * + * @details + * + * Function : l1BuildAndSendRxDataInd + * + * Functionality: + * Build and send Rx data indication + * + * @params[in] SFN + * Slot + * @return ROK - success + * RFAILED - failure + * + * ****************************************************************/ +uint16_t l1BuildAndSendRxDataInd(uint16_t slot, uint16_t sfn, fapi_ul_pusch_pdu_t puschPdu) +{ + uint8_t idx = 0; + fapi_rx_data_indication_t *rxDataInd; + fapi_pdu_ind_info_t *pduInfo; + uint8_t *pdu; + uint16_t byteIdx = 0; + + MAC_ALLOC(rxDataInd, sizeof(fapi_rx_data_indication_t)); + if(!rxDataInd) + { + printf("\nPHY_STUB: Memory allocation failed for Rx Data Indication"); + return RFAILED; + } + + /* TODO: Fill the required values */ + rxDataInd->sfn = sfn; + rxDataInd->slot = slot; + rxDataInd->numPdus = 1; + + pduInfo = &rxDataInd->pdus[idx]; + pduInfo->handle = puschPdu.handle; + pduInfo->rnti = puschPdu.rnti; + pduInfo->harqId = puschPdu.puschData.harqProcessId; + pduInfo->pduLength = puschPdu.puschData.tbSize; + pduInfo->ul_cqi = 0; + pduInfo->timingAdvance = 0; + pduInfo->rssi = 0; + + /* Filling pdu with random values for testing */ + pduInfo->pduData = NULL; + MAC_ALLOC(pduInfo->pduData, pduInfo->pduLength); + if(!pduInfo->pduData) + { + printf("\nPHY_STUB: Memory allocation failed for Rx Data Pdu"); + return RFAILED; + } + + /* Harcoded Initial RRC setup Request */ + pdu = (uint8_t *)pduInfo->pduData; + pdu[byteIdx++] = 0; + pdu[byteIdx++] = 181; + pdu[byteIdx++] = 99; + pdu[byteIdx++] = 20; + pdu[byteIdx++] = 170; + pdu[byteIdx++] = 132; + pdu[byteIdx++] = 96; + + /* Harcoding the pad bytes */ + pdu[byteIdx++] = 63; + + for(; byteIdx < pduInfo->pduLength; byteIdx++) + pdu[byteIdx] = 0; + + fillMsgHeader(&rxDataInd->header, FAPI_RX_DATA_INDICATION, \ + sizeof(fapi_rx_data_indication_t)); + + /* Sending Rx data indication to MAC */ + DU_LOG("\nPHY STUB: Sending Rx data Indication to MAC"); + handlePhyMessages(rxDataInd->header.message_type_id, sizeof(fapi_rx_data_indication_t), (void *)rxDataInd); + + if(pduInfo->pduLength) + MAC_FREE(pduInfo->pduData, pduInfo->pduLength); + MAC_FREE(rxDataInd, sizeof(fapi_rx_data_indication_t)); + return ROK; +} +#endif /******************************************************************* * @@ -418,8 +559,8 @@ PUBLIC S16 l1HdlStartReq(uint32_t msgLen, void *msg) if(clGlobalCp.phyState == PHY_STATE_CONFIGURED) { - duStartSlotIndicaion(); - MAC_FREE(startReq, msgLen); + l1HdlSlotIndicaion(FALSE); + MAC_FREE(startReq, sizeof(fapi_start_req_t)); } else { @@ -454,7 +595,7 @@ PUBLIC S16 l1HdlDlTtiReq(uint16_t msgLen, void *msg) fapi_dl_tti_req_t *dlTtiReq; dlTtiReq = (fapi_dl_tti_req_t *)msg; - printf("\nPHY STUB: Received DL TTI Request"); + printf("\nPHY STUB: DL TTI Request at sfn=%d slot=%d",dlTtiReq->sfn,dlTtiReq->slot); #if 0 printf("\nPHY_STUB: SFN %d", dlTtiReq->sfn); printf("\nPHY_STUB: SLOT %d", dlTtiReq->slot); @@ -515,7 +656,7 @@ PUBLIC S16 l1HdlTxDataReq(uint16_t msgLen, void *msg) fapi_tx_data_req_t *txDataReq; txDataReq = (fapi_tx_data_req_t *)msg; - DU_LOG("\nPHY STUB: Received TX DATA Request"); + DU_LOG("\nPHY STUB: TX DATA Request at sfn=%d slot=%d",txDataReq->sfn,txDataReq->slot); MAC_FREE(txDataReq, msgLen); #endif @@ -556,7 +697,19 @@ PUBLIC S16 l1HdlUlTtiReq(uint16_t msgLen, void *msg) while(numPdus) { if(ulTtiReq->pdus[numPdus-1].pduType == 0) + { DU_LOG("\nPHY STUB: PRACH PDU"); + } + if(ulTtiReq->pdus[numPdus-1].pduType == 1) + { + DU_LOG("\nPHY STUB: PUSCH PDU"); + l1BuildAndSendRxDataInd(ulTtiReq->slot, ulTtiReq->sfn, \ + ulTtiReq->pdus[numPdus-1].u.pusch_pdu); + } + if(ulTtiReq->pdus[numPdus-1].pduType == 2) + { + DU_LOG("\nPHY STUB: PUCCH PDU"); + } numPdus--; } @@ -571,6 +724,84 @@ PUBLIC S16 l1HdlUlTtiReq(uint16_t msgLen, void *msg) return ROK; } +/******************************************************************* + * + * @brief Builds and Send the stop Indication message to MAC + * + * @details + * + * Function : l1BuildAndSendStopInd + * + * Functionality: + * -Send the Stop indication Message to MAC + * + * + * @return void + * + * ****************************************************************/ +PUBLIC uint16_t l1BuildAndSendStopInd() +{ +#ifdef FAPI + fapi_stop_ind_t *stopIndMsg = NULLP; + uint32_t msgLen = 0; + + MAC_ALLOC(stopIndMsg, sizeof(fapi_stop_ind_t)); + if(!stopIndMsg) + { + DU_LOG("\nPHY_STUB: Memory allocation failed for stop Indication Message"); + return RFAILED; + } + else + { + fillMsgHeader(&stopIndMsg->header, FAPI_STOP_INDICATION, msgLen); + DU_LOG("\n\nPHY_STUB: Processing Stop indication to MAC"); + handlePhyMessages(stopIndMsg->header.message_type_id,\ + sizeof(fapi_stop_ind_t), (void*)stopIndMsg); + MAC_FREE(stopIndMsg, sizeof(fapi_stop_ind_t)); + } +#endif + return ROK; +} + +/******************************************************************* + * + * @brief Handles stop request received from MAC + * + * @details + * + * Function : l1HdlStopReq + * + * Functionality: + * -Handles stop request received from MAC + * + * @params[in] Message length + * stop request message pointer + * + * @return void + * + * ****************************************************************/ + +PUBLIC S16 l1HdlStopReq(uint32_t msgLen, void *msg) +{ +#ifdef FAPI + fapi_stop_req_t *stopReq = (fapi_stop_req_t *)msg; + + if(clGlobalCp.phyState == PHY_STATE_RUNNING) + { + l1HdlSlotIndicaion(TRUE); + DU_LOG("\nPHY_STUB: Slot Indication is stopped successfully"); + l1BuildAndSendStopInd(); + MAC_FREE(stopReq, msgLen); + } + else + { + DU_LOG("\nPHY_STUB: Received Stop Req in PHY State %d", clGlobalCp.phyState); + return RFAILED; + } +#endif + return ROK; +} + /******************************************************************* * * @brief Receives message from MAC @@ -613,6 +844,9 @@ void l1ProcessFapiRequest(uint8_t msgType, uint32_t msgLen, void *msg) case FAPI_UL_TTI_REQUEST: l1HdlUlTtiReq(msgLen, msg); break; + case FAPI_STOP_REQUEST: + l1HdlStopReq(msgLen, msg); + break; default: DU_LOG("\nPHY_STUB: Invalid message type[%x] received at PHY", msgType); break;