Refactor get_MeasConfig(): create subfunctions
This commit is contained in:
@@ -956,6 +956,42 @@ int do_RRCReestablishmentComplete(uint8_t *buffer, size_t buffer_size, int64_t r
|
||||
return((enc_rval.encoded+7)/8);
|
||||
}
|
||||
|
||||
static NR_MeasObjectToAddMod_t *get_MeasObject(const struct NR_MeasTiming__frequencyAndTiming *ft,
|
||||
int band,
|
||||
NR_ARFCN_ValueNR_t ssbFrequency,
|
||||
NR_MeasObjectId_t measObjectId)
|
||||
{
|
||||
const NR_SSB_MTC_t *ssb_mtc = &ft->ssb_MeasurementTimingConfiguration;
|
||||
NR_MeasObjectToAddMod_t *mo = calloc_or_fail(1, sizeof(*mo));
|
||||
mo->measObjectId = measObjectId;
|
||||
mo->measObject.present = NR_MeasObjectToAddMod__measObject_PR_measObjectNR;
|
||||
NR_MeasObjectNR_t *monr = calloc_or_fail(1, sizeof(*monr));
|
||||
asn1cCallocOne(monr->ssbFrequency, ssbFrequency);
|
||||
asn1cCallocOne(monr->ssbSubcarrierSpacing, ft->ssbSubcarrierSpacing);
|
||||
monr->referenceSignalConfig.ssb_ConfigMobility = calloc_or_fail(1, sizeof(*monr->referenceSignalConfig.ssb_ConfigMobility));
|
||||
monr->referenceSignalConfig.ssb_ConfigMobility->deriveSSB_IndexFromCell = true;
|
||||
monr->absThreshSS_BlocksConsolidation = calloc_or_fail(1, sizeof(*monr->absThreshSS_BlocksConsolidation));
|
||||
asn1cCallocOne(monr->absThreshSS_BlocksConsolidation->thresholdRSRP, 36);
|
||||
asn1cCallocOne(monr->nrofSS_BlocksToAverage, 8);
|
||||
monr->smtc1 = calloc_or_fail(1, sizeof(*monr->smtc1));
|
||||
monr->smtc1->periodicityAndOffset = ssb_mtc->periodicityAndOffset;
|
||||
monr->smtc1->duration = ssb_mtc->duration;
|
||||
monr->quantityConfigIndex = 1;
|
||||
monr->ext1 = calloc_or_fail(1, sizeof(*monr->ext1));
|
||||
asn1cCallocOne(monr->ext1->freqBandIndicatorNR, band);
|
||||
mo->measObject.choice.measObjectNR = monr;
|
||||
return mo;
|
||||
}
|
||||
|
||||
static NR_MeasIdToAddMod_t *get_MeasId(NR_MeasId_t measId, NR_ReportConfigId_t reportConfigId, NR_MeasObjectId_t measObjectId)
|
||||
{
|
||||
NR_MeasIdToAddMod_t *measid = calloc_or_fail(1, sizeof(NR_MeasIdToAddMod_t));
|
||||
measid->measId = measId;
|
||||
measid->reportConfigId = reportConfigId;
|
||||
measid->measObjectId = measObjectId;
|
||||
return measid;
|
||||
}
|
||||
|
||||
NR_MeasConfig_t *get_MeasConfig(const NR_MeasTiming_t *mt,
|
||||
int band,
|
||||
int scs,
|
||||
@@ -964,15 +1000,15 @@ NR_MeasConfig_t *get_MeasConfig(const NR_MeasTiming_t *mt,
|
||||
seq_arr_t *rc_A3_seq,
|
||||
seq_arr_t *pci_seq)
|
||||
{
|
||||
NR_MeasConfig_t *mc = calloc(1, sizeof(*mc));
|
||||
mc->measObjectToAddModList = calloc(1, sizeof(*mc->measObjectToAddModList));
|
||||
mc->reportConfigToAddModList = calloc(1, sizeof(*mc->reportConfigToAddModList));
|
||||
mc->measIdToAddModList = calloc(1, sizeof(*mc->measIdToAddModList));
|
||||
NR_MeasConfig_t *mc = calloc_or_fail(1, sizeof(*mc));
|
||||
mc->measObjectToAddModList = calloc_or_fail(1, sizeof(*mc->measObjectToAddModList));
|
||||
mc->reportConfigToAddModList = calloc_or_fail(1, sizeof(*mc->reportConfigToAddModList));
|
||||
mc->measIdToAddModList = calloc_or_fail(1, sizeof(*mc->measIdToAddModList));
|
||||
|
||||
if (rc_PER)
|
||||
asn1cSeqAdd(&mc->reportConfigToAddModList->list, rc_PER);
|
||||
|
||||
if (rc_A2)
|
||||
if (rc_A2)
|
||||
asn1cSeqAdd(&mc->reportConfigToAddModList->list, rc_A2);
|
||||
|
||||
if (rc_A3_seq) {
|
||||
@@ -984,29 +1020,13 @@ NR_MeasConfig_t *get_MeasConfig(const NR_MeasTiming_t *mt,
|
||||
|
||||
DevAssert(mt != NULL && mt->frequencyAndTiming != NULL);
|
||||
const struct NR_MeasTiming__frequencyAndTiming *ft = mt->frequencyAndTiming;
|
||||
const NR_SSB_MTC_t *ssb_mtc = &ft->ssb_MeasurementTimingConfiguration;
|
||||
|
||||
// Measurement Objects: Specifies what is to be measured. For NR and inter-RAT E-UTRA measurements, this may include
|
||||
// cell-specific offsets, blacklisted cells to be ignored and whitelisted cells to consider for measurements.
|
||||
NR_MeasObjectToAddMod_t *mo1 = calloc(1, sizeof(*mo1));
|
||||
mo1->measObjectId = 1;
|
||||
mo1->measObject.present = NR_MeasObjectToAddMod__measObject_PR_measObjectNR;
|
||||
NR_MeasObjectNR_t *monr1 = calloc(1, sizeof(*monr1));
|
||||
asn1cCallocOne(monr1->ssbFrequency, ft->carrierFreq);
|
||||
asn1cCallocOne(monr1->ssbSubcarrierSpacing, ft->ssbSubcarrierSpacing);
|
||||
monr1->referenceSignalConfig.ssb_ConfigMobility = calloc(1, sizeof(*monr1->referenceSignalConfig.ssb_ConfigMobility));
|
||||
monr1->referenceSignalConfig.ssb_ConfigMobility->deriveSSB_IndexFromCell = true;
|
||||
monr1->absThreshSS_BlocksConsolidation = calloc(1, sizeof(*monr1->absThreshSS_BlocksConsolidation));
|
||||
asn1cCallocOne(monr1->absThreshSS_BlocksConsolidation->thresholdRSRP, 36);
|
||||
asn1cCallocOne(monr1->nrofSS_BlocksToAverage, 8);
|
||||
monr1->smtc1 = calloc(1, sizeof(*monr1->smtc1));
|
||||
monr1->smtc1->periodicityAndOffset = ssb_mtc->periodicityAndOffset;
|
||||
monr1->smtc1->duration = ssb_mtc->duration;
|
||||
monr1->quantityConfigIndex = 1;
|
||||
monr1->ext1 = calloc(1, sizeof(*monr1->ext1));
|
||||
asn1cCallocOne(monr1->ext1->freqBandIndicatorNR, band);
|
||||
NR_MeasObjectToAddMod_t *mo1 = get_MeasObject(ft, band, ft->carrierFreq, 1);
|
||||
|
||||
if (pci_seq) {
|
||||
NR_MeasObjectNR_t *monr1 = mo1->measObject.choice.measObjectNR;
|
||||
for (int i = 0; i < pci_seq->size; i++) {
|
||||
if (monr1->cellsToAddModList == NULL) {
|
||||
monr1->cellsToAddModList = calloc(1, sizeof(*monr1->cellsToAddModList));
|
||||
@@ -1019,22 +1039,18 @@ NR_MeasConfig_t *get_MeasConfig(const NR_MeasTiming_t *mt,
|
||||
}
|
||||
}
|
||||
|
||||
mo1->measObject.choice.measObjectNR = monr1;
|
||||
asn1cSeqAdd(&mc->measObjectToAddModList->list, mo1);
|
||||
|
||||
// Preparation of measId
|
||||
for (uint8_t reportIdx = 0; reportIdx < mc->reportConfigToAddModList->list.count; reportIdx++) {
|
||||
const NR_ReportConfigId_t reportId = mc->reportConfigToAddModList->list.array[reportIdx]->reportConfigId;
|
||||
NR_MeasIdToAddMod_t *measid = calloc(1, sizeof(NR_MeasIdToAddMod_t));
|
||||
measid->measId = reportIdx + 1;
|
||||
measid->reportConfigId = reportId;
|
||||
measid->measObjectId = 1;
|
||||
NR_MeasIdToAddMod_t *measid = get_MeasId(reportIdx + 1, reportId, 1);
|
||||
asn1cSeqAdd(&mc->measIdToAddModList->list, measid);
|
||||
}
|
||||
|
||||
mc->quantityConfig = calloc(1, sizeof(*mc->quantityConfig));
|
||||
mc->quantityConfig->quantityConfigNR_List = calloc(1, sizeof(*mc->quantityConfig->quantityConfigNR_List));
|
||||
NR_QuantityConfigNR_t *qcnr = calloc(1, sizeof(*qcnr));
|
||||
mc->quantityConfig = calloc_or_fail(1, sizeof(*mc->quantityConfig));
|
||||
mc->quantityConfig->quantityConfigNR_List = calloc_or_fail(1, sizeof(*mc->quantityConfig->quantityConfigNR_List));
|
||||
NR_QuantityConfigNR_t *qcnr = calloc_or_fail(1, sizeof(*qcnr));
|
||||
asn1cCallocOne(qcnr->quantityConfigCell.ssb_FilterConfig.filterCoefficientRSRP, NR_FilterCoefficient_fc6);
|
||||
asn1cCallocOne(qcnr->quantityConfigCell.csi_RS_FilterConfig.filterCoefficientRSRP, NR_FilterCoefficient_fc6);
|
||||
asn1cSeqAdd(&mc->quantityConfig->quantityConfigNR_List->list, qcnr);
|
||||
|
||||
Reference in New Issue
Block a user