PUBLIC void l1HdlConfigReq(uint32_t msgLen, void *msg)
{
#ifdef FAPI
- int idx = 0;
fapi_config_req_t *configReq = (fapi_config_req_t *)msg;
DU_LOG("\nPHY_STUB: Received Config Request in PHY");
printf("\nPHY_STUB: Failed Sending config Response");
}
- while(idx < MAX_NUM_TLVS_CONFIG)
- {
- if(configReq->tlvs[idx].tl.tag == FAPI_NUM_UNUSED_ROOT_SEQUENCES_TAG)
- {
- if(configReq->tlvs[idx].value)
- {
- idx++;
- MAC_FREE(configReq->tlvs[idx].value , \
- sizeof(uint8_t) * configReq->tlvs[idx-1].value);
- break;
- }
- }
- idx++;
- }
- MAC_FREE(configReq, sizeof(fapi_config_req_t));
+ MAC_FREE(configReq, msgLen);
#endif
}
+/*******************************************************************
+ *
+ * @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 */
+
+
+/*******************************************************************
+ *
+ * @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)
+{
+#ifdef FAPI
+ uint8_t idx = 0;
+ fapi_rx_data_indication_t *rxDataInd;
+ fapi_pdu_ind_info_t *pduInfo;
+
+ 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 = 0;
+ pduInfo->rnti = 0;
+ pduInfo->harqId = 0;
+ pduInfo->pduLength = 0;
+ pduInfo->ul_cqi = 0;
+ pduInfo->timingAdvance = 0;
+ pduInfo->rssi = 0;
+ pduInfo->pduData = NULL;
+
+ 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);
+ MAC_FREE(rxDataInd, sizeof(fapi_rx_data_indication_t));
+#endif
+ return ROK;
+}
+
/*******************************************************************
*
}
else
{
+ slotIndMsg->sfn = sfnValue;
+ slotIndMsg->slot = slotValue;
+ DU_LOG("\n\nPHY_STUB: SLOT indication [%d:%d]",sfnValue,slotValue);
+
+ /* increment for the next TTI */
slotValue++;
- if(sfnValue > MAX_SFN_VALUE && slotValue > MAX_SLOT_VALUE)
+ if(sfnValue >= MAX_SFN_VALUE && slotValue > MAX_SLOT_VALUE)
{
sfnValue = 0;
slotValue = 0;
sfnValue++;
slotValue = 0;
}
- slotIndMsg->sfn = sfnValue;
- slotIndMsg->slot = slotValue;
fillMsgHeader(&slotIndMsg->header, FAPI_SLOT_INDICATION, sizeof(fapi_slot_ind_t));
- DU_LOG("\n\nPHY_STUB: SLOT indication [%d:%d]",sfnValue,slotValue);
handlePhyMessages(slotIndMsg->header.message_type_id, sizeof(fapi_slot_ind_t), (void*)slotIndMsg);
MAC_FREE(slotIndMsg, sizeof(fapi_slot_ind_t));
}
if(clGlobalCp.phyState == PHY_STATE_CONFIGURED)
{
- duStartSlotIndicaion();
+ l1HdlSlotIndicaion(FALSE);
MAC_FREE(startReq, sizeof(fapi_start_req_t));
}
else
}
/* Free FAPI message */
- for(pduCount = 0; pduCount < dlTtiReq->nPdus; pduCount++)
- {
- if(dlTtiReq->pdus[pduCount].pduType == FAPI_DL_TTI_REQ_PDCCH_PDU_TYPE)
- {
- MAC_FREE(dlTtiReq->pdus[pduCount].u.pdcch_pdu.dlDci,\
- sizeof(fapi_dl_dci_t));
- }
- }
- MAC_FREE(dlTtiReq->pdus, (dlTtiReq->nPdus * sizeof(fapi_dl_tti_req_pdu_t)));
- MAC_FREE(dlTtiReq, sizeof(fapi_dl_tti_req_t));
+ MAC_FREE(dlTtiReq, msgLen);
#endif
return ROK;
PUBLIC S16 l1HdlTxDataReq(uint16_t msgLen, void *msg)
{
#ifdef FAPI
- uint8_t pduCount;
-
- DU_LOG("\nPHY STUB: Received TX DATA Request");
-
fapi_tx_data_req_t *txDataReq;
txDataReq = (fapi_tx_data_req_t *)msg;
-#if 0
- for(pduCount = 0; pduCount< txDataReq->numPdus; pduCount++)
- {
- if(txDataReq->pduDesc[pduCount].tlvs[0].value)
- MAC_FREE((uint32_t *)txDataReq->pduDesc[pduCount].tlvs[0].value,\
- txDataReq->pduDesc[pduCount].tlvs[0].tl.length);
- }
-#endif
- MAC_FREE(txDataReq->pduDesc, (txDataReq->numPdus * \
- sizeof(fapi_tx_pdu_desc_t)));
- MAC_FREE(txDataReq, sizeof(fapi_tx_data_req_t));
+ DU_LOG("\nPHY STUB: Received TX DATA Request");
+
+ MAC_FREE(txDataReq, msgLen);
#endif
return ROK;
}
}
while(numPdus)
{
- if(ulTtiReq->pdus->pduType == 0)
+ if(ulTtiReq->pdus[numPdus-1].pduType == 0)
DU_LOG("\nPHY STUB: PRACH PDU");
numPdus--;
}
- MAC_FREE(ulTtiReq->pdus, (ulTtiReq->nPdus * sizeof(fapi_ul_tti_req_pdu_t)));
- MAC_FREE(ulTtiReq, sizeof(fapi_ul_tti_req_t));
-
- if(rachIndSent == false && ulTtiReq->slot == 8)
+ if(rachIndSent == false && ulTtiReq->sfn == 2 && ulTtiReq->slot == 6)
{
rachIndSent = true;
l1BuildAndSendRachInd(ulTtiReq->slot, ulTtiReq->sfn);
}
+
+ MAC_FREE(ulTtiReq, msgLen);
+#endif
+ 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;
}
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;