+ if(ulDmrsCfgDb == NULLP)
+ *(dmrsUlCfg->choice.setup->transformPrecodingDisabled->scramblingID0) = SCRAMBLING_ID;
+ else
+ *(dmrsUlCfg->choice.setup->transformPrecodingDisabled->scramblingID0) = ulDmrsCfgDb->transPrecodDisabled.scramblingId0;
+
+ dmrsUlCfg->choice.setup->transformPrecodingDisabled->scramblingID1 = NULLP;
+ dmrsUlCfg->choice.setup->transformPrecodingEnabled = NULLP;
+ return ROK;
+}
+
+/*******************************************************************
+ *
+ * @brief Build PUSCH time domain allocation list
+ *
+ * @details
+ *
+ * Function : BuildPuschTimeDomAllocList
+ *
+ * Functionality: Build PUSCH time domain allocation list
+ *
+ * @params[in]
+ * struct PUSCH_Config__pusch_TimeDomainAllocationList *timeDomAllocList
+ *
+ * @return ROK - success
+ * RFAILED - failure
+ *
+ * ****************************************************************/
+uint8_t BuildPuschTimeDomAllocList(PuschCfg *puschCfgDb, struct PUSCH_Config__pusch_TimeDomainAllocationList *timeDomAllocList)
+{
+ uint8_t idx;
+ uint8_t elementCnt;
+ PUSCH_TimeDomainResourceAllocation_t *timeDomAlloc;
+
+ timeDomAllocList->present = PUSCH_Config__pusch_TimeDomainAllocationList_PR_setup;
+ timeDomAllocList->choice.setup = NULLP;
+ DU_ALLOC(timeDomAllocList->choice.setup, sizeof(struct PUSCH_TimeDomainResourceAllocationList));
+ if(!timeDomAllocList->choice.setup)
+ {
+ DU_LOG("\nERROR --> F1AP : Memory allocation failed in BuildPuschTimeDomAllocList");
+ return RFAILED;
+ }
+
+ if(puschCfgDb == NULLP)
+ elementCnt = 2;
+ else
+ elementCnt = puschCfgDb->numTimeDomRsrcAlloc;
+
+ timeDomAllocList->choice.setup->list.count = elementCnt;
+ timeDomAllocList->choice.setup->list.size = elementCnt * sizeof(PUSCH_TimeDomainResourceAllocation_t *);
+ timeDomAllocList->choice.setup->list.array = NULLP;
+ DU_ALLOC(timeDomAllocList->choice.setup->list.array, timeDomAllocList->choice.setup->list.size);
+ if(!timeDomAllocList->choice.setup->list.array)
+ {
+ DU_LOG("\nERROR --> F1AP : Memory allocation failed in BuildPuschTimeDomAllocList");
+ return RFAILED;
+ }
+
+ for(idx = 0; idx < elementCnt; idx++)
+ {
+ timeDomAllocList->choice.setup->list.array[idx] = NULLP;
+ DU_ALLOC(timeDomAllocList->choice.setup->list.array[idx], sizeof(PUSCH_TimeDomainResourceAllocation_t));
+ if(!timeDomAllocList->choice.setup->list.array[idx])
+ {
+ DU_LOG("\nERROR --> F1AP : Memory allocation failed in BuildPuschTimeDomAllocList");
+ return RFAILED;
+ }
+ }
+
+ for(idx = 0; idx < elementCnt; idx++)
+ {
+ timeDomAlloc = timeDomAllocList->choice.setup->list.array[idx];
+ DU_ALLOC(timeDomAlloc->k2, sizeof(long));
+ if(!timeDomAlloc->k2)
+ {
+ DU_LOG("\nERROR --> F1AP : Memory allocation failed in BuildPuschTimeDomAllocList");
+ return RFAILED;
+ }
+ if(puschCfgDb == NULLP)
+ {
+ if(idx == 0)
+ *(timeDomAlloc->k2) = PUSCH_K2_CFG1;
+ else if(idx == 1)
+ *(timeDomAlloc->k2) = PUSCH_K2_CFG2;
+
+ timeDomAlloc->mappingType = PUSCH_MAPPING_TYPE_A;
+ timeDomAlloc->startSymbolAndLength = calcSliv(PUSCH_START_SYMBOL, PUSCH_LENGTH_SYMBOL);
+ }
+ else
+ {
+ *(timeDomAlloc->k2) = puschCfgDb->timeDomRsrcAllocList[idx].k2;
+ timeDomAlloc->mappingType = puschCfgDb->timeDomRsrcAllocList[idx].mappingType;
+ timeDomAlloc->startSymbolAndLength = puschCfgDb->timeDomRsrcAllocList[idx].startSymbolAndLength;
+ }
+ }
+
+ return ROK;
+}
+
+/*******************************************************************
+ *
+ * @brief Builds BWP UL dedicated PUSCH Config
+ *
+ * @details
+ *
+ * Function : BuildBWPUlDedPuschCfg
+ *
+ * Functionality:
+ * Builds BWP UL dedicated PUSCH Config
+ *
+ * @params[in] : PUSCH_Config_t *puschCfg
+ *
+ * @return ROK - success
+ * RFAILED - failure
+ *
+ * ****************************************************************/
+uint8_t BuildBWPUlDedPuschCfg(PuschCfg *puschCfgDb, PUSCH_Config_t *puschCfg)
+{
+ DmrsUlCfg *ulDmrsCfg = NULLP;
+
+ if(puschCfgDb)
+ ulDmrsCfg = &puschCfgDb->dmrsUlCfgForPuschMapTypeA;
+
+ puschCfg->dataScramblingIdentityPUSCH = NULLP;
+ DU_ALLOC(puschCfg->dataScramblingIdentityPUSCH, sizeof(long));
+ if(!puschCfg->dataScramblingIdentityPUSCH)
+ {
+ DU_LOG("\nERROR --> F1AP : Memory allocation failed in BuildBWPUlDedPuschCfg");
+ return RFAILED;
+ }
+ if(puschCfgDb == NULLP)
+ *(puschCfg->dataScramblingIdentityPUSCH) = SCRAMBLING_ID;
+ else
+ *(puschCfg->dataScramblingIdentityPUSCH) = puschCfgDb->dataScramblingId;
+
+ puschCfg->txConfig = NULLP;
+ puschCfg->dmrs_UplinkForPUSCH_MappingTypeA = NULLP;
+ DU_ALLOC(puschCfg->dmrs_UplinkForPUSCH_MappingTypeA, sizeof(struct PUSCH_Config__dmrs_UplinkForPUSCH_MappingTypeA));
+ if(!puschCfg->dmrs_UplinkForPUSCH_MappingTypeA)
+ {
+ DU_LOG("\nERROR --> F1AP : Memory allocation failed in BuildBWPUlDedPuschCfg");
+ return RFAILED;
+ }
+
+ if(BuildDMRSULPuschMapTypeA(ulDmrsCfg, puschCfg->dmrs_UplinkForPUSCH_MappingTypeA) != ROK)
+ {
+ return RFAILED;
+ }
+
+ puschCfg->dmrs_UplinkForPUSCH_MappingTypeB = NULLP;
+ puschCfg->pusch_PowerControl = NULLP;
+ puschCfg->frequencyHopping = NULLP;
+ puschCfg->frequencyHoppingOffsetLists = NULLP;
+
+ if(puschCfgDb == NULLP)
+ puschCfg->resourceAllocation = RES_ALLOC_TYPE;
+ else
+ puschCfg->resourceAllocation = puschCfgDb->resourceAllocType;
+
+ puschCfg->pusch_TimeDomainAllocationList = NULLP;
+ DU_ALLOC(puschCfg->pusch_TimeDomainAllocationList, sizeof(struct PUSCH_Config__pusch_TimeDomainAllocationList));
+ if(!puschCfg->pusch_TimeDomainAllocationList)
+ {
+ DU_LOG("\nERROR --> F1AP : Memory allocation failed in BuildBWPUlDedPuschCfg");
+ return RFAILED;
+ }
+
+ if(BuildPuschTimeDomAllocList(puschCfgDb, puschCfg->pusch_TimeDomainAllocationList) != ROK)
+ {
+ return RFAILED;
+ }
+
+ puschCfg->pusch_AggregationFactor = NULLP;
+ puschCfg->mcs_Table = NULLP;
+ puschCfg->mcs_TableTransformPrecoder = NULLP;
+ puschCfg->transformPrecoder = NULLP;
+ DU_ALLOC(puschCfg->transformPrecoder, sizeof(long));
+ if(!puschCfg->transformPrecoder)
+ {
+ DU_LOG("\nERROR --> F1AP : Memory allocation failed in BuildBWPUlDedPuschCfg");
+ return RFAILED;
+ }
+ if(puschCfgDb == NULLP)
+ *(puschCfg->transformPrecoder) = PUSCH_TRANSFORM_PRECODER;
+ else
+ *(puschCfg->transformPrecoder) = puschCfgDb->transformPrecoder;
+
+ puschCfg->codebookSubset = NULLP;
+ puschCfg->maxRank = NULLP;
+ puschCfg->rbg_Size = NULLP;
+ puschCfg->uci_OnPUSCH = NULLP;
+ puschCfg->tp_pi2BPSK = NULLP;
+
+ return ROK;
+}
+
+/*******************************************************************
+ *
+ * @brief Builds PUCCH resource set add/modify list
+ *
+ * @details
+ *
+ * Function : BuildPucchRsrcSetAddModList
+ *
+ * Functionality:
+ * Builds PUCCH resource set add/modify list
+ *
+ * @params[in] : PucchResrcSetCfg *rsrcSetCfgDb
+ * struct PUCCH_Config__resourceSetToAddModList *rsrcSetAddModList
+ *
+ * @return ROK - success
+ * RFAILED - failure
+ *
+ * ****************************************************************/
+uint8_t BuildPucchRsrcSetAddModList(PucchResrcSetCfg *rsrcSetCfgDb, \
+ struct PUCCH_Config__resourceSetToAddModList *resourceSetToAddModList)
+{
+ uint8_t elementCnt = 0, rsrcSetIdx = 0, rsrcIdx = 0;
+ PUCCH_ResourceSet_t *rsrcSet = NULLP;
+
+ if(rsrcSetCfgDb == NULLP)
+ elementCnt = 1;
+ else
+ elementCnt = rsrcSetCfgDb->resrcSetToAddModListCount;
+
+ resourceSetToAddModList->list.count = elementCnt;
+ resourceSetToAddModList->list.size = elementCnt * sizeof(PUCCH_ResourceSet_t *);
+ DU_ALLOC(resourceSetToAddModList->list.array, resourceSetToAddModList->list.size);
+ if(resourceSetToAddModList->list.array == NULLP)
+ {
+ DU_LOG("\nERROR --> F1AP : Memory allocation failed in BuildPucchRsrcSetAddModList");
+ return RFAILED;
+ }
+ for(rsrcSetIdx=0; rsrcSetIdx < resourceSetToAddModList->list.count; rsrcSetIdx++)
+ {
+ DU_ALLOC(resourceSetToAddModList->list.array[rsrcSetIdx], sizeof(PUCCH_ResourceSet_t));
+ if(resourceSetToAddModList->list.array[rsrcSetIdx] == NULLP)
+ {
+ DU_LOG("\nERROR --> F1AP : Memory allocation failed in BuildPucchRsrcSetAddModList");
+ return RFAILED;
+ }
+ }
+
+ for(rsrcSetIdx=0; rsrcSetIdx < resourceSetToAddModList->list.count; rsrcSetIdx++)
+ {
+ rsrcSet = resourceSetToAddModList->list.array[rsrcSetIdx];
+
+ /* Resource set Id */
+ if(rsrcSetCfgDb == NULLP)
+ rsrcSet->pucch_ResourceSetId = 1;
+ else
+ rsrcSet->pucch_ResourceSetId = rsrcSetCfgDb->resrcSetToAddModList[rsrcSetIdx].resrcSetId;
+
+ /* Resource list of a resource set */
+ if(rsrcSetCfgDb == NULLP)
+ elementCnt = 1;
+ else
+ elementCnt = rsrcSetCfgDb->resrcSetToAddModList[rsrcSetIdx].resrcListCount;
+ rsrcSet->resourceList.list.count = elementCnt;
+ rsrcSet->resourceList.list.size = elementCnt * sizeof(PUCCH_ResourceId_t *);
+ DU_ALLOC(rsrcSet->resourceList.list.array, rsrcSet->resourceList.list.size);
+ if(rsrcSet->resourceList.list.array == NULLP)
+ {
+ DU_LOG("\nERROR --> F1AP : Memory allocation failed in BuildPucchRsrcSetAddModList");
+ return RFAILED;
+ }
+
+ for(rsrcIdx=0; rsrcIdx < rsrcSet->resourceList.list.count; rsrcIdx++)
+ {
+ DU_ALLOC(rsrcSet->resourceList.list.array[rsrcIdx], sizeof(PUCCH_ResourceId_t));
+ if(rsrcSet->resourceList.list.array[rsrcIdx] == NULLP)
+ {
+ DU_LOG("\nERROR --> F1AP : Memory allocation failed in BuildPucchRsrcSetAddModList");
+ return RFAILED;
+ }
+ }
+ for(rsrcIdx=0; rsrcIdx < rsrcSet->resourceList.list.count; rsrcIdx++)
+ {
+ if(rsrcSetCfgDb == NULLP)
+ *(rsrcSet->resourceList.list.array[rsrcIdx]) = 1;
+ else
+ *(rsrcSet->resourceList.list.array[rsrcIdx]) = rsrcSetCfgDb->resrcSetToAddModList[rsrcSetIdx].resrcList[rsrcIdx];
+ }
+
+ /* Max payload size (minus 1) in a Resource set */
+ rsrcSet->maxPayloadMinus1 = NULLP;
+ if(rsrcSetCfgDb && rsrcSetCfgDb->resrcSetToAddModList[rsrcSetIdx].maxPayLoadSize)
+ {
+ DU_ALLOC(rsrcSet->maxPayloadMinus1, sizeof(long));
+ if(rsrcSet->maxPayloadMinus1 == NULLP)
+ {
+ DU_LOG("\nERROR --> F1AP : Memory allocation failed in BuildPucchRsrcSetAddModList");
+ return RFAILED;
+ }
+ *(rsrcSet->maxPayloadMinus1) = rsrcSetCfgDb->resrcSetToAddModList[rsrcSetIdx].maxPayLoadSize;
+ }
+ }
+ return ROK;
+}
+
+/*******************************************************************
+ *
+ * @brief Builds PUCCH resource add/modify list
+ *
+ * @details
+ *
+ * Function : BuildPucchRsrcAdddModList
+ *
+ * Functionality:
+ * Builds PUCCH resource add/modify list
+ *
+ * @params[in] : PucchResrcCfg *rsrcSetCfgDb
+ * struct PUCCH_Config__resourceSetToAddModList *rsrcSetAddModList
+ *
+ * @return ROK - success
+ * RFAILED - failure
+ *
+ * ****************************************************************/
+uint8_t BuildPucchRsrcAddModList(PucchResrcCfg *rsrcCfgDb, struct PUCCH_Config__resourceToAddModList *resourceToAddModList)
+{
+ uint8_t elementCnt = 0, rsrcIdx = 0;
+ PUCCH_Resource_t *rsrc = NULLP;
+
+ if(rsrcCfgDb == NULLP)
+ elementCnt = 1;
+ else
+ elementCnt = rsrcCfgDb->resrcToAddModListCount;
+ resourceToAddModList->list.count = elementCnt;
+ resourceToAddModList->list.size = elementCnt * sizeof(PUCCH_Resource_t *);
+ DU_ALLOC(resourceToAddModList->list.array, resourceToAddModList->list.size);
+ if(resourceToAddModList->list.array == NULLP)
+ {
+ DU_LOG("\nERROR --> F1AP : Memory allocation failed in BuildPucchRsrcAddModList");
+ return RFAILED;
+ }
+ for(rsrcIdx=0; rsrcIdx < resourceToAddModList->list.count; rsrcIdx++)
+ {
+ DU_ALLOC(resourceToAddModList->list.array[rsrcIdx], sizeof(PUCCH_Resource_t));
+ if(resourceToAddModList->list.array[rsrcIdx] == NULLP)
+ {
+ DU_LOG("\nERROR --> F1AP : Memory allocation failed in BuildPucchRsrcAddModList");
+ return RFAILED;
+ }
+ }
+
+ for(rsrcIdx=0; rsrcIdx < resourceToAddModList->list.count; rsrcIdx++)
+ {
+ rsrc = resourceToAddModList->list.array[rsrcIdx];
+
+ if(rsrcCfgDb == NULLP)
+ {
+ rsrc->pucch_ResourceId = 1;
+ rsrc->startingPRB = 0;
+ rsrc->format.present = PUCCH_Resource__format_PR_format1;
+ DU_ALLOC(rsrc->format.choice.format1, sizeof(PUCCH_format1_t));
+ if(rsrc->format.choice.format1 == NULLP)
+ {
+ DU_LOG("\nERROR --> F1AP : Memory allocation failed in BuildPucchRsrcAddModList");
+ return RFAILED;
+ }
+ rsrc->format.choice.format1->initialCyclicShift = 0;
+ rsrc->format.choice.format1->nrofSymbols = 4;
+ rsrc->format.choice.format1->startingSymbolIndex = 0;
+ rsrc->format.choice.format1->timeDomainOCC = 0;
+ }
+ else
+ {
+ rsrc->pucch_ResourceId = rsrcCfgDb->resrcToAddModList[rsrcIdx].resrcId;
+ rsrc->startingPRB = rsrcCfgDb->resrcToAddModList[rsrcIdx].startPrb;
+ if(rsrcCfgDb->resrcToAddModList[rsrcIdx].intraFreqHop)
+ {
+ DU_ALLOC(rsrc->intraSlotFrequencyHopping, sizeof(long));
+ if(rsrc->intraSlotFrequencyHopping == NULLP)
+ {
+ DU_LOG("\nERROR --> F1AP : Memory allocation failed in BuildPucchRsrcAddModList");
+ return RFAILED;
+ }
+ *(rsrc->intraSlotFrequencyHopping) = rsrcCfgDb->resrcToAddModList[rsrcIdx].intraFreqHop;
+ }
+ else
+ rsrc->intraSlotFrequencyHopping = NULLP;
+
+ if(rsrcCfgDb->resrcToAddModList[rsrcIdx].secondPrbHop)
+ {
+ DU_ALLOC(rsrc->secondHopPRB, sizeof(PRB_Id_t));
+ if(rsrc->secondHopPRB == NULLP)
+ {
+ DU_LOG("\nERROR --> F1AP : Memory allocation failed in BuildPucchRsrcAddModList");
+ return RFAILED;
+ }
+ *(rsrc->secondHopPRB) = rsrcCfgDb->resrcToAddModList[rsrcIdx].secondPrbHop;
+ }
+ else
+ rsrc->secondHopPRB = NULLP;
+ rsrc->format.present = covertPucchFormatIntEnumToRrcEnum(rsrcCfgDb->resrcToAddModList[rsrcIdx].pucchFormat);
+
+ switch(rsrc->format.present)
+ {
+ case PUCCH_Resource__format_PR_NOTHING:
+ break;
+ case PUCCH_Resource__format_PR_format0:
+ {
+ DU_ALLOC(rsrc->format.choice.format0, sizeof(PUCCH_format0_t));
+ if(rsrc->format.choice.format0 == NULLP)
+ {
+ DU_LOG("\nERROR --> F1AP : Memory allocation failed in BuildPucchRsrcAddModList");
+ return RFAILED;
+ }
+ rsrc->format.choice.format0->initialCyclicShift = rsrcCfgDb->resrcToAddModList[rsrcIdx].PucchFormat.format0->initialCyclicShift;
+ rsrc->format.choice.format0->nrofSymbols = rsrcCfgDb->resrcToAddModList[rsrcIdx].PucchFormat.format0->numSymbols;
+ rsrc->format.choice.format0->startingSymbolIndex = rsrcCfgDb->resrcToAddModList[rsrcIdx].PucchFormat.format0->startSymbolIdx;
+ break;
+ }
+
+ case PUCCH_Resource__format_PR_format1:
+ {
+ DU_ALLOC(rsrc->format.choice.format1, sizeof(PUCCH_format1_t));
+ if(rsrc->format.choice.format1 == NULLP)
+ {
+ DU_LOG("\nERROR --> F1AP : Memory allocation failed in BuildPucchRsrcAddModList");
+ return RFAILED;
+ }
+ rsrc->format.choice.format1->initialCyclicShift = rsrcCfgDb->resrcToAddModList[rsrcIdx].PucchFormat.format1->initialCyclicShift;
+ rsrc->format.choice.format1->nrofSymbols = rsrcCfgDb->resrcToAddModList[rsrcIdx].PucchFormat.format1->numSymbols;
+ rsrc->format.choice.format1->startingSymbolIndex = rsrcCfgDb->resrcToAddModList[rsrcIdx].PucchFormat.format1->startSymbolIdx;
+ rsrc->format.choice.format1->timeDomainOCC = rsrcCfgDb->resrcToAddModList[rsrcIdx].PucchFormat.format1->timeDomOCC;
+ break;
+ }
+
+ case PUCCH_Resource__format_PR_format2:
+ {
+ DU_ALLOC(rsrc->format.choice.format2, sizeof(PUCCH_format2_t));
+ if(rsrc->format.choice.format2 == NULLP)
+ {
+ DU_LOG("\nERROR --> F1AP : Memory allocation failed in BuildPucchRsrcAddModList");
+ return RFAILED;
+ }
+ rsrc->format.choice.format2->nrofPRBs = rsrcCfgDb->resrcToAddModList[rsrcIdx].PucchFormat.format2->numPrbs;
+ rsrc->format.choice.format2->nrofSymbols = rsrcCfgDb->resrcToAddModList[rsrcIdx].PucchFormat.format2->numSymbols;
+ rsrc->format.choice.format2->startingSymbolIndex = rsrcCfgDb->resrcToAddModList[rsrcIdx].PucchFormat.format2->startSymbolIdx;
+ break;
+ }
+
+ case PUCCH_Resource__format_PR_format3:
+ {
+ DU_ALLOC(rsrc->format.choice.format3, sizeof(PUCCH_format3_t));
+ if(rsrc->format.choice.format3 == NULLP)
+ {
+ DU_LOG("\nERROR --> F1AP : Memory allocation failed in BuildPucchRsrcAddModList");
+ return RFAILED;
+ }
+ rsrc->format.choice.format3->nrofPRBs = rsrcCfgDb->resrcToAddModList[rsrcIdx].PucchFormat.format3->numPrbs;
+ rsrc->format.choice.format3->nrofSymbols = rsrcCfgDb->resrcToAddModList[rsrcIdx].PucchFormat.format3->numSymbols;
+ rsrc->format.choice.format3->startingSymbolIndex = rsrcCfgDb->resrcToAddModList[rsrcIdx].PucchFormat.format3->startSymbolIdx;
+ break;
+ }
+
+ case PUCCH_Resource__format_PR_format4:
+ {
+ DU_ALLOC(rsrc->format.choice.format4, sizeof(PUCCH_format4_t));
+ if(rsrc->format.choice.format4 == NULLP)
+ {
+ DU_LOG("\nERROR --> F1AP : Memory allocation failed in BuildPucchRsrcAddModList");
+ return RFAILED;
+ }
+ rsrc->format.choice.format4->nrofSymbols = rsrcCfgDb->resrcToAddModList[rsrcIdx].PucchFormat.format4->numSymbols;
+ rsrc->format.choice.format4->occ_Length = rsrcCfgDb->resrcToAddModList[rsrcIdx].PucchFormat.format4->occLen;
+ rsrc->format.choice.format4->occ_Index = rsrcCfgDb->resrcToAddModList[rsrcIdx].PucchFormat.format4->occIdx;
+ rsrc->format.choice.format4->startingSymbolIndex = rsrcCfgDb->resrcToAddModList[rsrcIdx].PucchFormat.format4->startSymbolIdx;
+ break;
+ }
+ }
+ }
+ }
+ return ROK;
+}
+
+/*******************************************************************
+ *
+ * @brief Builds PUCCH format config
+ *
+ * @details
+ *
+ * Function : BuildPucchFormat
+ *
+ * Functionality: Builds PUCCH format config
+ *
+ * @params[in] : PucchFormatCfg *formatDb
+ * PUCCH_FormatConfig_t *format
+ *
+ * @return ROK - success
+ * RFAILED - failure
+ *
+ * ****************************************************************/
+uint8_t BuildPucchFormat(PucchFormatCfg *formatDb, PUCCH_FormatConfig_t *format)
+{
+ /* Inter Slot Fequency hopping */
+ format->interslotFrequencyHopping = NULLP;
+ if((formatDb != NULLP) && (formatDb->interSlotFreqHop == true))
+ {
+ DU_ALLOC(format->interslotFrequencyHopping, sizeof(long));
+ if(format->interslotFrequencyHopping)
+ {
+ DU_LOG("\nERROR --> F1AP : Memory allocation failed in BuildPucchFormat");
+ return RFAILED;
+ }
+ *(format->interslotFrequencyHopping) = PUCCH_FormatConfig__interslotFrequencyHopping_enabled;
+ }
+
+ /* Additional DMRS */
+ format->additionalDMRS = NULLP;
+ if((formatDb != NULLP) && (formatDb->addDmrs == true))
+ {
+ DU_ALLOC(format->additionalDMRS, sizeof(long));
+ if(format->additionalDMRS)
+ {
+ DU_LOG("\nERROR --> F1AP : Memory allocation failed in BuildPucchFormat");
+ return RFAILED;
+ }
+ *(format->additionalDMRS) = PUCCH_FormatConfig__additionalDMRS_true;
+ }
+
+ /* Maximum code rate */
+ format->maxCodeRate = NULLP;
+ if((formatDb != NULLP) && (formatDb->maxCodeRate != 0))
+ {
+ DU_ALLOC(format->maxCodeRate, sizeof(long));
+ if(format->maxCodeRate)
+ {
+ DU_LOG("\nERROR --> F1AP : Memory allocation failed in BuildPucchFormat");
+ return RFAILED;
+ }
+ *(format->maxCodeRate) = formatDb->maxCodeRate;
+ }
+
+ /* Number of slots */
+ format->nrofSlots = NULLP;
+ if((formatDb == NULLP) || ((formatDb != NULLP) && (formatDb->numSlots != 0)))
+ {
+ DU_ALLOC(format->nrofSlots, sizeof(long));
+ if(format->nrofSlots == NULLP)
+ {
+ DU_LOG("\nERROR --> F1AP : Memory allocation failed in BuildPucchFormat");
+ return RFAILED;
+ }
+ if(formatDb == NULLP)
+ *(format->nrofSlots) = PUCCH_FormatConfig__nrofSlots_n4;
+ else
+ *(format->nrofSlots) = formatDb->numSlots;
+ }
+
+ /* Pi2BPSK*/
+ format->pi2BPSK = NULLP;
+ if((formatDb != NULLP) && (formatDb->pi2BPSK == true))
+ {
+ DU_ALLOC(format->pi2BPSK, sizeof(long));
+ if(format->pi2BPSK)
+ {
+ DU_LOG("\nERROR --> F1AP : Memory allocation failed in BuildPucchFormat");
+ return RFAILED;
+ }
+ *(format->pi2BPSK) = PUCCH_FormatConfig__pi2BPSK_enabled;
+ }
+
+ /* Simultaneous HARQ ACK and CSI */
+ format->simultaneousHARQ_ACK_CSI = NULLP;
+ if((formatDb != NULLP) && (formatDb->harqAckCSI == true))
+ {
+ DU_ALLOC(format->simultaneousHARQ_ACK_CSI, sizeof(long));
+ if(format->simultaneousHARQ_ACK_CSI)
+ {
+ DU_LOG("\nERROR --> F1AP : Memory allocation failed in BuildPucchFormat");
+ return RFAILED;
+ }
+ *(format->simultaneousHARQ_ACK_CSI) = PUCCH_FormatConfig__simultaneousHARQ_ACK_CSI_true;
+ }
+
+ return ROK;
+}
+
+
+/*******************************************************************
+ *
+ * @brief Builds PUCCH scheduling request list
+ *
+ * @details
+ *
+ * Function : BuildPucchSchReqAddModList
+ *
+ * Functionality:
+ * Builds PUCCH scheduling request list
+ *
+ * @params[in] : PucchSchedReqCfg *schReqDb
+ * struct PUCCH_Config__schedulingRequestResourceToAddModList *schReqRsrcToAddModList
+ *
+ * @return ROK - success
+ * RFAILED - failure
+ *
+ * ****************************************************************/
+uint8_t BuildPucchSchReqAddModList(PucchSchedReqCfg *schReqDb, \
+ struct PUCCH_Config__schedulingRequestResourceToAddModList *schReqRsrcToAddModList)
+{
+ uint8_t elementCnt = 0, schReqIdx = 0;
+ SchedulingRequestResourceConfig_t *schReqRsrc;
+
+ elementCnt = schReqDb->schedAddModListCount;
+ schReqRsrcToAddModList->list.count = elementCnt;
+ schReqRsrcToAddModList->list.size = elementCnt *sizeof(struct SchedulingRequestResourceConfig *);
+
+ schReqRsrcToAddModList->list.array = NULLP;
+ DU_ALLOC(schReqRsrcToAddModList->list.array, schReqRsrcToAddModList->list.size);
+ if(schReqRsrcToAddModList->list.array == NULLP)
+ {
+ DU_LOG("\nERROR --> DU APP: Memory allocation failed in BuildPucchSchReqAddModList");
+ return RFAILED;
+ }
+
+ for(schReqIdx = 0; schReqIdx < schReqRsrcToAddModList->list.count; schReqIdx++)
+ {
+ DU_ALLOC(schReqRsrcToAddModList->list.array[schReqIdx], schReqRsrcToAddModList->list.size);
+ if(schReqRsrcToAddModList->list.array[schReqIdx] == NULLP)
+ {
+ DU_LOG("\nERROR --> DU APP: Memory allocation failed in BuildPucchSchReqAddModList");
+ return RFAILED;
+ }
+ }
+
+ for(schReqIdx = 0; schReqIdx < schReqRsrcToAddModList->list.count; schReqIdx++)
+ {
+ schReqRsrc = schReqRsrcToAddModList->list.array[schReqIdx];
+ schReqRsrc->schedulingRequestResourceId = schReqDb->schedAddModList[schReqIdx].resrcId;
+ schReqRsrc->schedulingRequestID = schReqDb->schedAddModList[schReqIdx].requestId;
+
+ if(schReqDb->schedAddModList[schReqIdx].periodicity)
+ {
+ schReqRsrc->periodicityAndOffset = NULLP;
+ DU_ALLOC(schReqRsrc->periodicityAndOffset, sizeof(struct SchedulingRequestResourceConfig__periodicityAndOffset));
+ if(schReqRsrc->periodicityAndOffset == NULLP)
+ {
+ DU_LOG("\nERROR --> DU APP: Memory allocation failed in BuildPucchSchReqAddModList");
+ return RFAILED;
+ }
+
+ schReqRsrc->periodicityAndOffset->present = schReqDb->schedAddModList[schReqIdx].periodicity;
+ switch(schReqRsrc->periodicityAndOffset->present)
+ {
+ case SchedulingRequestResourceConfig__periodicityAndOffset_PR_NOTHING:
+ break;
+ case SchedulingRequestResourceConfig__periodicityAndOffset_PR_sym2:
+ schReqRsrc->periodicityAndOffset->choice.sym2 = schReqDb->schedAddModList[schReqIdx].offset;
+ break;
+ case SchedulingRequestResourceConfig__periodicityAndOffset_PR_sym6or7:
+ schReqRsrc->periodicityAndOffset->choice.sym6or7 = schReqDb->schedAddModList[schReqIdx].offset;
+ break;
+ case SchedulingRequestResourceConfig__periodicityAndOffset_PR_sl1:
+ schReqRsrc->periodicityAndOffset->choice.sl1 = schReqDb->schedAddModList[schReqIdx].offset;
+ break;
+ case SchedulingRequestResourceConfig__periodicityAndOffset_PR_sl2:
+ schReqRsrc->periodicityAndOffset->choice.sl2 = schReqDb->schedAddModList[schReqIdx].offset;
+ break;
+ case SchedulingRequestResourceConfig__periodicityAndOffset_PR_sl4:
+ schReqRsrc->periodicityAndOffset->choice.sl4 = schReqDb->schedAddModList[schReqIdx].offset;
+ break;
+ case SchedulingRequestResourceConfig__periodicityAndOffset_PR_sl5:
+ schReqRsrc->periodicityAndOffset->choice.sl5 = schReqDb->schedAddModList[schReqIdx].offset;
+ break;
+ case SchedulingRequestResourceConfig__periodicityAndOffset_PR_sl8:
+ schReqRsrc->periodicityAndOffset->choice.sl8 = schReqDb->schedAddModList[schReqIdx].offset;
+ break;
+ case SchedulingRequestResourceConfig__periodicityAndOffset_PR_sl10:
+ schReqRsrc->periodicityAndOffset->choice.sl10 = schReqDb->schedAddModList[schReqIdx].offset;
+ break;
+ case SchedulingRequestResourceConfig__periodicityAndOffset_PR_sl16:
+ schReqRsrc->periodicityAndOffset->choice.sl16 = schReqDb->schedAddModList[schReqIdx].offset;
+ break;
+ case SchedulingRequestResourceConfig__periodicityAndOffset_PR_sl20:
+ schReqRsrc->periodicityAndOffset->choice.sl20 = schReqDb->schedAddModList[schReqIdx].offset;
+ break;
+ case SchedulingRequestResourceConfig__periodicityAndOffset_PR_sl40:
+ schReqRsrc->periodicityAndOffset->choice.sl40 = schReqDb->schedAddModList[schReqIdx].offset;
+ break;
+ case SchedulingRequestResourceConfig__periodicityAndOffset_PR_sl80:
+ schReqRsrc->periodicityAndOffset->choice.sl80 = schReqDb->schedAddModList[schReqIdx].offset;
+ break;
+ case SchedulingRequestResourceConfig__periodicityAndOffset_PR_sl160:
+ schReqRsrc->periodicityAndOffset->choice.sl160 = schReqDb->schedAddModList[schReqIdx].offset;
+ break;
+ case SchedulingRequestResourceConfig__periodicityAndOffset_PR_sl320:
+ schReqRsrc->periodicityAndOffset->choice.sl320 = schReqDb->schedAddModList[schReqIdx].offset;
+ break;
+ case SchedulingRequestResourceConfig__periodicityAndOffset_PR_sl640:
+ schReqRsrc->periodicityAndOffset->choice.sl640 = schReqDb->schedAddModList[schReqIdx].offset;
+ break;
+ }
+ }
+
+ if(schReqDb->schedAddModList[schReqIdx].resrc)
+ {
+ schReqRsrc->resource = NULLP;
+ DU_ALLOC(schReqRsrc->resource, sizeof(PUCCH_ResourceId_t));
+ if(schReqRsrc->resource == NULLP)
+ {
+ DU_LOG("\nERROR --> DU APP: Memory allocation failed in BuildPucchSchReqAddModList");
+ return RFAILED;
+ }
+ *(schReqRsrc->resource) = schReqDb->schedAddModList[schReqIdx].resrc;