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);
|
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,
|
NR_MeasConfig_t *get_MeasConfig(const NR_MeasTiming_t *mt,
|
||||||
int band,
|
int band,
|
||||||
int scs,
|
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 *rc_A3_seq,
|
||||||
seq_arr_t *pci_seq)
|
seq_arr_t *pci_seq)
|
||||||
{
|
{
|
||||||
NR_MeasConfig_t *mc = calloc(1, sizeof(*mc));
|
NR_MeasConfig_t *mc = calloc_or_fail(1, sizeof(*mc));
|
||||||
mc->measObjectToAddModList = calloc(1, sizeof(*mc->measObjectToAddModList));
|
mc->measObjectToAddModList = calloc_or_fail(1, sizeof(*mc->measObjectToAddModList));
|
||||||
mc->reportConfigToAddModList = calloc(1, sizeof(*mc->reportConfigToAddModList));
|
mc->reportConfigToAddModList = calloc_or_fail(1, sizeof(*mc->reportConfigToAddModList));
|
||||||
mc->measIdToAddModList = calloc(1, sizeof(*mc->measIdToAddModList));
|
mc->measIdToAddModList = calloc_or_fail(1, sizeof(*mc->measIdToAddModList));
|
||||||
|
|
||||||
if (rc_PER)
|
if (rc_PER)
|
||||||
asn1cSeqAdd(&mc->reportConfigToAddModList->list, rc_PER);
|
asn1cSeqAdd(&mc->reportConfigToAddModList->list, rc_PER);
|
||||||
|
|
||||||
if (rc_A2)
|
if (rc_A2)
|
||||||
asn1cSeqAdd(&mc->reportConfigToAddModList->list, rc_A2);
|
asn1cSeqAdd(&mc->reportConfigToAddModList->list, rc_A2);
|
||||||
|
|
||||||
if (rc_A3_seq) {
|
if (rc_A3_seq) {
|
||||||
@@ -984,29 +1020,13 @@ NR_MeasConfig_t *get_MeasConfig(const NR_MeasTiming_t *mt,
|
|||||||
|
|
||||||
DevAssert(mt != NULL && mt->frequencyAndTiming != NULL);
|
DevAssert(mt != NULL && mt->frequencyAndTiming != NULL);
|
||||||
const struct NR_MeasTiming__frequencyAndTiming *ft = mt->frequencyAndTiming;
|
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
|
// 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.
|
// cell-specific offsets, blacklisted cells to be ignored and whitelisted cells to consider for measurements.
|
||||||
NR_MeasObjectToAddMod_t *mo1 = calloc(1, sizeof(*mo1));
|
NR_MeasObjectToAddMod_t *mo1 = get_MeasObject(ft, band, ft->carrierFreq, 1);
|
||||||
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);
|
|
||||||
|
|
||||||
if (pci_seq) {
|
if (pci_seq) {
|
||||||
|
NR_MeasObjectNR_t *monr1 = mo1->measObject.choice.measObjectNR;
|
||||||
for (int i = 0; i < pci_seq->size; i++) {
|
for (int i = 0; i < pci_seq->size; i++) {
|
||||||
if (monr1->cellsToAddModList == NULL) {
|
if (monr1->cellsToAddModList == NULL) {
|
||||||
monr1->cellsToAddModList = calloc(1, sizeof(*monr1->cellsToAddModList));
|
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);
|
asn1cSeqAdd(&mc->measObjectToAddModList->list, mo1);
|
||||||
|
|
||||||
// Preparation of measId
|
// Preparation of measId
|
||||||
for (uint8_t reportIdx = 0; reportIdx < mc->reportConfigToAddModList->list.count; reportIdx++) {
|
for (uint8_t reportIdx = 0; reportIdx < mc->reportConfigToAddModList->list.count; reportIdx++) {
|
||||||
const NR_ReportConfigId_t reportId = mc->reportConfigToAddModList->list.array[reportIdx]->reportConfigId;
|
const NR_ReportConfigId_t reportId = mc->reportConfigToAddModList->list.array[reportIdx]->reportConfigId;
|
||||||
NR_MeasIdToAddMod_t *measid = calloc(1, sizeof(NR_MeasIdToAddMod_t));
|
NR_MeasIdToAddMod_t *measid = get_MeasId(reportIdx + 1, reportId, 1);
|
||||||
measid->measId = reportIdx + 1;
|
|
||||||
measid->reportConfigId = reportId;
|
|
||||||
measid->measObjectId = 1;
|
|
||||||
asn1cSeqAdd(&mc->measIdToAddModList->list, measid);
|
asn1cSeqAdd(&mc->measIdToAddModList->list, measid);
|
||||||
}
|
}
|
||||||
|
|
||||||
mc->quantityConfig = calloc(1, sizeof(*mc->quantityConfig));
|
mc->quantityConfig = calloc_or_fail(1, sizeof(*mc->quantityConfig));
|
||||||
mc->quantityConfig->quantityConfigNR_List = calloc(1, sizeof(*mc->quantityConfig->quantityConfigNR_List));
|
mc->quantityConfig->quantityConfigNR_List = calloc_or_fail(1, sizeof(*mc->quantityConfig->quantityConfigNR_List));
|
||||||
NR_QuantityConfigNR_t *qcnr = calloc(1, sizeof(*qcnr));
|
NR_QuantityConfigNR_t *qcnr = calloc_or_fail(1, sizeof(*qcnr));
|
||||||
asn1cCallocOne(qcnr->quantityConfigCell.ssb_FilterConfig.filterCoefficientRSRP, NR_FilterCoefficient_fc6);
|
asn1cCallocOne(qcnr->quantityConfigCell.ssb_FilterConfig.filterCoefficientRSRP, NR_FilterCoefficient_fc6);
|
||||||
asn1cCallocOne(qcnr->quantityConfigCell.csi_RS_FilterConfig.filterCoefficientRSRP, NR_FilterCoefficient_fc6);
|
asn1cCallocOne(qcnr->quantityConfigCell.csi_RS_FilterConfig.filterCoefficientRSRP, NR_FilterCoefficient_fc6);
|
||||||
asn1cSeqAdd(&mc->quantityConfig->quantityConfigNR_List->list, qcnr);
|
asn1cSeqAdd(&mc->quantityConfig->quantityConfigNR_List->list, qcnr);
|
||||||
|
|||||||
Reference in New Issue
Block a user