diff --git a/openair2/RRC/NR/MESSAGES/asn1_msg.c b/openair2/RRC/NR/MESSAGES/asn1_msg.c index f31464822b..35b21a9722 100644 --- a/openair2/RRC/NR/MESSAGES/asn1_msg.c +++ b/openair2/RRC/NR/MESSAGES/asn1_msg.c @@ -850,8 +850,7 @@ int do_RRCSetupComplete(uint8_t *buffer, } // TODO: This function is only implemented for event A2 -int do_nrMeasurementReport_SA(NR_MeasurementReport_t *measurementReport, - long trigger_to_measid, +int do_nrMeasurementReport_SA(long trigger_to_measid, long trigger_quantity, long rs_type, uint16_t Nid_cell, @@ -860,29 +859,25 @@ int do_nrMeasurementReport_SA(NR_MeasurementReport_t *measurementReport, size_t buffer_size) { asn_enc_rval_t enc_rval; - NR_UL_DCCH_Message_t ul_dcch_msg; - memset((void *)&ul_dcch_msg, 0, sizeof(NR_UL_DCCH_Message_t)); + NR_UL_DCCH_Message_t ul_dcch_msg = {0}; ul_dcch_msg.message.present = NR_UL_DCCH_MessageType_PR_c1; - ul_dcch_msg.message.choice.c1 = CALLOC(1, sizeof(struct NR_UL_DCCH_MessageType__c1)); - ul_dcch_msg.message.choice.c1->present = NR_UL_DCCH_MessageType__c1_PR_measurementReport; + asn1cCalloc(ul_dcch_msg.message.choice.c1, c1); + c1->present = NR_UL_DCCH_MessageType__c1_PR_measurementReport; - memset(measurementReport, 0, sizeof(struct NR_MeasurementReport)); - ul_dcch_msg.message.choice.c1->choice.measurementReport = measurementReport; + asn1cCalloc(c1->choice.measurementReport, measurementReport); measurementReport->criticalExtensions.present = NR_MeasurementReport__criticalExtensions_PR_measurementReport; - NR_MeasurementReport_IEs_t *measurementReport_ie = CALLOC(1, sizeof(struct NR_MeasurementReport_IEs)); - measurementReport->criticalExtensions.choice.measurementReport = measurementReport_ie; - measurementReport_ie->measResults.measId = trigger_to_measid; + asn1cCalloc(measurementReport->criticalExtensions.choice.measurementReport, mrIE); + mrIE->measResults.measId = trigger_to_measid; - NR_MeasResultServMO_t *measResultServMo = CALLOC(1, sizeof(struct NR_MeasResultServMO)); + NR_MeasResultServMO_t *measResultServMo = calloc_or_fail(1, sizeof(*measResultServMo)); NR_MeasResultNR_t *measResultServingCell = &measResultServMo->measResultServingCell; - measResultServingCell->physCellId = CALLOC(1, sizeof(NR_PhysCellId_t)); - *measResultServingCell->physCellId = Nid_cell; - - struct NR_MeasQuantityResults *active_mq_res = CALLOC(1, sizeof(struct NR_MeasQuantityResults)); + asn1cCalloc(measResultServingCell->physCellId, pci); + *pci = Nid_cell; + struct NR_MeasQuantityResults *active_mq_res = calloc_or_fail(1, sizeof(*active_mq_res)); if (trigger_quantity == NR_MeasTriggerQuantityOffset_PR_rsrp) { asn1cCalloc(active_mq_res->rsrp, rsrp); // Assign precomputed RSRP index @@ -893,7 +888,7 @@ int do_nrMeasurementReport_SA(NR_MeasurementReport_t *measurementReport, measResultServingCell->measResult.cellResults.resultsCSI_RS_Cell = active_mq_res; } - ASN_SEQUENCE_ADD(&measurementReport_ie->measResults.measResultServingMOList.list, measResultServMo); + ASN_SEQUENCE_ADD(&mrIE->measResults.measResultServingMOList.list, measResultServMo); enc_rval = uper_encode_to_buffer(&asn_DEF_NR_UL_DCCH_Message, NULL, (void *)&ul_dcch_msg, buffer, buffer_size); AssertFatal(enc_rval.encoded > 0, "ASN1 message encoding failed (%s, %lu)!\n", enc_rval.failed_type->name, enc_rval.encoded); diff --git a/openair2/RRC/NR/MESSAGES/asn1_msg.h b/openair2/RRC/NR/MESSAGES/asn1_msg.h index 73a311084d..48a0ea734b 100644 --- a/openair2/RRC/NR/MESSAGES/asn1_msg.h +++ b/openair2/RRC/NR/MESSAGES/asn1_msg.h @@ -125,8 +125,7 @@ int do_NR_MeasurementTimingConfiguration(const NR_MeasurementTimingConfiguration int do_RRCSetupRequest(uint8_t *buffer, size_t buffer_size, uint8_t *rv, uint64_t fiveG_S_TMSI_part1); -int do_nrMeasurementReport_SA(NR_MeasurementReport_t *measurementReport, - long trigger_to_measid, +int do_nrMeasurementReport_SA(long trigger_to_measid, long trigger_quantity, long rs_type, uint16_t Nid_cell, diff --git a/openair2/RRC/NR_UE/rrc_UE.c b/openair2/RRC/NR_UE/rrc_UE.c index 85e9205a92..1733589427 100644 --- a/openair2/RRC/NR_UE/rrc_UE.c +++ b/openair2/RRC/NR_UE/rrc_UE.c @@ -3239,12 +3239,10 @@ void nr_rrc_set_mac_queue(instance_t instance, notifiedFIFO_t *mac_input_nf) void rrc_ue_generate_measurementReport(rrcPerNB_t *rrc, instance_t ue_id) { uint8_t buffer[NR_RRC_BUF_SIZE]; - NR_MeasurementReport_t measurementReport = {0}; l3_measurements_t *l3m = &rrc->l3_measurements; int rsrp_dBm = l3m->rs_type == NR_NR_RS_Type_ssb ? l3m->serving_cell.ss_rsrp_dBm.val : l3m->serving_cell.csi_rsrp_dBm.val; int rsrp_index = get_rsrp_index(rsrp_dBm); - uint8_t size = do_nrMeasurementReport_SA(&measurementReport, - l3m->trigger_to_measid, + uint8_t size = do_nrMeasurementReport_SA(l3m->trigger_to_measid, l3m->trigger_quantity, l3m->rs_type, l3m->serving_cell.Nid_cell,