From 1434175a84f5ceab2ee77a9fa607255ed8ec91bb Mon Sep 17 00:00:00 2001 From: Florian Kaltenberger <florian.kaltenberger@eurecom.fr> Date: Thu, 30 Jun 2022 16:21:37 +0200 Subject: [PATCH] adding Mohsen's NRPPA main program to CMakeLists.txt --- openair3/NRPPA/main_nrppa.c | 91 +++++++++++++++++++++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100755 openair3/NRPPA/main_nrppa.c diff --git a/openair3/NRPPA/main_nrppa.c b/openair3/NRPPA/main_nrppa.c new file mode 100755 index 00000000000..7f4995726a3 --- /dev/null +++ b/openair3/NRPPA/main_nrppa.c @@ -0,0 +1,91 @@ +#include<stdio.h> +#include<NRPPA_MeasurementRequest.h> +#include<NRPPA_ProtocolIE-Field.h> +#include<asn_SEQUENCE_OF.h> +/* + * This is a custom function which writes the + * encoded output into some FILE stream. + */ + +static int write_out(const void *buffer, size_t size, void *app_key) { + FILE *out_fp = app_key; + size_t wrote; + + wrote = fwrite(buffer, 1, size, out_fp); + + return (wrote == size) ? 0 : -1; +} + +int main(int ac, char **av) { + NRPPA_MeasurementRequest_t *NRPPA_MeasurementRequest; /* Type to encode */ + asn_enc_rval_t ec; /* Encoder return value */ + + /* Allocate the NRPPA_MeasurementRequest_t */ + NRPPA_MeasurementRequest = calloc(1, sizeof(NRPPA_MeasurementRequest_t)); /* not malloc! */ + if(!NRPPA_MeasurementRequest) { + perror("calloc() failed"); + exit(71); /* better, EX_OSERR */ + } + + NRPPA_MeasurementRequest_IEs_t xyz; + ASN_SEQUENCE_ADD(&NRPPA_MeasurementRequest->protocolIEs.list,&xyz); + + + /* MeasurementRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{MeasurementRequest-IEs}}, + ... + } */ + + /* Protocl IE container + id-LMF-Measurement-ID ProtocolIE-ID ::= 39 + id-RAN-Measurement-ID ProtocolIE-ID ::= 40 + ID id-TRP-MeasurementRequestList ProtocolIE-ID ::= 41 + ID id-ReportCharacteristics ProtocolIE-ID ::= 3 + ID id-MeasurementPeriodicity ProtocolIE-ID ::= 4 + ID id-TRPMeasurementQuantities ProtocolIE-ID ::= 52 + */ + NRPPA_MeasurementRequest->protocolIEs; + + /* Context for parsing across buffer boundaries */ + NRPPA_MeasurementRequest->_asn_ctx; + + /* BER encode the data if filename is given */ + if(ac < 2) { + fprintf(stderr, "Specify filename for BER output\n"); + } else { + const char *filename = av[1]; + FILE *fp = fopen(filename, "wb"); /* for BER output */ + + if(!fp) { + perror(filename); + exit(71); /* better, EX_OSERR */ + } + + +//asn_enc_rval_t der_encode(const struct asn_TYPE_descriptor_s *type_descriptor, +// const void *struct_ptr, /* Structure to be encoded */ +// asn_app_consume_bytes_f *consume_bytes_cb, +// void *app_key /* Arbitrary callback argument */); + + /* Encode the NRPPA_MeasurementRequest type as BER (DER) */ + ec = der_encode(&asn_DEF_NRPPA_MeasurementRequest, NRPPA_MeasurementRequest, write_out, fp); + + fclose(fp); + if(ec.encoded == -1) { + fprintf(stderr, + "Could not encode NRPPA_MeasurementRequest (at %s)\n", + ec.failed_type ? ec.failed_type->name : "unknown"); + exit(65); /* better, EX_DATAERR */ + } else { + fprintf(stderr, "Created %s with BER encoded NRPPA_MeasurementRequest\n", + filename); + } + } + + /* Also print the constructed NRPPA_MeasurementRequest XER encoded (XML) */ + xer_fprint(stdout, &asn_DEF_NRPPA_MeasurementRequest, NRPPA_MeasurementRequest); + + return 0; /* Encoding finished successfully */ +} + + -- GitLab